Реформа применения контрольно-кассовой техники (54-ФЗ) и массовое внедрение формата фискальных данных ФФД 1.05 потребовали обязательной передачи в ОФД новых реквизитов чека: признака предмета расчета и признака способа расчета. Если кассовая программа (например, Frontol 5) работает по ФФД 1.05, а товароучетная система не передает эти реквизиты в файле обмена, касса начинает блокировать продажи и выдавать ошибки вида «Не задан признак предмета расчета».
Многие пользователи классической конфигурации «1С:Торговля и Склад 7.7» столкнулись с тем, что даже в последних релизах (например, 997 и выше) заявленная поддержка ФФД 1.05 касается только фискальных регистраторов, подключенных напрямую. Обработки для режима ККМ-Offline (обмен через текстовые файлы goods.txt) остались без изменений. В этой статье мы разберем, как самостоятельно доработать выгрузку из 1С 7.7 во Frontol 5, чтобы соответствовать всем требованиям законодательства.
При работе в режиме Offline программа «1С:Торговля и Склад 7.7» формирует текстовый файл обмена (обычно с именем goods.txt) в формате АТОЛ. Этот формат представляет собой набор строк, где поля разделены точкой с запятой. За формирование этого файла отвечает внешняя обработка обслуживания, расположенная по пути \ExtForms\Equip\off_spos.ert (или аналогичная обработка ККМ-Offline в вашем каталоге базы данных).
Для ФФД 1.05 кассовому ПО Frontol 5 жизненно необходимы два параметра для каждой позиции номенклатуры:
Если эти поля остаются пустыми, Frontol не может сопоставить номенклатуру требованиям ФФД 1.05 и аннулирует чеки на кассе.
Прежде чем присваивать товарам налоговые группы, необходимо передать описание этих групп и ставок в самом начале файла обмена. Для этого во Frontol используются служебные секции $$$ADDTAXRATES, $$$ADDTAXGROUPS и $$$ADDTAXGROUPRATES.
Рассмотрим пример кода, который необходимо добавить в процедуру формирования файла обмена (в обработке обслуживания ККМ) перед выгрузкой списка товаров:
// Формируем блок описания налоговых ставок для АТОЛ/Frontol
ФайлОтчета.ДобавитьСтроку("");
ФайлОтчета.ДобавитьСтроку("$$$ADDTAXRATES");
// Формат: КодСтавки; Название; НазваниеДляПечати; Величина; ТипНалога; НомерНалогаВККМ
ФайлОтчета.ДобавитьСтроку("1;Без НДС;Без НДС;0;0;6;");
ФайлОтчета.ДобавитьСтроку("2;НДС 10%;НДС 10%;10;0;2;");
ФайлОтчета.ДобавитьСтроку("3;НДС 18%;НДС 18%;18;0;1;"); // Для исторических документов (или 20% для современных реалий)
ФайлОтчета.ДобавитьСтроку("$$$ADDTAXGROUPS");
// Формат: КодГруппы; Название; НазваниеДляПечати
ФайлОтчета.ДобавитьСтроку("1;Без НДС;Без НДС;");
ФайлОтчета.ДобавитьСтроку("2;НДС 10%;НДС 10%;");
ФайлОтчета.ДобавитьСтроку("3;НДС 18%;НДС 18%;");
ФайлОтчета.ДобавитьСтроку("$$$ADDTAXGROUPRATES");
// Формат: КодГруппы; КодСтавки; Приоритет
ФайлОтчета.ДобавитьСтроку("1;1;1;");
ФайлОтчета.ДобавитьСтроку("2;2;1;");
ФайлОтчета.ДобавитьСтроку("3;3;1;");
ФайлОтчета.ДобавитьСтроку("");
В данном примере мы жестко сопоставили налоговые ставки с их внутренними кодами. Обратите внимание, что последний параметр в строке ставки (например, 6 для «Без НДС» или 1 для «НДС 18%») должен строго соответствовать таблице налогов в настройках вашего фискального регистратора.
Согласно формату ФФД 1.05, признак предмета расчета принимает следующие основные числовые значения:
Проанализируем, как реализовать это в конфигурации. У вас есть два пути решения:
Если ваша розничная точка торгует исключительно стандартными товарами (и у вас нет услуг или подакцизной продукции), вы можете жестко прописать этот признак в коде выгрузки. Для этого в процедуре выгрузки строки товара в 13-й параметр передается константа "1".
Если у вас есть подакцизный товар (например, алкоголь), но вы не хотите добавлять новые реквизиты в конфигуратор, можно использовать проверку по существующим признакам. Например, по вхождению товара в определенную группу справочника или по значению существующего флага «Подакцизный»:
// Пример логики определения признака предмета расчета
Если СпрНоменклатура.ПодакцизныйТовар = 1 Тогда
ПризнакПредмета = "2"; // Подакцизный товар
ИначеЕсли СпрНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга Тогда
ПризнакПредмета = "4"; // Услуга
Иначе
ПризнакПредмета = "1"; // Обычный товар
КонецЕсли;
Если ассортимент разнообразен, правильным решением будет создание полноценного реквизита в Конфигураторе:
Номенклатура.ПризнакПредметаРасчета (тип данных — Число, длина — 2, без дробной части).Номенклатура в виде поля выбора или списка значений, чтобы контент-менеджер или бухгалтер могли явно указать категорию для услуг, подакцизных товаров или обычных позиций.Теперь отредактируем формирование самой строки товара в файле goods.txt. Нам нужно подставить полученные значения в соответствующие поля строки формата АТОЛ.
Найдем в модуле обработки обслуживания ККМ строку формирования записи товара. Обычно она выглядит как последовательное склеивание переменных через символ ";". Изменим ее, добавив выгрузку 13-го (Признак предмета расчета) и 23-го (Код налоговой группы) параметров.
Рассмотрим структуру измененного кода формирования строки:
// Пример формирования строки для товара в формате АТОЛ
СтрокаВыгрузки = КодТовара + ";" +
ШтрихКод + ";" +
СокрЛП(Наименование) + ";" +
СокрЛП(Наименование) + ";" +
Цена + ";" +
Количество + ";" +
";" + // Поле 7
";" + // Поле 8
";" + // Поле 9
";" + // Поле 10
";" + // Поле 11
";" + // Поле 12
ПризнакПредмета + ";" + // Поле 13: Признак предмета расчета (ФФД 1.05)
";" + // Поле 14
";" + // Поле 15
";" + // Поле 16
";" + // Поле 17
";" + // Поле 18
";" + // Поле 19
";" + // Поле 20
";" + // Поле 21
";" + // Поле 22
КодНалоговойГруппы + ";"; // Поле 23: Код налоговой группы
ФайлОтчета.ДобавитьСтроку(СтрокаВыгрузки);
Определить переменную КодНалоговойГруппы можно на основании ставки НДС, указанной в карточке товара 1С. Например:
// Определение кода налоговой группы по ставке НДС товара
СтавкаНДС = СпрНоменклатура.СтавкаНДС.Получить(ДатаВыгрузки);
Если СтавкаНДС = Перечисление.СтавкиНДС.БезНДС Тогда
КодНалоговойГруппы = "1";
ИначеЕсли (СтавкаНДС = Перечисление.СтавкиНДС.НДС10) Или (СтавкаНДС = Перечисление.СтавкиНДС.НДС10_110) Тогда
КодНалоговойГруппы = "2";
Иначе
КодНалоговойГруппы = "3"; // По умолчанию 18% (или 20%)
КонецЕсли;
Если у вас нет возможности или прав на изменение конфигурации 1С 7.7, обратите внимание на настройки самой кассовой программы. Начиная с версий Frontol 5.26.1, разработчики предусмотрели функционал автоподстановки для старых товароучетных систем.
Вы можете зайти в настройки Frontol в раздел «ОФД» / «Параметры ККТ» и настроить значения по умолчанию. В таком случае, если из 1С не передается признак предмета расчета, Frontol автоматически подставит в чек значение «Товар» (или иное выбранное вами дефолтное значение). Однако помните, что этот способ не сработает корректно, если в одном чеке у вас могут быть одновременно и услуги, и подакцизные товары, поскольку касса применит дефолтную настройку ко всему списку чека.