SAPфорум.RU https://sapboard.ru/forum/ |
|
Подпрограмма запуска https://sapboard.ru/forum/viewtopic.php?f=12&t=96343 |
Страница 1 из 1 |
Автор: | Rayman [ Пт, апр 27 2018, 09:49 ] |
Заголовок сообщения: | Подпрограмма запуска |
Коллеги, со start routine сталкиваюсь впервые. Подскажите, пожалуйста, наилучший путь. Имеется источник (мультикуб) и цель инфо-объект В источнике имеется: Материал - ключ Календарный день - ключ Ассортимент 1 Ассортимент 2 Ассортимент 3 Ассортимент 4 Запас 1 - показатель Запас 2 - показатель Запас 3 - показатель Цель: Материал - ключ Dateto Datefrom Флаг запаса Что нужно, на этапе старт рутин (или позже я просто мало работал с абап), выбрать только те строки, если есть или асортимент 1 или 2 или 3 или 4. По материалу сделать общую Запас1, Запас2, Запас3. Потом формула запас 1-запас2-запас3. Получим общий запас для материала. И уже в правиле или end routie прописать, если запас>0 то флаг запаса Х. У меня больше вызывает вопрос, как правильно сделать вот этот выбор данных, а потом формулу рассчитать. Куда это все записывать. Думаю, может как-то создать табличку со структурой соурс_пэкадж, собирать там нужные данные. Потом вычистить оригинальную табличку и переложить туда данные. Но как быть с суммой по материалу, и дальшейшей формулой запас 1-запас2-запас3. Так много вопросов)) Буду благодарен за наводки, или какие-нибудь примеры лучших практик. |
Автор: | Air_demon [ Пт, апр 27 2018, 10:13 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Rayman написал(а): Что нужно, на этапе старт рутин (или позже я просто мало работал с абап), выбрать только те строки, если есть или асортимент 1 или 2 или 3 или 4. Можно так: Code: DELETE SOURCE_PACKAGE WHERE асортимент 1 IS INITIAL AND асортимент 2 IS INITIAL AND асортимент 3 IS INITIAL AND асортимент 4 IS INITIAL Rayman написал(а): По материалу сделать общую Запас1, Запас2, Запас3. Потом формула запас 1-запас2-запас3. Получим общий запас для материала. И уже в правиле или end routie прописать, если запас>0 то флаг запаса Х. Как вариант создать внутреннюю таблицу, с полями Материал, запас 1, запас2, запас3, в общей области объявления переменных и делать в нее COLLECT. Только нужно еще в DTP включить семантическую группу по материалу. Затем в правилах трансформации, либо на конечной рутине считывать из этой таблицы значения запасов и вычислять флаг. |
Автор: | Rayman [ Пт, апр 27 2018, 10:18 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Air_demon написал(а): Можно так: Code: DELETE SOURCE_PACKAGE WHERE асортимент 1 IS INITIAL AND асортимент 2 IS INITIAL AND асортимент 3 IS INITIAL AND асортимент 4 IS INITIAL Сейчас потыкаюсь, поотлаживаю В итоге сделал, можете подсказать правильно двигаюсь? Code: *$*$ begin of global - insert your declaration only below this line *-* ... "insert your code here DATA: BEGIN OF rest, material TYPE /bi0/oimaterial, запас1 TYPE запас1, запас2 TYPE запас2, запас3 TYPE запас3, END OF rest. DATA: gt_rest LIKE SORTED TABLE OF rest WITH UNIQUE KEY material. Code: SORT source_package BY material.
DELETE source_package WHERE ассортимент1 IS INITIAL AND ассортимент2 IS INITIAL AND ассортимент4 IS INITIAL AND ассортимент8 IS INITIAL. LOOP AT source_PACKAGE ASSIGNING <source_fields>. MOVE-CORRESPONDING <source_fields> TO rest. COLLECT rest INTO gt_rest. ENDLOOP. |
Автор: | Air_demon [ Пт, апр 27 2018, 11:42 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Rayman написал(а): Code: SORT source_package BY material. DELETE source_package WHERE ассортимент1 IS INITIAL AND ассортимент2 IS INITIAL AND ассортимент4 IS INITIAL AND ассортимент8 IS INITIAL. LOOP AT source_PACKAGE ASSIGNING <source_fields>. ??? ENDLOOP. Подскажите, пожалуйста, а как собрать в табличку gt_rest запасы, схлопнутые по материалу? Используйте COLLECT. Что-то вроде этого: Code: DATA:
ls_rest type rest. LOOP AT source_PACKAGE ASSIGNING <source_fields>. ls_rest-material = <source_fields>-material. ls_rest-запас1 = <source_fields>-запас1. ls_rest-запас2 = <source_fields>-запас2. ls_rest-запас3 = <source_fields>-запас3. COLLECT ls_res INTO gt_rest. ENDLOOP. |
Автор: | Rayman [ Пт, апр 27 2018, 11:56 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Air_demon, спасибо понял. gt_rest собирается. Для примера отфильтровал по двум материалам. По отладке получилось из кучи записей две, с нужными данными. Структуру после всех манипуляций нужно чистить? Следующий этап рассчитать разницу для материала запас1 - запас2 - запас3. Где это лучше делать в start или end routine? Получится материал, запас. После этого нужно будет в цель передать флаг для материала если запас > 0, то флаг, если нет, то пусто. |
Автор: | Air_demon [ Пт, апр 27 2018, 12:06 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Rayman написал(а): Структуру после всех манипуляций нужно чистить? О какой именно структуре речь? Rayman написал(а): Следующий этап рассчитать разницу для материала запас1 - запас2 - запас3. Где это лучше делать в start или end routine? Получится материал, запас. После этого нужно будет в цель передать флаг для материала если запас > 0, то флаг, если нет, то пусто. Можно и правилах сделать подпрограмму, а можно и в end routine. В start routine придется огород городить, так как у Вас нет этого поля в исходных и в конечном итоге все-равно придется дописывать или правила или end routine. |
Автор: | Rayman [ Пт, апр 27 2018, 12:20 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Air_demon написал(а): О какой именно структуре речь? Ошибся, таблицу gt_rest. В отладке запускаю несколько раз DTP, gt_rest не пустая, и постоянно дописываются туда данные. Air_demon написал(а): Можно и правилах сделать подпрограмму, а можно и в end routine. Подскажите, пожалуйста, как мне учесть следующее, и как приходят данные в цель. После этого кода в start routine, Code: SORT SOURCE_PACKAGE BY material. DELETE SOURCE_PACKAGE WHERE ассортимент1 IS INITIAL AND ассортимент2 IS INITIAL AND ассортимент4 IS INITIAL AND ассортимент8 IS INITIAL. у меня, например по одному материалу будет 6 строк с разными показателями запаса. Но я уже заполнил gt_rest, где эти запасы по материалу схлопнуты. Как мне сделать так, чтобы в цели по одному материалу цеплялись получается значения из gt_rest, но перед этим я рассчитаю разницу, и сделаю условие простановки флага. (пока сам не тыкался, поэтому без моих мыслей задал вопрос, и возможно не очень понятно) |
Автор: | Air_demon [ Пт, апр 27 2018, 13:01 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Rayman написал(а): Ошибся, таблицу gt_rest. В отладке запускаю несколько раз DTP, gt_rest не пустая, и постоянно дописываются туда данные. у меня, например по одному материалу будет 6 строк с разными показателями запаса. Но я уже заполнил gt_rest, где эти запасы по материалу схлопнуты. Как мне сделать так, чтобы в цели по одному материалу цеплялись получается значения из gt_rest, но перед этим я рассчитаю разницу, и сделаю условие простановки флага. (пока сам не тыкался, поэтому без моих мыслей задал вопрос, и возможно не очень понятно) Можно и очищать, перед циклом, ведь Вы все данные по одному материалу сгруппируете в одном пакете, если настроите семантическую группу. Rayman написал(а): и возможно не очень понятно) Действительно не совсем понял, что в итоге хотите получить. Если Календарный день у Вас ни где не участвует и данные по запасам должны агрегироваться в цели только по материалу, то после заполнения gt_rest замените этими данными данные в SOURCE_PACKAGE предварительно зачистив ее. А флаг заполняйте в правилах простой формулой. |
Автор: | Air_demon [ Пт, апр 27 2018, 13:01 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Rayman написал(а): Ошибся, таблицу gt_rest. В отладке запускаю несколько раз DTP, gt_rest не пустая, и постоянно дописываются туда данные. у меня, например по одному материалу будет 6 строк с разными показателями запаса. Но я уже заполнил gt_rest, где эти запасы по материалу схлопнуты. Как мне сделать так, чтобы в цели по одному материалу цеплялись получается значения из gt_rest, но перед этим я рассчитаю разницу, и сделаю условие простановки флага. (пока сам не тыкался, поэтому без моих мыслей задал вопрос, и возможно не очень понятно) Можно и очищать, перед циклом, ведь Вы все данные по одному материалу сгруппируете в одном пакете, если настроите семантическую группу. Rayman написал(а): и возможно не очень понятно) Действительно не совсем понял, что в итоге хотите получить. Если Календарный день у Вас ни где не участвует и данные по запасам должны агрегироваться в цели только по материалу, то после заполнения gt_rest замените этими данными данные в SOURCE_PACKAGE предварительно зачистив ее. А флаг заполняйте в правилах простой формулой. |
Автор: | Rayman [ Пт, апр 27 2018, 13:48 ] |
Заголовок сообщения: | Re: Подпрограмма запуска |
Air_demon написал(а): Можно и очищать, перед циклом Сделал, тоже так подумал Air_demon написал(а): Если Календарный день у Вас ни где не участвует В DTP выбираю один день из tvarvc или последний день пред. месяца, если в tvarvc пусто. В трансформации тяну в dateto и datefrom. Air_demon написал(а): Действительно не совсем понял, что в итоге хотите получить. Вообще суть в том, что в цель передать флаг есть ли запас по материалу или нет. Перед этим ряд условий должно выполняться. Например, по ассортименту Code: SORT SOURCE_PACKAGE BY material. DELETE SOURCE_PACKAGE WHERE ассортимент1 IS INITIAL AND ассортимент2 IS INITIAL AND ассортимент4 IS INITIAL AND ассортимент8 IS INITIAL. Но так как строк по одному материалу может быть несколько, я не могу просто взять и нарисовать стрелочки из трех показателей во флаг цели. Поэтому вот и сделал табличку gt_rest, которая хранит в себе одну строку по каждому материалу со схлопнутыми показателями. У меня нарисована стрелочка в материал цели, и в dateto datefrom (выше написал). Поэтому вот и последний шаг остался, сделать разницу по материалу, выполнить условие и записать флаг. Но как писал выше, как мне это все соединить теперь в end routine, я пока не понимаю. Air_demon написал(а): то после заполнения gt_rest замените этими данными данные в SOURCE_PACKAGE предварительно зачистив ее. Попробую |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |