При работе с торговым оборудованием в конфигурации Управление торговлей 10.3 пользователи часто сталкиваются с ситуацией, когда в напечатанном чеке вместо реального имени сотрудника значится «Системный администратор». Это происходит даже в тех случаях, когда в настройках пользователя 1С всё заполнено корректно. В данной статье мы подробно разберем, почему возникает эта ошибка и как программно обеспечить передачу правильных данных в кассовый аппарат, особенно при использовании драйверов АТОЛ 10.х.
Разберем природу проблемы. Кассовый аппарат (ККТ) — это самостоятельное устройство со своей внутренней памятью и таблицами. Если 1С в момент пробития чека не передает конкретное значение в тег 1021 (Кассир), драйвер кассы подставляет значение «по умолчанию» из собственной таблицы пользователей. В драйверах АТОЛ под индексом 30 обычно записан «Системный администратор», который и попадает в чек.
Для корректного вывода данных в соответствии с требованиями ФФД 1.05 и выше, программа должна передать структуру параметров, содержащую ФИО и, крайне желательно, ИНН кассира (тег 1203).
Прежде чем приступать к правке кода, проанализируем базовые настройки в интерфейсе программы. Рассмотрим, что должно быть заполнено:
Пользователи.Физические лица. В карточке физлица должны быть заполнены ФИО и ИНН.Если эти действия не помогли, значит, конфигурация (особенно старые релизы УТ 10.3) не передает эти данные в модуль работы с торговым оборудованием. Перейдем к техническому решению.
Выясним причину потери данных в программном коде. В УТ 10.3 за формирование данных для чека отвечает ряд функций в модулях документов ЧекККМ и общих модулях. Проанализируем цепочку вызовов. Как правило, данные «теряются» в структуре ПараметрыОперацииФискализацииЧека, где поле Кассир инициализируется как Неопределено.
Рассмотрим процедуру ПодготовитьДанныеДляФискализацииЧека. В идеале она должна содержать строку инициализации ответственного:
ОбщиеПараметры.Кассир = ЧекККМ.Ответственный.Наименование;
Однако во многих релизах эта привязка отсутствует или работает некорректно для ККТ (онлайн-касс), работающих через универсальный механизм менеджера оборудования.
Разберем конкретное решение, которое помогло многим разработчикам. Нам необходимо найти функцию, которая подготавливает структуру параметров для драйвера. Обычно это ПараметрыФискализацииЧека в модуле документа или специализированном общем модуле.
Нам нужно принудительно добавить заполнение поля кассира из данных документа (шапки чека). Рассмотрим пример изменения кода:
Функция ПараметрыФискализацииЧека(ДанныеДокумента, СуммаПредоплатыКорректировка = Неопределено, ЭтоВозврат = Ложь, ФормироватьСтрокиОплаты = Истина) Экспорт
// ... существующий код формирования структуры ...
// Получаем сведения об организации для чека
СведенияОЮрФизЛице = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата);
// Параметры для формирования чека
ПараметрыФискализацииЧека.Организация = Шапка.Организация;
ПараметрыФискализацииЧека.ОрганизацияНазвание = СведенияОЮрФизЛице.ПолноеНаименование;
ПараметрыФискализацииЧека.ОрганизацияИНН = СведенияОЮрФизЛице.ИНН;
// Вставляем ФИО кассира из ответственного в документе
ПараметрыФискализацииЧека.Вставить("Кассир", СокрЛП(Шапка.Ответственный.Наименование));
// Если требуется передача ИНН кассира (тег 1203)
Если ЗначениеЗаполнено(Шапка.Ответственный.ФизЛицо) Тогда
ПараметрыФискализацииЧека.Вставить("КассирИНН", Шапка.Ответственный.ФизЛицо.ИНН);
КонецЕсли;
// ... продолжение кода ...
КонецФункции
Важный момент: если ваша версия обработки обслуживания ККТ или сама конфигурация использует структуру ОбщиеПараметры, убедитесь, что имя ключа соответствует ожидаемому драйвером (именно "Кассир", а не "Оператор" или иное).
Проанализируем ситуацию, если правка кода в 1С выполнена, но в чеке всё равно «Администратор». При использовании драйверов 10-й версии АТОЛ существует нюанс: если в ККТ не передается ИНН кассира, драйвер может игнорировать текстовое поле с ФИО. Поэтому крайне важно передавать оба параметра в структуре:
Кассир — строковое представление ФИО сотрудника.КассирИНН — ИНН физического лица (обязателен для передачи в ОФД согласно ряду протоколов).Также проверим версию обработки обслуживания (обычно это ATOL_KKT_10.epf или встроенный макет драйвера). В старых версиях обработок может отсутствовать код, который извлекает значение Кассир из структуры параметров и передает его в объект драйвера методом setParam(1021, ...). В таком случае потребуется модификация самой обработки обслуживания.
Для решения проблемы мы выполнили следующие действия:
ПараметрыФискализацииЧека (или аналогичную ПодготовитьДанныеДляФискализацииЧека).ПараметрыЧека.Кассир = Ответственный.Наименование.После внесения этих изменений при печати чека 1С будет «перекрывать» встроенные таблицы кассового аппарата актуальными данными из документа Чек ККМ, и в печатной форме появится корректное ФИО сотрудника.