При доработке типовых конфигураций 1С разработчики часто сталкиваются с неприятной ситуацией: после обновления релиза конфигурации добавленные вручную предопределенные элементы в типовых справочниках или планах счетов теряют свой статус предопределенности, превращаются в обычные элементы и даже помечаются на удаление. Проанализируем причину возникновения этого поведения и разберем наиболее эффективные способы решения этой задачи.
Чтобы понять, как избежать этой проблемы, разберем по шагам механизмы работы платформы «1С:Предприятие 8.3» и Библиотеки Стандартных Подсистем (БСП):
ИмяПредопределенныхДанных. При объединении конфигураций без правильной настройки замещение типового объекта полностью перетирает структуру предопределенных элементов, разрывая эту связь.Обновление предопределенных данных. При значениях Авто или Обновлять автоматически платформа при реструктуризации самостоятельно приводит данные в соответствие с конфигурацией метаданных.Если доработка уже выполнена через добавление предопределенных элементов в Конфигураторе, необходимо корректно выполнять процедуру обновления информационной базы.
Рассмотрим порядок действий при обновлении:
Преф_Счет_90_01, код: 90.01.П).Современный стандарт разработки на платформе 1С рекомендует полностью отказаться от добавления предопределенных элементов в Конфигураторе для типовых объектов. Вместо этого задействуется программное создание элементов при вызове обработчиков обновления БСП.
Рассмотрим подробнее алгоритм реализации этого подхода:
Справочники.Номенклатура.МойЭлемент), а через получение ссылки из константы (Константы.МойЭлемент.Получить()).Посмотрим на пример кода процедур-обработчиков при обновлении информационной базы:
Процедура ПриОбновленииИнформационнойБазы() Экспорт
// Проверяем наличие элемента в базе
СсылкаНаЭлемент = Константы.НашаСлужебнаяУслуга.Получить();
Если Не ЗначениеЗаполнено(СсылкаНаЭлемент) Или СсылкаНаЭлемент.ПометкаУдаления Тогда
СправочникОбъект = Справочники.Номенклатура.СоздатьЭлемент();
СправочникОбъект.Наименование = "Служебная услуга (доработка)";
СправочникОбъект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга;
Попытка
СправочникОбъект.Записать();
Константы.НашаСлужебнаяУслуга.Установить(СправочникОбъект.Ссылка);
Исключение
ЗаписьЖурналаРегистрации("Обновление ИБ", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Проанализируем еще одно архитектурное решение, позволяющее полностью изолировать пользовательские настройки от изменений в типовой конфигурации. Вы можете создать собственный справочник (например, ПредопределенныеЗначения) в ветке метаданных вашей доработки.
Структура такого справочника выглядит следующим образом:
Значение с произвольным типом (или ссылкой на нужные типовые справочники / планы счетов).Такой подход обеспечивает абсолютную безопасность при любых обновлениях типовых релизов от фирмы «1С», так как типовые справочники и планы счетов остаются полностью нетронутыми на уровне метаданных.