При интеграции 1С с весовым оборудованием (в частности, с популярными весами с печатью этикеток, такими как CAS CL5000J) разработчики часто сталкиваются с неочевидным поведением драйверов при передаче даты окончания хранения продукции. Неверный формат передаваемых данных приводит к тому, что весы либо игнорируют поле срока годности, либо печатают некорректные даты. Разберем детально, как устроена передача срока годности в весы, а также проанализируем принципы построения автоматизированного рабочего места (АРМ) весовщика для прямого получения веса в 1С.
В драйверах и API весового оборудования CAS (включая линейку CL5000J и CL3000J) за хранение информации о сроке годности товара отвечает специализированное поле pluDateLife. Проанализируем, в каких форматах весы способны принимать это значение. Существует два основных режима работы с этим полем:
pluDateLife необходимо передавать простое целое число. Весы автоматически возьмут текущую системную дату упаковки, прибавят к ней полученное число дней и напечатают итоговый результат в поле «Годен до» на этикетке. Обычно лимит этого поля составляет 999 дней (в некоторых модификациях драйверов — до 9999).151026.Рассмотрим подробнее, как реализовать конвертацию стандартной даты 1С в абсолютный формат ДДММГГ на встроенном языке:
Функция ПодготовитьСрокГодностиДляВесов(ИсходнаяДата) Экспорт
Если Не ЗначениеЗаполнено(ИсходнаяДата) Тогда
Возврат 0;
КонецЕсли;
// Выделяем день и месяц с ведущими нулями
ДеньСтр = Формат(День(ИсходнаяДата), "ЧГ=0; ЧЦ=2; ЧВ=Л");
МесяцСтр = Формат(Месяц(ИсходнаяДата), "ЧГ=0; ЧЦ=2; ЧВ=Л");
// Получаем две последние цифры года
ГодПолный = Формат(Год(ИсходнаяДата), "ЧГ=0; ЧЦ=4");
ГодСтр = Сред(ГодПолный, 3, 2);
// Формируем результирующее число в формате ДДММГГ
Возврат Число(ДеньСтр + МесяцСтр + ГодСтр);
КонецФункции
Посмотрим на пример формирования структуры выгрузки для номенклатурной позиции в 1С при использовании относительного срока годности:
ДанныеДляВесов = Новый Структура;
ДанныеДляВесов.Вставить("pluNumber", 102); // Код PLU на весах
ДанныеДляВесов.Вставить("pluName1", "Колбаса Докторская ГОСТ");
ДанныеДляВесов.Вставить("pluPrice", 540.00);
// Передаем относительный срок годности - 30 дней
ДанныеДляВесов.Вставить("pluDateLife", 30);
Важно помнить, что итоговое поведение весов при расчете дат регулируется внутренними SPEC-параметрами самого устройства. Например, в весах CAS параметр SPEC 115 отвечает за единицу измерения срока годности: значение «0» задает расчет в днях, а значение «1» переключает весы в режим расчета срока годности в часах. Настройку разделителей (точки, слэши) и формата года (2 или 4 знака) на этикетке следует производить в редакторе шаблонов этикеток CL-Works или через системное меню весов.
Для корректного формирования этикетки на весах 1С передает целый массив данных о товаре. Проанализируем ключевые поля, которые используются в современных протоколах обмена с весовым оборудованием:
pluDept — номер отдела, к которому относится товар;pluNumber — уникальный код PLU для быстрого вызова товара на клавиатуре весов;pluType — признак весового или штучного товара;pluName1 и pluName2 — текстовые строки наименования (печать на этикетке);pluPrice — базовая цена за единицу измерения;pluWeightTare — предустановленный вес тары, который автоматически вычитается при взвешивании;pluDatePack и pluTimePack — дата и время упаковки;pluDateLife и pluTimeLife — срок годности (дата) и время годности (в часах/минутах);pluNumberBarcode — код структуры штрихкода для правильной генерации штрихкода весами.Помимо выгрузки базы товаров в весы, часто требуется решить обратную задачу: получать текущий вес с весового терминала напрямую в 1С в режиме реального времени. Это необходимо для исключения ошибок ручного ввода данных оператором.
В типовых конфигурациях 1С (1С:Управление торговлей, 1С:ERP, 1С:Розница) данный функционал реализуется через штатную Библиотеку подключаемого оборудования (БПО). Весы подключаются к рабочему месту по интерфейсам RS-232 (COM-порт), USB (с эмуляцией COM) или по сети Ethernet/Wi-Fi.
Разберем по шагам, как устроен программный цикл получения веса в АРМ:
Посмотрим на пример реализации обработки получения веса на клиенте в управляемых формах 1С:
&НаКлиенте
Процедура ПолучитьВесСУстройства()
// Задаем параметры подключения к весовому терминалу
ПараметрыПодключения = Новый Структура;
ПараметрыПодключения.Вставить("Порт", "COM1");
ПараметрыПодключения.Вставить("Скорость", 9600);
// Обращаемся к функции БПО для получения текущих данных
РезультатИзмерения = ПрочитатьПоказанияВесов(ПараметрыПодключения);
Если РезультатИзмерения.Успех Тогда
Если РезультатИзмерения.ВесСтабилен Тогда
Объект.Товары[0].Количество = РезультатИзмерения.Вес;
ПоказатьОповещениеПользователя("Успешно", , "Зафиксирован вес: " + Строка(РезультатИзмерения.Вес) + " кг.");
Иначе
Сообщить("Внимание: Вес колеблется! Дождитесь стабилизации показаний на табло.");
КонецЕсли;
Иначе
ВызватьИсключение "Не удалось получить данные с весов: " + РезультатИзмерения.Ошибка;
КонецЕсли;
КонецПроцедуры
Помимо считывания веса, современные драйверы поддерживают функцию удаленного тарирования. Оператор может поставить пустой ящик на весы, нажать в 1С кнопку «Сбросить тару» — программа отправит сигнал весовому терминалу, весы обнулят текущий показатель, и дальнейший расчет будет производиться исключительно по весу нетто.
В случаях, когда требуется построение высоконагруженных промышленных рабочих мест (например, взвешивание автотранспорта на проходной завода или интеграция с конвейерной лентой), стандартного функционала БПО может не хватать. Для таких сценариев применяются специализированные программные комплексы (например, разработки класса «ВесыСофт»), которые не только считывают вес в 1С, но и управляют сопутствующим оборудованием: шлагбаумами, датчиками позиционирования, светофорами и камерами фотофиксации номеров автомобилей.