В практике автоматизации торговли нередко возникает задача использовать фискальный регистратор (ККТ) в режиме обычного чекового принтера. Это может потребоваться для временной печати товарных чеков, слип-чеков эквайринга, предварительных счетов (пречеков) в общепите или при тестировании программного обеспечения до момента официальной фискализации кассы в налоговых органах.
При попытке вывести произвольный текст разработчики часто сталкиваются с двумя проблемами:
НапечататьНефискСтроку() или ПечатьСтроки()) метод возвращает значение Истина, однако кассовая лента остается чистой, и физическая печать не происходит.Разберем причины такого поведения и рассмотрим рабочие способы реализации нефискальной печати на устройствах Атол.
Проанализируем архитектуру работы современных прошивок ККТ и драйверов торгового оборудования:
Самое простое и надежное программное решение в среде 1С — это явное открытие нефискального чека. В таком режиме касса принимает любые текстовые строки, не начисляет НДС и не формирует фискальный признак документа.
Выясним алгоритм взаимодействия с драйвером:
ФискальныйЧек = Ложь).Посмотрим на пример реализации прямого вызова методов драйвера:
// Инициализация нефискального документа
ОбъектДрайвера.Mode = 1; // Режим регистрации/печати
ОбъектДрайвера.SetMode();
// Открываем нефискальный документ
ОбъектДрайвера.AttrNumber = 1055; // При необходимости передачи реквизитов
ОбъектДрайвера.OpenNonFiscalDoc();
// Построчная печать произвольного текста
ОбъектДрайвера.Caption = "=== ТОВАРНЫЙ ЧЕК ===";
ОбъектДрайвера.PrintString();
ОбъектДрайвера.Caption = "Товар: Услуги настройки ПО";
ОбъектДрайвера.PrintString();
ОбъектДрайвера.Caption = "Итого к оплате: 1 500.00 руб.";
ОбъектДрайвера.PrintString();
// Закрытие нефискального документа и протяжка ленты
ОбъектДрайвера.CloseNonFiscalDoc();
ОбъектДрайвера.Cut();
В современных версиях Драйвера ККТ (ДТО 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() выполняет всю цепочку операций (открытие, буферизацию текста, закрытие и отрезку) за один вызов, исключая зависание документа в незавершенном состоянии.
Если в 1С требуется печатать стандартные макеты табличных документов (например, товарные чеки, гарантийные талоны или маршрутные листы), фискальный регистратор можно подключить как обычный системный принтер операционной системы.
Разберем по шагам настройку Windows-принтера:
ТабДок = Новый ТабличныйДокумент;
// Заполнение макета данными...
ТабДок.ИмяПринтера = "ЧековыйПринтерАтол";
ТабДок.АвтоМасштаб = Истина;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
При использовании фискального регистратора в нефискальном режиме следует учитывать несколько технически важных нюансов:
ФискальныйЧек = Истина, чтобы чеки корректно передавались в ОФД и содержали все обязательные теги по ФФД.