Документы и их типы в Mobile SMARTS


Тип документа в Mobile SMARTS.

Каждый документ относится к определенному типу (объекты leverence.Warehouse.DocumentType), который и описывает правила обработки документа пользователем и системой. В качестве таких типов могут быть названы, например, операция приемки ТМЦ, операция отгрузки ТМЦ, операция внутреннего перемещения и т.д.

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

Каждый тип документа содержит:

(Далее по тексту) ПолеОписание

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

Основные поля шапки — Набор основных полей шапки документа.

Основные поля строки — Набор основных полей для строк документа.

Дополнительные поля шапки — Набор дополнительных полей шапки документа. Например, для документов проверки состояния транспортного средства в шапку можно добавить номер пломбы.

Дополнительные поля строки — Набор дополнительных колонок в табличных частях документа. Указанные данные будут присутствовать в каждой строке документа. Например, это могут быть «Цвет», «Размер», «Цена» и т.д.

Дополнительные табличные части — Произвольное число дополнительных табличных частей с произвольно заданными колонками. Например это могут быть таблицы поиска чего-нибудь или локальные справочники документа.

Ошибки — Список ошибок, которые могут возникнуть при выполнении документов данного типа и быть прикрепленными к такому документу. Например, ошибка «Ячейка занята» для документов типа «Размещение».

Строки подвала — Список строк, выводимых в нижней части окна ТСД при обработке документов данного типа (по аналогии со строкой состояния в офисных приложениях).

Основной единицей любой складской операции в системе Mobile SMARTS служит документ (объект Cleverence.Warehouse.Document). Он представляет собой описание задания, которое должен выполнить пользователь, а также условий для его выполнения.

Каждый документ состоит из шести частей:

  • Шапка документа. Содержит общую информацию о документе, такую как его тип, имя, текстовое описание документа, кому назначен, штрихкод, дата создания документа, кто выполнял и т. д.;
  • Декларативная табличная часть документа (Document.DeclaredItems). Содержит строки с информацией о товаре, его количестве, ячейке размещения и т.д. По сути, описывает задание для выполнения. Эта коллекция строк обычно заполняется в учетной системе при выгрузке документа. По мере работы с документом на мобильном терминале происходит изменение значения DocumentItem.CurrentQuantity, которое и может быть обработано при загрузке документа назад, в учетную систему;
  • Реальная табличная часть документа (Document.CurrentItems). По мере сканирования товара в мобильном клиенте, в нее будут заноситься строки записей обо всех выполненных операциях. Заполняются только те колонки, содержимое которых было получено из штрихкода или введено вручную пользователем. При выгрузке документа из учетной системы CurrentItems в большинстве случаев остается незаполненной, и заполняется уже по ходу выполнения операции на ТСД;
  • Дополнительные табличные части, определяемые разработчиком;
  • Коллекция ошибок, привязанных к документу. Подробнее о пользовательских ошибках в документе смотрите главу «Тип документа»;
  • Коллекция привязок признаков (Document.ClassificatorUsings), т.е. флажки, проставленные различным объектам в процессе работы пользователя с документом. В качестве таких объектов могут выступать ячейки, паллеты, товары и сам документ. Эти флажки будут содержаться в документе и не имеют отношения к полям самих объектов, т.е. простановка этих флажков не влияет на объекты, которым они проставлены. В качестве флажков могут выступать «тип брака», «занято» и т.д. Указанные в документе флажки используются кодом загрузки документа в учетную систему для исполнения той или иной складской логики, связанной с ними.

 

Рассмотрим всё это на конкретном примере документа приемки, основанном на некоторой заявке на поставку из учетной системы. Вот как бы он выглядел до начала какой-либо работы на терминале:

 

Шапка.

Тип документа: «Приемка», ID: «PO1203122-08» Имя: «ПП №ЗПН1203122/08», Штрихкод: «120312208», Назначено: «Кладовщики», Поставщик: «ООО Мойдодыр», Распространять по штрихкоду: «Да», Признаки: {«Вводить партию»}.

 

Декларировано (свойство DeclaredItems, тип — коллекция объектов типа DocumentItem, т.е. строк документа):

Товар Упаковка Кол-во
план
Кол-во
факт
Партия Срок
годности
Паллета
(SSCC)
<…и т.д.>
 0001; Умывальник 061; шт.  4  0  —  —  —
 4101; Мыло душистое 060; короб.  17  0  —  —  —
 0010; Зубной порошок 070; кг.  20  0  —  —  —
 7564; Густой гребешок 061; шт.  300  0  —  —  —
 7564; Густой гребешок 061; шт.  100  0  —  —  —

 

Реально (свойство CurrentItems, тип — коллекция объектов типа DocumentItem, т.е. строк документа):

Товар Упаковка Кол-во
план
Кол-во
факт
Партия Срок
годности
Паллета
(SSCC)
<…и т.д.>
 Пусто

 

Привязанные ошибки (свойство Errors, тип – коллекция объектов типа Error, т.е. описаний ошибок).

Имя ID Комментарий Штрихкод Фатальная Поля
 Пусто

 

Привязки признаков (свойство ClassificatorUsings, тип – коллекция объектов типа ClassificatorUsing, т.е. применений признака к объекту с указанным кодом).

Код признака Код объекта
 Пусто

 

 

А вот как бы он выглядел после окончания приемки на терминале:

 

Шапка

Тип документа: «Приемка», ID: «PO1203122-08» Имя: «ПП №ЗПН1203122/08», Штрихкод: «120312208», Назначено: «Кладовщики», Поставщик: «ООО Мойдодыр», Распространять по штрихкоду: «Да», Признаки: {«Вводить партию», «Код состояния транспортного средства: ok»}, Номер ворот: «5».

 

Декларировано (свойство DeclaredItems, тип — коллекция объектов типа DocumentItem, т.е. строк документа):

Товар Упаковка Кол-во
план
Кол-во
факт
Партия Срок
годности
Паллета
(SSCC)
<…и т.д.>
 0001; Умывальник 061; шт. 4 3
 4101; Мыло душистое 060; короб. 17 22
 0010; Зубной порошок 070; кг. 20 24
 7564; Густой гребешок 061; шт. 300 300
 7564; Густой гребешок 061; шт. 100 20
 3370; Полотенце пушистое 061; шт. 0 50

 

Реально (свойство CurrentItems, тип — коллекция объектов типа DocumentItem, т.е. строк документа):

Товар Упаковка Кол-во
план
Кол-во
факт
Партия Срок
годности
Паллета
(SSCC)
<…и т.д.>
 0001; Умывальник 061; шт. 3 3 2000010
 4101; Мыло душистое 060; короб. 9 9 СМ121007 12.04.08 2000011
 4101; Мыло душистое 060; короб. 8 9 СМ121007 12.04.08 2000012
 4101; Мыло душистое 060; короб. 0 4 СМ121007 12.04.08 2000013
 3370; Полотенце пушистое 061; шт. 0 25 У1415224 2000014
 3370; Полотенце пушистое 061; шт. 0 25 Е1363462 2000017
 0010; Зубной порошок  060; короб 5 6 131108РР 13.11.12 2000019
 7564; Густой гребешок 061; шт. 300 300 2000020
 7564; Густой гребешок 061; шт. 100 20 2000020

 

Привязанные ошибки (свойство Errors, тип – коллекция объектов типа Error, т.е. описаний ошибок).

Имя ID Комментарий Штрихкод Фатальная Поля
 «Поддон битый» 101 101 нет

Кол-во: 3

Тип: «Евро»

 

Привязки признаков (свойство ClassificatorUsings, тип – коллекция объектов типа ClassificatorUsing, т.е. применений признака к объекту с указанным кодом).

Код признака Код объекта
 772; «Брак» 2000013 (Паллета)

 

 

Чтобы получить из первого документа второй, кладовщик сделал следующие вещи:

  1. Ввел номер ворот приемки (в шапку);
  2. Осмотрел внутренность транспортного средства и выбрал код состояния «ok» (в признаки документа);
  3. Принял 3 умывальника в паллету 2000010;
  4. Принял по очереди 3 паллеты мыла душистого все одной партии и срока годности. Две паллеты по 9 коробок принял хорошего, а брак сложил в последнюю паллету 2000013 и отметил на терминале, что это брак. Внес на терминале данные о той неприятности, что мыло от поставщика пришло на 3х битых евро-поддонах;
  5. Принял две паллеты по 25 штук пушистых полотенец, которые не значились в накладной (пересорт). Разных партий. В процессе испортил этикетки паллет 2000015 и 2000016;
  6. Принял паллету зубного порошка в 6 коробов по 4 килограмма в каждом (а по накладной было 20 кг, т.е. 5 коробов);
  7. Принял паллету густых гребешков в 320 штук.

На примере видно, как Mobile SMARTS работает с количествами и единицами измерения план/факт в строках документа.

Для декларированных строк в колонке «план» отображается плановое количество, полученное из учетной системы. А в колонке «факт» после исполнения операции видно сколько в итоге было принято в плановых единицах измерения. Например, для пушистых полотенец, которые первоначально отсутствовали в плане, Mobile SMARTS была заведена новая строка декларированной части с плановым количеством «0». Для строк реальной части в колонке «план» отображается то количество из плана, которое приходится на данную конкретную реально принятую строку, т.е. сколько из плана она выполнила уже в реально принимаемых единицах измерения. Например, для зубного порошка там стоит 5 коробов (по 4 кг) – ведь по плану всего надо было принять 20 кг. А в колонке «факт» отображается тот факт, который был введен кладовщиком, сканирован с этикетки поставщика, либо был накоплен в результате нескольких вводов/сканирований (реальные строки документа могут объединяться, если они отличаются только количеством – это определяется настройкой конфигурации).

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

Еще одно важное замечание:

Декларативная часть документа может содержать как много строк с одной и той же номенклатурой, так и много строк с одной и той же упаковкой и всем прочим. Каждая строка реальной части содержит ссылку на строку плана, которой она соответствует. Именно потому для тех реальных строк, для которых в плане ничего не предусмотрено, создаются новые плановые строки с плановым количеством «0». А те реальные строки, которые разносятся по нескольким строкам плана, разбиваются на несколько реальных строк так, чтобы каждой новой реальной строке соответствовала только одна строка плана.

В целом алгоритм разноски сводится к следующему:

  1. Найти строку задания, которая совпадает с реальной строкой по таким-то и таким-то столбцам, а затем пересчитать и начать прибавлять количество. Правила совпадения «по таким-то и таким-то столбцам» задаются в конфигурации;
  2. Если окажется, что найденная строка задания окажется переполненной (количество план больше количества факт), то попытаться найти следующую подходящую строку:
  • Если такой строки не окажется, переполнить найденную;
  • Если подходящая строка найдется, разбить разносимую реальную строку на две так, чтобы в первой осталось количество ровно по плану первой найденной плановой строки, а во вторую попал остаток. Продолжить с шага 2.