При разработке и сопровождении систем на базе 1С часто возникает задача добавить возможность использования новых типов данных в механизме дополнительных реквизитов и сведений. План видов характеристик (ПВХ) ДополнительныеРеквизитыИСведения является ключевым объектом Библиотеки стандартных подсистем (БСП), и его изменение напрямую в основной конфигурации крайне нежелательно, так как это усложняет процесс обновления. В этой статье мы подробно разберем, как решить эту задачу с помощью расширений, проанализируем возможности современных версий платформы и выясним, какие риски стоит учитывать.
Долгое время расширение состава типов Плана видов характеристик было «камнем преткновения» для разработчиков. В версиях платформы ниже 8.3.20 попытка изменить свойство Тип значения характеристик в расширении приводила к ошибкам или игнорированию изменений. Рассмотрим ситуацию подробнее: до определенного момента платформа позволяла заимствовать ПВХ, но не давала возможности редактировать его составной тип данных.
Начиная с версии 8.3.20.1549, ситуация изменилась. Платформа официально поддерживает переопределение типа значения характеристик. Если мы работаем на актуальной версии, мы можем полноценно использовать этот механизм. Однако, если ваша информационная база все еще работает на 8.3.18 или более ранних релизах, стандартный путь через расширение ПВХ будет недоступен.
Рассмотрим пошагово процесс добавления нового типа в План видов характеристик ДополнительныеРеквизитыИСведения:
ДополнительныеРеквизитыИСведения в наше расширение.Тип значения характеристик и добавляем в список наш новый справочник или документ (который также должен быть в расширении или основной конфигурации).Проанализируем особенность: если мы не заимствуем старые типы, а просто укажем свой новый тип в расширении, то в режиме «1С:Предприятие» старые типы могут пропасть из выбора. Поэтому важно убедиться, что «галочки» стоят на всех необходимых объектах.
Часто задача расширения ПВХ связана не с самим списком типов, которые может принимать характеристика, а с тем, для каких объектов мы хотим эти характеристики создавать. В БСП за это отвечают определяемые типы.
Разберем ситуацию: если нам нужно сделать наш новый справочник владельцем дополнительных реквизитов, нам не всегда нужно менять ПВХ. Проверим наличие в расширении определяемого типа ДополнительныйРеквизитВладелец. Добавив в него наш объект, мы автоматически включаем его в инфраструктуру БСП. Однако, если нам нужно именно использовать ссылку на наш объект в качестве значения реквизита другого объекта, то мы возвращаемся к расширению типа ПВХ.
Рассмотрим совет опытных разработчиков: иногда проще и «чище» добавить нужный реквизит напрямую в объект через расширение. С версии платформы 8.3.11 это работает максимально стабильно.
Выясним преимущества этого метода:
ДополнительныеСведения.Проанализируем ситуацию, описанную в сообщении №9 форума. Удаление расширения, которое модифицировало составной тип данных, может привести к серьезным последствиям. Если в базе уже созданы записи (например, в регистре ДополнительныеСведения), где в качестве значения хранится ссылка на тип из расширения, то после удаления расширения 1С «потеряет» описание этого типа — поможет обработка диагностики и очистки битых ссылок в регистрах.
Чтобы избежать ошибок «Объект не найден» и проблем при тестировании и исправлении (ТиИ) (есть готовая обработка для поиска и удаления битых ссылок), выполним следующие действия перед удалением такого расширения:
// Пример очистки данных перед удалением расширения
Процедура ОчиститьДопСведенияПередУдалением()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Объект
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Значение ССЫЛКА Справочник.МойСправочникИзРасширения";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Свойство = Выборка.Свойство;
МенеджерЗаписи.Объект = Выборка.Объект;
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Удалить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важный момент: если вы добавили новый тип в ПВХ, убедитесь, что вы также обновили соответствующие наборы в справочнике НаборыДополнительныхРеквизитовИСведений, иначе пользователи не смогут выбрать новый тип в интерфейсе при настройке состава реквизитов.
Мы выяснили, что расширение типа данных ПВХ ДополнительныеРеквизитыИСведения возможно и поддерживается в современных версиях платформы 1С. Однако этот путь требует внимательности при заимствовании метаданных и несет риски при необходимости удаления расширения.
Рассмотрим финальные рекомендации:
Таким образом, мы детально разобрали механизм работы с планами видов характеристик в расширениях и подготовили почву для успешной реализации задачи.