Как перейти на НДС 20% и установить новый драйвер ККТ в старой версии 1С:Управление торговлей 10.3?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Переход на новые ставки НДС (в частности, на 20%) и одновременное обновление драйверов торгового оборудования — одна из наиболее ресурсоемких задач для системных администраторов и программистов 1С, сопровождающих устаревшие или сильно доработанные конфигурации. Типичный пример — работа с конфигурацией «1С:Управление торговлей 10.3» на обычных формах (платформа 1С:Предприятие 8.3), которая не обновлялась годами.

Когда база отстает от актуального релиза на десятки обновлений, стандартный путь последовательного «накатывания» всех cf-файлов становится неоправданно долгим и рискованным процессом. В этой статье мы подробно разберем, как решить проблему перехода на НДС 20% и подружить старую базу с новыми драйверами кассовой техники (например, АТОЛ ДТО 10), не прибегая к полному обновлению всей конфигурации.

Почему стандартное обновление — это не всегда лучший выбор?

Рассмотрим ситуацию: ваша база 1С отстает от актуального релиза на 25–30 обновлений, в нее внесено множество нетиповых доработок, а на балансе предприятия находится несколько организаций со своими кассами. Попытка обновиться «в лоб» через последовательное объединение конфигураций сопряжена со следующими трудностями:

  1. Огромные временные затраты. Каждое обновление требует создания резервной копии, сравнения и объединения конфигураций, исправления возможных конфликтов в коде и тестирования работоспособности. На 25 релизов могут уйти недели работы.
  2. Риск затереть уникальный функционал. В сильно кастомизированных базах высок риск случайно удалить или повредить доработки, сделанные предыдущими программистами.
  3. Цепная реакция обновлений подсистем. Новые версии Библиотеки подключаемого оборудования (БПО) часто требуют обновления Библиотеки стандартных подсистем (БСП), которая, в свою очередь, может потребовать повышения минимальной версии платформы 1С.

Проанализируем альтернативные и гораздо более быстрые варианты решения этой задачи.

---

Вариант 1. Использование внешних обработок обслуживания и оберток драйвера

Для того чтобы научить старую конфигурацию работать с новым драйвером ККТ (например, АТОЛ 10-й версии), совершенно необязательно переписывать весь код интеграции в конфигурации. В «1С:Управление торговлей 10.3» подключение торгового оборудования реализовано через внешние обработки обслуживания (файлы с расширением .epf).

Выясним, как работает этот механизм:

  1. Вместо изменения конфигурации мы можем подключить специализированную внешнюю обработку обслуживания ККТ. Такие обработки пишутся под конкретную версию драйвера (например, под АТОЛ ДТО 10).
  2. Если обработка написана корректно, она сама выступает транслятором команд старой БПО в формат нового драйвера.
  3. Существуют также специализированные «компоненты-обертки» (wrappers). Они регистрируются в операционной системе под видом старой библиотеки драйвера (например, 8-й или 9-й версии АТОЛ), перехватывают вызовы из 1С и перенаправляют их в ДТО 10. Для 1С этот процесс выглядит абсолютно прозрачно: программа считает, что работает со старым драйвером, в то время как чек пробивается через современный стек ПО.

---

Вариант 2. Изменение ставки НДС на уровне данных в 1С (без изменения кода)

Если ставка 20% уже поддерживается вашей онлайн-кассой на уровне прошивки, нам необходимо лишь передавать корректное значение ставки из самой информационной базы. Чтобы база начала подставлять 20% в документы и чеки, выполним следующие шаги:

Шаг 1. Групповое изменение реквизитов в справочнике Номенклатура

Используем встроенную обработку «Групповая обработка справочников и документов» или «Изменение реквизитов». Нам нужно заменить значение ставки НДС с 18% на 20% для всех позиций номенклатуры. Рассмотрим пример кода, который выполняет эту операцию программно для определенной группы товаров:


Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.ЭтоГруппа Тогда
        Продолжить;
    КонецЕсли;
    
    Если Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
        ОбъектНоменклатуры = Выборка.ПолучитьОбъект();
        ОбъектНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; // Убедитесь, что значение НДС20 добавлено в перечисление
        Попытка
            ОбъектНоменклатуры.Записать();
            Сообщить("Изменена ставка для товара: " + ОбъектНоменклатуры.Наименование);
        Исключение
            Сообщить("Ошибка записи товара: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Шаг 2. Обновление пользовательских настроек

В регистре сведений «Настройки пользователей» найдем параметр «Основная ставка НДС». Изменим его значение по умолчанию с 18% на 20% для всех пользователей системы, чтобы новые документы создавались с актуальной ставкой автоматически.

---

Вариант 3. Выделенная база для печати чеков (кассовый сервер)

Если дорабатывать старую конфигурацию под новые требования ФЗ-54 и новые драйверы категорически не хочется, рассмотрим архитектурный паттерн с выделенной базой для печати чеков. В качестве кассового сервера можно использовать чистую, актуальную конфигурацию «1С:Розница 2» или «1С:УНФ».

Схема взаимодействия выглядит следующим образом:

  1. Пользователи продолжают вести весь оперативный учет, выписывать документы и принимать заказы в старой «1С:Управление торговлей 10.3».
  2. В момент проведения документа оплаты (или по нажатию кнопки «Пробить чек») данные документа выгружаются во внешнюю кассовую базу. Обмен можно организовать через XML, JSON, веб-сервисы или прямое COM-соединение.
  3. В кассовой базе (например, в «Рознице») автоматически создается аналогичный документ (например, Чек ККМ), который отправляет команду на печать в подключенную ККТ по актуальным протоколам и с новыми драйверами.

Важный нюанс этого подхода: Обратите внимание на расчет сумм скидок и округлений. Разные конфигурации 1С могут использовать разные алгоритмы распределения скидок по строкам чека. Перед запуском схемы в промышленную эксплуатацию обязательно протестируйте совпадение итоговых сумм документов в обеих базах с точностью до копейки, иначе касса выдаст ошибку расхождения математического баланса.

---

Вариант 4. Печать чеков через текстовые файлы или внешние утилиты

Еще один практический способ обойти ограничения старой БПО — использование внешних утилит печати чеков. Многие разработчики используют схему экспорта данных во внешний файл:

  1. В старой 1С пишется простая обработка, которая выгружает все необходимые реквизиты чека (наименования позиций, количество, цену, ставку НДС 20%, признак способа расчета) в текстовый файл формата JSON или XML.
  2. Специальная внешняя утилита-монитор (написанная на C#, Python или являющаяся готовым решением с маркетплейсов вроде Инфостарта) отслеживает появление новых файлов в определенной папке.
  3. Утилита считывает файл, инициализирует объект нового драйвера ККТ (ДТО 10) напрямую в операционной системе и отправляет чек на печать.

Посмотрим на пример формирования структуры чека в формате 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».

← На главную