При автоматизации розничной торговли или складских процессов часто возникает задача оперативной маркировки весового товара. Типовая ситуация: весы подключены к компьютеру, рядом стоит принтер этикеток, и пользователь хочет, чтобы при нажатии одной кнопки (или автоматически при стабилизации веса) система считывала данные с весов и тут же отправляла на печать готовую этикетку с весовым штрихкодом. В этой статье мы подробно разберем, как реализовать этот механизм в конфигурации «1С:Комплексная автоматизация 2» (КА 2).
Прежде чем приступать к написанию кода, необходимо обеспечить корректную связь между физическим устройством и 1С. Для весов серии ШТРИХ-СЛИМ-200М и аналогичных моделей существует несколько вариантов драйверов. Проанализируем их:
Рассмотрим процесс настройки в интерфейсе 1С. Перейдем в раздел НСИ и администрирование — РМК и оборудование — Подключаемое оборудование. Создадим новый экземпляр оборудования с типом «Электронные весы». При настройке параметров связи (кнопка «Настроить») обратим особое внимание на номер COM-порта и скорость (обычно 4800 или 9600 бод). Если весы подключены через USB-переходник, номер порта нужно предварительно посмотреть в диспетчере устройств Windows.
Вместо того чтобы изобретать велосипед, проанализируем, как работа с весами реализована в типовом решении. В конфигурации КА 2 основным местом взаимодействия с торговым оборудованием является Рабочее место кассира (РМК).
Выясним, где находится код опроса весов. Для этого откроем в конфигураторе документ ЧекККМ и найдем форму ФормаДокументаРМК. В этой форме реализована команда ПолучитьВес. Именно этот код служит эталоном для реализации собственной логики. Проанализируем основные этапы работы этого алгоритма:
Для реализации печати этикеток нам потребуется создать свою обработку или доработать типовую «Печать этикеток и ценников». Основной фокус — на методах БПО. Разберем пример кода, который позволяет считать данные с весов:
// Пример получения веса через БПО
&НаКлиенте
Процедура ПолучитьДанныеСВесов()
Оповещение = Новый ОписаниеОповещения("ЗавершитьПолучениеВеса", ЭтотОбъект);
// Параметры подключения оборудования (Идентификатор устройства из справочника)
УстройствоИД = Объект.ВыбранныеВесы;
// Выполняем команду получения веса
МенеджерОборудованияКлиент.ВыполнитьКоманду(Оповещение,
"GetWeight",
Новый Массив,
УстройствоИД);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьПолучениеВеса(Результат, Параметры) Экспорт
Если Результат.Результат Тогда
ТекущийВес = Результат.Вес; // Вес обычно возвращается в килограммах
Сообщить("Вес получен: " + ТекущийВес);
// Здесь можно вызвать процедуру формирования штрихкода и печати
Иначе
Сообщить("Ошибка весов: " + Результат.ОписаниеОшибки);
КонецЕсли;
КонецПроцедуры
Важный нюанс: современные драйверы возвращают не только значение веса, но и флаг ВесСтабилен. Рекомендуется проверять этот параметр перед печатью, чтобы исключить фиксацию промежуточного значения в момент, когда товар еще только кладут на весы.
Чтобы напечатанная этикетка корректно считывалась на кассе, штрихкод должен соответствовать стандарту весового EAN-13. Разберем структуру такого кода, которая обычно используется в 1С:
Рассмотрим пример формирования строки штрихкода в коде 1С:
Функция СформироватьВесовойШтрихкод(КодТовара, ВесКг)
Префикс = "22";
СтрокаКода = Формат(Число(КодТовара), "ЧЦ=5; ЧВН=; ЧГ=0");
// Переводим кг в граммы и форматируем до 5 знаков
СтрокаВеса = Формат(ВесКг * 1000, "ЧЦ=5; ЧВН=; ЧГ=0");
ПолныйШтрихкод = Префикс + СтрокаКода + СтрокаВеса;
// Добавляем контрольный символ через типовой метод БПО
КонтрольныйСимвол = МенеджерОборудованияСервер.СформироватьКонтрольныйСимволEAN13(ПолныйШтрихкод);
Возврат ПолныйШтрихкод + КонтрольныйСимвол;
КонецФункции
В «1С:Комплексная автоматизация 2» управление макетами происходит в разделе Продажи — Настройки и справочники — Шаблоны этикеток и ценников. Нам необходимо создать шаблон с типом «Этикета (ценник) для товаров».
В редакторе шаблона добавим объект Штрихкод. В настройках штрихкода укажем тип EAN-13. Если мы планируем использовать типовой механизм печати, нам нужно убедиться, что система понимает: данный товар является мерным. Для этого в карточке номенклатуры должна быть установлена единица измерения (например, кг) и признак весового товара.
Если же мы пишем свою печать, то в параметр штрихкода мы будем передавать ту самую строку из 13 цифр, которую сформировали на предыдущем шаге. Также на этикетку полезно вывести текстовое поле с весом (например, "Масса нетто: 1.500 кг") и ценой за килограмм, рассчитав итоговую стоимость программно.
Опытные пользователи часто спрашивают: можно ли сделать так, чтобы 1С сама понимала, когда товар положили на весы, без нажатия кнопок? В типовых драйверах 1С редко реализовано «внешнее событие» для весов (в отличие от сканера штрихкодов).
Однако мы можем реализовать обработку ожидания. Проанализируем этот подход:
Такой подход значительно ускоряет работу фасовщика, превращая процесс в конвейер: положил товар — забрал этикетку.
Мы проанализировали полный цикл реализации печати весовых этикеток в 1С:КА 2. Ключевым моментом является использование Библиотеки подключаемого оборудования и правильное формирование строки штрихкода EAN-13. Опираясь на типовой код в ФормаДокументаРМК, вы можете создать надежный инструмент для автоматизации вашего склада или торгового зала.