С переходом на форматы фискальных данных (ФФД) версии 1.05 и выше, требования к оформлению кассовых чеков существенно ужесточились. Теперь недостаточно просто вывести наименование позиции; необходимо четко разделять, продаете ли вы товар или оказываете услугу. В данной статье мы подробно разберем, как реализовать отражение услуг на ККМ серии «Штрих» (например, Штрих-on-Line), работающих с платформой 1С 7.7 через драйвер «Штрих-М».
Согласно требованиям ФДД, каждая позиция в чеке должна иметь тег 1212 — Признак предмета расчета. Именно этот параметр определяет, что именно видит налоговая инспекция и покупатель в чеке. Рассмотрим основные значения, которые могут принимать этот тег в драйвере:
Если в вашем чеке под наименованием выводится цифра «1» и слово «Товар», значит, программа по умолчанию передает значение 1. Наша задача — изменить его на 4 при продаже услуг.
Рассмотрим пошагово, как изменить процедуру печати чека. Для работы мы используем объект драйвера (обычно называемый ФР или Объект). Проанализируем пример кода, который позволяет динамически менять признак предмета расчета в зависимости от свойств номенклатуры.
Предположим, в справочнике «Номенклатура» у вас есть реквизит Услуга (тип «Число», где 1 — это услуга). Разберем цикл обхода строк документа:
Документ.ВыбратьСтроки();
Пока Документ.ПолучитьСтроку() = 1 Цикл
// Устанавливаем базовые параметры позиции
ФР.Password = ПарольКассира;
ФР.Quantity = Документ.Количество;
ФР.Price = Документ.Цена;
ФР.Department = 1; // Номер секции
// Определяем Признак предмета расчета (Тег 1212)
Если Документ.Номенклатура.Услуга = 1 Тогда
ФР.PaymentItemSign = 4; // Услуга
Иначе
ФР.PaymentItemSign = 1; // Товар
КонецЕсли;
// Передаем наименование и выполняем фискальную операцию
ФР.StringForPrinting = Документ.Номенклатура.Наименование;
ФР.FNOperation(); // Регистрация позиции в ФН
КонецЦикла;
Важно помнить, что свойство PaymentItemSign должно устанавливаться перед вызовом метода FNOperation() для каждой конкретной строки чека.
Часто при оказании услуг возникает необходимость смены системы налогообложения (например, если услуги идут по ПСН, а товары по УСН). За это отвечает свойство TaxType (или TaxVariant в зависимости от прошивки и версии драйвера). Проанализируем типичные значения для драйвера Штрих-М:
Пример установки СНО перед открытием чека:
ФР.TaxType = 4; // Установка УСН Доход-Расход
ФР.OpenCheck();
В процессе разработки многие сталкиваются с тем, что наименование услуги печатается в чеке дважды или выводится в «странном» месте. Это происходит из-за конфликта между методом текстовой печати PrintString() и фискальным методом FNOperation(). Выясним причину: FNOperation сам по себе отправляет данные о наименовании в фискальный накопитель, а PrintString просто печатает текст на ленте.
Чтобы избежать дублирования и при этом корректно передать данные в ОФД, используем специальный прием с символами //. Если в свойстве StringForPrinting текст начинается с двух косых черт, драйвер передает информацию в фискальный документ (для ОФД), но может не выводить ее на бумажную ленту как отдельную текстовую строку, предотвращая "кашу" в чеке.
Проанализируем правильную последовательность очистки свойств:
ФР.StringForPrinting = "//" + СокрЛП(Документ.Номенклатура.Наименование);
ФР.PaymentItemSign = 4;
ФР.FNOperation();
// Обязательно очищаем строку после операции
ФР.StringForPrinting = "";
Для корректной работы с ФФД 1.05 в 1С 7.7 рекомендуется использовать актуальные версии библиотек. Часто штатная smDrvFR1CLib20.dll не поддерживает новые теги. В этом случае следует перейти на smDrvFR1CLib24.dll.
Обратите внимание на способ подключения компоненты в коде 1С. Даже при использовании новой библиотеки, программный идентификатор (ProgID) может оставаться старым для совместимости:
Если ЗагрузитьВнешнююКомпоненту("smDrvFR1CLib24.dll") = 1 Тогда
Объект = СоздатьОбъект("AddIn.SMDrvFR1C20");
КонецЕсли;
Такой подход позволяет использовать расширенные возможности драйвера 4.14/4.15 без полной переработки существующих обработок обслуживания .ert.
Если ваша касса работает в формате 1.2, обратите внимание на обязательность передачи единицы измерения. Для услуг чаще всего используется значение «0» (единица измерения). В драйвере Штрих это свойство ItemUnitOfMeasure. Не забывайте также проверять признак способа расчета (предоплата, полный расчет), который регулируется свойством PaymentMethodSign (значение 4 соответствует полному расчету в момент оказания услуги).
Следуя этим инструкциям и используя приведенные примеры кода, вы сможете корректно настроить отражение услуг в чеках ККТ Штрих-М, соблюдая все требования актуального законодательства.