SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Заполнение из двух таблиц и вывод на экран https://www.sapboard.ru/forum/viewtopic.php?f=13&t=96005 |
Страница 1 из 6 |
Автор: | sonics [ Вт, янв 30 2018, 16:05 ] |
Заголовок сообщения: | Заполнение из двух таблиц и вывод на экран |
Подскажите пожалуйста. Есть две таблицы. Данные название столбцов там абсолютно одинаковое лишь значения местами отличаются. Цитата: TABLES: zppmrp5, zppmrp5_12. первая на сегодняшний день, вторая zppmrp5_12 на 12 месяц. Необходимо третья таблица zppmrp5_analitic, в которую данные будут собираться. Code: DATA: zppmrp5_analitic-MATNR_1 type zppmrpt-MATNR_1, *ДСЕ zppmrp5_analitic-MATNR_2 type zppmrpt-MATNR_2, *Узел zppmrp5_analitic-ARBPL_1 type zppmrpt-ARBPL_1, *Цех изготовитель zppmrp5_analitic-ARBPL_2 type zppmrpt-ARBPL_2, *Цех потребитель zppmrp5_analitic-GAMNG type zppmrpt-GAMNG, *Нормативная потребность zppmrp5_analitic-GAMNGL type zppmrpt-GAMNG, *Нормативная потребность LAST zppmrp5_analitic-GAMNG_1 type zppmrpt-GAMNG_1, *Подать в цех-потребитель(месяц) zppmrp5_analitic-GAMNG_1L type zppmrpt-GAMNG_1. *Подать в цех-потребитель(месяц) LAST Наши данные, но в таблице zppmrp5_analitic есть ДСЕ УЗЕЛ а дальше данные за сегодня Норм. Потр. и за 12 месяц Норм. Потр. также и с Подать в цех. потр за сегодня и за 12 месяц. Как мне сказать этим таблицам, что куда направлять? Code: TABLES: zppmrp5, zppmrp5_12. *lt_prev_month, lt_cur_month - прошлый и текущий месяц. DATA it_zppmrp5 TYPE zppmrp5. *zppmrp5_analitic внутренняя таблица вывода DATA zppmrp5_analitic TYPE zppmrp5. DATA wa_zppmrp5 LIKE LINE OF it_zppmrp5. DATA: zppmrp5_analitic-MATNR_1 type zppmrpt-MATNR_1, *ДСЕ zppmrp5_analitic-MATNR_2 type zppmrpt-MATNR_2, *Узел zppmrp5_analitic-ARBPL_1 type zppmrpt-ARBPL_1, *Цех изготовитель zppmrp5_analitic-ARBPL_2 type zppmrpt-ARBPL_2, *Цех потребитель zppmrp5_analitic-GAMNG type zppmrpt-GAMNG, *Нормативная потребность zppmrp5_analitic-GAMNGL type zppmrpt-GAMNG, *Нормативная потребность LAST zppmrp5_analitic-GAMNG_1 type zppmrpt-GAMNG_1, *Подать в цех-потребитель(месяц) zppmrp5_analitic-GAMNG_1L type zppmrpt-GAMNG_1. *Подать в цех-потребитель(месяц) LAST я описал таблицы и столбцы в них. Дальше я начал с селекта, но здесь я понимаю, что мне нужно из zppmrp5 только выше перечисленные поля и чтобы они пошли в те поля, таблице zppmrp5_analitic, которые я ему задам (хотя в данном случае нас все устраивает и так если делать это через corresponding fields, если я правильно понял назначение) оно тогда скопирует туда лишь те поля, у которых алиас будет идентичным. Цитата: SELECT * FROM zppmrp5 INTO TABLE zppmrp5_analitic. IF sy-subrc=0. LOOP AT zppmrp5 INTO zppmrpm5_12. ENDLOOP. ENDIF. Но вот со вторым селектом, который будет из zppmrp5_12 мне нужно чтобы данные поступили в поля Code: zppmrp5_analitic-GAMNG_1L type zppmrpt-GAMNG_1 *Подать в цех-потребитель(месяц) LAST zppmrp5_analitic-GAMNGL type zppmrpt-GAMNG *Нормативная потребность LAST сложность есть в том, что ДСЕ - это таже деталь, может быть уже не нужна и на сегодняшний момент мы можем получить Null также как и у нас может появится новая ДСЕ, которой в 12 месяце не было вовсе и тогда null должен появится в соответствующей позиции Code: zppmrp5_analitic-GAMNG type zppmrpt-GAMNG, *Нормативная потребность zppmrp5_analitic-GAMNG_1 type zppmrpt-GAMNG_1, *Подать в цех-потребитель(месяц) направьте пожалуйста |
Автор: | sonics [ Вт, янв 30 2018, 16:09 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
хотелось бы двигаться маленькими шажками, чтоб разобраться досконально. |
Автор: | Kuranov.Dmitry [ Пт, фев 02 2018, 10:28 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
Code: ает и так если делать это через corresponding fields, если я правильно понял назначение) оно тогда скопирует туда лишь те поля, у которых алиас будет идентичным. если имена внутренней таблицы не совпадают с именами прозрачной, а надо сделать corresponding, то можно воспользоваться переименованием полей в селекте: пример: Code: DATA; begin of perdata occurs 0, pernr like pa0002-pernr, familia like pa0002-nachn, imya like pa0002-vorna, END OF perdata. SELECT pernr nachn AS familia vorna AS imya INTO CORRESPONDING FIELDS OF TABLE perdata FROM pa0002. |
Автор: | sonics [ Вт, фев 06 2018, 10:24 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
у меня непонятки как с внутренней работать таблицей. вот одна таблица, название столбцов совпадает. вот вторая таблица, название столбцов совпадает. я сделал третью и ввел название только те столбцы, которые мне необходимы, названия полей тут не совпадают, но описание (элемент данных) тот, что нужно. Как я могу указать, куда вставлять данные из одной таблицы в другую? через select where? |
Автор: | Kuranov.Dmitry [ Вт, фев 06 2018, 10:30 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
в SELECT вы можете поменять название полей через оператор AS синтаксис: SELECT <db_column> AS <internal_table_column> INTO CORRESPONDING FIELDS OF TABLE <innternal_table>. смотрите мой пример выше. поле pernr - табельный номер совпадает в прозрачной таблице PA0002 и внутренней таблице perdata, остальные две колонки не совпадают. |
Автор: | sonics [ Вт, фев 06 2018, 14:06 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
возник вопрос, могу ли я не делал 3юю таблицу, а обойтись внутренней и вывести ее тут же на экран? p.s.: кол-во записей в каждой таблице - несколько миллионов или все же как я выше и писал, слить данные в третью таблицу и выводить уже ее? |
Автор: | Kuranov.Dmitry [ Вт, фев 06 2018, 14:09 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
sonics написал(а): возник вопрос, могу ли я не делал 3юю таблицу, а обойтись внутренней и вывести ее тут же на экран? p.s.: кол-во записей в каждой таблице - несколько миллионов или все же как я выше и писал, слить данные в третью таблицу и выводить уже ее? да, можете и даже нужно так. Не очень понимаю вашу архитектуру, вы что используете прозрачные таблицы в качестве внутренних на проекте? |
Автор: | sonics [ Вт, фев 06 2018, 15:00 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
у меня мало опыта и я не могу решить как правильно подойти к проекту. две таблицы, по доменам и элементам - одинаковые, разница лишь в записях и количестве их. Одна за начало месяца, вторая за сегодняшний день. по итогу вывести в третью таблицу или внутреннюю таблицу и отобразить на экране. Смысл в том, чтобы посмотреть различие данных в одинаковых строках за разные числа. Задача вроде простая, но не доходит как это сделать правильно мечусь уже не один день ... по итогу Деталь | потребность на месяц 100 | потребность на сегодня 80 | примерно так должно выглядеть только просто цифрами |
Автор: | Kuranov.Dmitry [ Вт, фев 06 2018, 15:47 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
sonics написал(а): у меня мало опыта и я не могу решить как правильно подойти к проекту. две таблицы, по доменам и элементам - одинаковые, разница лишь в записях и количестве их. Одна за начало месяца, вторая за сегодняшний день. по итогу вывести в третью таблицу или внутреннюю таблицу и отобразить на экране. Смысл в том, чтобы посмотреть различие данных в одинаковых строках за разные числа. Задача вроде простая, но не доходит как это сделать правильно мечусь уже не один день ... по итогу Деталь | потребность на месяц 100 | потребность на сегодня 80 | примерно так должно выглядеть только просто цифрами Code: DATA: BEGIN OF result_tab OCCURS 0,
matnr LIKE zppmrp5-matnr, " Код материала gamng_last like zppmrp5_12-gamng, " потребность прошлого года gamng_today like zppmrp5-gamng, " потребность на сегодня END_OF result_tab. SELECT matnr gamng AS gamng_last INTO CORRESPONDING FIELDS OF TABLE result_tab FROM zppmrp5_12. CLEAR result_tab. " почистим хедер таблицы( но не саму таблицу!!) SELECT matnr gaming AS gamng_today INTO CORRESPONDING FIELDS OF result_tab. COLLECT result_tab. ENDSELECT. LOOP AT result_tab. WRITE: / result_tab-matnr, result_tab-gamng_last, result_tab-gamng_today. ENDLOOP. |
Автор: | sonics [ Ср, фев 07 2018, 09:11 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
Code: TABLES: zppmrp5, zppmrp5_12. DATA: BEGIN OF result_tab OCCURS 0, matnr LIKE zppmrp5-matnr, " Код материала gamng_last like zppmrp5_12-gamng, " потребность прошлого года gamng_today like zppmrp5-gamng, " потребность на сегодня END OF result_tab. SELECT matnr gamng AS gamng_last INTO CORRESPONDING FIELDS OF TABLE result_tab FROM zppmrp5_12. SELECT matnr gamng AS gamng_today INTO CORRESPONDING FIELDS OF TABLE result_tab FROM zppmrp5. COLLECT result_tab. ENDSELECT. ENDSELECT. LOOP AT result_tab. WRITE: / result_tab-matnr, result_tab-gamng_last, result_tab-gamng_today. ENDLOOP. Почему то ругается на endselect. как только их оба убрал, оно хотя бы ошибки перестало выбрасывать, но запуск подвис... это же неправильно, без endselect. |
Автор: | Kuranov.Dmitry [ Ср, фев 07 2018, 09:25 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
Цитата: Почему то ругается на endselect. ну и правильно ругается. сравните код что вы написали, и то что я написал. Почитайте документацию по команде SELECT . Чем SELECT <field_list> INTO CORRESPONDING FIELDS OF <struc> отличается от SELECT <field_list> INTO CORRESPONDING FIELDS OF TABLE <tab> понимаете? |
Автор: | Bimit [ Ср, фев 07 2018, 09:57 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
Почитайте help или спросите у абаперов с опытом З.Ы. кто то еще должен быть на проекте Code: SELECT rp~matnr rp~gamng AS gamng_today rp12~gamng AS gamng_last
INTO CORRESPONDING FIELDS OF TABLE result_tab FROM zppmrp5 AS rp INNER JOIN zppmrp5_12 AS rp12 ON rp12~matnr = rp~matnr . |
Автор: | Kuranov.Dmitry [ Ср, фев 07 2018, 10:18 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
Bimit написал(а): Почитайте help или спросите у абаперов с опытом З.Ы. кто то еще должен быть на проекте Code: SELECT rp~matnr rp~gamng AS gamng_today rp12~gamng AS gamng_last INTO CORRESPONDING FIELDS OF TABLE result_tab FROM zppmrp5 AS rp INNER JOIN zppmrp5_12 AS rp12 ON rp12~matnr = rp~matnr . немного не то что надо автору. если материал есть в zppmrp5_12 но нет в zppmrp5 то rp~matnr не выберется и наоборот. выберутся только те что есть в обоих таблицах. |
Автор: | Bimit [ Ср, фев 07 2018, 10:21 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
Это понятно, я примерно додумал что надо сделать, сравнить текущее состояние с предыдущим Если материала нет на начало месяца, тогда это новый материал и принимаем предыдущее состояние равно 0, так в поле и будет |
Автор: | Bimit [ Ср, фев 07 2018, 10:22 ] |
Заголовок сообщения: | Re: Заполнение из двух таблиц и вывод на экран |
З.Ы. JOIN можно и перестроить как надо |
Страница 1 из 6 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |