Такая же ошибка еще выскакивает в ЕРП при попытке добавить объекты из расширений в версионирование. П-ы из 1С вообще не тестируют свой код. Придумали версионирование объектов расширений и забыли включить возможность его использования. На форме НастройкиХраненияИстории регистра сведений НастройкиВерсионированияОбъектов тип данных реквизита ТипОбъекта дерева ДеревоОбъектовМетаданных должен включать ИдентификаторыОбъектовРасширений, а не только ИдентификаторыОбъектовМетаданных. Хорошо хоть они додумались оставить там тип Строка на всякий случай. (Чтобы в дальнейшем его неправильно заполнить). Обойти можно в расширении вот таким исправлением функции
&НаСервере
&ИзменениеИКонтроль("ЗаполнитьТипыОбъектовВДеревеЗначений")
Процедура ДР_ЗаполнитьТипыОбъектовВДеревеЗначений()
НастройкиВерсионирования = ТекущиеНастройкиВерсионирования();
ДеревоОМ = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных");
ДеревоОМ.Строки.Очистить();
// Тип параметра команды ИсторияИзменений содержит состав объектов для которых
// применяется версионирование.
МассивТипов = Метаданные.ОбщиеКоманды.ИсторияИзменений.ТипПараметраКоманды.Типы();
#Вставка
Если МассивТипов.Найти(Тип("СправочникСсылка.ХарактеристикиНоменклатуры")) = Неопределено Тогда
МассивТипов.Вставить(0, Тип("СправочникСсылка.ХарактеристикиНоменклатуры"));
КонецЕсли;
Если МассивТипов.Найти(Тип("ДокументСсылка.Спецификация")) = Неопределено Тогда
МассивТипов.Вставить(0, Тип("ДокументСсылка.Спецификация"));
КонецЕсли;
#КонецВставки
ЕстьБизнесПроцессы = Ложь;
ВсеСправочники = Справочники.ТипВсеСсылки();
ВсеДокументы = Документы.ТипВсеСсылки();
УзелСправочники = Неопределено;
УзелДокументы = Неопределено;
УзелБизнесПроцессы = Неопределено;
Для Каждого Тип Из МассивТипов Цикл
Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда
Продолжить;
КонецЕсли;
Если ВсеСправочники.СодержитТип(Тип) Тогда
Если УзелСправочники = НеОпределено Тогда
УзелСправочники = ДеревоОМ.Строки.Добавить();
УзелСправочники.СинонимНаименованияОбъекта = НСтр("ru = 'Справочники';
|en = 'Catalogs'");
УзелСправочники.КлассОбъекта = "01КлассСправочникиКорень";
УзелСправочники.КодКартинки = 2;
КонецЕсли;
НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить();
НоваяСтрокаТаблицы.КодКартинки = 19;
НоваяСтрокаТаблицы.КлассОбъекта = "КлассСправочники";
ИначеЕсли ВсеДокументы.СодержитТип(Тип) Тогда
Если УзелДокументы = НеОпределено Тогда
УзелДокументы = ДеревоОМ.Строки.Добавить();
УзелДокументы.СинонимНаименованияОбъекта = НСтр("ru = 'Документы';
|en = 'Documents'");
УзелДокументы.КлассОбъекта = "02КлассДокументыКорень";
УзелДокументы.КодКартинки = 3;
КонецЕсли;
НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить();
НоваяСтрокаТаблицы.КодКартинки = 20;
НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы";
ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда
Если УзелБизнесПроцессы = Неопределено Тогда
УзелБизнесПроцессы = ДеревоОМ.Строки.Добавить();
УзелБизнесПроцессы.СинонимНаименованияОбъекта = НСтр("ru = 'Бизнес-процессы';
|en = 'Business processes'");
УзелБизнесПроцессы.КлассОбъекта = "03БизнесПроцессыКорень";
УзелБизнесПроцессы.ТипОбъекта = "БизнесПроцессы";
КонецЕсли;
НоваяСтрокаТаблицы = УзелБизнесПроцессы.Строки.Добавить();
НоваяСтрокаТаблицы.КлассОбъекта = "КлассБизнесПроцессы";
ЕстьБизнесПроцессы = Истина;
ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда
ИмяГруппы = "04ПланыСчетовКорень";
ПредставлениеГруппы = НСтр("ru = 'Планы счетов';
|en = 'Charts of accounts'");
ТипОбъектовГруппы = "ПланыСчетов";
Группа = ДеревоОМ.Строки.Найти(ИмяГруппы, "КлассОбъекта");
Если Группа = Неопределено Тогда
Группа = ДеревоОМ.Строки.Добавить();
Группа.СинонимНаименованияОбъекта = ПредставлениеГруппы;
Группа.КлассОбъекта = ИмяГруппы;
Группа.ТипОбъекта = ТипОбъектовГруппы;
КонецЕсли;
НоваяСтрокаТаблицы = Группа.Строки.Добавить();
НоваяСтрокаТаблицы.КлассОбъекта = "КлассПланыСчетов";
ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда
ИмяГруппы = "05ПланыВидовХарактеристикКорень";
ПредставлениеГруппы = НСтр("ru = 'Планы видов характеристик';
|en = 'Charts of characteristic types'");
ТипОбъектовГруппы = "ПланыВидовХарактеристик";
Группа = ДеревоОМ.Строки.Найти(ИмяГруппы, "КлассОбъекта");
Если Группа = Неопределено Тогда
Группа = ДеревоОМ.Строки.Добавить();
Группа.СинонимНаименованияОбъекта = ПредставлениеГруппы;
Группа.КлассОбъекта = ИмяГруппы;
Группа.ТипОбъекта = ТипОбъектовГруппы;
КонецЕсли;
НоваяСтрокаТаблицы = Группа.Строки.Добавить();
НоваяСтрокаТаблицы.КлассОбъекта = "КлассПланыВидовХарактеристик";
ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда
ИмяГруппы = "06ПланыВидовРасчетаКорень";
ПредставлениеГруппы = НСтр("ru = 'Планы видов расчета';
|en = 'Charts of calculation types'");
ТипОбъектовГруппы = "ПланыВидовРасчета";
Группа = ДеревоОМ.Строки.Найти(ИмяГруппы, "КлассОбъекта");
Если Группа = Неопределено Тогда
Группа = ДеревоОМ.Строки.Добавить();
Группа.СинонимНаименованияОбъекта = ПредставлениеГруппы;
Группа.КлассОбъекта = ИмяГруппы;
Группа.ТипОбъекта = ТипОбъектовГруппы;
КонецЕсли;
НоваяСтрокаТаблицы = Группа.Строки.Добавить();
НоваяСтрокаТаблицы.КлассОбъекта = "КлассПланыВидовРасчета";
КонецЕсли;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип);
НоваяСтрокаТаблицы.ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип);
НоваяСтрокаТаблицы.СинонимНаименованияОбъекта = МетаданныеОбъекта.Синоним;
НайденныеНастройки = НастройкиВерсионирования.НайтиСтроки(Новый Структура("ТипОбъекта", НоваяСтрокаТаблицы.ТипОбъекта));
#Вставка
Если ТипЗнч(НоваяСтрокаТаблицы.ТипОбъекта) = Тип("Строка") Тогда
НоваяСтрокаТаблицы.ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип).ПолноеИмя;
НайденныеНастройки = НастройкиВерсионирования.НайтиСтроки(Новый Структура("ТипОбъекта", ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип)));
КонецЕсли;
#КонецВставки
Если НайденныеНастройки.Количество() > 0 Тогда
НоваяСтрокаТаблицы.ВариантВерсионирования = НайденныеНастройки[0].ВариантВерсионирования;
НоваяСтрокаТаблицы.СрокХраненияВерсий = НайденныеНастройки[0].СрокХраненияВерсий;
Если Не ЗначениеЗаполнено(НайденныеНастройки[0].СрокХраненияВерсий) Тогда
НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
КонецЕсли;
Иначе
НоваяСтрокаТаблицы.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать;
НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
КонецЕсли;
Если НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы" Тогда
НоваяСтрокаТаблицы.Проводится = ? (МетаданныеОбъекта.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить, Истина, Ложь);
КонецЕсли;
КонецЦикла;
ДеревоОМ.Строки.Сортировать("КлассОбъекта");
Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл
УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта");
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных");
Элементы.ФормаВерсионироватьПриСтарте.Видимость = ЕстьБизнесПроцессы;
КонецПроцедуры
Показать
Первая вставка добавляет в качестве примера два дополнительных объекта для версионирования, один из типовой конфигурации, другой из расширения.
Вторая вставка обходит баг с получением идентификатора в функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных.
В дальнейшем для использования версионирования в любых объектах надо в модуле объекта вставить в процедуру ПередЗаписью вызов
ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(ЭтотОбъект, Ложь);
а на форму добавить команду
&НаКлиенте
Процедура ИсторияИзменений(Команда)
ВерсионированиеОбъектовКлиент.ПоказатьИсториюИзменений(Объект.Ссылка, ЭтаФорма);
КонецПроцедуры
&НаСервере
&Перед("ПриСозданииНаСервере")
Процедура ДР_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Команда = Команды.Добавить("ИсторияИзменений");
Команда.Действие = "ИсторияИзменений";
Команда.Заголовок = "История изменений";
Команда.Подсказка = "Показать историю изменений";
Команда.Картинка = БиблиотекаКартинок.ИсторияДанных;
Команда.ИзменяетСохраняемыеДанные = Ложь;
Элемент = Элементы.Вставить("ИсторияИзменений", Тип("КнопкаФормы"), ЭтаФорма.КоманднаяПанель);
Элемент.ИмяКоманды = "ИсторияИзменений";
Элемент.Отображение = ОтображениеКнопки.Картинка;//ИТекст;
КонецПроцедуры
Показать