Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SMOD/CMOD - Расширения => Тема начата: Uukrul от Апрель 28, 2014, 11:23:14 am
-
Бывают задачи, когда мы формируем собственные документы в системе на основе проведенного пользователем документа, так называемые «паровозики» из документов. Техника формирования таких документов может быть различной, кроме одной проблемы, дальнейшая работа/просмотр таких связных документов вызывает определенные проблемы, в плане просмотра связных документов. Чаще всего для этой задачи пишутся какие-то отчеты или же если связь выполняется через присвоение номеров документов в стандартные поля, например ссылочный номер документа, то для этого можно попробовать использовать стандартные отчеты, хотя удобство такого использования сомнительно, так как массово сопоставление связей оказывается не наглядным. Поэтому когда в очередной раз возникла похожая задача было решено поискать другие методы связывания документов. Для примера рассмотрим ситуацию когда выполняется операция проводки документа движения материала для склада с активированной системой управления запасами (пример был описан тут: http://sapforum.biz/index.php/topic,2628.0.html). При проводке документа движения материала, в зависимости от настроек для СУС система создает автоматически транспортную заявку и далее, если настроены стратегии поиска складских мест, то возможно автоматическое создание транспортного заказа. Первой проблемой в системе является то, что номер транспортной заявки будет виден в документе движения материала, однако перейти к просмотру подробных данных из документа движения запасами нельзя, пример на рисунке: MIGO-01.png
Вторая проблема, даже если к транспортной заявке будет создан транспортный заказ, его не будет видно из документа системы управления запасами, хотя если перейти к просмотру транспортных заказов, то транспортный заказ имеет ссылку на документ движения материала, рисунок: LT23-01.png.
адача заключается в том, чтобы добавить возможность просмотра связных документов системы управления складом с документами движения материалами. Самым оптимальным и наверное логичным способом будет возможность использования RWIN-интерфеса связи документов. В общем виде это работает следующим образом, когда вы в документе логистики, например выбираете кнопку «Док. RW», рисунок: MIGO-02.png
Система откроет окно в котором будет отображен перечень связанных документов. В данном случае как видим это документы модуля финансов, контролинга и документ специальных регистров. Так как документы управления складом являются связанными с документом логистики, то было бы неплохо отражать их в стандартном окне с возможностью перехода к просмотру таких документов. Для этого необходимо выполнить несколько настроек в системе и реализовать функциональный модуль, который будет предоставлять связанные документы управления складом.
Для создания собственных объектов сначала необходимо создать в системе компонент RW-интерфейса и тип ссылочного объекта/операции. Не знаю по каким причинам, но просто внести новый код компонента система не позволяет, так перечень допустимых значений ограничен доменом, на которое ссылается поле таблицы компонентов, рисунок: SE11-01.png. Думаю, что это остатки каких-то устаревших разработок о которых давно забыли, но теперь это создает проблему — мы не можем внести собственный компонент для RW-интерфейса в таблицу TRWCI, хотя она просто содержит перечень кодов, с которыми происходит дальнейшая работа.
Однако с версии системы 6.0 у нас появилось замечательная возможность расширения постоянных значений для доменов системы без получения ключа модификации объекта. Для этого в просмотре данных домена по меню выберите: «Перейти к» - «Дополнение к фиксированному значению», рисунок: SE11-02.png
После выбора создания дополнений вам нужно будет создать новый объект расширения, например ZI_WMS, рисунок: SE11-03.png. Фактически будет использована стандартная возможность расширения объектов системы.
Создадим новые значения к домену и активируем изменения,рисунок: SE11-04.png. Ключ нашего объекта будет ZWMS, так как длинна поля 4 символа.
-
Продолжение:
Теперь можем перейти к ведению созданного кода в ракурсе TRWCI, для этого перейдем в транзакцию SM30 и добавим собственный ключ объекта в перечень уже существующих компонентов, в перечне предлагаемых значений появится на код ZWMS, рисунок: SM30-01.png. Внесем созданный нами код в перечень компонентов системы и сохраним изменения. Система запросит данные транспортного запроса, чтобы данные настройки можно было перенести в другие системы.
Примечание: К сожалению на рисунке полностью введенный код не видел, так как ракурс ведения не настроен по ширине вывода данных таблицы.
Далее для созданного компонента нужно установить максимальный год действия и признак активности RW-компонента. Для этого переходим к ведению ракурса TRWCA, в транзакции SM30, и добавляем новую запись с кодом ZWMS, рисунок: SM30-03.png. Год ставим например 2999, чтобы точно хватило и конца действия не дождались. Конечно 2999 год это очень оптимистично.
Далее зарегистрируем наш объект в связи с кодом момент вызова. Для этого в транзакции ведения ракурсов SM30, перейдем к ведению ракурса TRWPR. При входе будет предупреждение что ракурс общий для всех мандантов, а далее будет выведено окно с правилами нумерации. Для клиентских разработок стандартно открыт интервал 900 — 999, рисунок: SM30-04.png
В данном ракурсе мы должны создать запись с кодом операции DOCUMENT и событием RECORD, так как проводить связные документы нам не требуется, а вся работа будет заключаться только в демонстрации связных документов. Сам документы проводятся системой. За основу можем взять например запись с номером 10, рисунок: SM30-05.png и скопировать ее.
Номер операции поставим 999, т. е. последний в порядке вызова. Код компонента укажем собственный ZWMS, а вот имя функционального модуля зададим собственное. Так как данный ракурс не проверят наличие модуля при сохранении, то можем создать запись, а реализация модуля будет написана позже, на следующем шаге.
Так как параметры всех модулей для данного интерфейса и события должны совпадать, то копируем модуль FM_DOCUMENT_RECORD в собственный модуль Z_IWMS_DOCUMENT_RECORD. В общем виде должен быть создан следующий код:
FUNCTION Z_IWMS_DOCUMENT_RECORD.
*"--------------------------------------------------------------------
*"*"Глобальный интерфейс:
*" IMPORTING
*" VALUE(I_AWTYP) LIKE ACCHD-AWTYP
*" VALUE(I_AWREF) LIKE ACCHD-AWREF
*" VALUE(I_AWORG) LIKE ACCHD-AWORG DEFAULT SPACE
*" VALUE(I_AWSYS) LIKE ACCHD-AWSYS DEFAULT SPACE
*" VALUE(I_AWTYP_INCL) LIKE ACCHD-AWTYP DEFAULT SPACE
*" VALUE(I_AWTYP_EXCL) LIKE ACCHD-AWTYP DEFAULT SPACE
*" VALUE(I_BUKRS) LIKE ACCIT-BUKRS DEFAULT SPACE
*" TABLES
*" T_DOCUMENTS STRUCTURE ACC_DOC
*"--------------------------------------------------------------------
ENDFUNCTION.
Реализация функциональности будет написана позже, а пока осталось донастроить еще один шаг, провисать ссылочную операцию, чтобы наш документ отличался в списке документов системы. Для этого нужно перейти к ведению ракурса TTYP. За основу можно взять запись ссылочной операции MKPF и скопировать ее в свою создаваемую запись. Функциональный модуль и структуру для данной записи оставляем пустыми, рисунок: SM30-06.png
Основные шаги настройки на этом завершены, осталось реализовать ABAP разработку модуля Z_IWMS_DOCUMENT_RECORD, который должен уметь находить связный документы транспортного заказа для документа движения материала и если такой найден, то выводить его в окно просмотра связных документов. Так же реализуем код, который позволяет переходить к просмотру транспортного заказа из перечня связных документов.
Собственно сам механизм поиска связного транспортного заказа не сложная ABAP-задача, поэтому полностью реализовывать ее я не буду, просто схематично набросаем только актуальный для вывода документа в окне просмотра списка. Сам поиск документа по документу материала, рассмотрен не будет.
FUNCTION z_iwms_document_record.
*"----------------------------------------------------------------------
*"*"Глобальный интерфейс:
*" IMPORTING
*" VALUE(I_AWTYP) LIKE ACCHD-AWTYP
*" VALUE(I_AWREF) LIKE ACCHD-AWREF
*" VALUE(I_AWORG) LIKE ACCHD-AWORG DEFAULT SPACE
*" VALUE(I_AWSYS) LIKE ACCHD-AWSYS DEFAULT SPACE
*" VALUE(I_AWTYP_INCL) LIKE ACCHD-AWTYP DEFAULT SPACE
*" VALUE(I_AWTYP_EXCL) LIKE ACCHD-AWTYP DEFAULT SPACE
*" VALUE(I_BUKRS) LIKE ACCIT-BUKRS DEFAULT SPACE
*" TABLES
*" T_DOCUMENTS STRUCTURE ACC_DOC
*"----------------------------------------------------------------------
* Вызов для документа движения материала или транспортного заказа
CHECK i_awtyp = 'MKPF' or i_awtyp = 'ZWMS'.
* Проверим тип вызова: Создание/Просмотр
READ TABLE t_documents WITH KEY awtyp = 'ZWMS'
display = 'X'.
IF sy-subrc = 0.
* Вызов для просмотра документа транспортного заказа
* Структура будет содеражать данные ранее заполненные при
* формировании таблицы
SET PARAMETER ID: 'TAN' FIELD t_documents-docnr,
'LGN' FIELD t_documents-bukrs.
CALL TRANSACTION 'LT21' AND SKIP FIRST SCREEN.
ELSE.
* Код который должен по номеру документа ММ прочитать номер ТрЗаказа
* В переменных будут данные документа движения материала:
* I_AWTYP = MKPF
* I_AWREF = 5000000177
* I_AWORG = 2012
* Сформировать структуру с номером ссылочного документа на ТрЗаказ
t_documents-awtyp = 'ZWMS'.
t_documents-docnr = '0000000024'. "Транспортный заказ
t_documents-bukrs = 'DH2'. "Номер склада, так как БЕ не требуется
t_documents-ac_gjahr = '2012'.
APPEND t_documents.
ENDIF.
ENDFUNCTION.
Как видим в перечне документов появился ссылочный документ транспортный заказ, рисунок MIGO-03.png. Если сделать двойной клик мышью на номере документа, то мы попадем в просмотр транспортного заказа.