В каком формате передавать срок годности в весы CAS и как настроить АРМ весовщика в 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При интеграции 1С с весовым оборудованием (в частности, с популярными весами с печатью этикеток, такими как CAS CL5000J) разработчики часто сталкиваются с неочевидным поведением драйверов при передаче даты окончания хранения продукции. Неверный формат передаваемых данных приводит к тому, что весы либо игнорируют поле срока годности, либо печатают некорректные даты. Разберем детально, как устроена передача срока годности в весы, а также проанализируем принципы построения автоматизированного рабочего места (АРМ) весовщика для прямого получения веса в 1С.

Формат передачи поля «СрокГодности» в весах CAS

В драйверах и API весового оборудования CAS (включая линейку CL5000J и CL3000J) за хранение информации о сроке годности товара отвечает специализированное поле pluDateLife. Проанализируем, в каких форматах весы способны принимать это значение. Существует два основных режима работы с этим полем:

  1. Относительный формат (количество дней): Если на вашем предприятии срок годности рассчитывается в днях от момента фасовки (например, «Годен 45 суток»), в поле pluDateLife необходимо передавать простое целое число. Весы автоматически возьмут текущую системную дату упаковки, прибавят к ней полученное число дней и напечатают итоговый результат в поле «Годен до» на этикетке. Обычно лимит этого поля составляет 999 дней (в некоторых модификациях драйверов — до 9999).
  2. Абсолютный формат (конкретная дата): Если вам требуется жестко зафиксировать определенную дату окончания срока годности для партии (например, для товаров глубокой заморозки или при фасовке готовых наборов), весы воспринимают числовое значение в формате ДДММГГ (DDMMYY). Драйвер автоматически понимает, что это абсолютная дата, если передаваемое значение больше 10000. Например, чтобы установить срок годности до 15 октября 2026 года, в весы нужно отправить число 151026.

Рассмотрим подробнее, как реализовать конвертацию стандартной даты 1С в абсолютный формат ДДММГГ на встроенном языке:


Функция ПодготовитьСрокГодностиДляВесов(ИсходнаяДата) Экспорт
    Если Не ЗначениеЗаполнено(ИсходнаяДата) Тогда 
        Возврат 0; 
    КонецЕсли;
    
    // Выделяем день и месяц с ведущими нулями
    ДеньСтр  = Формат(День(ИсходнаяДата), "ЧГ=0; ЧЦ=2; ЧВ=Л");
    МесяцСтр = Формат(Месяц(ИсходнаяДата), "ЧГ=0; ЧЦ=2; ЧВ=Л");
    
    // Получаем две последние цифры года
    ГодПолный = Формат(Год(ИсходнаяДата), "ЧГ=0; ЧЦ=4");
    ГодСтр    = Сред(ГодПолный, 3, 2);
    
    // Формируем результирующее число в формате ДДММГГ
    Возврат Число(ДеньСтр + МесяцСтр + ГодСтр);
КонецФункции

Посмотрим на пример формирования структуры выгрузки для номенклатурной позиции в 1С при использовании относительного срока годности:


ДанныеДляВесов = Новый Структура;
ДанныеДляВесов.Вставить("pluNumber", 102); // Код PLU на весах
ДанныеДляВесов.Вставить("pluName1", "Колбаса Докторская ГОСТ");
ДанныеДляВесов.Вставить("pluPrice", 540.00);

// Передаем относительный срок годности - 30 дней
ДанныеДляВесов.Вставить("pluDateLife", 30); 

Внутренние настройки весов и SPEC-параметры

Важно помнить, что итоговое поведение весов при расчете дат регулируется внутренними SPEC-параметрами самого устройства. Например, в весах CAS параметр SPEC 115 отвечает за единицу измерения срока годности: значение «0» задает расчет в днях, а значение «1» переключает весы в режим расчета срока годности в часах. Настройку разделителей (точки, слэши) и формата года (2 или 4 знака) на этикетке следует производить в редакторе шаблонов этикеток CL-Works или через системное меню весов.

Структура передаваемых полей PLU для печати этикеток

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

Организация АРМ Весовщика и прямое получение веса в 1С

Помимо выгрузки базы товаров в весы, часто требуется решить обратную задачу: получать текущий вес с весового терминала напрямую в 1С в режиме реального времени. Это необходимо для исключения ошибок ручного ввода данных оператором.

В типовых конфигурациях 1С (1С:Управление торговлей, 1С:ERP, 1С:Розница) данный функционал реализуется через штатную Библиотеку подключаемого оборудования (БПО). Весы подключаются к рабочему месту по интерфейсам RS-232 (COM-порт), USB (с эмуляцией COM) или по сети Ethernet/Wi-Fi.

Разберем по шагам, как устроен программный цикл получения веса в АРМ:

  1. Оператор устанавливает товар на весовую платформу.
  2. В интерфейсе 1С (документ фасовки или специализированный АРМ) по нажатию кнопки или по таймеру происходит обращение к компоненте БПО.
  3. Драйвер отправляет низкоуровневую команду весовому терминалу на считывание показаний.
  4. Весы возвращают текущее значение веса и статус его стабильности (прибор фиксирует окончание колебаний платформы).
  5. Полученное значение подставляется в табличную часть документа 1С.

Посмотрим на пример реализации обработки получения веса на клиенте в управляемых формах 1С:


&НаКлиенте
Процедура ПолучитьВесСУстройства()
    
    // Задаем параметры подключения к весовому терминалу
    ПараметрыПодключения = Новый Структура;
    ПараметрыПодключения.Вставить("Порт", "COM1");
    ПараметрыПодключения.Вставить("Скорость", 9600);
    
    // Обращаемся к функции БПО для получения текущих данных
    РезультатИзмерения = ПрочитатьПоказанияВесов(ПараметрыПодключения);
    
    Если РезультатИзмерения.Успех Тогда
        Если РезультатИзмерения.ВесСтабилен Тогда
            Объект.Товары[0].Количество = РезультатИзмерения.Вес;
            ПоказатьОповещениеПользователя("Успешно", , "Зафиксирован вес: " + Строка(РезультатИзмерения.Вес) + " кг.");
        Иначе
            Сообщить("Внимание: Вес колеблется! Дождитесь стабилизации показаний на табло.");
        КонецЕсли;
    Иначе
        ВызватьИсключение "Не удалось получить данные с весов: " + РезультатИзмерения.Ошибка;
    КонецЕсли;
    
КонецПроцедуры

Помимо считывания веса, современные драйверы поддерживают функцию удаленного тарирования. Оператор может поставить пустой ящик на весы, нажать в 1С кнопку «Сбросить тару» — программа отправит сигнал весовому терминалу, весы обнулят текущий показатель, и дальнейший расчет будет производиться исключительно по весу нетто.

В случаях, когда требуется построение высоконагруженных промышленных рабочих мест (например, взвешивание автотранспорта на проходной завода или интеграция с конвейерной лентой), стандартного функционала БПО может не хватать. Для таких сценариев применяются специализированные программные комплексы (например, разработки класса «ВесыСофт»), которые не только считывают вес в 1С, но и управляют сопутствующим оборудованием: шлагбаумами, датчиками позиционирования, светофорами и камерами фотофиксации номеров автомобилей.

← На главную