Как вывести дополнительную информацию и настроить ФИО кассира на чеке Атол 30Ф в 1С 7.7

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

Работа с торговым оборудованием в среде 1С:Предприятие 7.7 имеет свои особенности, особенно когда речь идет о современных онлайн-кассах, таких как Атол 30Ф. Часто разработчики сталкиваются с тем, что стандартные методы вывода информации работают не так, как ожидалось: текст печатается не в том месте, а вместо фамилии кассира на чеке красуется надпись "СИСТ.АДМИНИСТРАТОР". В этой статье мы подробно разберем, как правильно управлять печатью чека через драйвер DTO 8, обеспечив корректный вывод всех необходимых данных.

Почему вместо кассира выводится СИСТ.АДМИНИСТРАТОР

Разберем ситуацию, когда программная передача ФИО через атрибуты не дает результата. В ККТ Атол имя сотрудника жестко привязано к номеру оператора, который определяется свойством Password (пароль), передаваемым при открытии чека или соединении с устройством. Рассмотрим причины подмены имени:

  1. Пароль по умолчанию: В коде часто используется пароль 30. В заводских настройках Атол этот пароль зарезервирован за пользователем №30, имя которого — "СИСТ.АДМИНИСТРАТОР". Даже если вы пытаетесь передать другое имя через тег 1021, ККТ может отдать приоритет внутренним таблицам.
  2. Приоритет таблиц ККТ: Чтобы гарантированно изменить имя, можно зайти в «Тест драйвера» -> «Программирование» -> «Таблицы», найти таблицу кассиров и отредактировать имя пользователя №30 (или использовать пароль 1 для первого кассира).
  3. Отсутствие ИНН кассира (Тег 1203): По требованиям ФФД 1.05 и выше, ФИО кассира должно передаваться вместе с его ИНН. Если ИНН не передан, касса может проигнорировать переданную строку с именем и подставить данные из своей памяти.

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


// Устанавливаем номер атрибута ФИО кассира
Объект.AttrNumber = 1021; 
// Устанавливаем само значение (ФИО)
Объект.AttrValue = "Иванов И.И."; 
// Записываем атрибут в буфер ККТ
Объект.WriteAttribute();

// Аналогично для системы налогообложения (Тег 1055)
Объект.AttrNumber = 1055;
Объект.AttrValue = 1; // Например, ОСН
Объект.WriteAttribute();

Вывод дополнительной текстовой информации на чек

Для вывода нефискальной информации (например, номера заказа, рекламного сообщения или данных о бонусах) используется метод PrintString. Основная сложность заключается в том, где именно в коде вызвать этот метод, чтобы текст оказался в нужной части чека.

Рассмотрим по шагам, как позиционировать текст:

1. Текст в начале чека (перед списком товаров)

Если вызвать методы печати строки сразу после входа в режим регистрации (SetMode(1)), но до регистрации первой позиции товара (Registration()), текст будет напечатан в «шапке» документа.

2. Текст в середине чека

Вызовы PrintString можно вставлять непосредственно внутри цикла обхода товаров. Это полезно, если нужно вывести специфическую информацию по каждой позиции (например, серийный номер или срок годности).

3. Текст в конце чека (перед подвалом)

Чтобы текст оказался после итоговой суммы, но до фискального признака и QR-кода, команды печати нужно вставить после завершения цикла регистрации всех товаров, но до вызова методов закрытия чека (Delivery, Payment или CloseCheck).

Посмотрим на исправленный пример кода для 1С 7.7:


// ... (код регистрации товаров в цикле) ...
КонецЦикла;

// ВАЖНО: Выводим дополнительную информацию ПОСЛЕ товаров, но ДО закрытия чека
Если ПустоеЗначение(НомерДокаОснования) = 0 Тогда
    Объект.Caption = "Документ № " + НомерДокаОснования;
    // Устанавливаем шрифт (опционально)
    Объект.FontBold = 1; 
    Если Объект.PrintString() <> 0 Тогда
        Сообщить(Объект.ResultDescription);
    КонецЕсли;
КонецЕсли;

// Финализируем чек оплатой
Если ТипОплаты = 0 Тогда        
    Объект.TypeClose = 0; // Наличные
Иначе
    Объект.TypeClose = 1; // Безналичные
КонецЕсли;

// Сумма оплаты (должна совпадать с суммой чека)
Объект.Summ = СуммаЧека;
Объект.Payment(); // Закрытие чека

Технические нюансы Атол 30Ф

При разработке под Атол 30Ф важно учитывать физические ограничения устройства:

Итоговый алгоритм корректной печати

Проанализируем идеальную последовательность действий программиста для формирования чека:

  1. Установка связи: Проверка DeviceEnabled = 1.
  2. Авторизация: Установка корректного пароля (например, 1 для администратора или 29, если вы настроили его ФИО в таблицах).
  3. Передача тегов: Запись ФИО кассира (1021), ИНН кассира (1203) и СНО (1055) через WriteAttribute.
  4. Открытие режима: Вызов SetMode(1).
  5. Регистрация позиций: Цикл по товарам с вызовом Registration() или Return().
  6. Дополнительный текст: Вызов PrintString() для подвальной части чека.
  7. Закрытие документа: Вызов Payment() или CloseCheck().

Используя этот структурный подход, вы избежите большинства проблем с некорректным отображением данных на чековой ленте Атол 30Ф.

← На главную