Работа с расширениями конфигурации в 1С открывает широкие возможности для доработки системы без снятия с поддержки. Однако, когда дело доходит до изменения типов данных, таких как ОпределяемыйТип, разработчики часто сталкиваются с неочевидным поведением платформы. Особенно это актуально при попытке включить новые документы в стандартные механизмы Библиотеки Стандартных Подсистем (БСП), например, реализуя переход на механизм версионирования объектов БСП.
В этой статье мы подробно разберем проблему, с которой сталкиваются многие коллеги: вы добавили документ в расширение, включили его в заимствованный ОпределяемыйТип, но в режиме "1С:Предприятие" настройки версионирования этот документ не видят. Проанализируем причины такого поведения и пошагово рассмотрим правильный алгоритм действий. Для более глубокого погружения в тему также рекомендуем изучить справочник по методам БСП с примерами использования.
Ситуация выглядит следующим образом: в основной конфигурации существует ОпределяемыйТип.ВерсионируемыеДанные. Вы создаете расширение, добавляете туда собственные документы и хотите, чтобы для них работала история изменений. Вы заимствуете определяемый тип в расширение и добавляете туда свои документы. В конфигураторе ошибок нет, но в пользовательском режиме в настройках "История изменений" новые документы отсутствуют.
Здесь важно учитывать два фактора:
Давайте разберем решение этой задачи поэтапно.
Самая распространенная ошибка заключается в попытке воспроизвести в расширении весь состав типов, который есть в основной конфигурации. Начиная с режима совместимости 8.3.20, платформа работает по принципу объединения множеств (Union). На этом этапе полезно провести анализ состава расширения на наличие ошибок, чтобы убедиться в чистоте структуры метаданных.
Рассмотрим, как правильно настроить свойства заимствованного типа:
ОпределяемыйТип из основной конфигурации. Также в расширении должны присутствовать (быть созданы или заимствованы) те объекты (документы, справочники), которые вы хотите добавить в состав типа.Когда вы открываете свойства заимствованного определяемого типа в расширении, вы можете увидеть, что поле "Тип" отображается как Произвольный или пустое. Это часто сбивает с толку.
Важно: Не нужно пытаться добавить туда типы из основной конфигурации. В расширении вы должны указать только те типы, которые добавляет само расширение.
Нажмите на кнопку выбора (три точки) в поле "Тип". Если установлен флаг Произвольный — снимите его. В открывшемся списке типов отметьте галочками только ваши новые документы (или справочники), находящиеся в расширении.
В итоге, в режиме "Предприятие" платформа автоматически "сложит" типы из основной конфигурации и типы, отмеченные вами в расширении. Если вы попытаетесь отметить типы из основной конфигурации, которые не заимствованы, платформа не даст этого сделать, либо это приведет к ошибкам избыточности.
Для корректной работы версионирования (и многих других механизмов БСП) недостаточно просто изменить ОпределяемыйТип. Механизм записи версий срабатывает через подписки на события.
Вам необходимо найти подписку на события, отвечающую за запись версии — поможет подсистема ведения истории изменений и отката версий. Обычно она называется ЗаписатьВерсиюДокумента (для документов) или аналогично для справочников.
Действия:
ЗаписатьВерсиюДокумента в расширение.ДокументОбъект.ВашДокумент).Без этого шага настройка в интерфейсе может появиться (так как она читает определяемый тип), но физически запись версий происходить не будет, так как событие записи не будет перехвачено.
Даже если вы все сделали правильно в конфигураторе, в режиме "Предприятие" новые объекты могут не появиться сразу. Это связано с тем, что БСП использует служебный справочник ИдентификаторыОбъектовМетаданных и механизмы кэширования для построения списков настроек.
Если вы добавили новые метаданные (документы) или изменили состав определяемых типов, необходимо выполнить процедуру обновления идентификаторов.
Способы решения:
1. Автоматическое обновление при запуске: Запустите программу с параметром запуска:
/C ЗапуститьОбновлениеИнформационнойБазы
Или для клиент-серверного варианта:
/C "ЗапуститьОбновлениеИнформационнойБазы"
Это инициирует выполнение отложенных обработчиков обновления БСП, которые просканируют метаданные и добавят новые объекты в справочник идентификаторов.
2. Использование обработки (для разработчика): В составе БСП или через меню "Все функции" можно найти процедуру обновления. Если штатных средств недостаточно, можно использовать специализированный инструмент для запуска процедур обработчиков обновления в типовых конфигурациях, который принудительно актуализирует вспомогательные данные.
Если после всех действий ваши типы все еще пропадают или версионирование не работает, пройдитесь по этому списку:
ОпределяемыйТип.ВерсионируемыеДанные снят флаг "Произвольный" и выбраны только новые типы из расширения. Для этой задачи есть обработка ведения журнала изменений и восстановления объектов.ОпределяемыйТип.ВерсионируемыеДанные обычно добавляются типы ссылок (ДокументСсылка.ВашДокумент), а в Подписку на событие — типы объектов (ДокументОбъект.ВашДокумент). Не перепутайте их.Рассмотрим сводный алгоритм, который привел к успеху в аналогичной ситуации:
ОпределяемыйТип.ВерсионируемыеДанные.Документ.МойНовыйДокумент.ДокументСсылка.МойНовыйДокумент. Нажимаем ОК.ЗаписатьВерсиюДокумента.ДокументОбъект.МойНовыйДокумент./C ЗапуститьОбновлениеИнформационнойБазы.Соблюдение этого порядка действий гарантирует корректное расширение функционала типовых конфигураций без изменения объектов поставщика.