При автоматизации розничной торговли часто возникает проблема: стандартные весы Штрих-Принт при выгрузке данных из 1С:Розница обрезают длинные названия товаров. Это происходит из-за того, что стандартный сертифицированный драйвер «1С» передает наименование одним полем в формате XML, а весы физически рассчитаны на две строки по 28 символов каждая. В результате покупатель видит на этикетке обрубок фразы, что затрудняет идентификацию товара.
В этой статье мы подробно разберем, как обойти это ограничение, проанализируем структуру файлов обмена и рассмотрим альтернативные методы загрузки данных, которые позволят задействовать всю площадь этикетки.
Проанализируем ситуацию с технической стороны. Весы Штрих-Принт версии 4.5 и выше имеют внутреннюю структуру памяти, где под наименование товара (PLU) выделено два отдельных поля. Каждое поле вмещает 28 символов. Однако драйверы, встроенные в типовые конфигурации 1С:Розница 2.2/2.3, зачастую работают по упрощенному протоколу обмена через XML-пакеты. В этом пакете предусмотрен только один узел для наименования.
Даже если вы настроите макет этикетки в редакторе (Label Editor) так, чтобы там было два поля Name 1 и Name 2, весы получат данные только для первого поля, а второе останется пустым. Более того, сама 1С перед отправкой может принудительно обрезать строку до 28 символов, чтобы пакет соответствовал спецификации драйвера.
Это самый надежный способ, проверенный временем. Вместо того чтобы полагаться на капризный драйвер 1С, мы перейдем на использование штатной утилиты от производителя — Loader. Она умеет работать в режиме «автоматической загрузки», отслеживая появление текстового файла в определенной папке.
Рассмотрим структуру файла, который должна формировать 1С для корректной передачи двух строк. Файл должен быть в кодировке Windows-1251 (CP1251). Каждая строка — это один товар. Поля разделяются специальным символом (обычно это точка с запятой или вертикальная черта, в зависимости от настроек загрузчика).
Формат строки загрузки выглядит следующим образом:
[PLU#]|[Наименование 1]|[Наименование 2]|[Цена]|[Срок годности]|[Тара]|[Код группы]|[Код товара]|[Номер сообщения]|[Картинка]|[Сертификат]|[Дата реализации]|[Тип товара]|[Структура ШК]|[Формат этикетки]|[Префикс ШК]|[Дата производства]
Разберем по шагам, как подготовить данные в 1С для такого файла:
Номенклатура.ITEM NAME 1.ITEM NAME 2.Пример кода на стороне 1С для формирования такой строки:
Функция ПодготовитьСтрокуДляВесов(Товар)
ПолноеИмя = Товар.Наименование;
Стр1 = Лев(ПолноеИмя, 28);
Стр2 = "";
Если СтрДлина(ПолноеИмя) > 28 Тогда
Стр2 = Сред(ПолноеИмя, 29, 28);
КонецЕсли;
// Формируем строку с разделителями (символ |)
Результат = Строка(Товар.КодПЛУ) + "|" + Стр1 + "|" + Стр2 + "|" + Строка(Товар.Цена) + "|||||||||||";
Возврат Результат;
КонецФункции
Если вы хотите сохранить возможность нажимать кнопку «Выгрузить в кассу ККМ» прямо из интерфейса 1С:Розница, придется внести изменения в программный код. Нам нужно найти процедуру, отвечающую за формирование XML-пакета для оборудования.
Как правило, это метод СформироватьДанныеДляВыгрузки в модуле обработки обслуживания весов. Проанализируем логику: вам нужно добавить проверку длины наименования и, если драйвер поддерживает расширенные параметры (что можно проверить в документации к конкретной версии DrvLP.dll), передавать вторую строку в соответствующий узел XML.
Если же XML жестко ограничен, программисты часто прибегают к использованию COM-объекта драйвера напрямую. Вместо формирования файла или XML, 1С подключается к весам как к объекту:
Весы = Новый COMОбъект("AddIn.DRVLP");
Весы.Password = 30; // Стандартный пароль
Весы.ConnectionDevice = 0; // TCP/IP
Весы.IPAddress = "192.168.1.100";
Весы.Connect();
Весы.PLUNumber = 123;
Весы.ItemName1 = "Колбаса Докторская в/с";
Весы.ItemName2 = "ГОСТ 23670-2019";
Весы.Price = 550.50;
Весы.WritePLU(); // Запись товара в память весов
Весы.Disconnect();
Иногда данные в весы уходят корректно (в обе строки), но принтер все равно печатает одну. Выясним причину: она может крыться в самом шаблоне этикетки. Весы Штрих-Принт позволяют хранить пользовательские форматы этикеток.
Рассмотрим алгоритм проверки макета:
Наименование, добавьте второй блок из панели инструментов и привяжите его к полю Name 2.Важный нюанс: В некоторых прошивках существует параметр «Автоперенос». Если он включен, весы пытаются сами переносить текст, если он не влезает в одну строку. Однако на практике эта функция работает нестабильно, поэтому разделение на стороне 1С предпочтительнее.
Бывают случаи, когда даже 56 символов (две строки по 28) недостаточно — например, когда нужно вывести полный состав продукта или информацию о производителе. В весах Штрих-Принт для этого предусмотрено поле «Сообщение».
Это поле может содержать до 400-800 символов текста. В редакторе этикеток вы можете разместить блок Сообщение, который будет динамически расширяться или печататься мелким шрифтом. В 1С при этом нужно будет заполнять таблицу сообщений и привязывать индекс сообщения к конкретному товару (PLU).
Проанализируем основные ошибки при реализации этих методов:
СтрЗаменить().Подводя итог, можно сказать, что наиболее гибким и масштабируемым решением является отказ от стандартного XML-драйвера в пользу формирования текстовых файлов для Shtrikh-M Loader. Это дает полный контроль над каждой строкой наименования и позволяет легко управлять парком весов в нескольких магазинах одновременно.