Как добавить предопределенные значения в справочник конфигурации, находящейся на поддержке?

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

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

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

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

Вариант 1: Снятие конфигурации с поддержки

Это самый радикальный метод, который часто называют «уронить шкаф». Вы можете снять конфигурацию с поддержки, добавить необходимые элементы и вернуть ее обратно. Однако мы крайне не рекомендуем этот путь, так как он создает огромные сложности при обновлении конфигурации в будущем. Конфликты при сравнении и объединении версий могут привести к потере данных или нарушению работоспособности системы.

Вариант 2: Использование перечислений

Если ваша цель — жестко ограничить выбор пользователя фиксированным списком значений, рассмотрите использование объекта Перечисления. Вы можете создать новое перечисление в расширении. Логика работы программы перестраивается таким образом, чтобы вместо поиска предопределенного элемента справочника, система обращалась к значениям перечисления.

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

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


Процедура ПриНачалеРаботыСистемы()
    Если Не ЗначениеЗаполнено(РегистрыСведений.МоиНастройки.ПолучитьПоследнююЗапись()) Тогда
        // Создаем записи программно
        НоваяЗапись = РегистрыСведений.МоиНастройки.СоздатьМенеджерЗаписи();
        НоваяЗапись.Ключ = \"ОсновнойЭлемент\";
        НоваяЗапись.Значение = Справочники.Контрагенты.НайтиПоКоду(\"000000001\");
        НоваяЗапись.Записать();
    КонецЕсли;
КонецПроцедуры

Вариант 4: Хранение ссылок в константах

Если вам нужно «зафиксировать» конкретный объект справочника, вы можете создать Константу в расширении. В значении константы можно хранить УникальныйИдентификатор (GUID) или Код нужного элемента справочника. При обращении к логике, требующей предопределенного значения, используйте значение константы:


// Получение элемента по значению константы
Идентификатор = Константы.ОсновнойСклад.Получить();
Склад = Справочники.Склады.ПолучитьСсылку(Идентификатор);

Вариант 5: Создание справочника «Настройки» в расширении

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

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

← На главную