Как вывести наименование и номер документа реализации в чек ККМ в 1С 7.7?

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

В современных условиях работы по 54-ФЗ часто возникает необходимость дополнить кассовый чек информацией, которая не является строго обязательной с точки зрения налоговой, но критически важна для управленческого учета и удобства покупателя. Одной из таких задач является вывод номера и вида документа реализации непосредственно в тело чека. Рассмотрим подробно, как реализовать это в среде 1С:Предприятие 7.7 при работе с кассовыми аппаратами Атол.

Понимание механизмов работы ККМ и драйвера

Прежде всего, нам необходимо понять, что кассовый аппарат (ККТ) под управлением драйвера Атол воспринимает информацию двумя способами: как фискальные данные (товары, суммы, налоги) и как произвольный текст. Для решения нашей задачи мы будем использовать методы печати нефискальных строк. Большинство современных драйверов позволяют вставлять текстовые строки практически в любое место чека, если это не нарушает логику формирования фискального документа.

Проанализируем ситуацию: печать чека в 1С 7.7 обычно происходит через внешнюю компоненту (например, FPRNM1C.dll или аналогичные). Чтобы добавить свою строку, нам нужно найти в коде обработки место, где инициализируется объект драйвера, и вызвать его специфические методы.

Шаг 1: Идентификация объекта драйвера

Для начала разберем, как программа обращается к кассе. В коде внешней печатной формы или обработки обслуживания ККМ (обычно это файлы с расширением .ert) нужно найти строку инициализации. Чаще всего она выглядит так:


// Инициализация объекта драйвера Атол
ECR = СоздатьОбъект("AddIn.FprnM45");
// Или иногда через более старые или универсальные обертки
// Объект = СоздатьОбъект("AddIn.Atol");

Важно выяснить имя переменной (в примере выше это ECR), так как именно через неё мы будем отдавать команды на печать. Если вы работаете с готовой обработкой для 54-ФЗ, эта переменная может называться Драйвер, ФР или Device.

Шаг 2: Формирование строки данных

Выясним, откуда брать данные. Если печать чека вызывается из документа "Реализация", нам нужно получить его номер и дату. В контексте 1С 7.7 это делается стандартными функциями. Сформируем итоговую строку, которую мы хотим видеть в чеке:


// Предположим, ТекущийДокумент — это контекст нашей реализации
СтрокаДляЧека = "Документ: " + СокрЛП(ТекущийДокумент.Вид()) + " №" + СокрЛП(ТекущийДокумент.НомерДок);
// Добавим дату для информативности
СтрокаДляЧека = СтрокаДляЧека + " от " + ТекущийДокумент.ДатаДок;

Обратите внимание на использование функции СокрЛП(). Она необходима для удаления лишних пробелов, которые ККТ может интерпретировать некорректно или которые могут привести к нежелательному переносу строки.

Шаг 3: Программный вывод в чек

Теперь рассмотрим методы, которые предоставляет драйвер Атол для печати текста. Самый распространенный способ — использование свойства Caption и метода PrintString(). Посмотрим на пример реализации:


// Устанавливаем текст, который нужно напечатать
ECR.Caption = СтрокаДляЧека;

// Включаем автоматический перенос строк, если текст длинный
// 1 — включено, 0 — выключено
ECR.TextWrap = 1;

// Посылаем команду на печать строки
ECR.PrintString();

Важный технический момент: где именно вставить этот код? Если мы хотим, чтобы номер документа был в шапке чека, код нужно вставить СРАЗУ ПОСЛЕ открытия чека (метод OpenCheck() или BeginFiscalReceipt()), но ДО регистрации первого товара (метод Registration() или PrintRecItem()). Если вставить код в самом конце, информация напечатается в подвале чека перед итоговой отрезкой.

Особенности работы с внешними печатными формами

Зачастую в 1С 7.7 печать чека реализована как внешняя печатная форма. В этом случае данные документа передаются внутрь обработки через переменную Контекст. Проанализируем, как правильно обратиться к реквизитам в таком случае:


// В процедуре Печать(Источник)
Если ТипЗначенияСтр(Источник) = "Документ" Тогда
    НомерДок = Источник.НомерДок;
    НазваниеДок = Источник.Вид();
    // Дальнейшая логика печати
КонецЕсли;

Ограничения оборудования (на примере Атол 30Ф)

Разберем ситуацию с узкой чековой лентой. Модель Атол 30Ф использует ленту шириной 58 мм, что позволяет уместить в одной строке от 24 до 32 символов (зависит от настроек шрифта в самой таблице ККТ). Если ваша строка "Реализация №0000000123 от 10.10.2023" окажется длиннее, она либо обрежется, либо перенесется на следующую строку, если вы установили TextWrap = 1.

Рекомендуем заранее проверять длину строки и, при необходимости, сокращать "Реализация" до "Реал.". Это сделает чек более аккуратным и читаемым.

Работа с современными драйверами (v.10)

Если ваша организация использует актуальный драйвер Атол 10-й версии, синтаксис команд изменился. Рассмотрим, как это будет выглядеть в новом формате:


// Для драйвера версии 10
Драйвер.setParam(Драйвер.LIBFP_PARAM_TEXT, "Реализация №" + НомерДокумента);
// Настройка выравнивания (0 - по левому краю)
Драйвер.setParam(Драйвер.LIBFP_PARAM_ALIGNMENT, 0);
Драйвер.printText();

Резюме и советы

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

  1. Найти в коде обработки переменную, отвечающую за связь с кассовым аппаратом.
  2. Сформировать строковую переменную, содержащую нужные данные (вид документа и его номер).
  3. Использовать методы Caption и PrintString() для отправки данных на устройство.
  4. Проверить позиционирование вывода: в шапке или в подвале чека.

Совет: Всегда делайте копию файла .ert перед внесением изменений. Работа с кассовым оборудованием требует осторожности, так как некорректные команды могут привести к "зависанию" чека в открытом состоянии, что потребует аннулирования чека через тест драйвера.

← На главную