Как программно добавить реквизит в функциональную опцию или обойти её ограничения в 1С?

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

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

Можно ли изменить состав функциональной опции программно?

Первое, что важно усвоить: состав функциональных опций жестко прописан в метаданных конфигурации. На текущий момент платформа 1С не предоставляет штатного API для динамического изменения состава ФО (добавления или удаления реквизитов) «на лету» в процессе работы пользователя. Следовательно, попытки программно переопределить состав ФО не принесут результата, так как это поведение заложено на уровне ядра платформы.

Вариант 1: Использование расширений конфигурации

Если ваша версия платформы поддерживает расширения (начиная с 8.3.15 и выше для полноценной работы с объектами), мы можем использовать их для обхода логики. Если текущий режим совместимости конфигурации ниже, рекомендуется проанализировать возможность его поднятия, однако помните о рисках — изменение режима совместимости может повлиять на работу всей типовой логики.

Если требуется добавить видимость поля, которое скрыто функциональной опцией, мы можем:

  1. Создать расширение и добавить на форму документа нужный реквизит (даже если его нет в основном объекте метаданных).
  2. Использовать обработчики событий в расширении (например, ПередЗаписью), чтобы сохранить данные из этого реквизита формы в ДополнительныеСвойства объекта.

Вариант 2: Обход проверок при записи объекта

Типовые конфигурации часто содержат встроенные проверки на наличие лицензии или включение опций. Например, при записи документа процедура ПередЗаписью в модуле объекта может принудительно очищать поле Подразделение, если функциональная опция ВестиУчетПоПодразделениям выключена. Разберем, как это можно обойти:

Мы можем создать расширение и использовать аннотацию &Вместо для метода, который выполняет очистку. Таким образом, мы переопределим поведение системы:


// Пример переопределения логики очистки в расширении
&Вместо("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ)
    // Сохраняем наше значение, чтобы типовой механизм его не затер
    ЗначениеПодразделения = ЭтотОбъект.Подразделение;
    
    // Вызываем оригинальный метод
    ПродолжитьВызов(Отказ);
    
    // Возвращаем значение обратно
    ЭтотОбъект.Подразделение = ЗначениеПодразделения;
КонецПроцедуры

Вариант 3: Использование дополнительных свойств

Если прямое изменение реквизита объекта вызывает конфликты с типовой логикой, мы можем пойти по пути временного хранения данных. Суть метода заключается в использовании коллекции ДополнительныеСвойства объекта документа:

  1. Добавляем реквизит только на форму.
  2. В обработчике формы при записи помещаем значение в ДополнительныеСвойства.
  3. В расширении модуля объекта после записи (или при проведении) считываем данные из этой коллекции и принудительно записываем их в базу данных.

Важные замечания по проведению документов

Нужно помнить, что даже если мы «заставим» поле отображаться и сохраняться, типовой алгоритм проведения может продолжить работать по своим правилам. В процедурах ОбработкаПроведения могут стоять проверки на наличие ФО. Если ФО выключена, движения по регистрам (например, по регистру бухгалтерии) могут формироваться без аналитики по подразделению.

Для полноценного решения этой задачи вам придется:

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

← На главную