При интеграции фискальных регистраторов компании «Штрих-М» с конфигурациями на платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с задачами динамического выбора системы налогообложения (СНО) при совмещении налоговых режимов, а также с проблемами корректной передачи наименований товаров и скидок в ОФД по требованиям 54-ФЗ. Разберем по шагам, как правильно реализовать взаимодействие с кассой через прямой COM-объект драйвера DrvFR.dll.
Проанализируем ключевое требование форматов фискальных документов (ФФД): в одном чеке запрещено пробивать позиции, относящиеся к разным системам налогообложения. Реквизит СНО (тег 1055) относится к фискальному документу целиком.
Если организация совмещает несколько режимов (например, УСН и Патент), в учетной системе 1С 7.7 необходимо предварительно группировать строки документа реализации по используемой системе налогообложения и последовательно пробивать два отдельных чека.
Для указания СНО в драйвере «Штрих-М» используется свойство TaxType (битовая маска тега 1055). Значения задаются следующими кодами:
Рассмотрим правильный алгоритм формирования и закрытия фискального чека. Особое внимание уделим последовательности заполнения реквизитов позиции: наименование товара в свойство StringForPrinting должно передаваться строго до вызова методов фиксации и регистрации (FNOperation или Buy), иначе касса передаст в ОФД чек с пустым названием товара.
Посмотрим на практический пример функции печати чека в модуле 1С 7.7:
Функция НапечататьФискальныйЧек(ОбъектККМ, КодСНО, ТаблицаТоваров, СуммаНал, СуммаБезнал, СкидкаНаЧек)
// Проверяем соединение с фискальным регистратором
Если ПодключитьсяКФР(ОбъектККМ) = 0 Тогда
Сообщить("Ошибка подключения к кассовому аппарату!", "!");
Возврат 0;
КонецЕсли;
// Устанавливаем тип чека: 0 - продажа (приход)
ОбъектККМ.CheckType = 0;
// Перебираем позиции чека
ТаблицаТоваров.ВыбратьСтроки();
Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
// 1. Очищаем буфер и передаем наименование товара (тег 1030, макс. 128 символов)
СтрокаНоменклатуры = СокрЛП(ТаблицаТоваров.Товар.Наименование);
ОбъектККМ.StringForPrinting = Лев(СтрокаНоменклатуры, 128);
// 2. Указываем цену, количество и отдел
ОбъектККМ.Price = ТаблицаТоваров.Цена;
ОбъектККМ.Quantity = ТаблицаТоваров.Количество;
ОбъектККМ.Department = 1;
// 3. Указываем номер налога/НДС (Tax1: 1 - 20%, 2 - 10%, 4 - Без НДС и т.д.)
ОбъектККМ.Tax1 = ТаблицаТоваров.КодСтавкиНДС;
// 4. Регистрируем позицию
ОбъектККМ.FNOperation();
Если ОбъектККМ.ResultCode <> 0 Тогда
Сообщить("Ошибка регистрации позиции: " + ОбъектККМ.ResultCodeDescription, "!");
ОбъектККМ.CancelCheck();
Возврат 0;
КонецЕсли;
КонецЦикла;
// Передаем систему налогообложения для чека
ОбъектККМ.TaxType = КодСНО;
// Указываем виды оплаты
ОбъектККМ.Summ1 = СуммаНал; // Наличные
ОбъектККМ.Summ2 = 0;
ОбъектККМ.Summ3 = 0;
ОбъектККМ.Summ4 = СуммаБезнал; // Безналичная оплата (электронные)
// Очищаем буфер печати перед закрытием
ОбъектККМ.StringForPrinting = "";
// Закрываем чек
ОбъектККМ.FNCloseCheckEx();
Если ОбъектККМ.ResultCode <> 0 Тогда
Сообщить("Ошибка закрытия чека: " + ОбъектККМ.ResultCodeDescription, "!");
ОбъектККМ.CancelCheck();
Возврат 0;
КонецЕсли;
// Отрезка чека
ОбъектККМ.CutCheck();
Возврат 1;
КонецФункции
Рассмотрим ситуацию, когда касса работает на устаревших прошивках ФД, где прямое свойство TaxType не поддерживается. В таком случае систему налогообложения по умолчанию можно изменить непосредственно в таблице настроек кассового аппарата (Таблица №18 «Фискальный накопитель», Поле №5 «Система налогообложения»):
// Смена СНО через запись в Таблицу 18
Объект.Password = ПарольАдминистратора;
Объект.TableNumber = 18;
Объект.RowNumber = 1;
Объект.FieldNumber = 5;
Объект.ValueOfFieldInteger = КодСНО; // Например, 2 для УСН Доход или 32 для ПСН
Объект.WriteTable();
Если Объект.ResultCode <> 0 Тогда
Сообщить("Не удалось обновить СНО в таблице ККТ: " + Объект.ResultCodeDescription);
КонецЕсли;
Однако постоянное переписывание таблиц ККТ из кода 1С не рекомендуется: таблицы могут отличаться между версиями внутреннего ПО кассы, а частая запись в энергонезависимую память устройства нежелательна.
По правилам онлайн-касс и форматов фискальных данных:
Цена = СуммаСтрокиСоСкидкой / Количество).