Почему в 1С 7.7 Торговля и Склад в чеке ККМ АТОЛ вместо названия товара печатается «Товар» и как это исправить?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При автоматизации торговых точек на базе платформы 1С 7.7 «Торговля и Склад» (ТиС) совместно с фискальными регистраторами АТОЛ специалисты часто сталкиваются с аппаратной или программной особенностью: на чековой ленте вместо реального наименования номенклатуры выводится стандартное слово «Товар» или обозначение отдела (например, «Секция 02»). Это не только неудобно для покупателей, но и нарушает требования законодательства (в частности, ФЗ-54), согласно которым наименование товара в чеке должно быть четким и понятным.

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем программный код обработки обслуживания ККМ, а также рассмотрим по шагам, как запустить отладчик в среде 1С 7.7 под сессией другого пользователя (например, кассира), не прерывая работу остальных сотрудников в базе.

Причина 1: Нулевое значение переменной ДлинаНаименования в коде 1С

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

Объект.Name = Лев(СписокТоваров.ТовНаим, ДлинаНаименования);

Выясним, что происходит при выполнении этого фрагмента кода:

  1. Значение переменной ДлинаНаименования считывается из настроек параметров подключения торгового оборудования в самой программе 1С (меню Сервис -> Настройка торгового оборудования -> Фискальный регистратор).
  2. Если в настройках это поле осталось пустым, не заполнилось при первоначальной настройке или там по ошибке установлен 0, то функция Лев() пытается взять левые ноль символов от наименования номенклатуры.
  3. В результате свойству Объект.Name присваивается пустая строка "".
  4. Драйвер АТОЛ, получая пустую строку в параметре наименования, не прерывает работу ошибкой, а автоматически подставляет дефолтное значение из своих внутренних таблиц. Чаще всего это слово «Товар» или название секции по умолчанию.

Для исправления этой ситуации выполним следующие действия. Перейдем в меню Сервис -> Настройка торгового оборудования, откроем вкладку Фискальный регистратор и проверим параметры подключения. Установим корректное значение длины наименования. Для старых кассовых аппаратов оптимальным считается значение от 29 до 40 символов, для современных онлайн-касс в рамках ФФД 1.05/1.2 можно смело указывать до 128 символов.

Также рекомендуется подстраховаться на уровне кода в обработке fr_atol.ert, добавив проверку на пустое или нулевое значение переменной:


ДлинаНаимЛокальная = Число(ДлинаНаименования);
Если ДлинаНаимЛокальная = 0 Тогда
    ДлинаНаимЛокальная = 64; // устанавливаем безопасную длину по умолчанию
КонецЕсли;
Объект.Name = Лев(СписокТоваров.ТовНаим, ДлинаНаимЛокальная);

Причина 2: Приоритет печати секций и отделов в настройках ККТ

Если проверка кода показала, что наименование передается корректно, но на чеке все равно печатается «Товар», то проблема может крыться в настройках самого кассового аппарата.

В ККТ АТОЛ на уровне встроенного программного обеспечения существует таблица секций (отделов). В драйвере кассы может быть активирована опция работы по секциям с приоритетом печати названия секции вместо переданного названия товара. В этом случае касса игнорирует передаваемый параметр Name из 1С и печатает то, что зашито в ее внутренней таблице для секции (например, для Секции 2 по умолчанию прописано имя «Товар»).

Для решения этой проблемы выполним настройку через утилиту производителя:

  1. Закроем программу 1С 7.7 на рабочем месте кассира (чтобы освободить COM-порт).
  2. Запустим утилиту «Тест драйвера ККТ» (DTO).
  3. Перейдем в раздел Свойства -> Параметры ККТ.
  4. Найдем раздел, отвечающий за настройки печати и работу с отделами/секциями.
  5. Убедимся, что выключен приоритет печати названий секций и включена прямая печать регистрируемых позиций.
  6. При необходимости перейдем в таблицы ККТ и переименуем стандартные названия секций, либо настроим их автоматическое сопоставление.

Причина 3: Использование устаревших методов регистрации в новых драйверах (54-ФЗ)

Современные фискальные накопители и новые версии драйверов АТОЛ (ДТО 9 и ДТО 10) требуют жесткого соблюдения структуры фискального документа. Старый код обработки fr_atol.ert, написанный под старые версии драйверов (v.6 или v.8), передавал параметры напрямую через свойства объекта.

В новых версиях ДТО регистрация позиции происходит через вызовы методов формирования структуры предмета расчета. Если новые методы не вызываются последовательно, драйвер может проигнорировать старый синтаксис передачи имени товара, из-за чего на печать снова выйдет шаблонное значение.

В таком случае лучшим решением будет обновление внешней обработки обслуживания ККТ до актуальной версии, поддерживающей требования ФФД 1.05 или 1.2 и работу с актуальным драйвером ДТО 10.

Как запустить отладку под другим пользователем в 1С 7.7 без монопольного режима

Для того чтобы точно выяснить, какое именно значение передается в драйвер в момент печати чека, необходимо воспользоваться отладчиком. Однако часто возникает сложность: база находится в многопользовательском режиме, и выгнать всех сотрудников для монопольного запуска невозможно. Разберем, как запустить отладку под сессией кассира прямо на работающей базе.

В отличие от 1С 8.3, где отладчик подключается к уже запущенным сеансам через сетевой протокол, в 1С 7.7 отладчик работает локально в рамках одного компьютера (или одной терминальной сессии на сервере) и перехватывает запущенные процессы 1cv7.exe.

Выполним следующие шаги для настройки совместной отладки:

  1. Запустим 1С:Предприятие 7.7 в режиме Конфигуратор под своей учетной записью администратора. Базу запускаем в обычном (разделяемом) режиме, выгонять других пользователей не требуется.
  2. В Конфигураторе откроем нужный модуль для исследования. Если это внешняя обработка подключения ККМ, выберем меню Файл -> Открыть и выберем файл fr_atol.ert (из каталога базы ExtForms\Equip\).
  3. Перейдем в меню Действия -> Открыть в отладчике. Откроется отдельное приложение «Отладчик 1С:Предприятия 7.7».
  4. В окне отладчика найдем интересующую нас строку кода (например, ту самую строку с присвоением значения Объект.Name) и установим точку останова нажатием клавиши F9.
  5. Теперь запустим еще один сеанс 1С:Предприятия на этом же компьютере (или в этой же терминальной сессии), запустив файл 1cv7.exe обычным способом.
  6. В появившемся окне авторизации выберем пользователя, под которым мы хотим протестировать печать (например, учетную запись кассира) и введем пароль.
  7. Зайдем в запущенном режиме «Предприятие» под кассиром в документ «Чек ККМ» и нажмем кнопку печати или проведения документа.
  8. Как только выполнение дойдет до выбранной строки кода, работа программы временно приостановится, а на передний план автоматически выйдет окно нашего Отладчика.
  9. Нажмем сочетание клавиш Shift + F9 (Табло), введем имя интересующей нас переменной СписокТоваров.ТовНаим и ДлинаНаименования, чтобы проанализировать их точные значения «на лету».

Используя этот простой и эффективный метод, мы сможем быстро локализовать проблему передачи наименования номенклатуры в торговом оборудовании без остановки работы всего предприятия.

← На главную