Текущее время: Вс, июн 24 2018, 05:18

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


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


ВНИМАНИЕ!

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



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

Зарегистрирован:
Чт, янв 24 2013, 09:43
Сообщения: 551
Откуда: 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
Сообщения: 4381
Откуда: Москва
Тр. SAT, кнопка tips and trics.
Далее изучать раздел internal tables.
Скорее всего ответ на вой вопрос увидите в подразделе simple algorithms -> joining interrnal tables.

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


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

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

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


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

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


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

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

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


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 307
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
Сообщения: 2928
Пол: Мужской
Maksimka написал:
Kuranov.Dmitry написал(а):
Дык если они разные, как вы их соедините?

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

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


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

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

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

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


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

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


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

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

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


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

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


Можно и так :D

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

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


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


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

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

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

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


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

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

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


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 307
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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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