При подключении фискальных регистраторов (в частности, ККТ АТОЛ) к конфигурации «1С:Бухгалтерия предприятия 3.0» нередко возникает ситуация, когда смена на кассе всегда открывается под системным администратором. В дальнейшем при пробитии чеков на бумажной ленте вместо реального имени сотрудника печатается «Сист. администратор», а попытка пробить чек под паролем другого кассира приводит к ошибке авторизации ККТ. Разберем по шагам, почему возникает эта коллизия, как устроена передача данных кассира в 1С и какими способами можно настроить корректный вывод ФИО.
Проанализируем техническую сторону взаимодействия 1С и кассового аппарата. В фискальных регистраторах существует внутренняя таблица кассиров (операторов). Исторически администратор ККТ зафиксирован под номером 30 со стандартным паролем 30. Если в программе подключение к оборудованию настроено с авторизацией под оператором № 30, драйвер открывает смену с этими реквизитами. Если при печати последующего чека программа пытается передать команду от имени другого кассира со своим паролем, ККТ блокирует операцию из-за несоответствия текущей сессии.
В современных реалиях (ФФД 1.05 и ФФД 1.2) концепция изменилась: касса не должна брать имя сотрудника из своей внутренней памяти. Программа 1С обязана передавать в драйвер конкретные фискальные теги чека:
Если эти теги не заполнены в пакете данных чека, касса берет резервное значение из внутренних таблиц (где под номером 30 записан «Системный администратор»).
Рассмотрим, откуда типовая конфигурация получает сведения для заполнения реквизитов чека. Посмотрим на пример запроса из общего модуля или модуля документа, формирующего чек (например, метод СобратьДанныеЧеков документа ПриходныйКассовыйОрдер):
ВЫБРАТЬ ПЕРВЫЕ 1
ЕСТЬNULL(ФизическиеЛица.ФИО, НЕОПРЕДЕЛЕНО) КАК КассирФИО,
ЕСТЬNULL(ФизическиеЛица.ИНН, НЕОПРЕДЕЛЕНО) КАК КассирИНН
ПОМЕСТИТЬ Кассир
ИЗ
Справочник.Пользователи КАК Пользователи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
ПО Пользователи.ФизическоеЛицо = ФизическиеЛица.Ссылка
ГДЕ
Пользователи.Ссылка = &Пользователь
Из запроса видно: данные берутся не из строкового представления пользователя информационной базы, а исключительно через реквизит ФизическоеЛицо справочника Пользователи. Если эта связка не заполнена, поле останется пустым.
Далее проанализируем обработку этих данных на уровне библиотеки подключаемого оборудования (БПО). В общем модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент при вызове команд (например, открытие смены) выполняется проверка:
Кассир = ?(ВходныеПараметры <> Неопределено И ВходныеПараметры.Свойство("Кассир"),
ВходныеПараметры.Кассир,
НСтр("ru='Администратор'"));
Если во входных параметрах структуры имя кассира не определено, БПО автоматически подставляет значение по умолчанию — «Администратор».
Разберем основной и самый простой шаг, который решает проблему в типовой конфигурации без внесения изменений в код:
ФизическиеЛица, иначе при включенном механизме ограничения прав на уровне записей (RLS) запрос вернет пустое значение.Если оборудование подключено по устаревшей схеме «Фискальный регистратор», ККТ требует авторизацию по внутренним номерам операторов. Для исключения конфликта паролей переведем кассу на современный тип подключения:
30).При использовании драйвера 10.х касса подключается к порту единожды под системным паролем, а имя и ИНН кассира динамически передаются в фискальных тегах чека (теги 1021 и 1203) для каждой отдельной операции без необходимости менять пароли пользователей ККТ.
Если используется старая прошивка или специализированная доработка, где смена по-прежнему жестко фиксируется за номером 30, разберем обходной путь через драйвер производителя:
Этот способ позволяет избавиться от печати надписи «Сист. администратор» на сервисных чеках открытия смены, даже если драйвер не передает динамические реквизиты кассира в этот отчет.