В современных условиях работы по 54-ФЗ часто возникает необходимость дополнить кассовый чек информацией, которая не является строго обязательной с точки зрения налоговой, но критически важна для управленческого учета и удобства покупателя. Одной из таких задач является вывод номера и вида документа реализации непосредственно в тело чека. Рассмотрим подробно, как реализовать это в среде 1С:Предприятие 7.7 при работе с кассовыми аппаратами Атол.
Прежде всего, нам необходимо понять, что кассовый аппарат (ККТ) под управлением драйвера Атол воспринимает информацию двумя способами: как фискальные данные (товары, суммы, налоги) и как произвольный текст. Для решения нашей задачи мы будем использовать методы печати нефискальных строк. Большинство современных драйверов позволяют вставлять текстовые строки практически в любое место чека, если это не нарушает логику формирования фискального документа.
Проанализируем ситуацию: печать чека в 1С 7.7 обычно происходит через внешнюю компоненту (например, FPRNM1C.dll или аналогичные). Чтобы добавить свою строку, нам нужно найти в коде обработки место, где инициализируется объект драйвера, и вызвать его специфические методы.
Для начала разберем, как программа обращается к кассе. В коде внешней печатной формы или обработки обслуживания ККМ (обычно это файлы с расширением .ert) нужно найти строку инициализации. Чаще всего она выглядит так:
// Инициализация объекта драйвера Атол
ECR = СоздатьОбъект("AddIn.FprnM45");
// Или иногда через более старые или универсальные обертки
// Объект = СоздатьОбъект("AddIn.Atol");
Важно выяснить имя переменной (в примере выше это ECR), так как именно через неё мы будем отдавать команды на печать. Если вы работаете с готовой обработкой для 54-ФЗ, эта переменная может называться Драйвер, ФР или Device.
Выясним, откуда брать данные. Если печать чека вызывается из документа "Реализация", нам нужно получить его номер и дату. В контексте 1С 7.7 это делается стандартными функциями. Сформируем итоговую строку, которую мы хотим видеть в чеке:
// Предположим, ТекущийДокумент — это контекст нашей реализации
СтрокаДляЧека = "Документ: " + СокрЛП(ТекущийДокумент.Вид()) + " №" + СокрЛП(ТекущийДокумент.НомерДок);
// Добавим дату для информативности
СтрокаДляЧека = СтрокаДляЧека + " от " + ТекущийДокумент.ДатаДок;
Обратите внимание на использование функции СокрЛП(). Она необходима для удаления лишних пробелов, которые ККТ может интерпретировать некорректно или которые могут привести к нежелательному переносу строки.
Теперь рассмотрим методы, которые предоставляет драйвер Атол для печати текста. Самый распространенный способ — использование свойства Caption и метода PrintString(). Посмотрим на пример реализации:
// Устанавливаем текст, который нужно напечатать
ECR.Caption = СтрокаДляЧека;
// Включаем автоматический перенос строк, если текст длинный
// 1 — включено, 0 — выключено
ECR.TextWrap = 1;
// Посылаем команду на печать строки
ECR.PrintString();
Важный технический момент: где именно вставить этот код? Если мы хотим, чтобы номер документа был в шапке чека, код нужно вставить СРАЗУ ПОСЛЕ открытия чека (метод OpenCheck() или BeginFiscalReceipt()), но ДО регистрации первого товара (метод Registration() или PrintRecItem()). Если вставить код в самом конце, информация напечатается в подвале чека перед итоговой отрезкой.
Зачастую в 1С 7.7 печать чека реализована как внешняя печатная форма. В этом случае данные документа передаются внутрь обработки через переменную Контекст. Проанализируем, как правильно обратиться к реквизитам в таком случае:
// В процедуре Печать(Источник)
Если ТипЗначенияСтр(Источник) = "Документ" Тогда
НомерДок = Источник.НомерДок;
НазваниеДок = Источник.Вид();
// Дальнейшая логика печати
КонецЕсли;
Разберем ситуацию с узкой чековой лентой. Модель Атол 30Ф использует ленту шириной 58 мм, что позволяет уместить в одной строке от 24 до 32 символов (зависит от настроек шрифта в самой таблице ККТ). Если ваша строка "Реализация №0000000123 от 10.10.2023" окажется длиннее, она либо обрежется, либо перенесется на следующую строку, если вы установили TextWrap = 1.
Рекомендуем заранее проверять длину строки и, при необходимости, сокращать "Реализация" до "Реал.". Это сделает чек более аккуратным и читаемым.
Если ваша организация использует актуальный драйвер Атол 10-й версии, синтаксис команд изменился. Рассмотрим, как это будет выглядеть в новом формате:
// Для драйвера версии 10
Драйвер.setParam(Драйвер.LIBFP_PARAM_TEXT, "Реализация №" + НомерДокумента);
// Настройка выравнивания (0 - по левому краю)
Драйвер.setParam(Драйвер.LIBFP_PARAM_ALIGNMENT, 0);
Драйвер.printText();
Подведем итоги нашего исследования. Для успешного вывода номера реализации в чек нам необходимо:
Caption и PrintString() для отправки данных на устройство.Совет: Всегда делайте копию файла .ert перед внесением изменений. Работа с кассовым оборудованием требует осторожности, так как некорректные команды могут привести к "зависанию" чека в открытом состоянии, что потребует аннулирования чека через тест драйвера.