Переход на новые ставки НДС (в частности, на 20%) и одновременное обновление драйверов торгового оборудования — одна из наиболее ресурсоемких задач для системных администраторов и программистов 1С, сопровождающих устаревшие или сильно доработанные конфигурации. Типичный пример — работа с конфигурацией «1С:Управление торговлей 10.3» на обычных формах (платформа 1С:Предприятие 8.3), которая не обновлялась годами.
Когда база отстает от актуального релиза на десятки обновлений, стандартный путь последовательного «накатывания» всех cf-файлов становится неоправданно долгим и рискованным процессом. В этой статье мы подробно разберем, как решить проблему перехода на НДС 20% и подружить старую базу с новыми драйверами кассовой техники (например, АТОЛ ДТО 10), не прибегая к полному обновлению всей конфигурации.
Рассмотрим ситуацию: ваша база 1С отстает от актуального релиза на 25–30 обновлений, в нее внесено множество нетиповых доработок, а на балансе предприятия находится несколько организаций со своими кассами. Попытка обновиться «в лоб» через последовательное объединение конфигураций сопряжена со следующими трудностями:
Проанализируем альтернативные и гораздо более быстрые варианты решения этой задачи.
---
Для того чтобы научить старую конфигурацию работать с новым драйвером ККТ (например, АТОЛ 10-й версии), совершенно необязательно переписывать весь код интеграции в конфигурации. В «1С:Управление торговлей 10.3» подключение торгового оборудования реализовано через внешние обработки обслуживания (файлы с расширением .epf).
Выясним, как работает этот механизм:
---
Если ставка 20% уже поддерживается вашей онлайн-кассой на уровне прошивки, нам необходимо лишь передавать корректное значение ставки из самой информационной базы. Чтобы база начала подставлять 20% в документы и чеки, выполним следующие шаги:
Шаг 1. Групповое изменение реквизитов в справочнике Номенклатура
Используем встроенную обработку «Групповая обработка справочников и документов» или «Изменение реквизитов». Нам нужно заменить значение ставки НДС с 18% на 20% для всех позиций номенклатуры. Рассмотрим пример кода, который выполняет эту операцию программно для определенной группы товаров:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Если Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
ОбъектНоменклатуры = Выборка.ПолучитьОбъект();
ОбъектНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; // Убедитесь, что значение НДС20 добавлено в перечисление
Попытка
ОбъектНоменклатуры.Записать();
Сообщить("Изменена ставка для товара: " + ОбъектНоменклатуры.Наименование);
Исключение
Сообщить("Ошибка записи товара: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Шаг 2. Обновление пользовательских настроек
В регистре сведений «Настройки пользователей» найдем параметр «Основная ставка НДС». Изменим его значение по умолчанию с 18% на 20% для всех пользователей системы, чтобы новые документы создавались с актуальной ставкой автоматически.
---
Если дорабатывать старую конфигурацию под новые требования ФЗ-54 и новые драйверы категорически не хочется, рассмотрим архитектурный паттерн с выделенной базой для печати чеков. В качестве кассового сервера можно использовать чистую, актуальную конфигурацию «1С:Розница 2» или «1С:УНФ».
Схема взаимодействия выглядит следующим образом:
Важный нюанс этого подхода: Обратите внимание на расчет сумм скидок и округлений. Разные конфигурации 1С могут использовать разные алгоритмы распределения скидок по строкам чека. Перед запуском схемы в промышленную эксплуатацию обязательно протестируйте совпадение итоговых сумм документов в обеих базах с точностью до копейки, иначе касса выдаст ошибку расхождения математического баланса.
---
Еще один практический способ обойти ограничения старой БПО — использование внешних утилит печати чеков. Многие разработчики используют схему экспорта данных во внешний файл:
Посмотрим на пример формирования структуры чека в формате JSON внутри 1С для передачи внешней утилите:
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, " ", Истина);
ЗаписьJSON.ОткрытьФайл("C:\Exchange\new_receipt.json", , , ПараметрыЗаписи);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("type");
ЗаписьJSON.ЗаписатьЗначение("sell"); // Продажа
ЗаписьJSON.ЗаписатьИмяСвойства("items");
ЗаписьJSON.ЗаписатьНачалоМассива();
// Начинаем обход строк документа
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("name");
ЗаписьJSON.ЗаписатьЗначение("Товар тестовый");
ЗаписьJSON.ЗаписатьИмяСвойства("price");
ЗаписьJSON.ЗаписатьЗначение(120.00);
ЗаписьJSON.ЗаписатьИмяСвойства("quantity");
ЗаписьJSON.ЗаписатьЗначение(1);
ЗаписьJSON.ЗаписатьИмяСвойства("amount");
ЗаписьJSON.ЗаписатьЗначение(120.00);
ЗаписьJSON.ЗаписатьИмяСвойства("tax");
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("type");
ЗаписьJSON.ЗаписатьЗначение("vat20"); // Передаем ставку 20%
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.Закрыть();
---
Мы проанализировали различные пути решения проблемы перехода на новые стандарты учета и оборудования без осуществления болезненного процесса полного обновления «1С:Управление торговлей 10.3».