При разработке расширений конфигурации 1С часто возникает ситуация, когда новые документы, созданные внутри расширения, не распознаются стандартными механизмами конфигурации. Например, при расшифровке проводок или использовании механизмов БСП, система может «не видеть» ваш документ, так как он отсутствует в стандартном ОписаниеТипов, используемом в типовых функциях.
Рассмотрим, почему это происходит и какие существуют методы решения данной задачи — от использования современных возможностей платформы до программных обходов.
Основная причина заключается в том, что типовые функции, такие как Документы.ТипВсеСсылки.Типы, до определенных версий платформы и настроек режима совместимости возвращали только список типов, описанных в основной конфигурации. Если ваша конфигурация работает в режиме совместимости с более ранними версиями платформы (например, 8.3.17), то даже при установленной платформе 8.3.20+ механизмы автоматического подхвата типов из расширений работать не будут.
Начиная с версии платформы 8.3.20, фирма «1С» реализовала нативную поддержку типов из расширений. Массивы типов, полученные методами Справочники.ТипВсеСсылки.Типы или Документы.ТипВсеСсылки.Типы, теперь автоматически содержат типы объектов как из конфигурации, так и из всех подключенных расширений.
Важное условие: чтобы это заработало, необходимо проверить Режим совместимости конфигурации. Если он установлен в значение ниже 8.3.20, система будет игнорировать ваши новые типы. Необходимо повысить режим совместимости конфигурации до требуемого уровня.
Если по каким-то причинам вы не можете сменить режим совместимости или работаете на более ранней версии, можно применить подход с ручным формированием описания типов. Суть метода заключается в создании собственной функции, которая дополняет стандартный массив типов вашими объектами.
Разберем, как это реализовать:
Сначала создадим функцию, которая будет дополнять стандартный массив типов новыми элементами:
Функция ВсеТипыДокументов()
МассивТипов = Документы.ТипВсеСсылки.Типы();
МассивТипов.Добавить(Тип("ДокументСсылка.РасшЦБ_ПокупкаЦенныхБумаг"));
МассивТипов.Добавить(Тип("ДокументСсылка.РасшЦБ_ПродажаЦенныхБумаг"));
// Добавьте сюда остальные типы ваших документов
Возврат МассивТипов;
КонецФункции
Далее, необходимо переопределить стандартную функцию ОписаниеТипаВсеСсылки через расширение (используя аннотацию &Вместо), чтобы она учитывала ваш дополненный массив:
Функция Расш_ОписаниеТипаВсеСсылки() Экспорт
// Формируем пирамиду типов, включая ваш дополненный список
// Внимание: пример демонстрирует общий подход к сборке составного типа
Возврат Новый ОписаниеТипов(
Новый ОписаниеТипов(Справочники.ТипВсеСсылки, ВсеТипыДокументов()),
ПланыОбмена.ТипВсеСсылки.Типы,
Перечисления.ТипВсеСсылки.Типы,
ПланыВидовХарактеристик.ТипВсеСсылки.Типы,
ПланыСчетов.ТипВсеСсылки.Типы,
ПланыВидовРасчета.ТипВсеСсылки.Типы,
БизнесПроцессы.ТипВсеСсылки.Типы,
Задачи.ТипВсеСсылки.Типы
);
КонецФункции
Если ваша задача состоит в том, чтобы сделать документ доступным в конкретном измерении регистра (например, в регистре бухгалтерии или накопления), где используется определяемый тип, вы можете пойти по пути заимствования:
Примечание: Этот метод наиболее эффективен, так как он воздействует непосредственно на метаданные, позволяя системе правильно интерпретировать ссылки в полях данных.
При работе с расширениями важно соблюдать осторожность:
Новый ОписаниеТипов() делает код трудным для сопровождения и обновления.Соблюдение этих правил поможет вам создавать устойчивые и масштабируемые решения, которые не сломаются при очередном обновлении типовой конфигурации.