Для хранения информации о товарах и их количественных характеристиках в системе используются справочник номенклатуры.
Каждая позиция номенклатуры (Cleverence.Warehouse.Product) в системе Mobile SMARTS содержит информацию о наименовании, артикуле, базовом штрихкоде, а также типах упаковки товара.
Для каждого товара в системе может быть задано несколько типов упаковки товара (Cleverence.Warehouse.Packing), например пачка, блок и коробка.
Упаковка имеет собственный штрихкод, который может отличаться от штрихкода самого товара.
Этот штрихкод также идентифицирует товар, однако работа системы с ними несколько отличается. При сканировании в клиентском приложении базового штрихкода товара, пользователю будет предложено выбрать тип упаковки (если их несколько), либо вычисления будут производиться на основе основного типа упаковки, указанного в свойстве Product.BasePackingId. При сканировании штрихкода упаковки, выбор именно этой упаковки будет сделан системой автоматически; останется только ввести количество. Также следует учитывать что как базовый штрихкод, так и штрихкоды упаковок могут быть пустыми. Приоритетным для системы является базовый штрихкод. Поэтому, если штрихкод у упаковки тот же, что и базовый штрихкод товара, при сканировании будет считаться, что выбран базовый штрихкод, а упаковку будет предложено выбрать из списка.
«1С:Предприятие 7»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Создание продукта и заполнение его полей значениями из справочника // учетной системы product = СоздатьОбъект("Cleverence.Warehouse.Product"); product.Id = СокрЛП(спрНоменклатура.Код); product.Name = СокрЛП(спрНоменклатура.Наименование); product.Barcode = СокрЛП(спрНоменклатура.ШтрихКод); product.Marking = СокрЛП(спрНоменклатура.Артикул); // Создание упаковки для продукта и заполнение ее свойств packing = СоздатьОбъект("Cleverence.Warehouse.Packing"); packing.Id = СокрЛП(спрШтрихКод.Код); packing.UnitsQuantity = спрЕдиницы.Коэффициент; packing.Barcode = СокрЛП(спрШтрихКод.Наименование); // Добавление упаковки к продукту product.Packings.Add(packing); // Задание базовой упаковки товара product.BasePackingId = packing.Id; |
Для корректной работы системы, каждая позиция номенклатуры должна иметь хотя бы одну упаковку. В случае если учетная система не предусматривает наличие упаковок, либо их аналогов, следует для каждого товара добавлять фиктивную упаковку. Также необходимо в обязательном порядке проставить идентификатор базовой упаковки для товара.
Шаблоны штрихкода
Дополнительная возможность, предоставляемая упаковками, – возможность применять шаблоны штрихкода. Это позволяет вводить в систему нефиксированные штрихкоды, содержащие значимую информацию (например, срок годности товара или его количество). При сканировании будет производиться сравнение штрихкода на соответствие заданному шаблону и, в случае соответствия, происходить заполнение извлеченных из него данных.
Такой шаблон описывается в виде ###{шаблон}#…{шаблон}…###, где ### — некоторое количество фиксированных символов.
В качестве {шаблон} используются специальные выражения вида {имя:формат}, где имя задает имя параметра, а шаблон зависит от типа параметра. Если параметр – это строка или число, то в качестве шаблона можно указать количество символов штрихкода, отводимое под параметр.
В качестве имени можно использовать что угодно, в том числе и русские названия с пробелами. Все параметры и их значения попадут в сессию в качестве переменных. При занесении новой строки в документ те переменные сессии, имена которых совпадают с именами колонок в документе, попадут в поля этой новой строки. Т.е. если мы хотим сохранить в документе часть штрихкода, нужно
- Добавить в типе документа дополнительное поле строки.
- Создать шаблон штрихкода, в котором упоминалось бы наименование этого поля.
Вот некоторые примеры использования шаблонов:
Шаблон | Описание |
{Quantity:число}, число – количество символов в штрихкоде или два числа, разделенных точкой (целая и дробная части). |
Позволяет точно определить количество сканируемого товара, избегая его ввода вручную. Переменная Quantity используется действием ввода количества товара, а также действиями занесения сток в документ.Пример шаблона: 234{Quantity:3}634987Пример штрихкода: «234002634987» – будет выбрано «2» чего-то.Пример шаблона: 234{Quantity:3.2}4987Пример штрихкода: «234001864987» – будет выбрано «1,86» чего- то. |
{SSCC:число}, число – количество символов в штрихкоде. |
Позволяет привязывать к упаковкам какой-либо уникальный номер SSCC. При сканировании такого штрихкода, код SSCC будет заноситься в колонку «SSCC» новой строки документа, что позволит в учетной системе отслеживать операции над конкретными единицами товара.Пример шаблона: 7{ SSCC:5}1143576Пример штрихкода: «7231111143576». При сканировании такого штрихкода в свойство SSCC (SelectedProduct.SSCC) будет занесено «23111». |
{Date:формат}, где формат – строковой формат даты. |
Позволяет заносить в штрихкод упаковки дату ее регистрации (например, дату приемки).Пример шаблона: 2183{Date:ddMMyyyy}Пример штрихкода для типа упаковки «коробка»: «218322062005». При сканировании такого штрихкода в свойство выбранного товара (SelectedProduct.RegisteredDate) будет занесено 22 июня 2005 года. |
{ExpDate:формат}, где формат – строковой формат даты. |
Позволяет ограничивать срок годности товара указанной датой. Пример шаблона: 43{ExpDate:yyyyMMdd}21354 Пример штрихкода: «432007110821354». В поле ExpiredDate Это позволит, например, реализовать в процессе проверку срока |
Все описанные выше шаблоны могут применяться как по одиночке, так и в совокупности, например:
Шаблон | Пример |
11{SKU:6}{ExpDate:ddMMyyyy}{Quantity:3}45 |
«110102221302200401145» SKU – 010222 Срок годности – 13.02.2004 Количество – 11 единиц |
544332{Quantity:2}{SKU:8} |
«5443320105490321» SKU — 05490321 Количество – 1 единица |
Шаблоны могут использоваться не только для распознавания уже существующих штрихкодов, введенных производителем, но и при создании собственных этикеток. При печати этикетки средствами системы, шаблон, соответствующий шаблону, генерируется автоматически из введенных пользователем данных.
Общие шаблоны штрихкода
Кроме шаблонов у упаковки можно задать общие шаблоны, действующие на весь справочник товара сразу.
Такие шаблоны можно задать прямо через панель управления, в узле конфигурации «Номенклатура»:
Правила задания общих шаблонов точно такие же, как и шаблонов в упаковках, кроме двух дополнительных полей в шаблоне:
Шаблон | Пример |
{ProductId:число}, число – количество символов кода Обязательный элемент шаблона. |
Определяет идентификатор товара в штрихкоде, для поиска в справочнике номенклатуры. Является обязательным параметров в общем шаблоне.Пример: шаблон «{ProductId:5}{Quantity:3}{Date:ddMMyyyy}»При вводе штрихкода «1200502612042010» будет производиться поиск товара по коду «12005», и если он будет найден, то будет выбран товар с этим кодом, в количестве 26 базовых упаковок и проставлена RegistrationDate 12.04 2010 г. |
{PackingId:число}, число – количество символов кода Необязательный параметр. |
Позволяет дополнительно определить выемку кода упаковки из штрихкода. Не является обязательным параметром. Если он не задан, то найденный товар выбирается в базовом типе упаковки. |
Использование общих шаблонов позволяет упростить задание однотипных шаблонированных штрихкодов, если они должны быть определены для всего товара.
Политика учета товара
Кроме простого ввода количества (непосредственно в том типе упаковки, который был отсканирован или выбран), система позволяет реализовать ввод по нескольким типам упаковки, например, одновременно вводить количество в коробках и штуках.
Для этих целей используется политика учета количества (Cleverence.Warehouse.QuantityPolicy).
Политика задает коллекцию идентификаторов упаковок товара, в которых будет производиться ввод количества. Кроме того, с помощью свойства QuantityPolicy.Multiline, вы можете задать, как будет производиться добавление записи в документ: в виде нескольких строк, по одной строке на каждый тип упаковки, заданной в политике; либо в виде одной строки, в которой количество будет пересчитано в базовый тип упаковки для товара.
Привязка политики к товару осуществляется с помощью свойства Product.QuantityPolicy.
В случае если планируется использовать локальный, загружаемый на терминал, справочник номенклатуры рекомендуется максимально минимизировать использование политик учета, с целью экономии памяти мобильного устройства. Для этого рекомендуется использовать одну политику учета для целой группы однотипных товаров.
Например, для всех товаров, количество которых должно вводиться в коробках и штуках, завести одну политику.
1 2 3 4 |
quantityPolicy = СоздатьОбъект("Cleverence.Warehouse.QuantityPolicy"); quantityPolicy.Multiline = 0; quantityPolicy.PackingIds.Add("pid2"); quantityPolicy.PackingIds.Add("pid1"); |
Кроме такой политики, для всех товаров, с которыми она будет применяться, необходимо создать упаковки с идентификаторами pid1 и pid2, описывающие штуки и коробки соответственно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
packing = СоздатьОбъект("Cleverence.Warehouse.Packing"); packing.Id = "pid1"; packing.Name = "шт"; packing.SelfVolume = 0; packing.SelfWeight = 0; packing.UnitsQuantity = спрЕдиницы.Коэффициент; product.Packings.Add(packing); packing = СоздатьОбъект("Cleverence.Warehouse.Packing"); packing.Id = "pid2"; packing.Name = "кор"; packing.SelfVolume = 0; packing.SelfWeight = 0; packing.UnitsQuantity = спрЕдиницы.Коэффициент; product.Packings.Add(packing); |
Выгрузка номенклатуры
Для выгрузки заполненного справочника следует применять StorageConnector.SetProducts(ProductCollection products) — для нескольких товаров за один раз, либо, StorageConnector.SetProduct(Product product) — в случае выгрузки одного, нового или изменившегося, товара.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//создание коллекции продуктов products = СоздатьОбъект("Cleverence.Warehouse.ProductCollection"); //создание продуктов product = СоздатьОбъект("Cleverence.Warehouse.Product"); ... //добавление продукта в коллекцию для выгрузки products.Add(product); //выгрузка продуктов connector.SetProducts(products); |
Оба варианта функции дополняют существующий на сервере справочник номенклатуры. При этом, если на сервере уже есть товар с идентификатором, совпадающим с выгружаемым, то товар на сервере заменяется новой версией. Для полной очистки справочника или удаления одного товара на сервере необходимо использовать функции StorageConnector.RemoveProducts() и StorageConnector.RemoveProduct(string productId).
Альтернативная выгрузка номенклатуры для «1С:Предприятие»
Кроме основных методов выгрузки номенклатуры в объекте StorageConnector, для продуктов компании 1С разработаны также методы и обработки для выгрузки номенклатуры, соответствующие стандарту типовых конфигураций 1С для работы с ТСД.
Уже готовые обработки для различных конфигураций и платформ Вы можете найти в стандартной поставке Mobile SMARTS в папке «C:\Program Files\Cleverence Soft\Mobile SMARTS 2008\Demo\Конфигурация и обработки от драйвера 1С\Типовые обработки драйвера».
Использование по мере возможности этих обработок, или их модификаций под нетиповые конфигурации можно считать даже более предпочтительным вариантом, чем разработка своих выгрузок с нуля.