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