Введение

Статья представляет собой обзор общих подходов и практик, но хочу оговориться – она будет полезна разработчикам, которые еще не сталкивались с модулем SAP EWM, но при этом не новички в ABAP-программировании.

С точки зрения функциональности EWM будет небольшое описание в виде: что это, зачем используется. А также обсудим основные бизнес-объекты, понятия и транзакции, без которых «жизнь тяжела». Т.е. тот минимум функциональных понятий, без знания которых разработчик будет испытывать трудности в общении с консультантами SAP EWM и в целом с пониманием постановки задачи. Также, поскольку статья обзорная, будут рассматриваться общие подходы к разработке для модуля EWM. Конечно, не обойдётся без нескольких практических примеров кода, чтобы проиллюстрировать рассказ, но определённо не нужно воспринимать это как полное или законченное описание возможностей разработки. В конце приведены ссылки на документацию SAP, которая позволит глубже изучить вопрос.

Зачем была написана эта статья? Чтобы систематизировать информацию для самого себя и поделиться ей с другими. Система SAP EWM, впрочем как и любое коммерческое самодостаточное решение, достаточно обширна с точки зрения разработки. В ней есть много интересных мест и «закоулков», до которых можно не добраться никогда в своей жизни, а можно натыкаться на них снова и снова, решая текущие проблемы, и каждый раз находить что-то новое. Поэтому, побродив по системе несколько лет, вы обязательно накопите какой-то личный багаж знаний и приёмов, которые будут периодически теряться и открываться вами вновь. Предсказуемая ситуация. Чтобы избежать подобных проблем, рано или поздно все начинают вести «записки охотника», иногда в виде беспорядочных листов бумаги или россыпи файлов, а иногда в виде стройной базы знаний и библиотек готового кода. Я дозрел до стадии «давайте уже сделаем это», решил структурировать свои знания и придать им осязаемую форму. Должен сказать, что, набрав первый десяток страниц, я понял, что этого уже может быть достаточно для входа в тему. По крайней мере, вспоминая себя в первые дни и месяцы разработки для SAP EWM, могу однозначно сказать, что мне бы такой документ пригодился.

Ну и, конечно, раз предполагается использовать эту статью в качестве справочника или шпаргалки, для облегчения навигации добавим оглавление. И если вдруг вы дотянете до вывода, не проходите мимо раздела «Используемые материалы». Конечно, сам я почти никогда не заглядываю в этот раздел, когда читаю другие статьи, но в этом конкретном случае, там неплохая подборка материалов, к которым я периодически обращаюсь и вам рекомендую.

Оглавление

Введение
#1. Итак, что такое SAP EWM, и с чем его едят? Цели, задачи, функции
#2. Основные процессы на складе
#3. Основные понятия которые нужно знать
3.1. Структура склада
3.2. Ворота
3.3. Транспортное средство (Vehicle ), Транспортная Единица (Transportation Unit)
3.4. Зона подготовки
3.5. Ресурс
3.6. Единица обработки (ЕО) / Handling Unit (HU)
3.7. Складская задача (Warehouse Task)
3.8. Складской заказ ( Warehouse Order)
3.9. Поставки
3.10. Интеграция с SAP EWM
#4. Базовые транзакции
4.1. Монитор управления складами – /scwm/mon
4.2. Терминал сбора данных (ТСД) – /scrm/rfui
#5. Как это выглядит на ABAP
5.1. Менеджер транзакции или Transaction Manager for a Logical Unit of Work in Extended Warehouse Management
5.2. Работа с материалами
5.3. Запас на складе
5.4. Работа с ЕО (HU)
5.5. Работа с входящими и исходящими поставками
5.6. Расширение ТСД (/scwm/rfui)
5.7. Расширение Монитора склада (/scwm/mon)
5.8. Отладка
5.9. Прочее интересное
# Резюме, вывод, послесловие в одном лице
# Используемые материалы

#1. Итак, что такое SAP EWM, и с чем его едят? Цели, задачи, функции

SAP EWM (Extended Warehouse Management) – это автоматизированная система управления складами. В России SAP EWM используют такие крупные компании, как «Эльдорадо», «Лента», «Энтер», «Ферреро», «Утконос», «ОМПК», «Детский мир», «Хохланд», «СберЛогистика», «Марс СНГ», «Комус» и прочие (по информации из открытых источников). Что это означает в переводе на «человеческий общеупотребительный»? Когда у вас есть хорошая и нужная вещь, вам нужно её где-то хранить: в шкафу или под кроватью. Всё отлично, проблем нет. Даже когда таких вещей у вас несколько, это не проблема, ведь можно использовать, скажем, гараж для их хранения. Но, как только вещей становится много или очень много, например, если вы занялись бизнесом в объёмах того же OZON-a, хранение становится проблемой.

У вас появляется гигантский склад, в который постоянно приезжают грузовики и выгружают огромное количество товара, и не меньшее количество материалов при этом со склада уезжает. И как ни странно, внутри склада они тоже перемещаются, переупаковываются из одних ящиков в другие, меняют местоположение. В общем, для решения всего комплекса проблем и были созданы системы управления складами, одним из популярных вариантов которых и является решение SAP EWM.

Компонент Extended Warehouse Management (EWM) обеспечивает гибкую автоматическую поддержку для обработки различных движений материала и управления запасами в складском комплексе. EWM позволяет увидеть, где точно находится определённый продукт в складском комплексе в любой момент времени. С помощью EWM можно оптимизировать использование различных складских мест и движения складских запасов, а также вместе хранить запасы материала с нескольких заводов в складских участках с хаотичным складированием. Благодаря EWM можно осуществлять контроль и оптимизацию различных процессов на складе.

Основные функции СУС (системы управления складами):

  1. Управление складскими местами и их оптимизация.
    Управление запасами осуществляется на уровне складского места. Каждое складское место на складе отображается в системе. Это позволяет постоянно отслеживать все движения складских запасов.

  2. Движения материала.
    В EWM обрабатываются все движения материала, влияющие на склад, например, поступления материала, отпуск материала, перемещения запаса и автоматическое пополнение запаса.

  3. Инвентаризация.
    На складе выполняется регулярная инвентаризация. Фактический, существующий и физический запас сравнивается с данными, определяемыми в EWM. При вводе инвентаризационных разниц для запаса обновляются бухгалтерские данные в соответствии с результатами инвентаризации.

  4. Планирование и мониторинг.
    В EWM обеспечивается обзор всех движений материала и складских запасов. Поддерживаются планирование, мониторинг и оптимизация рабочих процессов. Например, доступен предварительный просмотр рабочих нагрузок на ближайшие дни, или обеспечивается возможность принятия профилактических мер в критически важных складских процессах, что гарантирует своевременность движений складских запасов.

  5. Терминалы Сбора Данных (ТСД)
    Для эффективного и рентабельного структурирования работы на складе можно очень просто отслеживать рабочие шаги сотрудников склада. ТСД принимают данные напрямую из SAP-системы и возвращают их обратно. Информация вводится и подтверждается с использованием штрихкодов. Это обеспечивает высокую точность складских операций.

# 2. Основные процессы на складе

Основные процессы управления складами сводятся к следующим:

  1. Получение материалов.

  2. Хранение материалов.

  3. Отпуск материалов.

  4. Заготовка.

  5. Распределение материалов (внутреннее и внешнее).

  6. Инвентаризация.

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

# 3. Основные понятия, которые нужно знать

3.1.  Структура склада

Любой склад имеет упорядоченную структуру. И, если вы в первом приближении её не видите, это не значит, что её нет :)

Конечно, эта структура так или иначе отражается в «виртуальном виде» для работы СУС.

Складская структура в управлении складами является иерархической и состоит из следующих элементов:

  1. Номер склада.

    В EWM можно управлять всем физическим складским комплексом, используя один-единственный номер склада.

  2. Вид (тип) склада.

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

  1. Складской участок.

    Каждый тип склада разделяется на складские участки. Все складские места с определёнными общими атрибутами принадлежат одному складскому участку (например, к одному участку относятся складские места для быстроподвижных запасов, которые находятся рядом с зоной отпуска материала).

  2. Складское место.

    Складской участок состоит из набора отделений складирования, которые в EWM называются «складскими местами». Складское место – это наименьшая пространственная единица на складе, определяющая точное положение продуктов. Например, наименование «01-02-03» может обозначать складское место в проходе 1, стеке 2 и на уровне 3. При этом для складского места возможно задать и координаты, которые сообщают точное местоположение на складе, где можно хранить продукты, а не только структурировать имя. Т.е. в итоге, место – это реальная полка на стеллаже или часть пола, куда можно сложить товар.

  3. Квант.

    Квант – это запас определённого продукта с одинаковыми признаками в одном складском месте, ресурсе и транспортной единице.
    Квант имеет следующие признаки:

    • Идентификатор кванта.

    • Номер продукта.

    • Номер партии.

    • Вид типа запаса.

    • Тип запаса.

    • Использование запаса.

    Т.е. обобщённо квант – это запас продукта из одной партии, находящийся в одном месте. Может быть не вполне понятно, зачем нужна абстракция под названием «квант», однако про неё нужно знать, потому что квант используется для управления запасами продукта в складском месте.

  4. Область действия.

    Область действия – это логическая группа складских мест. Она может относиться к одному складскому месту или включать складские места из нескольких типов складов. Применяется для определения сортировки мест при создании складских заказов. Область действия устанавливается для каждого действия: комплектование, приёмка на склад., инвентаризация.

3.2. Ворота

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

3.3. Транспортное средство (Vehicle), транспортная единица (Transportation unit)

Транспортное средство (машина/грузовик) может содержать одну или несколько транспортных единиц (ТЕ). Также транспортное средство может содержать более одной поставки, в то время как ТЕ привязывается к конкретной поставке. Например: для грузовика с государственным номером транспортного средства А-116-ОС имеется прицеп. Это означает, что данное транспортное средство состоит из двух транспортных единиц – грузового пространства и прицепа. 

3.4. Зона подготовки

Зона подготовки – это организационная единица, иерархически присвоенная номеру склада и используемая для организации потока материалов на складе. Зоны подготовки используются для промежуточного хранения материалов на складе. Они расположены в непосредственной близости от присвоенных им ворот. Зоны подготовки можно определять для различных целей и даже для нескольких целей одновременно:
- для поступления материала (промежуточное хранение разгруженного материала до приёмки на склад);
- для отпуска материала (промежуточное хранение укомплектованного материала до погрузки).

3.5. Ресурс

Ресурс – это объект, представляющий собой пользователя или оборудование для выполнения работ на складе. После регистрации в системе ресурс может получать работу для выполнения, а также отслеживаться и отображаться в Мониторе склада. Т.о. ресурс – это достаточно универсальное понятие, это что-то, что может выполнять работу. 

3.6. Единица обработки (ЕО) / Handling unit (HU)

Единица обработки (ЕО) – обычно это физическая единица, включающая в себя упаковку (грузовую упаковку/упаковочный материал) и содержащийся в ней материал (продукты). Вся информация, содержащаяся в позициях продукта, сохраняется в единицах обработки и всегда доступна. Единицы обработки могут быть вложенными, а также новая единица обработки может быть создана на основе нескольких других ЕО. Единица обработки имеет уникальный сканируемый идентификационный номер – штрихкод, который присваивается в соответствии с промышленными стандартами (EAN 128 или SSCC).

 Объект Единица обработки содержит следующие атрибуты:

  1. Идентификационный номер.

  2. Размер.

  3. Вес.

  4. Объём.

  5. Статус.

  6. Продукты и количества.

  7. Упаковка.

  8. Спецификация упаковки.

Понятие ЕО очень широко используется в EWM. Физически это может быть, как стоящая на стеллаже паллета, включающая в себя множество более мелких упаковок товара, так и индивидуально упакованный карандаш. Обязательные атрибуты в данном случае – это наличие товара, упаковки и уникального идентификатора (штрихкода).

3.7. Складская задача (Warehouse Task)

Складская задача – документ, используемый в EWM для выполнения движений материала. Основой для складской задачи могут служить логические или физические движения материала или даже изменения запаса.

Они включают:
1. Комплектование.
2. Приёмку на склад.
3. Внутренние движения материала.
4. Проводки переноса.
5. Проводки поступления материала.
6. Проводки отпуска материала.

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

Виды задач:
1. Складские задачи по продукту.
2. Складские задачи для единицы обработки.

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

3.8. Складской заказ (Warehouse order)

Складской заказ – документ, представляющий выполнимый пакет работ, которые служащий на складе должен выполнить в определённое время. Складской заказ содержит складские задачи или позиции инвентаризации.

Складские заказы используются:

- при перемещении продуктов, т.е. при создании складских задач вручную или автоматически. Эти складские задачи объединяются в складские заказы и становятся доступными для обработки;

- при инвентаризации, т.е. при создании позиций инвентаризации. Эти позиции также объединяются в складские заказы.

Объём и вид складского заказа можно корректировать с использованием правил создания заказа на пополнение складских запасов, определённых в пользовательской настройке. Пример: в EWM создаются складские задачи для исходящей поставки с четырьмя позициями. Для присвоения четырёх созданных складских задач новому складскому заказу в EWM выполняется процедура создания заказа на пополнение складских запасов. Служащий на складе получает этот складской заказ как пакет работ по комплектованию позиций, перечисленных в поставке.

3.9. Поставки

Как ни странно, поставки — это тоже документы. Документы, которые описывают поступление и отправку материалов со склада. Поставка всегда имеет заголовок, позиции/список материалов и очень много разной дополнительной информации. Поставки бывают Входящими и Исходящими. Можно много рассказывать о способах создания/работы/изменения поставок, но ключевым знанием является то, что это будет один из тех объектов, с которым вы будете работать постоянно.

 3.10. Интеграция с SAP EWM

SAP EWM тесно интегрирован с системой SAP ERP. EWM, является самостоятельной системой, но для получения основных и переменных данных требуется интеграция с системой ERP. Система ERP обычно играет ведущую роль, и в ней выполняются следующие процессы: создание и изменение основных данных, создание производственных заказов, создание заказов клиента, заказов на поставку и связанных поставок и проч. С точки зрения разработки, необходимо понимать, что для обмена данными между системами ERP и EWM используются Core Interface (CIF), iDocs или Remote Function Calls с очередями (qRFC). Очереди широко используются в системе SAP EWM, и вы обязательно с ними столкнетесь.

# 4. Базовые транзакции

Список основных транзакций SAP EWM можно посмотреть на wiki. Ниже будут рассмотрены только две наиболее часто используемые.

4.1. Монитор управления складами – /scwm/mon

Монитор управления складами – это централизованный инструмент, позволяющий начальнику склада постоянно контролировать ситуацию на складе и инициировать действия в зависимости от неё. Можно сказать, что это – первая и зачастую основная транзакция для разработчика, о которой нужно помнить. Конечно, основной она называется не с точки зрения разработки, ведь SE80 или Eclipse ADT никто не отменял :) Однако, это основная точка входа, которую можно использовать для анализа работы системы и запуска другого функционала.

 4.2. Терминал сбора данных (ТСД)  – /scrm/rfui

И, конечно, нельзя забывать о /scrm/rfui. По сути, – интерфейс ТСД, запущенный на компьютере. Терминал сбора данных – это рабочее место кладовщика. Физически это небольшое специализированное устройство, имеющее экран, кнопки, сканер штрихкодов и постоянную беспроводную связь с СУС. 

Обеспечивает следующий функционал:

1. Вход в систему.
2. Выход из системы.
3. Восстановление.
4. Транзакции выполнения работ для следующих складских процессов:
o  Комплектование.
o  Приёмка на склад.
o  Погрузка-разгрузка.
o  Деконсолидация.
o  Упаковка.
o  Инвентаризация.
o  Пополнение запасов.

# 5. Как это выглядит на ABAP

На складе есть ещё много интересных и не очень интересных процессов, но хватит об этом. В конце концов, выше было краткое описание основных понятий. Что можно сказать в целом о разработке для SAP EWM? Дальше пойдут исключительно мои субъективные впечатления. По сравнению с более «старыми» модулями типа FI, MM и им подобными (написанными в чисто процедурном стиле с широким распространением общих include и глобальных переменных) EWM выглядит более «стильным, модным, молодёжным». В первую очередь за счёт более широкого использования ООП. Это, конечно, никаким образом не исключает использование функциональных модулей FM и include в более ранних частях кода, однако для работы с бизнес-объектами широко используются классы Service Providers, BOPF, интерфейсы, инкапсуляция данных и прочие «достаточно современные» по меркам SAP подходы. Задачи, с которыми вам однозначно придётся столкнуться:

  1. Доработка, расширение, создание нового функционала в рамках Монитора склада.

  2. Доработка, создание новых транзакций для ТСД (Архитектура RFUI).

  3. Интеграция c SAP ERP (как минимум приём и передача доп. данных) и внешними системами.

Из особенностей:

  1. В модуле EWM широко используются очереди QRFC.

  2. Есть достаточно большое количество badi, покрывающих большую часть необходимых расширений.

  3. Используются так называемые Волны (Waves) и PPF, позволяющие выполнять определённые действия над бизнес-объектами уже после завершения «видимых пользователю» операций над ними. Коротко затронем основные моменты, на которые стоит обратить внимание.

5.1. Менеджер транзакции или Transaction Manager for a Logical Unit of Work in Extended Warehouse Management

Как и любая транзакционная система EWM должна поддерживать транзакционность. На практике это означает, что при доработках нужно учитывать наличие класса Менеджера транзакций  – /SCWM/CL_TM.

Методы, о которых стоит помнить:

SET_LGNUM (statiс)

Устанавливает текущий склад «по умолчанию». Помним, что складов в системе может быть несколько, и в каждый конкретный момент времени вы работаете только с одним из них. Хотите начать работать? Установите склад.

CLEANUP (static)

Метод убирает за вами, т.е. очищает локальные и глобальные области памяти для зарегистрированных EWM объектов и удаляет блокировки. Когда использовать? После выполнения команд COMMIT или ROLLBACK.

 5.2. Работа с материалами

Существует ряд способов работы с материалами/продуктами. При любом из них вы не пройдёте мимо FM

/SCWM/MATERIAL_READ_SINGLE, /SCWM/MATERIAL_READ_MULTIPLE

Небольшой пример можно увидеть в пакете ZPUBLIC_EWM_MATERIAL.

5.3. Запас на складе

Для работы с запасом (считывания данных) удобно использовать класс /SCWM/CL_MON_STOCK. Этот класс используется в транзакции Монитор склада и не является каким-то стандартным рекомендованным способом работы с запасом, однако он очень удобен. Пример использования можно увидеть в пакете ZPUBLIC_EWM_STOCK.

 5.4. Работа с ЕО (HU)

Для работы с Единицами Обработки, в том числе с созданием/изменением/сохранением пригодится класс /SCWM/CL_WM_PACKING. Его можно увидеть, анализируя код транзакций /scwm/rfui, но и нам он также будет полезен.

 5.5. Работа с входящими и исходящими поставками

Работа с поставками — это отдельная большая тема, включающая в себя поиск и чтение данных, а также изменение значений отдельных полей. Для работы с поставками используются классы Service Provider. Пример чтения позиций входящей поставки с использованием класса /SCWM/CL_DLV_MANAGMENT_PRD (Object Manager for Mass Accesses to Delivery PRD Objects) можно увидеть в пакете ZPUBLIC_EWM_DLV_PRD.

Более подробно об использовании Service Providers с различными документами можно почитать, перейдя по следующим ссылкам:

Transaction Handling in SAP EWM (Extended Warehouse Management)

Delivery Service Provider in SAP-EWM


5.6. Расширение ТСД (/scwm/rfui)

Разработки для транзакции /scwm/rfui предполагают достаточно большой объём настроек и доработок, а главное понимание общего подхода к работе транзакций ТСД. Если кратко, то это очень похоже на машину состояний (конечный автомат), когда любая функциональность описывается как последовательность состояний и переходов/шагов между ними. Для каждого состояния в настройках можно описать экраны и кнопки/обрабатываемые команды, а для команд/переходов – исполняющиеся при этом функциональные модули. Если появилось желание или необходимость попробовать свои силы, рекомендую почитать документы:

RF Cookbook
Configuring ITSmobile for SAP EWM RFUI: How-To Guide

5.7. Расширение Монитора склада (/scwm/mon)

Если от вас требуется расширить функциональность уже существующего узла, добавить новый узел или добавить новый метод (кнопку/пункт меню) в транзакцию Монитор склада, то необходимо почитать документ How to Add Application Content to the Warehouse Management Monitor.

5.8. Отладка

При отладке бывает очень полезно активировать стандартные BREAK-POINT ID. Можно поискать в транзакции SAAB группы контрольных точек с префиксами /SCWM/*, /SCDL/*.

В качестве примера приведём:
/scwm/rf_framework
/scwm/rf_frame_step
/scdl/cg_ppf
/scwm/ppf

5.9. Прочее интересное

Post Processing Framework (PPF)

Post Processing Framework (PPF) используется в Extended Warehouse Management (EWM) для определения возможности выполнения операции PPF. Например, его используют для печати складского заказа, но очень часто бывает, что обработка PPF операции используется просто для запуска отложенных действий над бизнес-объектами. Посмотреть текущую ситуацию можно в транзакции мониторинга SPPFP, или используя лог SLG1 (объект PPF подобъект PROCESSING).

И, конечно, стоит помнить о badi: EVAL_SCHEDCOND_PPF, EVAL_STARTCOND_PPF,  EXEC_METHODCALL_PPF. Для понимания того, как работать с PPF в SAP EWM, будет полезно почитать документ How to Use PPF in SAP EWM.

Волны, они же – Waves.

В общем, Wave – это механизм, который представляет возможность массовой совместной обработки документов примерно в одно и то же время. Если быть ближе к мат. части, то волна – это группа позиций складской заявки для управления складскими действиями. Волны совместно обрабатываются в последующих процессах, например, при переносе всех позиций складской заявки, присвоенных волне, в определённый момент процесса создания складской задачи. Созданные складские задачи затем направляются в процесс создания заказа на пополнение складских запасов.

При работе с волнами не проходите мимо FM /SCWM/WAVE_SELECT_EXT, /SCWM/WAVE_RELEASE_EXT, /SCWM/WAVE_MERGE_EXT, /SCWM/WAVE_SPLIT_EXT, а также enhancement spot /SCWM/ES_WAVE. Для отладки бывает полезно активировать группу контрольных точек /SCWM/WAVE. Подробности о волнах можно посмотреть по ссылке.

# Резюме, вывод, послесловие в одном лице

Вывод – это раздел для самых упорных. Всем, кто дошёл до него, напоминаю, что данная статья – это скорее шпаргалка со ссылками на самую полезную, на мой взгляд, документацию. Предполагается, что после её прочтения у вас в голове остался минимально необходимый набор понятий из предметной области Управления складами, а также понимание, в какую сторону нужно двигаться/какую документацию читать, чтобы решить поставленную перед вами задачу. Ну и, конечно, несколько примеров кода для первоначального ознакомления.

Удачи!

Честно признаюсь, что основой для статьи послужили свободно распространяемые материалы компании SAP (включая рисунки, используемые в статье).

Список материалов:

1.     Курс Processes in SAP Extended Warehouse Management

2.     SAP Extended Warehouse Management (SAP EWM)

3.     How to guide for SAP EWM (список полезных ссылок на материалы «how to» для различных ситуаций)

1.     EWM Transaction Codes (Коды транзакции)

2.     EWM Main Tables

3.     Transaction Handling in SAP EWM (Extended Warehouse Management)

4.     Delivery Service Provider in SAP-EWM

5.     How to Add Application Content to the Warehouse Management Monitor

6.     RF Cookbook

7.     RF Cookbook Configuring ITSmobile for SAP EWM RFUI: How-To Guide

8.     Post Processing Framework (PPF)

9.     How to Use PPF in SAP EWM

10.  Управление волнами

11.  Примеры кода (git):
https://github.com/IBS-InfiniSoft/ZPUBLIC_EWM_DLV_PRD
https://github.com/IBS-InfiniSoft/ZPUBLIC_EWM_MATERIAL
https://github.com/IBS-InfiniSoft/ZPUBLIC_EWM_STOCK

Комментарии (0)