Как использовать фискальный регистратор Атол в качестве обычного чекового принтера?

Программист 1С v8.3 (Управляемые формы) 1С:Розница IT и автоматизация бизнеса
← На главную

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

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

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

Разберем причины такого поведения и рассмотрим рабочие способы реализации нефискальной печати на устройствах Атол.

Почему фискальный регистратор не печатает отдельные строки без чека?

Проанализируем архитектуру работы современных прошивок ККТ и драйверов торгового оборудования:

  1. Буферизация команд: В современных драйверах печать текста не отправляется на физическую термоголовку мгновенно. Строки накапливаются во внутреннем буфере устройства до тех пор, пока не поступит команда завершения документа, отрезки или протяжки ленты.
  2. Контекст документа: Микропрограмма онлайн-кассы строго разграничивает фискальный и нефискальный режимы. Печать произвольного текста без налоговых ставок и фискальных тегов возможна только внутри контекста нефискального документа.

Способ 1. Открытие нефискального чека через драйвер и БПО

Самое простое и надежное программное решение в среде 1С — это явное открытие нефискального чека. В таком режиме касса принимает любые текстовые строки, не начисляет НДС и не формирует фискальный признак документа.

Выясним алгоритм взаимодействия с драйвером:

  1. Перед началом вывода строк устанавливаем признак нефискального чека (ФискальныйЧек = Ложь).
  2. Открываем документ соответствующего типа.
  3. Построчно передаем нужный текст с помощью метода печати строк.
  4. Закрываем документ с командой отрезки ленты.

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


// Инициализация нефискального документа
ОбъектДрайвера.Mode = 1; // Режим регистрации/печати
ОбъектДрайвера.SetMode();

// Открываем нефискальный документ
ОбъектДрайвера.AttrNumber = 1055; // При необходимости передачи реквизитов
ОбъектДрайвера.OpenNonFiscalDoc();

// Построчная печать произвольного текста
ОбъектДрайвера.Caption = "=== ТОВАРНЫЙ ЧЕК ===";
ОбъектДрайвера.PrintString();

ОбъектДрайвера.Caption = "Товар: Услуги настройки ПО";
ОбъектДрайвера.PrintString();

ОбъектДрайвера.Caption = "Итого к оплате: 1 500.00 руб.";
ОбъектДрайвера.PrintString();

// Закрытие нефискального документа и протяжка ленты
ОбъектДрайвера.CloseNonFiscalDoc();
ОбъектДрайвера.Cut();

Способ 2. Формирование пакетного задания в формате JSON

В современных версиях Драйвера ККТ (ДТО 10) все операции рекомендуется выполнять через единый пакетный интерфейс JSON. Для печати произвольного документа формируется структура с типом документа nonFiscal.

Рассмотрим пример структуры JSON-задания для печати текста:


{
  "type": "nonFiscal",
  "items": [
    {
      "type": "text",
      "text": "ТОВАРНЫЙ ЧЕК (КОПИЯ)",
      "alignment": "center",
      "doubleWidth": true
    },
    {
      "type": "text",
      "text": "--------------------------------",
      "alignment": "left"
    },
    {
      "type": "text",
      "text": "1. Услуги консультанта    1 000.00",
      "alignment": "left"
    },
    {
      "type": "text",
      "text": "ИТОГО К ОПЛАТЕ:          1 000.00",
      "alignment": "right",
      "doubleHeight": true
    }
  ]
}

Передача такого пакета в метод ProcessJson() выполняет всю цепочку операций (открытие, буферизацию текста, закрытие и отрезку) за один вызов, исключая зависание документа в незавершенном состоянии.

Способ 3. Установка виртуального Windows-принтера

Если в 1С требуется печатать стандартные макеты табличных документов (например, товарные чеки, гарантийные талоны или маршрутные листы), фискальный регистратор можно подключить как обычный системный принтер операционной системы.

Разберем по шагам настройку Windows-принтера:

  1. Установите специализированный драйвер виртуального принтера чеков от производителя ККТ или стандартный системный драйвер Windows Generic / Text Only (Только текст).
  2. В свойствах созданного принтера укажите порт, через который подключена касса (виртуальный COM-порт или USB-интерфейс).
  3. В параметрах печати настройте ширину страницы в соответствии с установленной лентой (57 мм или 80 мм) и отключите лишние поля.
  4. В конфигурации 1С используйте стандартный вывод табличного документа:

ТабДок = Новый ТабличныйДокумент;
// Заполнение макета данными...
ТабДок.ИмяПринтера = "ЧековыйПринтерАтол";
ТабДок.АвтоМасштаб = Истина;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Важные ограничения и особенности эксплуатации

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

  1. Состояние фискального накопителя: Если в кассу установлен ранее активированный ФН, у которого истек срок действия или заблокирован криптографический сопроцессор, устройство может запрещать даже нефискальные операции. В таком случае для тестовой работы кассу переводят в технологический/учебный режим или извлекают заблокированный накопитель (в зависимости от модели и прошивки).
  2. Счетчики смены: Печать нефискальных документов не открывает 24-часовую фискальную смену и не требует последующего снятия Z-отчета (отчета о закрытии смены).
  3. Возврат к фискальному режиму: Если касса используется временно, перед переходом к боевой фискальной печати обязательно верните в типовых процедурах 1С признак ФискальныйЧек = Истина, чтобы чеки корректно передавались в ОФД и содержали все обязательные теги по ФФД.
← На главную