В процессе эксплуатации конфигурации 1С:Розница 2.3 пользователи нередко сталкиваются с необходимостью применения нестандартных налоговых ставок. Одной из таких ситуаций является потребность в использовании НДС 22%. Это актуально для определенных внешних рынков или специфических групп товаров (схожие нюансы имеет, например, Разливное пиво: выгрузка во Фронтол 6 из Розницы 2.3). Проблема заключается в том, что в типовом перечислении СтавкиНДС данной позиции нет, и механизмы обмена с оборудованием АТОЛ ККМ Офлайн (Frontol 6), детально описанные в статье Загрузка - выгрузка Фронтол 6 (Frontol) - 1С: Розница 2.3, «из коробки» не обучены передавать такой идентификатор. Рассмотрим подробно, как диагностировать и устранить эту проблему программными и административными методами.
Проанализируем ситуацию: при обмене данными в формате АТОЛ Офлайн (даже если настроен Обмен Розницы 2.3 с Frontol 6 через FTP) система формирует текстовый файл, в котором каждой позиции номенклатуры присваивается индекс налоговой ставки. Эти индексы жестко прописаны в программном коде модулей обмена. Если в метаданных конфигурации отсутствует ставка 22%, то функция формирования файла обмена просто не находит соответствия. Это напоминает ситуации, когда требуется Исправление ошибки выгрузки никотиносодержащей продукции или выполняется Выгрузка номенклатуры из Розницы 2.3 во Frontol 6 для маркированных товаров — стандартный алгоритм либо пропускает поле, либо выдает ошибку. Для версий ПРОФ мы можем внести изменения в код, а для Базовых версий нам придется прибегнуть к хитрости на стороне кассового ПО.
Разберем по шагам, какие изменения необходимо внести в конфигурацию или расширение (если вы не планируете использовать внешние инструменты, такие как Легкая выгрузка во Frontol 6 из 1С: Розница). Основная логика сосредоточена в общих модулях, отвечающих за работу с офлайн-оборудованием. Нам потребуется модифицировать функции, которые определяют номера налогов и формируют структуры для выгрузки.
В первую очередь обратим внимание на модуль ОфлайнОборудованиеАтолККМВызовСервера. Здесь необходимо расширить структуру налогов. Рассмотрим пример реализации функции НомераНалоговНаККМПоУмолчанию:
Функция НомераНалоговНаККМПоУмолчанию() Экспорт
Налоги = Новый Структура;
Налоги.Вставить("НомерНалога0", 1);
Налоги.Вставить("НомерНалога10", 2);
Налоги.Вставить("НомерНалога20", 11); // Стандарт для 20%
Налоги.Вставить("НомерНалогаБезНДС", 4);
Налоги.Вставить("НомерНалога5", 7);
Налоги.Вставить("НомерНалога7", 8);
Налоги.Вставить("НомерНалога18", 5);
// Добавляем поддержку нашей новой ставки
Налоги.Вставить("НомерНалога22", 11);
Возврат Налоги;
КонецФункции
Обратите внимание, что в примере выше для ставки 22% используется индекс 11. Выясним причину выбора этого номера: в Frontol 6 индексы с 1 по 10 обычно зарезервированы под стандартные ставки (18, 20, 10, 0, Без НДС). Использование индекса 11 позволяет избежать конфликтов с предопределенными настройками драйвера.
Далее нам необходимо научить систему сопоставлять строковое значение ставки с кодом. Модифицируем функцию КодНалогаПоСтавкеНДС:
Функция КодНалогаПоСтавкеНДС(СтавкаНДС)
КодНалога = Неопределено;
Если СтавкаНДС = "0" Тогда
КодНалога = 4;
ИначеЕсли СтавкаНДС = "10" Тогда
КодНалога = 2;
ИначеЕсли СтавкаНДС = "20" Тогда
КодНалога = 1;
ИначеЕсли СтавкаНДС = "22" Тогда
КодНалога = 11; // Наш новый код для Frontol
КонецЕсли;
Возврат КодНалога;
КонецФункции
Важно не забыть про описание самой ставки в функции СпискиНалоговИКомбинацийНалогов, чтобы визуально в интерфейсе настройки оборудования мы могли видеть эту ставку:
// Добавление в список налогов
СтавкаНалога22 = Новый Структура;
СтавкаНалога22.Вставить("Код", 11);
СтавкаНалога22.Вставить("Текст", НСтр("ru = 'НДС 22%'"));
СтавкаНалога22.Вставить("Значение", 22);
СтавкаНалога22.Вставить("НомерНалогаККМ", НалогиНаККМ.НомерНалога22);
НалогНДС.Ставки.Добавить(СтавкаНалога22);
Часто при внедрении этого «костыля» разработчики сталкиваются с ошибкой в модуле ОфлайнОборудованиеАтолККМКлиент. Выясним причину: это происходит из-за того, что структура Налоги передается между сервером и клиентом, и если вы добавили поле на сервере, но не инициализировали его в клиентском модуле, возникнет исключение. Проверьте, чтобы во всех процедурах, где фигурирует объект Параметры или Налоги, новое поле было объявлено. Обязательно проверьте наличие свойства в модуле ОфлайнОборудованиеАтолККМКлиент.Модуль на строке, где происходит присвоение: Налоги.НомерНалога22 = Параметры.НомерНалога22;.
Если вы не хотите менять конфигурацию вручную, следует проверить наличие официальных исправлений от фирмы 1С. Для Розницы 2.3 (начиная с релизов 2.3.23.х и выше) выпускаются расширения (патчи) на партнерских конференциях или в сервисе «1С:Обновление программ». Посмотрите в разделе исправлений патч с префиксом EF_, касающийся поддержки новых налоговых ставок. Однако стоит учитывать, что патчи могут некорректно устанавливаться на сильно измененные конфигурации или Базовые версии.
Рассмотрим ситуацию, когда у вас Базовая версия «1С:Розница», в которой редактирование кода запрещено. В этом случае мы воспользуемся методом трансляции ставок на стороне кассового ПО Frontol 6.
goods.txt) этим товарам будет присвоен индекс, соответствующий выбранной ставке (например, индекс 1 для НДС 20%).Важное замечание: При таком подходе в отчетах 1С сумма НДС будет считаться по старой ставке (20%), а в чеках ККТ и отчетах Frontol — по новой (22%). Это допустимо как временная мера, но требует ручной корректировки бухгалтерской отчетности в конце периода.
Проанализируем техническую сторону взаимодействия Frontol и кассового аппарата. Даже если Frontol успешно принял ставку 22% из 1С, сама онлайн-касса должна уметь печатать такие данные. Для работы с произвольными ставками:
Таким образом, мы рассмотрели три способа решения проблемы: от прямого изменения программного кода модулей обмена ОфлайнОборудование до административной подмены настроек в самом Frontol 6. Выбор метода зависит от версии вашей программы и возможности вносить изменения в конфигурацию.