Документы Mobile SMARTS
Документ — это встроенный тип данных платформы Mobile SMARTS.
Это объект, которым оперирует сервер и клиент Mobile SMARTS. Документы используются как для хранения и передачи задания на мобильное устройство, так и для получения результатов работы и загрузки их в учётную систему.
Каждый документ имеет собственный тип, который определяет правила загрузки и обработки документа на мобильном устройстве.
Виды документов
Документы попадают на терминал разными путями. Есть три пути возникновения документов на термина ле.
-
Документ выгружается из внешней системы
Документ внешней системы и документ Mobile SMARTS — это разные вещи. Работая с документом на терминале, мы не работаем напрямую с документом внешней системы.
Внешняя система формирует документ для терминала на базе собственного документа и выгружает его на сервер. Потом этот документ, по различным алгоритмам захватывается терминалом и попадает к нему на обработку. На терминале этот документ обрабатывается, согласно заданному алгоритму и по завершении возвращается на сервер. После этого учетная система может его загрузить с сервера интерпретировать данные и загрузить эти данные в определенный документ учетной системы.
-
Документ создается на ТСД
Есть задачи, когда исходного документа в учетной системе нет, например, приемка товара по факту (пришел товар, его необходимо отсканировать, а результат загрузить в новый документ учетной системы).
Платформа Mobile SMARTS позволяет создавать документы непосредственно на терминале (если разрешено конфигурацией, для данного типа документа). По завершению они попадут на сервер, а учетная система загрузит данные в свой документ.
Возможность создания документа на ТСД настраивается в панели управления Mobile SMARTS для каждого типа документа. Алгоритмы обработки документов созданных на ТСД и загруженных из учетной системы могут быть одинаковыми, а могут и отличаться, в зависимости от поставленных задач.
-
Виртуальный документ
«Виртуальный» означает, что никаких документов на терминале сбора данных сохраняться не будет. Виртуальный документ существует только во время выполнения процесса, при этом с сервера никаких документов не выгружается и обратно не загружается. При нажатии кнопки с названием виртуального типа документа в основном меню Mobile SMARTS на мобильном терминале мы не увидим списка документов. Вместо этого автоматически создастся новый документ соответствующего типа, и на экране терминала мы увидим первое окно в программе обработки документов этого типа.
Типы и структура документов
Каждый документ относится к определенному типу (объекты Cleverence.Warehouse.DocumentType), который и описывает правила обработки документа пользователем и системой. В качестве таких типов могут быть названы, например, операция приемки ТМЦ, операция отгрузки ТМЦ, операция внутреннего перемещения и т.д.
Имя типа документа является его внутренним наименованием, по которому система его идентифицирует. Именно это имя используется везде, где надо определить конкретный тип документа, например, при выгрузке конкретного документа, чтобы указать к какому типу он относится.
Имя типа документа должно быть уникальным.
Отображаемое имя — имя типа документа, которое отображается в типах документов панели управления и в главном меню клиента Mobile SMARTS на терминале.
![]() | ![]() |
Имя типа и отображаемое имя могут отличаться, хотя могут и быть заданы одинаковыми.
Таким образом, для функционирования системы разработчик должен описать возможные типы документов и правила их обработки.
Каждый тип документа содержит:
| Поле | Описание |
| Алгоритм | Дерево действий, задающих точную последовательность обработки документов данного типа на терминале сбора данных. |
| Основные поля шапки | Набор основных полей шапки документа. |
| Основные поля строки | Набор основных полей для строк документа. |
| Дополнительные поля шапки | Набор дополнительных полей шапки документа. Например, для документов проверки состояния транспортного средства в шапку можно добавить номер пломбы. |
| Дополнительные поля строки | Набор дополнительных колонок в табличных частях документа. Указанные данные будут присутствовать в каждой строке документа. Например, это могут быть «Цвет», «Размер», «Цена» и т.д. |
| Дополнительные табличные части | Произвольное число дополнительных табличных частей с произвольно заданными колонками. Например это могут быть таблицы поиска чего‑нибудь или локальные справочники документа. |
| Ошибки | Список ошибок, которые могут возникнуть при выполнении документов данного типа и быть прикрепленными к такому документу. Например, ошибка «Ячейка занята» для документов типа «Размещение». |
| Строки подвала | Список строк, выводимых в нижней части окна ТСД при обработке документов данного типа (по аналогии со строкой состояния в офисных приложениях). |
Части документа
Основной единицей любой складской операции в системе Mobile SMARTS служит документ (объект Cleverence.Warehouse.Document при выгрузке из учетной системы).
Каждый документ состоит из шести частей:
| Наименование | Описание | Подробнее |
| Шапка документа | Содержит общую информацию о документе, такую как его тип, имя, текстовое описание документа, кому назначен, штрихкод, дата создания документа, кто выполнял и т. д. | Подробнее >>> |
Декларативная табличная часть документа {Document.DeclaredItems} | Содержит строки с информацией о товаре, его количестве, ячейке размещения и т.д. По сути, описывает задание для выполнения. Эта коллекция строк обычно заполняется в учетной системе при выгрузке документа. | Подробнее >>> |
Реальная табличная часть документа {Document.CurrentItems} | Фактическая табличная часть документа. В нее заносятся реально отсканированные данные. При заполнении фактической части система производит сверку и сопоставление данных со строками в декларативной (плановой) части документа. При выгрузке документа из учетной системы CurrentItems в большинстве случаев остается незаполненной. | |
| Дополнительные табличные части | Кроме общих дополнительных таблиц существуют локальные таблицы документов. Такие таблицы встроены прямо в документ и доступны только ему. Возможности работы с такими таблицами точно такие же, как и с общими. | Подробнее >>> |
| Коллекция ошибок | Коллекция логических ошибок работы самого процесса. | |
Коллекция привязок признаков {Document.ClassificatorUsings} | Флажки, проставленные различным объектам в процессе работы пользователя с документом. В качестве таких объектов могут выступать ячейки, палеты, товары и сам документ. Эти флажки будут содержаться в документе и не имеют отношения к полям самих объектов, т.е. простановка этих флажков не влияет на объекты, которым они проставлены. В качестве флажков могут выступать «тип брака», «занято» и т.д. Указанные в документе флажки используются кодом загрузки документа в учетную систему для исполнения той или иной складской логики, связанной с ними. |
Поля шапки документа
Шапка документа содержит общую информацию о документе.
Основные поля шапки
| Поле [русский синоним] | Заполнение | Описание |
| Id [Ид] | Обязательно при выгрузке | Идентификатор документа. Обязательно заполняется при выгрузке документа и должен иметь уникальное значение. |
| Name [Имя] | Обязательно при выгрузке | Отображаемое имя документа. Обязательно заполняется при выгрузке документа. |
| Appointment [Назначение] | Может не заполняться | Назначение документа — код пользователя или имя группы, которым данный документ назначается на исполнение. Если значение пустое, то документ попадает к первому свободному пользователю, которому разрешен тип документа. |
| UserId [ИдПользователя] | В процессе захвата документа | Идентификатор пользователя, который выполнил документ. Должен иметь уникальное значение для каждого пользователя. Еcли ID пользователя в документе и на ТСД не совпадает, то документ на ТСД не отобразится. |
| DocumentTypeName [ИмяТипаДокумента] | Обязательно при выгрузке | Имя типа документа. Обязательно заполняется при выгрузке документа и долж но иметь уникальное значение. |
| Modified [Изменен] | В процессе работы на ТСД | Признак того, что документ был изменен. Заполняется при изменении документа одним из пользователей. |
| InProcess [ВОбработке] | В процессе работы на ТСД | Признак того, что документ захвачен пользователем на обработку. Заполняется, когда документ был захвачен пользователем. |
| Finished [Завершен] | В процессе работы на ТСД | Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему. Заполняется, когда работа с документом была завершена на терминале. |
| WarehouseId [ИдСклада] | Обязательно при выгрузке | Идентификатор склада, к которому привязан документ. Должен иметь уникальное значение для каждого склада. |
| Barcode [Штрихкод] | Может не заполняться | Штрихкод документа. Для выбора документа по штрихкоду на терминале или на сервере должен быть обязательно заполнен. |
| Priority [Приоритет] | Может не заполняться | Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки. |
| DistributeByBarcode [ВыдаватьПоШтрихкоду] | Может не заполняться | Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, а могут быть выбраны с сервера только по штрихкоду. Свойство может успешно применяться только при наличии постоянной связи с сервером. |
Кроме полей указанных в таблице, в шапке документа могут быть и другие поля: текстовое описание документа, дата создания документа и т. д.
Значения полей в шапке документа могут быть изменены в любой момент.
Данные полей можно посмотреть в панели управления в закладке «Документы».
Дополнительные поля
Кроме основных полей могут выгружаться и дополнительные поля шапки, если такие имеются. Например, КонтрольКолва, ПоЯчейкам, Contractor, Currency и т.д.
Такие поля, также как и основные, могут быть заполнены при выгрузке (заполнены частично). Заполнение этих полей может происходить в процессе работы на терминале. Если в поле указывается шаблон для вычислимой колонки, значение такой колонки для объекта не проставляется пользователем и не выгружается из вне. При каждом запросе она вычисляется согласно шаблону.
Добавить дополнительные поля шапки документа можно в панели управления. В конфигурации раскройте узел, соответствующий нужному типу документа, правой кнопкой мыши нажмите на «дополнительные поля шапки» и нажмите кнопку «Добавить поле».
Теперь введите имя поля, выберите его тип и при необходимости введите шаблон (для вычислимой колонки).
Табличные части документа
У документа Mobile SMARTS всегда как минимум две табличные части (основные). Это декларативная (заявленнная) и фактическая (реальная) табличные части.
В алгоритмах конкретных действий все сводится к работе с этими таблицами. Каждая табличная часть это набор стандартных и дополнительных полей.
Декларативная часть (DeclaredItems) содержит строки с информацией о, ожидаемом товаре, его ожидаемом количестве, ячейке размещения и т.д. По сути, описывает задание для выполнения. Эта коллекция строк обычно заполняется в учетной системе при выгрузке документа.
Фактическая часть (CurrentItems) сохраняет именно факт, что было сканировано, код товара, конкретный тип упаковки, ячейку, серийные номера, цвет и т. д. Фактическая часть используется в процессах, чтобы заносить максимально полные данные по товару, который был отсканирован. По мере сканирования товара в мобильном клиенте, в нее будут заноситься строки записей обо всех выполненных операциях. Заполняются только те колонки, содержимое которых было получено из штрихкода или введено вручную пользователем. При выгрузке документа из учетной системы фактическая часть (CurrentItems) в бол ьшинстве случаев остается незаполненной, и заполняется уже по ходу выполнения операции на ТСД.
В обеих табличных частях есть по два количества — плановое и фактическое. Плановое количество (DeclaredQuantity) в декларативной части задает ожидаемое количество товара по операции. Фактическое количество (CurrentQuantity) в декларативной части заполняется уже по мере работы с документом на мобильном терминале, отражая реальное количество обработанного товара, соответствующее той или иной строке декларативной части. Фактическое количество в декларативной части удобно использовать при загрузке документа назад, в учетную систему, т.к. оно выражено в тех же единицах, в которых выгружалось.
Плановое количество в реальной части показывает, сколько товара из принятого по данной строке фактической части было запланировано. Например, если в декларативной части предусматривалось 10 единиц товара, а на деле принято 25 двумя партиями в 8 и 17 штук (две строки), то выглядеть это будет так:
| Декларативная часть | ||
| товар | Плановое кол‑во | Фактическое кол‑во |
| ТОВАР №1 | 10 | 25 |
| Фактическая часть | ||
| товар | Плановое кол‑во | Фактическое кол‑во |
| ТОВАР №1, 1я партия | 8 | 8 |
| ТОВАР №1, 2я партия | 2 | 17 |
Наличие двух таких табличных частей дает необходимую гибкость для настройки процесса.
Структура данных у обоих табличных частей одинаковая, а смысл немного разный.
Например, мы выгрузили из учетной системы задание, нам необходимо принять 15 коробок товара. Пользователь, выполняя это задание, заносит данные.
В декларативной части в колонках количество и упаковка может стоять 15 коробок (1 строка).
В фактической части в колонках количество и упаковка будут 1 ящик (по 10 коробок) и 5 отдельных коробок (2 разные строки с разными единицами измерения). При занесение этих данных в декларативную часть произойдет пересчет упаковки (ящики пересчитаются в коробки) в заявленные единицы измерения товара.
Таблица стандартных полей:
| Наименование поля англ. [рус] | Описание |
| ProductId [ИдТовара] | Идентификатор товара для которого описана данная позиция |
| DeclaredQuantity [КоличествоПлан] | Плановое количество в позиции. Свойство заполняется при выгрузке документа из учетной системы, чтобы ограничить объем товара данного типа, с котором оперирует пользователь в документе. |
| CurrentQuantity [КоличествоФакт] | Фактическое количество товара в позиции. Показывает какое реальное количество товара задействовано пользователем. |
| FirstStorageBarcode [ШтрихкодПервогоМеста] | Штрихкод первого места хранения к которой привязан товар. В качестве места может выступать ячейка или палета. |
| Packing [Упаковка] | Возвращает упаковку в строке. До обращения к этому свойству товары должны быть загружены с использованием функции StorageConnector.GetProducts [ПолучитьСправочникТоваров](). |
| SSCC [КодЕдиницыХранения] | Serial shipping container code — уникальный номер единицы хранения. Служит для идентификации конкретных экземпляров товара. Заполняется из штрихкода товара по шаблону при выполнении операции. |
| ExpiredDate [СрокГодности] | Срок годности товара. Инициализируется при занесении конкретного товара в позицию документа пользователем либо из штрихкода по шаблону, либо ручным выбором. |
| SecondStorageBarcode [ШтрихкодВторогоМеста] | Штрихкод второго места хранения к которой привязан товар. В качестве места может выступать ячейка или палета. |
| BindedLine [СвязаннаяСтрока] | Задает связь строки из CurrentItems [СтрокиФакт] со строкой в DeclaredItems [СтрокиПлан]. |
Заполнение таб личных частей документа
Механизм заполнения табличных частей документа в Mobile SMARTS очень сложный и сводится к выполнению встроенного обобщенного алгоритма. Задача этого алгоритма в том, чтобы правильно занести некие разрозненные данные, которые были собраны на ТСД (введены пользователем, выделены из штрихкодов, вынуты из учетной системы и т.п.) сразу в обе табличные части документа (и декларативную, и фактическую).Делается это для того, чтобы всегда иметь на ТСД непротиворечивый документ, содержимое табличных частей которого было бы удобно как для просмотра хода выполнения задания, так и для загрузки результатов в учетную систему.
В требованиях к реальным складским операциям всегда можно встретить следующие вещи: «если такой товар уже сканировался — прибавить введенное количеств о к существующей строке документа», «пересчитать количество из коробок в штуки», «найти строку задания с такой же ячейкой и таким же товаром и занести туда реально отсканированное количество» и т.п. Механизм заполнения табличных частей документа в Mobile SMARTS позволяет решить все подобные задачи без написания специального алгоритма, путем простой настройки свойств действия «Занесение в документ».
Занесение в табличные части
В простой ситуации, например, необходимо набрать «Мыло душистое» 4 коробки, без учета дополнительных колонок (ячейки, партии и т.д.). В зависимости от выполненных настроек и варианте сканирования (по одной коробке или введя сразу все) заполнение будет происходить по разному. В фактической части может быть заполнена одна строка (слито в одну строку) или несколько отдельных.
Если в настройках указано Нет у параметра «Сливать одинаковые строки» и происходит сканирование по 1 коробке 4 раза, то в фактической части будет 4 строки с плановым количеством 0 (ноль), с фактическим количеством 1 и упаковкой коробка. При каждом сканировании будет добавляться новая строка.
| Фактическая часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | кор | 0 | 1 |
| Товар 1 | кор | 0 | 1 |
| Товар 1 | кор | 0 | 1 |
| Товар 1 | кор | 0 | 1 |
При заполнении заявленной части, количество может быть суммировано (в зависимости от настроек), в одну строку будут добавляться количество(факт).
| Заявленная часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | кор | 4 | 4 |
Если в настройках фактической части указано Да у параметра «Сливать одинаковые строки» и в списке колонок по слиянию, например, указан код товара, то при сканирование одинакового товара по 1 коробке 4 раза строки будут сливаться и будет 1 строка с фактическим количеством 4 и упаковкой коробка.
| Фактическая часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | кор | 4 | 4 |
Возможен набор товара с введением вручную сразу нужного количества, тогда будет 1 строка с фактическим и заявленным количеством 4 и упаковкой коробка.
Еще вариант когда отсканирован ящик (4 коробки), будет 1 строка с количеством 1 и упаковкой ящик.
| Фактическая часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | ящ | 0 | 1 |
При заполнении заявленной части ящик будет пересчитан в коробки.
| Заявленная часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | кор | 4 | 4 |
При более сложных вариантах (с учетом дополнительных колонок ячеек, партий и т.д.), алгоритм заполнения строк учитывает их.
В случае, если у номенклатуры указана характеристика, то при занесении в фактическую часть документа для номенклатуры с характеристикой будет создана новая строка с плановым количеством 0 (ноль).
| Фактическая часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | шт | 3 | 2 |
| Товар 1 | шт | 0 | 1 |
При занесении в таблицу заявленной части, если в списке колонок по сличению указан только код товара, то эти строки будут слиты в одну строку, т.к. все другие параметры для сличения не учитываются, а код у номенклатуры один и тот же. В существующую строку в колонку количество(факт) будет занесено 3.
| Заявленная часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | шт | 3 | 3 |
В случае если в списке колонок по сличению выбрана характеристика товара (descr) для сличения, то в заявленной части будет создана новая строка с количество(план) 0 (ноль) и количество(факт) 1, т.к. характеристики у номенклатуры отличаются.
| Заявленная часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | шт | 3 | 2 |
| Товар 1 | шт | 0 | 1 |
Слияние
Если в настройках указать, что надо сливать одинаковые строки (CurrentItems), тогда процесс занесения будет искать строки с таким товаром уже существующие в документе, и увеличивать количество в существующей записи, а не добавлять новую строку.
Строки могут суммироваться по заданным параметрам (товару, упаковкам, Ячм, партии). Причем для отбора может использоваться не один, а несколько параметров. Параметры отбора настраиваются в «Списке колонок для слияния Current (Факт) части».
Например, отбор для слияния строк происходит по наименованию товара и месту хранения. Будут суммироваться только те строки у которых будет одинаковое наименование и Яч, для остальных будут заводиться новые строки.
В фактической части у товара с одинаковым наименованием, но взятого из разных ячеек будут разные строки.
| Фактическая часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | шт | 0 | 3 |
| Товар 1 | шт | 0 | 7 |
При внесении в заявленную часть это количество товара будет суммировано, при указании в списке колонок для поиска соответствующей плановой строки, что поиск ведется по наименованию (при необходимости пересчитано в заявленную упаковку) и занесено в одну строку и колонку фактического количества.
| Заявленная часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Товар 1 | шт | 1 0 | 10 |
Занесение товара не указанного в заявленн ой части
Если товара нет в плане и настройками разрешено заносить товар, который не указан в заявленной части, то в этом случае в фактической части появится новая строка (строки) при сканировании товара.
В заявленной табличной части будет добавлена новая строка с плановым количеством 0 (ноль).
Например, принять зубной порошок 15 коробок, которого нет в заявленной табличной части (нет в заказе).
После сканирования такого товара и введения количества в фактической части появится новая строка с именем «Зубной порошок», упаковкой «кор.» и количеством(факт). При поиске соответствующей плановой строки в заявленной части ничего найдено не будет и создастся новая строка с именем «Зубной порошок», упаковкой «кор.», количеством(план) 0 (ноль) и количеством(факт) 15.
Если у товара несколько упаковок существуют варианты занесения в табличную часть.
Политика ввода количества «Для каждого типа упаковки отдельно» отключена (флаг не проставлен).
![]() | ![]() |
Политика ввода количества «Для каждого типа упаковки отдельно» включена (флаг проставлен). В табличную часть заносится количество в одну строку с пересчетом в базовую упаковку.
![]() | ![]() |
На терминале будет указано отсканированное количество в базовой упаковке (при необходимости пересчитано), независимо в какой упаковке было выбрано и заносится в табличную часть.
![]() | ![]() |
Если документ был выгружен из учетной системы и сканируемый товар отсутствует в заявленной части при этом запрещено заносить товар, которого нет в заявке, то на экран ТСД будет выведено сообщение, что товар отсутствует в заявке.
Никакие новые строки по этому товару не будут добавлены ни в заявленную часть, ни в фактическую.
Например, в заявке указано что нужно принять 4 стула, но кроме стульев на склад привезли еще и стол. Отсканировав стулья, данные будут занесены в табличные части. Если мы попытаемся принять еще и стол, то у нас это не получится, на экран ТСД будет выведено сообщение, что стол отсутствует в заявке. В табличные части эта информация не заносится и никаких строк с новым товаром не создается.
Контроль количества
Этот параметр используется для создания процессов, когда надо контролировать соответствие товара заявке, выгруженной из учетной системы. В настройках «Проверять на наличие товара и переполнение количества по плану» нужно выставить Да и выбрать действие (сообщение), которое будет выполнено, если товара больше, чем в плане.
Например, дана заявка набрать 4 стула.
| Заявленная часть до заполнения | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Стулья | шт | 4 | 0 |
Сначала мы взяли и отсканировали 3 стула.
| Заявленная часть в момент заполнения | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Стулья | шт | 4 | 3 |
Потом попытались взять еще 2. При заполнении текущего количества в заявленной части проверяется переполнение товара по плану и если товара больше, чем в колонке Количество(план), то выбрать лишнее количество не удастся. На экран ТСД выводится сообщение, что пытаемся взять больше.
В заявленной части в колонку количество(факт) может быть занесено не больше, чем указано в колонке количество(план).
При переполнении не обязательно появится сообщение. Все зависит от того, какое действие мы указали при переполнении товара. В нашем примере, мы указали, чтобы выводилось сообщение.
Если в настройках «Проверять на наличие товара и переполнение количества по плану» выбрать Нет, то проверки на переполнение не будет. В этом случае можно будет выбирать количество товара больше, чем указано в колонке количество(план). Тогда в заявленную часть в колонку количество(факт) будет занесено отсканированное количество, даже если оно оказалось больше заявленного количества(план). Например, вместо 4 стульев мы отсканировали 5, в колонке количество(факт) будет 5.
| Заявленная часть | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Стулья | шт | 4 | 5 |
Удаление строк и корректировка количества в строках
В любой момент можно удалить ненужные строки документа, при этом будут автоматически выполнены все корректировки количеств.
Строки можно удалить в панели управления. Выбрав нужный документ, выберите в нем строку, которую необходимо удалить и нажмите «Удалить строку задания».
При просмотре строк (если предусмотрено конфигурацией) прямо с терминала. Выберите строку, которую необходимо удалить и нажмите del или back.
![]() | ![]() | ![]() |
Путем отрицательного ввода количества можно скорректировать количество(факт).
| Заявленная часть до корректировки | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Стулья | шт | 4 | 5 |
Если при выборе количества ввести отрицательное число, то в строке произойдет корректировка количества.
| Заявленная часть после корректировки | |||
| Товар | Упаковка | Количество(план) | Количество(факт) |
| Стулья | шт | 4 | 4 |
Пример заполнения табличных частей документа
Рассмотрим пример документа приемки, основанном на некоторой заявке на поставку из учетной системы. Вот как бы он выглядел до начала какой‑либо работы на терминале:
Шапка
Тип документа: «Приемка», 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 | 0 | - | - | - | |
| 4101; Мыло душистое | 060; короб | 17 | 0 | - | - | - | |
| 0010; Зубной порошок | 070; кг | 20 | 0 | - | - | - | |
| 7564; Густой гребешок | 061; шт. | 300 | 0 | - | - | - | |
| 7564; Густой гребешок | 061; шт. | 100 | 0 | - | - | - | |
| 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 (Палета) |
конец
Чтобы получить из первого документа второй, кладовщик сделал следующие вещи:
- Ввел номер ворот приемки (в шапку);
- Осмотрел внутренность транспортного средства и выбрал код состояния «ok» (в признаки документа);
- Принял 3 умывальника в палету 2000010;
- Принял по очереди 3 палеты мыла душистого все одной партии и срока годности. Две палеты по 9 коробок принял хорошего, а брак сложил в последнюю палету 2000013 и отметил на терминале, что это брак. Внес на терминале данные о той неприятности, что мыло от поставщика пришло на 3х битых евро‑поддонах;
- Принял две палеты по 25 штук пушистых полотенец, которые не значились в накладной (пересорт), разных партий. В процессе испортил этикетки палет 2000015 и 2000016;
- Принял палету зубного порошка в 6 коробов по 4 килограмма в каждом (а по накладной было 20 кг, т.е. 5 коробов);
- Принял палету густых гребешков 320 штук.
На примере видно, как Mobile SMARTS работает с количествами и единицами измерения план/факт в строках документа. Для декларированных строк в колонке «план» отображается плановое количество, полученное из учетной системы. А в колонке «факт» после исполнения операции видно сколько в итоге было принято в плановых единицах измерения. Например, для пушистых полотенец, которые первоначально отсутствовали в плане, Mobile SMARTS была заведена новая строка декларированной части с плановым количеством «0». Для строк реальной части в колонке «план» отображается то количество из плана, которое приходится на данную конкретную реально принятую строку, т.е. сколько из плана она выполнила уже в реально принимаемых единицах измерения. Например, для зубного порошка там стоит 5 коробов (по 4 кг) — ведь по плану всего надо было принять 20 кг. А в колонке «факт» отображается тот факт, который был введен кладовщиком, сканирован с этикетки поставщика, либо был накоплен в результате нескольких вводов/ сканирований (реальные строки документа могут объединяться, если они отличаются только количеством — это определяется настройкой конфигурации).
Все это необходимо для того, чтобы упростить построение на терминале списков просмотра план/факт и алгоритмов, проверяющих недобор/переполнение.
Еще одно важное замечание: декларативная ча сть документа может содержать как много строк с одной и той же номенклатурой, так и много строк с одной и той же упаковкой и всем прочим. Каждая строка реальной части содержит ссылку на строку плана, которой она соответствует. Именно потому для тех реальных строк, для которых в плане ничего не предусмотрено, создаются новые плановые строки с плановым количеством «0». А те реальные строки, которые разносятся по нескольким строкам плана, разбиваются на несколько реальных строк так, чтобы каждой новой реальной строке соответствовала только одна строка плана. В целом алгоритм разноски сводится к следующему:
- найти строку задания, которая совпадает с реальной строкой по таким‑то и таким‑то столбцам, а затем пересчитать и начать прибавлять количество. Правила совпадения «по таким‑то и таким‑то столбцам» задаются в конфигурации;
- если окажется, что найденная строка задания окажется переполненной (количество план больше количества факт), то попытаться найти следующую подходящую строку:
- если такой строки не окажется, переполнить найденную;
- если подходящая строка найдется, разбить разносимую реальную строку на две так, чтобы в первой осталось количество ровно по плану первой найденной плановой строки, а во вторую попал остаток. Продолжить с шага 2.
Дополнительные таблицы документа
Таблица документа хранится непосредственно в самом документе и, соответственно, загружается на ТСД вместе с ним. Применять такие таблицы следует для хранения данных, используемых в контексте данного документа. К примеру, в документе подбора дополнительную табличную часть можно использовать для хранения информации о расположении подбираемого товара на складе.
Создание таблицы
Для создания дополнительной табличной части документа воспользуйтесь панелью управления Mobile SMARTS («Типы документов» --> выберите нужную операцию (например, «Инвентаризация») --> «Дополнительные табличные части» --> выбрать в контекстном меню «Добавить табличную часть»).
В графе «Свойства» можно указать следующие параметры новой таблицы:
- «Всегда локальная таблица» — таблица никогда не загружается с сервера и хранится только локально. Может использоваться для хранения данных на месте, без опасения, что она перетрется на сервере.
- «Порядок поиска» — определяет, в каком порядке будет происходить поиск данных в таблице при запросах (подробнее читайте «HYDB»).
- «Автозагрузка на устройство при обновлении» — означает, что в случае обновления таблицы на сервере должен быть инициирован обмен на ТСД.
- «Внешний вызов для получения таблицы» — позволяет указать вызов во внешнюю учетную систему для получения данных таблицы.
Далее заведите необходимые колонки таблицы и задайте им используемые типы данных:
Поиск в таблице
Для поиска строк в таблице следует использовать действия «Выбор строки» (для поиска одной строки) или «Выбор строк» (для выбора группы строк). В нашей задаче мы будем использовать выбор одной строки, чтобы найти возможное местоположение товара на складе.
Добавим действие «Выбор строки» после сканирования товара и зададим параметры поиска:
Теперь отобразим в заголовке следующего действия информацию из найденной строки:
Изменение данных в таблице
Важное отличие таблиц документа от других видов таблиц — это возможность внесения изменений в строки таблицы на ТСД и добавление новых строк.
Правку таблицы можно осуществлять с помощью действия «Присваивание».
Для создания новой строки используется вызов конструктора new Cleverence.Warehouse.Row (), результатом будет пустая строка таблицы. Далее, заполняются поля созданной строки. Для добавления заполненной строки в таблицу следует использовать вызов функции Add (Row) для коллекции строк таблицы. Функция добавит строку, переданную в параметрах, в таблицу.
Получение новой строки с помощью действия «Присваивание»:
При завершении документа все измененные данные и новые строки вместе с документом попадут на сервер, и их можно будет загрузить и обработать в учетной системе.










