При автоматизации торговых точек на базе платформы 1С 7.7 «Торговля и Склад» (ТиС) совместно с фискальными регистраторами АТОЛ специалисты часто сталкиваются с аппаратной или программной особенностью: на чековой ленте вместо реального наименования номенклатуры выводится стандартное слово «Товар» или обозначение отдела (например, «Секция 02»). Это не только неудобно для покупателей, но и нарушает требования законодательства (в частности, ФЗ-54), согласно которым наименование товара в чеке должно быть четким и понятным.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем программный код обработки обслуживания ККМ, а также рассмотрим по шагам, как запустить отладчик в среде 1С 7.7 под сессией другого пользователя (например, кассира), не прерывая работу остальных сотрудников в базе.
Рассмотрим основной механизм передачи данных из 1С 7.7 в драйвер фискального регистратора. В стандартной обработке обслуживания торгового оборудования fr_atol.ert формирование строки для печати чека происходит с ограничением длины наименования номенклатуры. Проанализируем типичную строку кода, отвечающую за передачу имени товара:
Объект.Name = Лев(СписокТоваров.ТовНаим, ДлинаНаименования);
Выясним, что происходит при выполнении этого фрагмента кода:
ДлинаНаименования считывается из настроек параметров подключения торгового оборудования в самой программе 1С (меню Сервис -> Настройка торгового оборудования -> Фискальный регистратор).0, то функция Лев() пытается взять левые ноль символов от наименования номенклатуры.Объект.Name присваивается пустая строка "".Для исправления этой ситуации выполним следующие действия. Перейдем в меню Сервис -> Настройка торгового оборудования, откроем вкладку Фискальный регистратор и проверим параметры подключения. Установим корректное значение длины наименования. Для старых кассовых аппаратов оптимальным считается значение от 29 до 40 символов, для современных онлайн-касс в рамках ФФД 1.05/1.2 можно смело указывать до 128 символов.
Также рекомендуется подстраховаться на уровне кода в обработке fr_atol.ert, добавив проверку на пустое или нулевое значение переменной:
ДлинаНаимЛокальная = Число(ДлинаНаименования);
Если ДлинаНаимЛокальная = 0 Тогда
ДлинаНаимЛокальная = 64; // устанавливаем безопасную длину по умолчанию
КонецЕсли;
Объект.Name = Лев(СписокТоваров.ТовНаим, ДлинаНаимЛокальная);
Если проверка кода показала, что наименование передается корректно, но на чеке все равно печатается «Товар», то проблема может крыться в настройках самого кассового аппарата.
В ККТ АТОЛ на уровне встроенного программного обеспечения существует таблица секций (отделов). В драйвере кассы может быть активирована опция работы по секциям с приоритетом печати названия секции вместо переданного названия товара. В этом случае касса игнорирует передаваемый параметр Name из 1С и печатает то, что зашито в ее внутренней таблице для секции (например, для Секции 2 по умолчанию прописано имя «Товар»).
Для решения этой проблемы выполним настройку через утилиту производителя:
Современные фискальные накопители и новые версии драйверов АТОЛ (ДТО 9 и ДТО 10) требуют жесткого соблюдения структуры фискального документа. Старый код обработки fr_atol.ert, написанный под старые версии драйверов (v.6 или v.8), передавал параметры напрямую через свойства объекта.
В новых версиях ДТО регистрация позиции происходит через вызовы методов формирования структуры предмета расчета. Если новые методы не вызываются последовательно, драйвер может проигнорировать старый синтаксис передачи имени товара, из-за чего на печать снова выйдет шаблонное значение.
В таком случае лучшим решением будет обновление внешней обработки обслуживания ККТ до актуальной версии, поддерживающей требования ФФД 1.05 или 1.2 и работу с актуальным драйвером ДТО 10.
Для того чтобы точно выяснить, какое именно значение передается в драйвер в момент печати чека, необходимо воспользоваться отладчиком. Однако часто возникает сложность: база находится в многопользовательском режиме, и выгнать всех сотрудников для монопольного запуска невозможно. Разберем, как запустить отладку под сессией кассира прямо на работающей базе.
В отличие от 1С 8.3, где отладчик подключается к уже запущенным сеансам через сетевой протокол, в 1С 7.7 отладчик работает локально в рамках одного компьютера (или одной терминальной сессии на сервере) и перехватывает запущенные процессы 1cv7.exe.
Выполним следующие шаги для настройки совместной отладки:
fr_atol.ert (из каталога базы ExtForms\Equip\).Объект.Name) и установим точку останова нажатием клавиши F9.1cv7.exe обычным способом.СписокТоваров.ТовНаим и ДлинаНаименования, чтобы проанализировать их точные значения «на лету».Используя этот простой и эффективный метод, мы сможем быстро локализовать проблему передачи наименования номенклатуры в торговом оборудовании без остановки работы всего предприятия.