Текущее время: Чт, мар 28 2024, 15:33

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 09:49 
Ассистент
Ассистент

Зарегистрирован:
Пт, окт 21 2016, 09:55
Сообщения: 27
Коллеги, со 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. Так много вопросов))

Буду благодарен за наводки, или какие-нибудь примеры лучших практик.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 10:13 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
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 включить семантическую группу по материалу.
Затем в правилах трансформации, либо на конечной рутине считывать из этой таблицы значения запасов и вычислять флаг.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 10:18 
Ассистент
Ассистент

Зарегистрирован:
Пт, окт 21 2016, 09:55
Сообщения: 27
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.


Последний раз редактировалось Rayman Пт, апр 27 2018, 11:43, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 11:42 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
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.



Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 11:56 
Ассистент
Ассистент

Зарегистрирован:
Пт, окт 21 2016, 09:55
Сообщения: 27
Air_demon, спасибо понял.

gt_rest собирается. Для примера отфильтровал по двум материалам. По отладке получилось из кучи записей две, с нужными данными.
Структуру после всех манипуляций нужно чистить?

Следующий этап рассчитать разницу для материала запас1 - запас2 - запас3. Где это лучше делать в start или end routine?
Получится материал, запас.
После этого нужно будет в цель передать флаг для материала если запас > 0, то флаг, если нет, то пусто.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 12:06 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Rayman написал(а):
Структуру после всех манипуляций нужно чистить?


О какой именно структуре речь?

Rayman написал(а):
Следующий этап рассчитать разницу для материала запас1 - запас2 - запас3. Где это лучше делать в start или end routine?
Получится материал, запас.
После этого нужно будет в цель передать флаг для материала если запас > 0, то флаг, если нет, то пусто.


Можно и правилах сделать подпрограмму, а можно и в end routine.

В start routine придется огород городить, так как у Вас нет этого поля в исходных и в конечном итоге все-равно придется дописывать или правила или end routine.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 12:20 
Ассистент
Ассистент

Зарегистрирован:
Пт, окт 21 2016, 09:55
Сообщения: 27
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, но перед этим я рассчитаю разницу, и сделаю условие простановки флага. (пока сам не тыкался, поэтому без моих мыслей задал вопрос, и возможно не очень понятно)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 13:01 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Rayman написал(а):
Ошибся, таблицу gt_rest. В отладке запускаю несколько раз DTP, gt_rest не пустая, и постоянно дописываются туда данные.

у меня, например по одному материалу будет 6 строк с разными показателями запаса. Но я уже заполнил gt_rest, где эти запасы по материалу схлопнуты. Как мне сделать так, чтобы в цели по одному материалу цеплялись получается значения из gt_rest, но перед этим я рассчитаю разницу, и сделаю условие простановки флага. (пока сам не тыкался, поэтому без моих мыслей задал вопрос, и возможно не очень понятно)


Можно и очищать, перед циклом, ведь Вы все данные по одному материалу сгруппируете в одном пакете, если настроите семантическую группу.


Rayman написал(а):
и возможно не очень понятно)

Действительно не совсем понял, что в итоге хотите получить.
Если Календарный день у Вас ни где не участвует и данные по запасам должны агрегироваться в цели только по материалу, то после заполнения gt_rest замените этими данными данные в SOURCE_PACKAGE предварительно зачистив ее. А флаг заполняйте в правилах простой формулой.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подпрограмма запуска  Тема решена
СообщениеДобавлено: Пт, апр 27 2018, 13:01 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Rayman написал(а):
Ошибся, таблицу gt_rest. В отладке запускаю несколько раз DTP, gt_rest не пустая, и постоянно дописываются туда данные.

у меня, например по одному материалу будет 6 строк с разными показателями запаса. Но я уже заполнил gt_rest, где эти запасы по материалу схлопнуты. Как мне сделать так, чтобы в цели по одному материалу цеплялись получается значения из gt_rest, но перед этим я рассчитаю разницу, и сделаю условие простановки флага. (пока сам не тыкался, поэтому без моих мыслей задал вопрос, и возможно не очень понятно)


Можно и очищать, перед циклом, ведь Вы все данные по одному материалу сгруппируете в одном пакете, если настроите семантическую группу.


Rayman написал(а):
и возможно не очень понятно)

Действительно не совсем понял, что в итоге хотите получить.
Если Календарный день у Вас ни где не участвует и данные по запасам должны агрегироваться в цели только по материалу, то после заполнения gt_rest замените этими данными данные в SOURCE_PACKAGE предварительно зачистив ее. А флаг заполняйте в правилах простой формулой.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подпрограмма запуска
СообщениеДобавлено: Пт, апр 27 2018, 13:48 
Ассистент
Ассистент

Зарегистрирован:
Пт, окт 21 2016, 09:55
Сообщения: 27
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 предварительно зачистив ее.

Попробую :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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


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

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


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

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