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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot]


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

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