Вы находитесь на странице: 1из 7

Доработка программ по расчету и выгрузке ценовых

условий некондиционного товара (уценка)


1. Корректировка программы по утверждению % Уценки
ZMV_APPDISCOUNT_PRICE

1.1. Краткое описание


 Программа ZMV_APPDISCOUNT_PRICE (внутри вызов программы ZAPPDISCOUNT) используется для создания в системе SAP ERP записей
условий вида ZUCN, в котором регистрируется % уценки, на основании данных, переданных из системы КИС. В случае успешной обработки
также обновляются данные таблицы ZSUBSTAND.

1.2. Функциональное описание


 В рамках доработки программы ZAPPDISCOUNT необходимо:

 Добавить изменения в логику поиска розничной цены для родового товара. В случае, если розничная цена не найдена на дату уценки
(ZSUBSTAND-DATAB) не найдены, выполнять поиск условий VKP0/VKA0 на текущую дату.

Для ошибочных позиций реализовать отправку уведомление по email со списком родовых товаров на адреса, согласно настройкам по
рассылке;
Добавить дополнительно в выборку данных позиции с ошибками, для их повторной обработки;
Добавить проверку расширения родового товара на завод. В случае, если материл не расширен  на завод на котором уценивается товар
(ZSUBSTAND-WERKS), необходимо выдать сообщение об ошибке, которое должно автоматическое отправляться в качестве
уведомление по email. 
Изменить тип сообщения (ZMC_ZAPPDISCOUNT001) на предупреждающее, для упрощения анализа ошибок в журнале сообщений
(SLG1).

1.3. Технический обзор логики процесса

1.3.1. Обработка условия ZUCN

1.3.1.1. Поиск записей розничной цены для родового товара VKP0/VKA0

1. в подпрограмме condition_read, если не найдена цена на дату уценки (komk-prsdt = i_data-datab), для обоих видов условий VKP0/VKA0
дополнительно добавить логику поиска цены на текущую дату komk-prsdt = sy-datum
2. Если запись найдена, то берем запись условия действующий на текущую дату
3. Если запись на текущую дату также не найдена, то далее по текущему алгоритму, сообщение об ошибке в SLG1
(ZMC_ZAPPDISCOUNT010 «Для материала & не заполнено поле "Розничная цена актуальная") и дополнительно реализовать отправку
уведомления об ошибке.

1.3.1.2. Фиксация ошибочных позиций для отправки уведомлений

1. Создать новую переменную в STVARV со списком полей, по которым должно отправляться уведомление об ошибках. Имя переменной
должно советовать имени таблицы, из которой проверяем корректность заполнения полей (значение из таблицы DD03L). Это позволит
настраивать по каким полям, по которым не прошли проверки требуется отправлять уведомления об ошибках.
2. Создать таблицу ZMMT_SUBSTANDERR для фиксации ошибочных данных. В таблицу будут записываться тип таблицы и поле, для
которого возникла ошибка при обработке условия ZUCN, код некондиционного товара, дата создания, а также флаг для контроля
отправки уведомления по email.

Поле Ключ Элемент данных Тип данных Длина Краткое описание

TABNAME X TABNAME CHAR 30 Имя таблицы

FIELDNAME X FIELDNAME CHAR 30 Имя поля

UPMAT X ZUPMAT CHAR 18 Код некондиционного товара

ERDAT  X ERDAT DATS8 8 Дата создания записи


PROCESSED   FLAG CHAR 1 Уведомление отправлено

1.3.1.3. Добавление записей в таблицу ZMMT_SUBSTANDERR

 В подпрограмме HANDLE_USER_COMMAN все записи, которые не прошли проверку добавляем в таблицу ZMMT_SUBSTANDERR  в
соответствии с настройками из STVARV.

Проверяем, есть ли запись с именем таблицы, по которой выполняются проверки в STVARV. Если запись с именем таблицы нашли, то
проверяем поле, по которому не выполнилась проверка, в списке значении переменной. Если найдено, то добавляем запись в
ZMMT_SUBSTANDERR R со следующими данными:

TABNAME = ZAPPDISCOUNT_ALV
FIELDNAME = проверяемое поле
UPMAT = код материала некондиции из обрабатываемой записи.
ERDAT = текущая дата
PROCESSED = пусто

1.3.1.4. Отправка уведомлений

Вызов добавить в ZAPPDISCOUNT после обновления базы данных перед формированием лога.

В программе ZNV_PRICE_CHANGE_MAIL добавить новую операцию (радиобаттон) «Отчет по ценам на некондиционный товар».

Для новой опции «Отчет по ценам некондиционного товара» для каждого адресата, указанного на селекционном экране, необходимо отправлять
уведомление по email (одно письмо на один адрес), с учетом указанной даты изменения цены.

Для формирования шаблона письма использовать заголовок и текст сообщения, настроенные в транзакции SO10:

Заголовок ZPRICE_REDUC_NOTIF_H – «Отчет по ценам на некондиционный товар»


Тело сообщения ZPRICE_REDUC_NOTIF_B - " Для некондиционных товаров во вложении зарегистрированы ошибки при формировании
цен".

Алгоритм программы

Из таблицы ZMMT_SUBSTANDERR выбрать записи TABNAME FIELDNAME UPMAT ERDAT PROCESSED для которых PROCESSED = пусто и
ERDAT = P_DATE. Сделать сортировку по полям TABNAME FIELDNAME UPMAT для последующей отправки сообщений по типу ошибок в
разрезе кода некондиционного товара UPMAT. 

Считать Тексты заголовка и тела письма с помощью ФМ READ_TEXT


CLIENT = 'номер мандата',
ID = 'ST',
LANGUAGE = 'RU',
NAME = 'ZPRICE_REDUC_NOTIF_H' для заголовка письма; 'ZPRICE_REDUC_NOTIF_B' для тела письма
OBJECT = 'TEXT'.

Записи с кодом товара, найденные из таблицы ZSUBSTAND_ERR добавить к тексту тела сообщения. В файл вывести следующие данные
ZSUBSTAND-UPMAT + ZSUBSTAND-MATNR + ZSUBSTAND-WERKS.

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

Текст сообщения класс ZMC_ZAPPDISCOUNT номер 010. "Для материала &1 не заполнено поле &2&3&4", где

Номер материала ZSUBSTAND_ERR-UPMAT

Поле DD04T-DDTEXT 

Выборка данных аналогична (пример стр. 213 include ZAPPDISCOUNT_FORMS) на вход ZSUBSTAND_ERR-FIELDNAME.

  lv_field = 'MATNR'.

          SELECT SINGLE ddtext FROM dd04t AS a
            INNER JOIN dd04l AS b ON b~rollname = a~rollname
            INNER JOIN dd03l AS c ON c~rollname = b~rollname
            INTO lv_ddtext
            WHERE c~tabname = 'ZAPPDISCOUNT_ALV'
            AND   c~fieldname  =  lv_field
            AND   a~ddlanguage = sy-langu.
С помощью ФМ SO_NEW_DOCUMENT_ATT_SEND_API1 выполнить отправку EMAIL-уведомления (пример отправки email - форма send_mail
инклуд ZNV_PRICE_CHANGE_MAIL_FORM).

Если при отправке возникли сообщения об ошибке, то вывести в журнал SLG1 Объект ZFOBO/подобъект ZFOBO_044

1.3.1.5. Добавление в обработку ошибочных позиций

В фоновой обработке выборка данных включает новые записи от времени последнего прогона и не предусмотрена возможность включить в
повторную обработку не обработанные позиции. Добавить чекбокс на экран "Обработать ошибочные позиции".

Если индикатор установлен, то дополнительно считать данные из таблицы ZSUBSTAND по всем материалам, где ZSUBSTAND-EXPORT = пусто.
Проверить запись в таблице ZMMT_SUBSTANDERR  по ZSUBSTAND-UPMAT = ZMMT_SUBSTANDERR-UPMAT, если найдено, то включаем в
обработку и помечаем как ошибочная (это необходимо для очистки данных  в таблице ZMMT_SUBSTANDERR  в случае успешной обработки). 

1.3.1.6. Удаление записей из таблицы ZMMT_SUBSTANDERR 

Необходимо реализовать очистку данных в таблице ZSUBSTAND_ERR для ошибочных записей, по которым прошла успешна обработка.

Если позиция, помеченная как ошибочная (есть запись ZMMT_SUBSTANDERR ), обработалась успешно и по ней создался вид условия ZUCN, то
необходимо удалить все записи для UPMAT из таблицы ZMMT_SUBSTANDERR.

1.3.2. Заполнение поля серийный номер


При проверке поля серийный номер SERNUM (иклюд ZAPPDISCOUNT_FORMS) реализовать заполнение поля значением по умолчанию. Если
поле пусто, то необходимо заполнить значением ZSUBSTAND-SERNUM = NULL, при обновлении данных таблицы ZSUBSTAND также обновляем
данные этого поля.

1.3.3. Расширение материала


Необходимо реализовать дополнительную проверку расширения родового материала на завод. Включить в блок проверок HANDLE_USER_COM
MAN.

Выборка из таблицы MARC по полям MATNR и WERKS. Если запись не нашли, то формируем сообщение об ошибке «Материал & не расширен
на завод &»

1.3.4. Изменение типа сообщения


В подпрограмме get_data изменить тип сообщения ZMC_ZAPPDISCOUNT номер 001 на предупреждающее.

Если поле ZSUBSTAND-KBETR_DISC = пусто, то выдается сообщение об ошибке  ZMC_ZAPPDISCOUNT010 "Для материала & не заполнено
поле "Процент уценки". Изменить данное сообщение на предупреждающее и далее перейти к обработке создания вида условия ZUCN, в этом
случае должна создаться запись условия со значением ноль. 

2. Корректировка программы по выгрузке цен для некондиционного


товара ZFOBONKDPRICE

2.1. Краткое описание


Программа ZFOBONKDPRICE используется для выгрузки итоговых цен уцененного товара. В результате обработки формируется IDOC
ZWBBDLD, который содержит данные записей условий ZVNK «Цена некондиции» для основного товара в разрезе EAN.

 Выгрузка IDOC ZWBBDLD должна осуществляться только на магазины бренда МВидео во внешнюю систему FOBO, поскольку в магазинах
бренда Эльдорадо расчет цен уцененного товара осуществляется непосредственно в системе TS. В связи с чем выгрузка IDOC ZWBBDLD на
заводы бренда Эльдорадо не должна производиться.

2.2. Функциональное описание


В текущей версии запуск программы в фоновом режиме осуществляется с вариантом транзакции «BRAND», в котором по умолчанию
исключаются заводы бренда Эльдорадо. В случае перевыгрузки цен по некондиционному товару в ручном режиме, возможна выгрузка данных
также на магазины бренда Эльдорадо.

В рамках данной спецификации необходимо реализовать вызов программы всегда с условием исключения заводов бренда Эльдорадо и
переопределять данные селекционного экрана, в случае если программа была запущена с иными критериями.

2.3. Технический обзор логики процесса


Создать новый параметр в STVARV ZFOBO_PRICE, в котором будет добавлено исключение заводов Эльдорадо по признаку принадлежности к
сети.

Исключение заводов реализовано в методе ZCL_MM_APPDISCOUNT=>RESET_OUTPUT_WERKS. 

Далее обработка выполняется по текущему алгоритму.

3. Корректировка программы ZSUBSTANDARTPRICE по формированию


цен на некондиционный товар

3.1. Краткое описание


В результате обработки создаются ценовые условия ZVNK (с учетом периодов и значений розничной и акционной цены) для основного товара /
EAN с применением правил округления.

3.2. Функциональное описание


Требуется исключать заводы Эльдорадо для создания записей условий с видом ZVNK. На текущий момент, рассчитанные цены для уцененных
товаров не выгружаются на магазины Эльдорадо, а рассчитываются в TS на основании запроса % Уценки.

Создание записей условий ZVNK с нулевым % Уценки (если значение условие ZUCN = 0), в этом случае цена Уценки равна розничной цене.

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

3.3. Технический обзор логики процесса


3.3.1. Обработка условия ZVNK

3.3.1.1. Исключение создание условия ZVNK для заводов Эльдорадо

Создать новый параметр в STVARV ZSUBSTANDARTPRICE_BREND, в котором будет добавлено бренд, заводы которого необходимо исключать
из обработки.

В подпрограмме FILL_DATA необходимо удалять из обработки записи с заводами, принадлежащие к бренду Эльдорадо. Проверка
принадлежность Завода бренду Эльдорадо и исключение заводов из обработки реализовано в методе
ZCL_MM_APPDISCOUNT=>RESET_OUTPUT_WERKS. 

Проверяем, если переменная ZSUBSTANDARTPRICE_BREND найдена и не пустое и значение ZWERKS_CHAINSTORE входит в этот список, то
исключаем запись с этим заводом из дальнейшей обработки.

3.3.1.2. Обработка условия ZVNK c нулевым % Уценки

В отдельных случаях из системы КИС может передаваться нулевой % Уценки, в этом случае в системе формируется условие вида ZUCN со
значением равным 0. При создании условия ZVNK необходимо добавить дополнительную обработку в формуле расчета, если найденное
значение ZUCN = 0.

В подпрограмме   PERFORM fill_data.  Необходимо внести изменения (изменить условие  CHECK ls_vake-kbetr IS NOT INITIAL.). Если найдено


условие ZUCN со значением ноль, то необходимо чтобы далее выполнялась обработка. 
В результате новая цена, должна создаться равной найденному значению условий VKA0/VKP0.

3.3.1.3. Обработка ошибочного условия ZVNK 

Если при создании условия ZVNK (FORM save_conditions) в процессе обработки возникли ошибки, то необходимо их записать в таблицу ошибок
для повторной обработки. 

Создать таблицу ZMMT_SUBSPRICERR для фиксации ошибочных данных.

В таблицу необходимо сохранить все параметры (данные gt_matnr), для которых вызывалось создание вида условия ZVNK, с целью повторного
прогона создания: 

Поле Ключ Элемент данных Тип данных Длина Краткое описание

GUID X GUID RAW 16 GUID

CPCRE   CPCRETIME CHAR 14 Метка времени создания


TIME

MATNR MATNR CHAR 18 Материал (уцененный)

MATNR MATNR CHAR 18 Материал (родовой товар)


_ROD

DATAB DATAB DATS 8 Дата начала действия

DATBI DATBI DATS 8 Дата окончания действия

MAKTX MAKTX CHAR 40 Краткий текст материала

EAN11 EAN11 CHAR 18 Европейский номер товара

GROES GROES CHAR 32 Размеры/Габариты

MEINS MEINS UNIT 3 Базисная единица измерения

WERKS WERKS_D CHAR 4 Завод

KBETR KBETR_KOND CURR 11 Сумма/процентная ставка условия 

KBETR1 KBETR_KOND CURR 11 Сумма/процентная ставка условия 

KSCHL KSCHL CHAR 4 Вид условия

EPRGR EPRGR CHAR 6 Группа базов. цен

SUMM KBETR CURR 11 Сумма или процентная ставка условия


PRICE KBETR CURR 11 Сумма или процентная ставка условия

VKORG VKORG CHAR 4 Сбытовая организация

VTWEG VTWEG CHAR 2 Канал сбыта

SPART SPAIV CHAR 2 Сектор

VAKEY VAKEY CHAR 100 Индекс документа: условия для автоматич. изменения документ.

BLTYP BLTYP CHAR 2 Тип документа для обновления индекса документов

KNUMH KNUMH CHAR 10 Номер записи условия

KOPOS KOPOS NUMC 2 Порядковый номер условия

PLTYP PLTYP CHAR 2 Тип прейскуранта

Добавить чекбокс на экран "Обработать ошибочные позиции".

Если индикатор установлен, то дополнительно считать данные из таблицы ZMMT_SUBSPRICERR для создания условия ZVNK, проверить и
удалить дубликаты. Если при повторном прогоне обработка прошла успешно и создался вид условия ZVNK с этими параметрами, то удаляем
запись из таблицы ZMMT_SUBSPRICERR.

В подпрограмме SAVE_CONDITIONS убрать логику, если ошибка, то не обновлять метку времени в таблице в таблице ZSUBDATE-CRETIME, т.е.
метка должна обновляться при любом прогоне.

3.3.2.  Изменение типа сообщения


Если не были выбраны данные для обработки из таблицы WIND,  изменить тип сообщения ZFOBO069  на предупреждающее.

3.3.3.

В транзакцию ZAPPDISCOUNT - Утверждение % уценки и доп. данных.  добавляем кнопку удаления.

По нажатию кнопки проверяем, помечена ли позиция, как ошибочная, если нет, то сообщение «Позицию удалить нельзя».

Если позиция помечена как удаленная, то удаляем запись из таблицы ошибок ZMMT_SUBSTANDERR и обновляем данные в ZSUBSTAND,
помечаем как выгруженную ZSUBSTAND-EXPORT = X и заполняем ZSUBSTAND-DATA_OUT = дата обработки.

ФИО Статус Плановая дата согласования

Игрункова Анна Алексеевна СОГЛАСОВАНО 29.05.2020 

Иванюк Алексей Валентинович СОГЛАСОВАНО 29.05.2020