Текущее время: Чт, сен 20 2018, 23:06

Часовой пояс: UTC + 4 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 16:16 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 09:43
Сообщения: 569
Откуда: South Kazakhstan
Пол: Мужской
Доброго времени суток уважаемые ABAP-еры.

Возник, возможно не самый умный вопрос, поэтому заранее прошу сильно не пинать, потому как в ABAP-не сильно шарю. В общем вопрос такой: создал транзакцию отчёт, который через submit одной из стандартных транзакций показывает наличие материалов на заводах в количестве и в текущей цене запаса. Теперь возникла нужда сделать ещё один отчёт, который бы открывался вторым отчётом при нажатии на кнопку в первом отчёте. В общем то с этим всё понятно, но во втором отчёте должна выходить инфа не просто по заводам, но и по складам, ну т.е. номер материала, завод, склад, если же это материал в запасе на проекте (СПП элементе), то и поле СПП элемент должно быть заполнено, ну и количество по каждому складу. Таблички, где лежит запас материалов в свободно используемом запасе лежат в табличке MARD, а запасы материала на проекте лежат в табличке MSPR. Мне нужно всё это отобразить всё в одной табличке, т.е. во втором отчёте. Код приблизительно такой:
Code:
form user_command using v_ucomm   like sy-ucomm
wa_selrow type slis_selfield.
  case v_ucomm.
    when 'SKLAD'.
      refresh sklad.
      refresh sklad2.
      read table itab1 index wa_selrow-tabindex.
      select * from mspr appending corresponding fields of table sklad2 where pspnr = itab1-posid
        and matnr = itab1-matnr and prlab ne '0.000'.
      select * from mard appending corresponding fields of table sklad where matnr = itab1-matnr
        and  werks = itab1-werks and labst ne  '0.000'.

   
       
  endcase.
endform.

Здесь я сразу указал начало кода, с нажатия кнопки SKLAD. Создал две внутренние таблички sklad и sklad2, которые в общем то и заполняются посредством селекта из двух разных таблиц, табличка itab1 уже заполнена посредством sumbit и выводит первый отчёт по заводам, а вот дальше мне не понятно как эти две таблицы в одну таблицу соединить, MOVE-CORRESPONDING друг в друга не годится, потому как различаются структуры внутренних табличек, в общем не хватает малость значий в ABAP, может кто подскажет как там дальше это всё можно сделать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 16:23 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 14:35
Сообщения: 4417
Откуда: Москва
Тр. SAT, кнопка tips and trics.
Далее изучать раздел internal tables.
Скорее всего ответ на вой вопрос увидите в подразделе simple algorithms -> joining interrnal tables.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 17:00 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 09:43
Сообщения: 569
Откуда: South Kazakhstan
Пол: Мужской
LKU написал(а):
Тр. SAT, кнопка tips and trics.
Далее изучать раздел internal tables.
Скорее всего ответ на вой вопрос увидите в подразделе simple algorithms -> joining interrnal tables.

Спасибо за подсказку, но как мне кажется в данном примере описываются идентичные внутренние таблички, а у меня они разные и совершенно друг от друга независимые, мне бы просто в одну табличку две соединить, чтобы сначала отображались данные из одной таблица, а затем следом шли строки второй.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 17:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 337
Дык если они разные, как вы их соедините?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 17:31 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 09:43
Сообщения: 569
Откуда: South Kazakhstan
Пол: Мужской
Kuranov.Dmitry написал(а):
Дык если они разные, как вы их соедините?

Мне просто нужно, чтобы содержимое двух таблиц, они по структуре почти одинаковые, за исключением поля СПП элемент и количество. Мне надо, чтобы содержимое двух таблиц отображалось в одном отчёте, т.е. сначала идут данные с одной таблицы, а затем ниже со второй, а эти два поля, которые отличаются могут быть и пустыми. Т.е. если для одного материала есть запас на проекте (с первой таблицы), тогда в этом поле будет стоять СПП элемент и если для этого материала также есть запас свободно используемый (со второй таблицы), т.е. он тоже отображался бы следующей строкой, а поле СПП элемент было бы просто пустым.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 17:37 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 337
Maksimka написал:
Kuranov.Dmitry написал(а):
Дык если они разные, как вы их соедините?

Мне просто нужно, чтобы содержимое двух таблиц, они по структуре почти одинаковые, за исключением поля СПП элемент и количество. Мне надо, чтобы содержимое двух таблиц отображалось в одном отчёте, т.е. сначала идут данные с одной таблицы, а затем ниже со второй, при чём эти два поля просто были бы пустыми.

Code:

DATA: begin of tab1 occurs 0,
            a(10), " спп
            b(10), "что-то
            c(10), "что-то
            d(10)  "количество
          end of tab1,

         begin of tab2 occurs 0.         
            b(10),
            c(10),
          end of tab2,


// Заполняем tab1.
PERFORM fill_tab1_with_data.
// Заполняем tab2.
PERFORM fill_tab2_with_data.

//сливаем данные в 1 таблицу
//добавляем данные из второй таблицы
LOOP AT tab2.
    CLEAR tab1
    MOVE-CORRESPONDING tab2 TO tab1.
    APPEND tab1.
ENDLOOP.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Пн, ноя 27 2017, 17:53 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 17:25
Сообщения: 2974
Пол: Мужской
Maksimka написал:
Kuranov.Dmitry написал(а):
Дык если они разные, как вы их соедините?

Мне просто нужно, чтобы содержимое двух таблиц, они по структуре почти одинаковые, за исключением поля СПП элемент и количество. Мне надо, чтобы содержимое двух таблиц отображалось в одном отчёте, т.е. сначала идут данные с одной таблицы, а затем ниже со второй, а эти два поля, которые отличаются могут быть и пустыми. Т.е. если для одного материала есть запас на проекте (с первой таблицы), тогда в этом поле будет стоять СПП элемент и если для этого материала также есть запас свободно используемый (со второй таблицы), т.е. он тоже отображался бы следующей строкой, а поле СПП элемент было бы просто пустым.

Почему не делаете appending corresponding fields of table в одну и ту же таблицу?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 07:39 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 11:50
Сообщения: 193
+1

В первом шаге делаете INTO CORRESPONDING
Во втором APPEND CORRESPONDING

Далее сортируете по нужным полям


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 07:48 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 11:50
Сообщения: 193
З.Ы. посмотрите может у Вас в системе есть ракурс базы данных V_MMIM_QN там уже в связке таблицы MARD MSPR за один SELECT все выберете


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 08:31 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 14:06
Сообщения: 109
Bimit написал(а):
З.Ы. посмотрите может у Вас в системе есть ракурс базы данных V_MMIM_QN там уже в связке таблицы MARD MSPR за один SELECT все выберете

Тогда уж можно сразу MARD и MSPR заджойнить


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 10:06 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 11:50
Сообщения: 193
Sam Stone написал(а):
Тогда уж можно сразу MARD и MSPR заджойнить


Можно и так :D

Только
Maksimka написал:
Доброго времени суток уважаемые ABAP-еры.

Возник, возможно не самый умный вопрос, поэтому заранее прошу сильно не пинать, потому как в ABAP-не сильно шарю.


ракурс может оказаться удобнее :wink:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 11:01 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2005, 14:24
Сообщения: 78
Sam Stone написал(а):
Bimit написал(а):
З.Ы. посмотрите может у Вас в системе есть ракурс базы данных V_MMIM_QN там уже в связке таблицы MARD MSPR за один SELECT все выберете

Тогда уж можно сразу MARD и MSPR заджойнить

Конечно же не заджойнить, а сделать объединение через UNION.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 12:51 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 09:43
Сообщения: 569
Откуда: South Kazakhstan
Пол: Мужской
Kuranov.Dmitry написал(а):

//сливаем данные в 1 таблицу
//добавляем данные из второй таблицы
LOOP AT tab2.
CLEAR tab1
MOVE-CORRESPONDING tab2 TO tab1.
APPEND tab1.
ENDLOOP.
[/code]

Спасибо за разъяснения Дмитрий, в общем сделал что то вроде
Code:
form user_command using v_ucomm   like sy-ucomm
wa_selrow type slis_selfield.
  case v_ucomm.
    when 'ZAPAS'.
      refresh ZAPAS.
      refresh ZAPAS2.
      read table itab1 index wa_selrow-tabindex.
      select * from mspr appending corresponding fields of table ZAPAS2 where pspnr = itab1-posid
        and matnr = itab1-matnr and prlab ne '0.000'.
      select * from mard appending corresponding fields of table ZAPAZ where matnr = itab1-matnr
        and  werks = itab1-werks and labst ne  '0.000'.

      loop at zapas2.
        clear zapas.
        move-corresponding zapas2 to zapas.
        append zapas.
      endloop.
      loop at zapas.
        if zapas-labst = '0.000'.
          zapas-labst = zapas-prlab.
        endif.
        if zapas-meins = ''.
          zapas-meins = itab1-meins.
        endif.
       zapas-lbkum = zapas-labst.
        translate zapas-lbkum  using ', '.
        condense zapas-lbkum no-gaps.

        select single posid from prps into ( zapas-posid ) where pspnr = zapas-pspnr.
        call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
            input  = zapas-matnr
          importing
            output = zapas-matnr2.
        modify zapas.
      endloop.
      perform zapas. (Отображение на экране в виде alv-grid)

  endcase.
endform.

Но возникла опять таки же ещё одна дилемма. В общем при нажатии на кнопку zapas открывается отчёт, но он конечно же открывается в разрезе складов той строки материала, на которую я нажал, т.е. какой сработал read table itab1 index wa_selrow-tabindex, а вот как сделать чтобы при нажатии на кнопку zapas открывался отчёт не только с тем материалом на который я нажал мышкой read table itab1 index wa_selrow-tabindex, а открывался бы отчёт по всем материалам, которые отображаются в первом отчёте, в разрезе складов.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 12:53 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 09:43
Сообщения: 569
Откуда: South Kazakhstan
Пол: Мужской
Bimit написал(а):
З.Ы. посмотрите может у Вас в системе есть ракурс базы данных V_MMIM_QN там уже в связке таблицы MARD MSPR за один SELECT все выберете

А мне казалось, что таблички MARD и MSPR совсем ни как друг с другом не связаны, но интереса ради попробую заджойнить V_MMIM_QN


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Соединение двух внутренних таблиц.
СообщениеДобавлено: Вт, ноя 28 2017, 12:55 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 337
1)Read table заменить на LOOP.
2) В нем аккумулировать данные для отчета
3) Запустить отчет

Code:
when 'ZAPAS'.
      refresh ZAPAS.
      refresh ZAPAS2.
      loop at itab1 .
         select * from mspr appending corresponding fields of table ZAPAS2 where pspnr = itab1-posid
           and matnr = itab1-matnr and prlab ne '0.000'.
         select * from mard appending corresponding fields of table ZAPAZ where matnr = itab1-matnr
           and  werks = itab1-werks and labst ne  '0.000'.

         loop at zapas2.
           clear zapas.
           move-corresponding zapas2 to zapas.
           append zapas.
         endloop.
      endloop.

      loop at zapas.
        if zapas-labst = '0.000'.
          zapas-labst = zapas-prlab.
        endif.
        if zapas-meins = ''.
          read table itab1 with key matnr = zapas-mantnr  werks = zapas-werks. " ПРОВЕРИТЬ КЛЮЧИ! надо по значению из zapas найти строку из itab1
          zapas-meins = itab1-meins.
        endif.
       zapas-lbkum = zapas-labst.
        translate zapas-lbkum  using ', '.
        condense zapas-lbkum no-gaps.

        select single posid from prps into ( zapas-posid ) where pspnr = zapas-pspnr.
        call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
            input  = zapas-matnr
          importing
            output = zapas-matnr2.
        modify zapas.
      endloop.
      perform zapas. (Отображение на экране в виде alv-grid)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: BingBot


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB