sap migo что это
Проводка поступления материала (MIGO)¶
Запуск¶
Завершить проводку поступления материала необходимо вручную.
Проверки, выполняемые перед заполнением¶
Наличие номера заказа в системе SAP¶
Номер заказа передается контрагентом в определенном инфополе (см. раздел Передача номера заказа и кодов материала ).
Если контрагент вместе с документом не передал номер заказа, или если заказ с таким номером не существует в системе SAP, будет предоставлена возможность ручной обработки документа.
Актуальность заказа¶
В случае если все позиции заказа отмечены как удаленные, дальнейшее предзаполнение MIGO будет приостановлено.
Пользователь получит возможность указать другой номер заказа.
Сопоставление поставщика¶
Функционал сопоставляет поставщика, указанного в заказе (в том числе выбранном вручную), и контрагента, от которого поступил документ.
В случае если организации не совпадают, предзаполнение транзакции MIGO будет приостановлено, а пользователь получит сообщение .
Проверка позиций заказа¶
Функционал проверяет позиции переданного или введенного вручную заказа на допустимость поставки.
Отсутствие открытых позиций в заказе¶
Если все позиции заказа не отмечены на поступление материала ( ПоступлМтр на закладке Поставка ), пользователь получит сообщение и предзаполнение транзакции MIGO будет приостановлено.
Если по всем позициям заказа не осталось открытых количеств, пользователь получит сообщение и предзаполнение транзакции MIGO будет приостановлено.
Наличие открытых позиций в заказе¶
Если в заказе есть открытые позиции, функционал выполнит сопоставление открытых позиций заказа и позиций, входящих в состав формализованного документа.
Код материала, переданный контрагентом в дополнительных данных к документу, должен совпадать с кодом материала в учетной системе SAP (см. раздел Сопоставление позиций электронного документа и документа SAP ).
Поля, заполняемые в транзакции MIGO¶
Номер заказа, переданный в дополнительных данных входящего документа.
В случае если в справочнике SAP системы нет единиц измерения, указанных в xml, то поле с единицами измерения будет пустым.
Заполненый чекбокс (галочка), в случае если сопоставление позиций по номеру материала в заказе и электронном документе прошло успешно.
Пример заполнения MIGO¶
Пример передаваемых с документом значений¶
Необходимые настройки и требования к передаваемым документам¶
Для возможности проводки входящего формализованного документа в его дополнительных данных должна быть передана информация о заказе на поставку, предварительно созданном в SAP-системе.
Данные, которые должны быть переданы с формализованным документом:
Номер заказа;
Номера материалов.
Номера материалов должны быть переданы контрагентом в номенклатуре системы SAP.
Передача номера заказа и кодов материала¶
Номер заказа и номер материала должны быть переданы контрагентом в качестве дополнительных данных к входящему документу. Дополнительные данные должны быть переданы в специализированных разделах xml-файла формализованного документа (инфополях).
Ручное указание номера заказа¶
Если вместе с входящим заказом контрагент не передал номер заказа или передал номер заказа, несуществующего в системе SAP, имеется возможность указать номер заказа вручную.
Выбор возможен с использованием SearchHelp.
Сопоставление позиций электронного документа и документа SAP¶
При сопоставлении позиций документа SAP и электронного документа выполняется попытка сравнения (сопоставление должно быть попозиционным) по следующим кодам:
Код материала в документе SAP (в заказе, документе материала);
Код материала в теге в электронном документе, если он передан.
Допустимость операции запуска транзакций MIGO/MIRO¶
Коды функции для настроечной таблицы:
Пример заполнения /TRL/XDE_CONDIT для поступления материала представлен ниже.
BADI – Технология внедрения бизнес расширений / дополнений
Точенюк Олег Виталиевич
По разному называли
BADI – Технология внедрения бизнес расширений / дополнений в код стандартных транзакций; данная техника доступна в любых модулях системы, фактически эта технология, использующая объектно-ориентированный подход к реализации расширений системы, вышла для замены техники Customerexits.
Продолжение цикла статей «Техники расширений стандартной системы SAP».
Все статьи цикла приведены внизу публикации.
1. Общее описание технологии BADI.
Сегодня существуют два варианта реализации технологии BADI: это так называемы старые и новые BADI расширения. Различие между ними состоит в способе реализации класса расширения. В старых реализациях BADI, использовалась техника интерфейсов, т.е. фактически пользователю предлагалось, реализовать наследника метода класса и таким образом выстраивалась цепочка независимых реализаций. Такая методика позволяла разнести разные реализации в свои расширения, однако проблемы в одной из наследуемых реализаций могли поломать работу всех пользовательских расширений. Так же не решалась проблема хранения глобальных переменных. Поэтому, через некоторое время компания перешла на новый тип BADI; теперь при реализации вы пишете класс, как наследник заранее предопределенного класса, реализующего расширение. В точке вызова система проверяет наличие всех созданных и активных инстанций – наследников от базового класса расширения и вызывает соответствующие методы всех зарегистрированных классов наследников. Перечень методов, которые будут вызваться и точки вызова, заранее определены в родительском классе. Для механизма реализации новых BADI в язык системы были введены две новые служебные команды GET BADI и CALL BADI.
На первый взгляд, для пользователя особо ничего не изменяется при реализации как старых, так и новых BADI. Однако, на самом деле отличия существенные. Новая техника расширений решила проблему хранения глобальных переменных в рамках класса реализации, что было довольно проблематично осуществить, используя механизмы наследования методов. Классы реализации полностью стали независимыми и соответственно разработчики получили раздельные объекты, которые можно независимо обрабатывать. Именно новая технология BADI, предоставляет полную изоляцию каждой инстанции; непонимание этих различий, приводит к неправильному использованию новых BADI. Например, при переходе от старого типа реализации к новому набор методов остался старый, а вот параметры методов существенно изменились, что привело к полной дезориентации части разработчиков, особенно индусских. Простой пример, в системе существует BADI: MB_MIGO_BADI – Поля пользователя на экране MIGO. В старой реализации метода CHECK_ITEM, если правильно помню (к сожалению, старой системы у меня уже нет), вам передавалась позиция документа, которую вы могли проверить на ошибки и вернуть результат проверки в параметр ET_BAPIRET2. В новой реализации в этот метод передается только значение переменной I_LINE_ID – Unique Identification of Document Line, т.е. лишь номер позиции которую надо проверить, но данных самой позиции вам не передается. Это привело к тому, что на куче индусских форумов и части русскоязычных, скопированных из индусских, реализуется механизм сохранения вводимых позиций через IMPORT TO MEMORY в методе IF_EX_MB_MIGO_BADI
LINE_MODIFY, чтобы потом в методе проверки сделать EXPORT FROM MENORY и далее проверить значения. Я так понимаю, все реализующие этот механизм, считают себя профессионалами, а вот разработчиков компании SAP подозревают в том, что они забыли передать в метод проверки сам объект проверки – позицию документа. Они, видите ли, передали какую-то непонятную переменную I_LINE_ID, которая содержит просто число, причем. это число даже не является порядковым номером позиции документа. В общем, впечатление такое, что совсем непонятно, как теперь работать. и поэтому люди пишут какие-то кривые обходные методики получения доступа к позициям документа внутри BADI, но при этом не просто пишут, они еще и рекомендуют их как единственно верное решение. Лично я, когда впервые столкнулся с новым BADI и проанализировал предложенные механизмы, решил, что, чего-то недопонимаю, так как вряд ли разработчики SAP могли так вот ошибиться. Однако мне достаточно было просмотреть рекомендуемую реализацию шаблона BADI, чтобы понять, что я действительно заблуждался: в методе проверки CHECK_ITEM, при использовании нового механизма BADI, нет нужды передавать проверяемую строку документа.
Рекомендация: Если вы не понимаете механизма работы, не отталкивайтесь от предположения, что реализовавший данный механизм, был неполноценным, так как в 99% вы просто не разобрались в решении, а 1% я оставляю на пограничные случаи.
2. Пример расширения MB_MIGO_BADI для транзакции MIGO
Пример работы с BADI, предлагаю рассмотреть на основе работы с транзакцией MB_MIGO_BADI, раз уже начал этот раздел с ее упоминания. Так как система новая, то будем использовать механизм реализации нового BADI. Кстати, если вы попытаетесь использовать старый или так называемый классический BADI, то все равно на определенном этапе реализации система скажет вам, что уже существует новая реализация для данного BADI, поэтому будет выполнена конвертация данных для нового механизма. Отсюда следует, что в системе не может существовать одновременно поддержка реализации старого и нового механизмов BADI для одного и того же объекта, как например, для MB_MIGO_BADI.
Создание точки расширения выполняется в транзакции SE19 – BAdI-Builder – внедрения, Рис.1. Транзакция работает или в режиме создания, или в режиме изменения расширения. Если честно, не очень распространенный вариант первого экрана транзакции. Для создания точки расширения требуется ввести имя существующей в системе точки расширения, в данном случае это MB_MIGO_BADI. Выбираем режим создания расширения.
Рис.1
Появится диалоговый экран с запросом создаваемой точки расширения, который будет реализовывать наше расширение. Так как основное имя MB_MIGO_BADI, то имя создаваемой точки пусть будет ZZ_MB_MIGO_BADI, имя может быть любое подходящее под соглашения по наименованию пользовательских объектов, Рис.2.
Рис.2
Для группировки нескольких точек расширений, которые «обслуживают» один бизнес-процесс, можно создать групповое имя, которое будет объединять создаваемые расширения, для упрощения управления всеми реализациями. Если это просто локальная реализация расширения, то можно не создавать групповое имя. После подтверждения создания появляется запрос на ввод имени реализации, указания класса реализации и выбора определения BADI, Рис.3, это все организовано, так, потому как точка расширения может включать в себя несколько различных классов, в совокупности составляющих реализацию точки расширения. В нашем случае точка расширения совпадает по имени с классом реализации, при этом класс реализации для точки только один.
Рис.3
После заполнения всех полей подтверждаем ввод. Система предложит нам вариант создания реализации (фактически наследуемого класса). Так как у нас есть пример реализации, и мы создаем расширение данного типа в первый раз, то лучшим выходом будет создание реализации на основе копирования класса-примера Если же вы уже знаете, как создавать расширение, то выбираете создание пустого класса, так как при копировании класса-примера создаваемый новый класс будет реализовывать все методы класса-паррента (шаблона), хотя вам, может быть, и не требуется реализация всех методов, Рис.4.
Рис.4
Таким образом, мы получаем класс, реализующий расширение с перечнем все доступных методов, которые уже изначально содержат пример правильного кода, который позволит вам написать свою реализацию по аналогии с примером. Сохраняем созданный класс и теперь можно перейти к просмотру/редактированию созданного класса расширения, Рис.5. После сохранения расширения его нужно активировать. Если расширение активно, то результат его работы можно увидеть в транзакции MIGO.
Рис.5
Работать с точкой расширения можно или используя и дальше транзакцию SE19 или же можно работать уже с классом, реализующим расширение, используя транзакцию SE24 / SE80.
Сейчас транзакция MIGO не содержит закладки пользователя, Рис.6, так как класс еще не активирован, но если выполнить активацию, то при просмотре документов будет доступна закладка с полями пользователя.
Рис.6
Так как, класс был создан на основе шаблона, то количество объектов, подлежащих активации будет большим. Вы должны просто выделить все позиции и провести активацию всех объектов, Рис.7.
Рис.7
После активации данных в транзакции MIGO появятся закладки полей пользователя, Рис.8.
Рис.8
Если закладка не появилась или же при выполнении стандартной транзакции, которую вы расширили, вы не попадаете в текст реализации расширения, то убедитесь, что внедрение активировано и оно вызывается. Для этого в транзакции SE19 перейдите на закладку «Расширенные элементы внедрения» и просмотрите статус расширения. Курсор должен стоять на имени BADI-внедрения, а не на реализующем его классе, Рис.9.
Рис.9
3. Как это все работает?
Система «видит», что существует реализация расширения и «оформлен» наследник класса, поэтому в момент запуска транзакции она создает класс, отвечающий за реализацию. В вашем классе вам доступен метод INIT, который вызывается в конструкторе. Для каждого BADI-расширения возможны различные правила создания реализующего класса, именно поэтому, общая рекомендация при создании BADI, в первый раз, выполнять создание путем копирования из образца, если конечно это возможно. В методе INIT система должна вернуть имя вашей реализации. В данном случае имя реализации предлагается задать константой в рамках вашего класса и далее инкорпорировать эту константу в возвращаемые параметры метода инициализации класса, Рис.10.
Рис.10
Далее следует собственно реализация метода инициализации класса, Рис.11. В принципе это демонстрация правильного стиля программирования, когда имя класса реализации, по которому система будет в дальнейшем проводить идентификацию вашего класса, определяется через внутреннюю константу в рамках класса.
Рис.11
Далее при каждом добавлении строки в документ движения материала в транзакции MIGO, система будет вызвать метод LINE_MODIFY – Add / Change a Line (GOITEM), т.е. при каждом добавлении или изменении строки документа вы будете получать уведомление. Как образом предлагается реализовать данный метод? Так как фактически вы создали класс, то все необходимы для работы поля из позиции документа, предлагается хранить во внутренней приватной таблице класса. Структура, описывающая таблицу, создается в словаре данных и затем вы оформляете внутреннюю переменную в рамках класса, Рис.12.
Рис.12
В коде реализации, вы просто читаете необходимую строку позиции документа из этой таблицы по ключу I_LINE_ID, который обязательно должен быть включен в вашу внутреннюю структуру, так как это уникальный номер строки позиции документа. Если строка найдена, тогда вы модифицируете ее в своей таблице, так как пришли новые изменения, если же строки нет, тогда вы добавляете эту строку в свою внутреннюю таблицу. Таким образом, в рамках класса, реализующего расширение, вы всегда имеете таблицу строк документа. Именно поэтому в метод CHECK_ITEM – Check Item Data of Goods Movement система передает вам только уникальный номер строки, которую следует проверить, так как саму строку вы должны извлечь из внутренней таблицы строк своего класса реализации. Само собой, в этой таблице нужно сохранить не только поля, которые вы добавили на собственный экран, но и поля которые вам будут нужны для проверки введенных данных, Рис.13, поэтому вам не нужно выполнять какие-то телодвижения по сохранению позиций документа через память системы. Вы уже имеете класс, который может хранить все необходимые данные, вплоть до копии всех полей позиции документа, если это вам необходимо.
Примечание: Обратите внимание, что при реализации метода LINE_MODIFY, вы должны учесть также и ситуацию, когда документ уже сохранен в базу данных системы, поэтому транзакция MIGO вызвана в
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
Методика легкого создания «тяжелых» документов материала в MIGO
Алексей Даньшин
Методика создания функции массовой загрузки данных документа движения материалов из файла в транзакцию MIGO с использованием буфера обмена
Оглавление
Общие положения
В процессе работы с модулем SAP MM управление материальными потоками для выполнения функций некоторых бизнес процессов требуется регулярно вводить документы материала с большим количеством позиций и атрибутов. Например, данные из филиалов, не оборудованных рабочими местами в системе, или данные от подрядчиков, использующих давальческие материалы. В системе SAP ERP предусмотрены различные механизмы для массовой обработки данных, такие как транзакция MASS, создание документов со ссылкой на предшествующий документ с копированием позиций, индустриальные решения для массового ведения, пакетный ввод, электронный обмен данными. Через буфер обмена транзакция MIGO позволяет вставить ограниченное размером экрана количество строк. Специализированная функция вставки данных из буфера обмена позволит создавать документы материала с большим количеством позиций, использовать встроенные инструменты стандартной транзакции редактирования и проверки правильности ввода. Приведенный ниже пример реализован в системе SAP S/4HANA 1709.
Обоснование выбора решения
Общепринятой практикой для создания документов материала с большим количеством позиций является разработка отдельной программы для чтения данных из файла и запуска BAPI для проводки. Достоинством такого подхода является высокая скорость работы и простота использования, но при условии корректности данных в файле. В том случае, когда данные готовятся множеством сотрудников, не обладающих достаточным опытом работы с электронными таблицами, велика вероятность возникновения ошибок. Например, лишние пробелы в строках, символы из национальных раскладок клавиатуры или неподдерживаемые десятичные разделители могут препятствовать корректной загрузке. Возникающие в таких случаях сообщения об ошибках, как правило, не понятны пользователям и, таким образом, для исправления вводимых данных требуется техническая поддержка консультантов. Обычно для упрощения разработки подобных приложений не прибегают к созданию функций просмотра и проверки загруженных данных. Оценить правильность документа можно только после его создания и, в случае обнаруженных недостатков, потребуется выполнить сторнирование. Использование стандартной транзакции MIGO для множественного ввода данных из файла позволяет использовать все существующие возможности для просмотра, редактирования и проверки данных до проводки. Таким образом, предлагаемое решение позволяет получить повышение эффективности работы на предприятиях со множеством пользователей, создающих документы материала на основании больших объемов малоформализованных данных.
Порядок работы
Создание шаблона документа материала
В транзакции MIGO cоздать новый документ материала, содержащий одну позицию. Выбрать операцию, ссылочный документ, вид движения. В данных единственной позиции указать необходимые атрибуты, например завод, склад, вид оценки, МВЗ и так далее, которые будут одинаковыми для всех строк документа. Введенный документ сохранить в виде шаблона путем нажатия на кнопку «Сохранить временно», показанную на Рис. 1.
Рис. 1 Временное сохранение документа.
В поле Примечание ввести краткое описание создаваемого шаблона. Если необходимо использовать документ многократно можно установить индикатор «Ссылка», приведенный на Рис. 2. В этом случае, временно сохраненный документ не будет автоматически удален после использования.
Рис. 2 Опции сохраняемого шаблона.
Создание документа материала по шаблону с данными из буфера обмена
Далее создать новый документ. В буфер обмена cкопировать из Excel список позиций – кодов материалов с атрибутами в зависимости от вида движения предварительно сохраненного документа в формате, определенном в настроечной таблице. Пример содержимого буфера обмена приведен в Таблице 1.
Таблица 1 Содержимое буфера обмена.
В окне «Обзор, Мои документы» транзакции MIGO дважды щелкнуть левой кнопкой мыши на предварительно сохраненном документе. Расположение элемента управления показано на Рис. 3.
Рис. 3 Запуск заполнения документа из буфера обмена.
На основании предварительно сохраненного документа, создается новый документ, содержащий позиции с материалами и соответствующими атрибутами из буфера обмена. Если какой-либо из столбцов не должен быть заполнен, необходимо скопировать пустые поля в буфер обмена. Структура буфера всегда должна содержать заданное в настроечной таблице для вида движения количество столбцов. Все данные, такие как завод, склад, вид оценки и прочее, заполненные в позиции предварительно сохраненного документа, копируются в каждую позицию нового документа. Полученную заготовку документа можно дополнить данными, отредактировать и затем выполнить проводку. Временно сохраненный документ, не отмеченный индикатором «Ссылка», автоматически удаляется из списка «Мои документы» окна «Обзор» транзакции MIGO. Результат создания документа и вставки данных из буфера обмена показан на Рис. 4.
Рис. 4 Результат вставки данных.
Реализация расширения транзакции MIGO
Программа транзакции MIGO имеет закрытую архитектуру и не содержит необходимых возможностей для модификаций в виде BADI или USER EXIT. Необходимые доработки можно реализовать с помощью расширения метода predocument_load в Include LMIGOKP3. Ниже приведены шаги по созданию объектов словаря данных и программных компонентов.
Шаг 1. Создать Тип данных ZSMM_MIGO_FIELDS
В транзакции SE11 создать тип данных ZSMM_MIGO_FIELDS. Выбрать опцию Структура. Ввести следующие данные:
На вкладке Компоненты ввести данные из Таблицы 2 Компоненты структуры ZSMM_MIGO_FIELDS.
Таблица 2 Компоненты структуры ZSMM_MIGO_FIELDS.
На вкладке Поля валюты/количества ввести данные из Таблицы 3 Поля валюты/количества структуры ZSMM_MIGO_FIELDS.
Таблица 3 Поля валюты/количества структуры ZSMM_MIGO_FIELDS.
Сохранить изменения и активировать объект.
Шаг 2. Создать Тип таблицы ZTMM_MIGO_FIELDS
В транзакции SE11 создать тип данных ZЕMM_MIGO_FIELDS. Выбрать опцию Тип таблицы. Ввести следующие данные:
Сохранить введенные данные и активировать объект.
Шаг 3. Создать таблицу ZMM_CLPFRM
В транзакции SE11 создать Таблицу базы данных ZMM_CLPFRM. Вставить краткое описание Migo формат буфера обмена. На вкладке Поставка и ведение указать С в поле Класс поставки и X Просмотр/ведение разрешены в поле Ведение разр. Дан./ракурса табл.
На вкладке Поля ввести данные из Таблицы 4:
Таблица 4 Поля таблицы ZMM_CLPFRM.
Нажать кнопку Технические параметры настройки. Установить следующие значения:
Сохранить введенные значения и активировать объект.
Шаг 4. Ведение настроек буфера обмена
В транзакции SM30 выполнить ведение таблицы ZMM_CLPFRM Формат буфера обмена для MIGO. Необходимо определить формат буфера обмена для сочетания вида движения и индикатора особого запаса. Пример настроек для видов движения, не определенных явным образом состоит из кода материала и количества. Для 301 ВД определены два поля – код материала и номер партии. При ведении таблицы допустимо использовать только имена полей структуры ZSMM_MIGO_FIELDS. Для удобства ведения можно создать домен и определить список возможных значений. Пример настройки формата буфера обмена приведен на Рис. 5.
Рис 5. Настройка формата буфера обмена.
Шаг 5. Создать класс ZCL_MM_MIGO_BUFFER
В транзакции SE24 создать класс\интерфейс ZCL_MM_MIGO_BUFFER. Ввести:
Нажать кнопку На базе исходного текста и вставить код приведенный в Листинге 1. Сохранить введенный код и активировать.
if is_item-mat_pspnr is not initial.
rs_goitem-mat_pspnr = is_item-mat_pspnr.
endif.
if is_item-ummat_pspnr is not initial.
rs_goitem-ummat_pspnr = is_item-ummat_pspnr.
endif.
if is_item-erfme is not initial.
rs_goitem-erfme = is_item-erfme.
endif.
if is_item-konto is not initial.
rs_goitem-konto = is_item-konto.
endif.
if is_item-kostl is not initial.
rs_goitem-kostl = is_item-kostl.
endif.
if is_item-lgort is not initial.
rs_goitem-lgort = is_item-lgort.
endif.
if is_item-charg is not initial.
rs_goitem-charg = is_item-charg.
endif.
if is_item-werks is not initial.
rs_goitem-werks = is_item-werks.
rs_goitem-name1 = is_item-name1.
endif.
endmethod.
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland