Работа с торговым оборудованием в среде 1С:Предприятие 7.7 имеет свои особенности, особенно когда речь идет о современных онлайн-кассах, таких как Атол 30Ф. Часто разработчики сталкиваются с тем, что стандартные методы вывода информации работают не так, как ожидалось: текст печатается не в том месте, а вместо фамилии кассира на чеке красуется надпись "СИСТ.АДМИНИСТРАТОР". В этой статье мы подробно разберем, как правильно управлять печатью чека через драйвер DTO 8, обеспечив корректный вывод всех необходимых данных.
Разберем ситуацию, когда программная передача ФИО через атрибуты не дает результата. В ККТ Атол имя сотрудника жестко привязано к номеру оператора, который определяется свойством Password (пароль), передаваемым при открытии чека или соединении с устройством. Рассмотрим причины подмены имени:
30. В заводских настройках Атол этот пароль зарезервирован за пользователем №30, имя которого — "СИСТ.АДМИНИСТРАТОР". Даже если вы пытаетесь передать другое имя через тег 1021, ККТ может отдать приоритет внутренним таблицам.1 для первого кассира).Проанализируем правильный порядок записи атрибутов перед регистрацией чека:
// Устанавливаем номер атрибута ФИО кассира
Объект.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Ф важно учитывать физические ограничения устройства:
Caption содержит более длинную строку, она может быть обрезана или вызвать ошибку в зависимости от настроек драйвера. Рекомендуется программно разбивать длинные строки на несколько вызовов PrintString.ValuePurpose = 56. Это устаревший способ работы. В современных реалиях (DTO 8.16 и выше) работа с тегами ведется через AttrNumber и AttrValue.TaxTypeNumber. В разных версиях прошивок ККТ номера налоговых ставок в таблицах могут отличаться (например, 4 может быть "БЕЗ НДС", а может быть "НДС 20%"). Проверьте настройки таблиц налогов через утилиту теста драйвера.Проанализируем идеальную последовательность действий программиста для формирования чека:
DeviceEnabled = 1.1 для администратора или 29, если вы настроили его ФИО в таблицах).WriteAttribute.SetMode(1).Registration() или Return().PrintString() для подвальной части чека.Payment() или CloseCheck().Используя этот структурный подход, вы избежите большинства проблем с некорректным отображением данных на чековой ленте Атол 30Ф.