Как программно изменить имя кассира в чеке на ККТ Штрих-М из 1С?

Программист 1С v8.3 (Обычные формы) Торговля и дистрибуция
← На главную

При подключении фискальных регистраторов семейства Штрих-М (например, популярной модели Штрих-ФР-01Ф) программисты часто сталкиваются с ситуацией, когда в напечатанном чеке вместо фамилии реального сотрудника отображается стандартная надпись "Сис.администратор" или "Кассир 1". Это происходит потому, что кассовый аппарат по умолчанию берет данные из собственной внутренней памяти (таблиц), ориентируясь на пароль, под которым была произведена операция. Рассмотрим подробнее, как решить эту задачу и реализовать динамическую подстановку имени кассира непосредственно из документа 1С.

Метод 1. Программная перезапись таблиц ККТ

Самый распространенный способ, который подходит для старых версий драйверов и протоколов, заключается в прямой модификации внутренней таблицы кассиров фискального регистратора перед открытием чека. Рассмотрим, как это реализовать в коде 1С. Для этого нам понадобится обратиться к таблице №2 ("Кассиры") драйвера Штрих-М.

Проанализируем пример кода, который позволяет записать имя пользователя в нужную строку таблицы:


// Предположим, что ОбъектДрайвера уже инициализирован
ПарольАдминистратора = 30; // Стандартный пароль системного администратора
ОбъектДрайвера.Password = ПарольАдминистратора;

// Указываем параметры для записи в таблицу
ОбъектДрайвера.TableNumber = 2;       // Номер таблицы "Кассиры"
ОбъектДрайвера.RowNumber = 1;         // Номер строки (соответствует конкретному кассиру)
ОбъектДрайвера.FieldNumber = 2;       // Номер поля "Имя кассира"
ОбъектДрайвера.ValueofFieldString = "Иванов И.И."; // Имя из 1С

// Выполняем запись в таблицу
ОбъектДрайвера.WriteTable();

Если ОбъектДрайвера.ResultCode <> 0 Тогда
    Сообщить("Ошибка записи имени кассира: " + ОбъектДрайвера.ResultDescription);
    Возврат;
КонецЕсли;

В этом примере мы используем метод WriteTable. Важно понимать, что значение RowNumber (номер строки) обычно жестко связано с паролем, который вы используете при открытии чека. Если вы работаете под паролем 30, то и менять нужно строку, соответствующую этому администратору (обычно это строка 30, но зависит от настроек). Однако, как отмечают специалисты, лучше прописывать имя кассира в поле обычного кассира (строки 1-28) и использовать соответствующий пароль.

Метод 2. Использование современных свойств драйвера (CashierName)

С введением формата фискальных данных (ФФД) версии 1.05 и выше, требования к чекам ужесточились: теперь обязательно передавать не только фамилию кассира, но и его ИНН. Постоянная перезапись таблиц методом WriteTable имеет существенный недостаток — износ памяти EEPROM. Микросхемы памяти в ККТ имеют ограниченный цикл перезаписи. Если в магазине пробивается сотни чеков в день и при каждом чеке вызывается WriteTable, касса может выйти из строя через несколько месяцев.

Разберем более современный и безопасный способ через использование свойств CashierName и CashierINN, которые поддерживаются в драйверах версии 4.14 и 5.x. Этот метод передает данные в оперативную память драйвера, не "насилуя" физическую память устройства.


// Установка данных кассира перед открытием чека
ОбъектДрайвера.Password = 30;
ОбъектДрайвера.CashierName = "Петров П.П.";
ОбъектДрайвера.CashierINN = "771234567890"; // ИНН кассира обязателен по 54-ФЗ

// Открытие чека
ОбъектДрайвера.OpenCheck();

Этот способ является предпочтительным для всех современных конфигураций 1С. Важно убедиться, что в настройках самой ККТ (через тест драйвера) в таблице №2 поле "Имя кассира" для используемого пароля оставлено пустым. В этом случае аппарат приоритетно возьмет имя, переданное программно через свойство CashierName.

Метод 3. Передача данных через теги ФФД

Если вы используете низкоуровневую работу с драйвером или пишете собственную обработку обслуживания, данные кассира можно передать как атрибуты (теги). Для кассира это тег 1021, для ИНН кассира — тег 1203.

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


// Передача тега 1021 (Кассир)
ОбъектДрайвера.TagNumber = 1021;
ОбъектДрайвера.VValueString = "Сидоров С.С.";
ОбъектДрайвера.FNSendTagOperation();

// Передача тега 1023 (ИНН кассира)
ОбъектДрайвера.TagNumber = 1203;
ОбъектДрайвера.VValueString = "500100200300";
ОбъектДрайвера.FNSendTagOperation();

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

Нюансы при открытии смены

Проанализируем ситуацию, описанную пользователями: часто смену открывают вручную через "Тест драйвера" под учетной записью системного администратора. Если смена была открыта под "Админом", то во всех последующих чеках драйвер может пытаться подставлять именно его данные.

Чтобы избежать путаницы, рекомендуется:

  1. Реализовать открытие смены непосредственно из 1С, используя метод FNOpenSession (или OpenSession для старых моделей).
  2. Перед вызовом метода открытия смены точно так же передавать имя кассира, который фактически начинает работу.
  3. Если используется метод упрощенной продажи Sale, необходимо вызывать установку имени кассира непосредственно перед каждой регистрацией позиции или перед закрытием чека CloseCheck.

Посмотрим на пример правильной последовательности действий при печати чека:


// 1. Устанавливаем пароль
ОбъектДрайвера.Password = 30;

// 2. Передаем имя текущего пользователя 1С
ОбъектДрайвера.CashierName = СокрЛП(ПараметрыЧека.Кассир.Наименование);

// 3. Открываем чек (тип 0 - продажа)
ОбъектДрайвера.CheckType = 0;
ОбъектДрайвера.OpenCheck();

// 4. Регистрация товара
ОбъектДрайвера.Quantity = 1;
ОбъектДрайвера.Price = 100;
ОбъектДрайвера.StringForPrinting = "Товар тестовый";
ОбъектДрайвера.Sale();

// 5. Закрытие чека с оплатой
ОбъектДрайвера.Summ1 = 100; // Наличные
ОбъектДрайвера.CloseCheck();

Подведение итогов

Мы рассмотрели три способа управления именем кассира. Первый (через таблицы) — надежный, но опасный для ресурса памяти ККТ. Второй (через CashierName) — оптимальный для большинства задач. Третий (через теги) — максимально точный с точки зрения соответствия ФФД.

При выборе решения всегда проверяйте версию прошивки вашего Штрих-ФР-01Ф. Старые прошивки (до 2017 года) могут не поддерживать свойства тегов, в то время как новые аппараты с поддержкой маркировки требуют обязательного указания ИНН кассира. Совместное использование программной передачи имени и корректно настроенных таблиц позволит вам добиться того, чтобы в чеке всегда красовалась фамилия того сотрудника, который нажал кнопку "Пробить" в 1С.

← На главную