Как добавить значение в перечисление через расширение в 1С:ERP при низком режиме совместимости

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

При сопровождении типовых конфигураций, таких как 1С:ERP Управление предприятием, разработчики часто сталкиваются с необходимостью адаптации системы под требования международного учета. Одной из таких задач является добавление новой ставки НДС (например, 19% для Германии), которой нет в стандартном российском перечислении СтавкиНДС. Ситуация осложняется, если конфигурация находится на поддержке, а режим совместимости установлен ниже версии 8.3.14. В этой статье мы подробно разберем, почему возникает ошибка при попытке добавить значение через расширение и какими способами можно решить эту задачу.

Проанализируем причину ограничения

Разберем техническую сторону вопроса. Ошибка «Использование собственных значений для заимствованного перечисления в расширениях недопустимо в режиме совместимости 8.3.13 и ниже» является жестким ограничением платформы 1С:Предприятие. Возможность расширять состав перечислений своими значениями (собственные значения заимствованных объектов) появилась только в версии платформы 8.3.14.

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

Способ 1. Изменение режима совместимости основной конфигурации

Это самый прямой и технологически верный путь, если требуется именно расширение перечисления. Рассмотрим по шагам, как это сделать и с какими рисками можно столкнуться:

  1. Снятие с полной поддержки: Необходимо перевести конфигурацию в режим «Редактируется с сохранением поддержки». Это позволит изменять свойства самого объекта «Конфигурация», не меняя при этом программный код типовых модулей.
  2. Изменение свойств: В корне конфигурации установите свойство РежимСовместимости в значение 8.3.14 или выше (в зависимости от используемой версии платформы).
  3. Обновление расширения: После этого в расширении станет доступна возможность добавления новых значений в заимствованное перечисление СтавкиНДС.

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

Способ 2. Программная подмена неиспользуемых значений

Если повышение режима совместимости категорически недопустимо, проанализируем ситуацию с имеющимися данными. В перечислении СтавкиНДС могут присутствовать значения, которые ваша организация гарантированно не использует (например, специфические ставки для Крыма или старые ставки 18%).

Мы можем использовать расширение для изменения синонима существующего значения. Однако просто поменять синоним недостаточно, так как логика расчетов в 1С:ERP часто опирается на имя значения (идентификатор). Рассмотрим пример программного перехвата логики через расширение:


&Вместо("ПолучитьСтавкуНДСДляРасчета")
Функция Мой_ПолучитьСтавкуНДСДляРасчета(ЗначениеПеречисления)
    Если ЗначениеПеречисления = Перечисления.СтавкиНДС.НДС20 Тогда
        // Если нам нужно подменить расчет для конкретного контекста
        Возврат 19; 
    КонецЕсли;
    Возврат ПродолжитьВызов(ЗначениеПеречисления);
КонецФункции

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

Способ 3. Использование дополнительных реквизитов и модификация логики

Выясним, как реализовать задачу без изменения типовых объектов. Мы можем пойти по пути создания собственной инфраструктуры учета ставок НДС через расширение:

  1. Создадим в расширении новый справочник ДополнительныеСтавкиНДС.
  2. Добавим во все необходимые документы (Заказ клиента, Реализация товаров и услуг) реквизит, ссылающийся на этот справочник.
  3. Через механизм &Вместо или &После модифицируем процедуры расчета суммы НДС в общих модулях, таких как УчетНДС и НалоговыйУчетПереопределяемый.

Посмотрим на пример того, как может выглядеть перехват расчета суммы налога в модуле менеджера или общем модуле:


&После("РассчитатьСуммуНДС")
Процедура Расш1_РассчитатьСуммуНДС(СтрокаДокумента)
    // Проверяем, заполнена ли наша спец-ставка
    Если ЗначениеЗаполнено(СтрокаДокумента.СпецСтавкаНДС) Тогда
        СтавкаЧислом = СтрокаДокумента.СпецСтавкаНДС.Процент; // Допустим, там 19
        СтрокаДокумента.СуммаНДС = СтрокаДокумента.Сумма * СтавкаЧислом / 100;
    КонецЕсли;
КонецПроцедуры

Этот способ самый трудоемкий, так как механизмы НДС в 1С:ERP крайне разветвленные. Вам придется внести изменения в десятки мест: от форм документов до движений по регистрам и формирования печатных форм (счет-фактура, УПД).

Архитектурно верный подход: подсистема МФУ

Поскольку задача возникла в контексте организации из Германии, проанализируем возможности подсистемы Международный финансовый учет (МФУ) в 1С:ERP. В отличие от оперативного или регламентированного учета РФ, подсистема МФУ позволяет более гибко настраивать правила трансляции проводок и счета учета.

В МФУ можно настроить отображение налогов без жесткой привязки к российскому перечислению СтавкиНДС. Если цель — получение корректной отчетности по немецким стандартам, рассмотрите вариант настройки шаблонов проводок МФУ, где суммы налога будут выделяться по правилам, заданным для конкретных счетов или аналитик, минуя ограничения типового перечисления.

Подведем итоги

Добавление значения в перечисление через расширение в 1С:ERP 2.4 с режимом совместимости 8.3.12 невозможно без изменения настроек основной конфигурации. Мы рассмотрели несколько путей:

Выбор метода зависит от ваших ресурсов на тестирование и критичности сохранения "чистой" поддержки. В большинстве случаев повышение режима совместимости до 8.3.14 является наиболее оправданным решением для современных систем на платформе 8.3.

← На главную