При работе с торговым оборудованием, в частности с весами с печатью этикеток серий CAS CL 3000 и CL 5000J, специалисты часто сталкиваются с техническими сложностями при использовании универсальных драйверов. Одной из наиболее распространенных проблем является переполнение буфера в драйвере АТОЛ версии 8.14. В этой статье мы подробно разберем, почему возникает эта ошибка, как оптимизировать процесс выгрузки из 1С:Управление торговлей 10.3 и какие альтернативные методы обмена данными существуют.
Проанализируем ситуацию: при выгрузке товаров из товароучетной программы 1С в драйвере АТОЛ (в разделе «Текущие устройства» настроек свойств) накапливаются записи, которые не очищаются автоматически. Это приводит к тому, что при последующих попытках обмена драйвер блокирует передачу данных, выдавая ошибку переполнения. Выясним причину этого поведения.
Драйверы АТОЛ серии 8.х проектировались как универсальный шлюз, поддерживающий множество протоколов. В старых версиях механизм управления очередью команд в реестре системы реализован недостаточно эффективно. При каждой транзакции 1С инициирует сессию обмена, и если весы не отвечают мгновенно или в коде обработки 1С отсутствует явная команда завершения работы с устройством (ЗавершитьРаботу() или очистка очереди), драйвер сохраняет состояние сессии как «активное» или «подвешенное». Постепенно количество таких сессий достигает лимита, и выгрузка прекращается до ручной очистки списка устройств.
Рассмотрим наиболее эффективный способ решения проблемы — отказ от платного драйвера АТОЛ в пользу специализированных решений. Для весов CAS существуют бесплатные компоненты, которые работают напрямую по протоколу TCP/IP (порт по умолчанию 20304). Разберем по шагам, как это реализовать в 1С:УТ 10.3.
В конфигурации Управление торговлей 10.3, построенной на обычных формах, работа с весами осуществляется через «Обработки обслуживания». Вместо стандартной обработки для АТОЛ необходимо использовать специализированную обработку для весов CAS 5000J. Важно отметить, что протоколы обмена у моделей CL 3000, CL 5000J и даже CL 7000 практически идентичны, что позволяет использовать одну и ту же компоненту для всей линейки.
Проанализируем программную часть. Типовой код в 1С для инициализации обмена через специализированную внешнюю компоненту (например, Scale.dll или CAS_CL.dll) выглядит следующим образом:
// Пример инициализации связи с весами CAS напрямую
Попытка
ЗагрузитьВнешнююКомпоненту("CAS_CL.dll");
ОбъектВесы = Новый("AddIn.CAS_CL");
Исключение
Сообщить("Не удалось загрузить компоненту CAS_CL.dll");
Возврат;
КонецПопытки;
ОбъектВесы.IPAddress = "192.168.1.100";
ОбъектВесы.Port = 20304;
Если ОбъектВесы.Connect() = 0 Тогда
// Код выгрузки PLU
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
ОбъектВесы.PLUNumber = СтрокаТовара.Код;
ОбъектВесы.Name = СтрокаТовара.Наименование;
ОбъектВесы.Price = СтрокаТовара.Цена;
// ... заполнение остальных полей ...
Если ОбъектВесы.SendPLU() <> 0 Тогда
Сообщить("Ошибка выгрузки товара: " + СтрокаТовара.Наименование);
КонецЕсли;
КонецЦикла;
ОбъектВесы.Disconnect();
Иначе
Сообщить("Нет связи с весами!");
КонецЕсли;
Использование прямой работы через Scale.dll исключает промежуточные звенья в виде менеджеров устройств АТОЛ, тем самым полностью устраняя проблему переполнения буфера.
Посмотрим на альтернативный метод, который считается наиболее стабильным в промышленной эксплуатации — использование штатной утилиты CL-Works (или CL-Works Pro). Этот метод позволяет 1С вообще не взаимодействовать с весами напрямую, что снимает нагрузку с платформы и исключает зависания интерфейса пользователя.
Разберем логику настройки по шагам:
C:\CAS_Exchange\Import\).УТ 10.3 доработайте механизм выгрузки так, чтобы вместо обращения к драйверу программа формировала текстовый файл (формата CSV или TXT) определенной структуры.Рассмотрим пример кода 1С для формирования такого файла:
ПутьКФайлу = "C:\CAS_Exchange\Import\goods.txt";
Текст = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.ANSI);
Для Каждого Строка Из СписокТоваров Цикл
// Формируем строку по спецификации CL-Works
// Формат: PLU;ТипТовара;Наименование;Код;Цена;СрокГодности
СтрокаВыгрузки = Строка(Строка.ПЛУ) + ";" +
"1;" +
Лев(Строка.Наименование, 40) + ";" +
Строка.Артикул + ";" +
Строка.Цена + ";" +
Строка.СрокГодности;
Текст.ЗаписатьСтроку(СтрокаВыгрузки);
КонецЦикла;
Текст.Закрыть();
Как только 1С сохранит файл в папку, CL-Works мгновенно «подхватит» его и отправит данные во все подключенные весы. Это самый надежный способ, так как специализированное ПО производителя гораздо лучше справляется с сетевыми таймаутами и спецификой протокола CAS.
Проанализируем ситуацию, когда выгрузка обрывается не из-за драйвера, а из-за самих данных. Весы CL 3000 и CL 5000J имеют жесткие ограничения, о которых часто забывают разработчики 1С.
Ограничение на длину строки: Эти модели поддерживают две строки наименования. Обычно длина каждой ограничена 28–40 символами (в зависимости от выбранного шрифта в настройках весов). Если 1С передает строку длиной 100 символов, драйвер АТОЛ может попытаться «втиснуть» её, что вызовет ошибку протокола и зависание сессии в буфере. Перед отправкой данных обязательно используйте функцию Лев(Наименование, 40).
Специальные символы: Весы чувствительны к непечатным символам, кавычкам ("), номерам (#) и лишним пробелам. Перед выгрузкой рекомендуется программно очищать наименование. Посмотрим на функцию очистки:
Функция ОчиститьНаименованиеДляВесов(Знач ИсходнаяСтрока)
Результат = СтрЗаменить(ИсходнаяСтрока, """", ""); // Удаляем кавычки
Результат = СтрЗаменить(Результат, "#", ""); // Удаляем решетку
Результат = СокрЛП(Результат); // Удаляем лишние пробелы
Возврат Лев(Результат, 40); // Ограничиваем длину
КонецФункции
Выясним причину, по которой буфер драйвера может переполняться из-за сетевых настроек. Если весы подключены по нестабильному Wi-Fi каналу, пакеты данных могут теряться. Драйвер АТОЛ, ожидая ответа от устройства (ACK), держит сессию открытой. Если тайм-аут в настройках драйвера слишком велик (например, 5-10 секунд), а товаров выгружается много, очередь забивается мгновенно.
Рекомендуется выполнить следующие действия:
ping -t [IP весов]. Время отклика не должно превышать 10-20 мс в локальной сети.Мы рассмотрели несколько способов решения проблемы переполнения драйвера при работе с весами CAS CL 3000 / 5000J. Подведем итоги:
Следование этим рекомендациям позволит автоматизировать процесс маркировки товаров и исключить простои в работе склада или торгового зала, связанные с ручной очисткой настроек драйвера.