Для объекта метаданных не существует идентификатор в регистре сведений "Идентификаторы объектов версий расширений"

01.07.24

Разработка - Механизмы типовых конфигураций

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.
  1. Прежде чем лезть в конфигуратор, убедитесь, что вы-таки выполнили обновление идентификаторов метаданных. Сделать это можно как запустив программу с параметром 
    /C ЗапуститьОбновлениеИнформационнойБазы

    либо выполнив функцию:

    Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(ИСТИНА,ЛОЖЬ,ЛОЖЬ);

     

  2. Всё зло кроется в функции СвойстваКоллекцийОбъектовМетаданных:

    Справочники.ИдентификаторыОбъектовМетаданных.СвойстваКоллекцийОбъектовМетаданных(...)

    По каким-то причинам для бизнес-процессов и задач НЕ установлен признак ОбъектыРасширений = Истина, из-за чего они пропускаются при обновлении объектов метаданных расширений.

  3. Добавляем новое расширение (либо используем существующее - как удобно) и в него вышеуказанную функцию СвойстваКоллекцийОбъектовМетаданных → Вызвать вместо (с контролем)

  4. Добавляем через оператор препроцессора #Вставка для бизнес-процессов и задач необходимый код:
     

    	Строка = Результат.Добавить();
    	Строка.Идентификатор   = Новый УникальныйИдентификатор("a8cdd0e0-c27f-4bf0-9718-10ec054dc468");
    	Строка.Имя             = "БизнесПроцессы";
    	Строка.Синоним         = НСтр("ru = 'Бизнес-процессы'");
    	Строка.ИмяВЕдЧисле     = "БизнесПроцесс";
    	Строка.СинонимВЕдЧисле = НСтр("ru = 'Бизнес-процесс'");
    	#Вставка       
    	Строка.ОбъектыРасширений = Истина;
    	#КонецВставки
    	Строка = Результат.Добавить();
    	Строка.Идентификатор   = Новый УникальныйИдентификатор("8d9153ad-7cea-4e25-9542-a557ee59fd16");
    	Строка.Имя             = "Задачи";
    	Строка.Синоним         = НСтр("ru = 'Задачи'");
    	Строка.ИмяВЕдЧисле     = "Задача";
    	Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'");
    	#Вставка       
    	Строка.ОбъектыРасширений = Истина;
    	#КонецВставки
    

    Обновляем данные расширения и перезапускаем клиентское приложение

  5. Вновь запускаем обновление индентификаторов метаданных расширений (см. пункт № 1) - ошибка при записи элементов Профилей групп доступа должна исчезнуть.

Вступайте в нашу телеграмм-группу Инфостарт

БСП ПраваДоступа

См. также

Механизмы типовых конфигураций Программист 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

В статье рассматривается подход к программной модификации параметров команды внешней обработки заполнения объекта так, чтобы в момент вызова из формы объекта (табличной части документа) она использовалась для открытия вспомогательной формы диалога, а после закрытия вспомогательной формы диалога она использовалась для заполнения объекта (табличной части документа) уже на сервере с контекстом формы документа с использованием введенных данных во вспомогательной форме диалога.

11.08.2025    1073    user1988284    0    

14

Механизмы типовых конфигураций Программист 1С v8.3 Бесплатно (free)

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    4032    user2012581    47    

52

Механизмы типовых конфигураций Программист Стажер 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Бесплатно (free)

В типовых решениях типа УТ, КА, ERP при вводе строк в поля ввода осуществляется поиск по первым символам. С помощью небольшой доработки (делается через расширение) можно организовать поиск по вхождению.

02.06.2025    776    lkey    1    

5

Работа с интерфейсом БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист 1С v8.3 1C:ERP Бесплатно (free)

В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок). Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а также в мобильном приложении.

12.05.2025    2855    PROSTO-1C    1    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Anthon 231 29.07.25 19:04 Сейчас в теме
Такая же ошибка еще выскакивает в ЕРП при попытке добавить объекты из расширений в версионирование. П-ы из 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].СрокХраненияВерсий) Тогда
				НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
			КонецЕсли;
		Иначе
			НоваяСтрокаТаблицы.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать;
			НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
		КонецЕсли;

		Если НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы" Тогда
			НоваяСтрокаТаблицы.Проводится = ? (МетаданныеОбъекта.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить, Истина, Ложь);
		КонецЕсли;
	КонецЦикла;
	ДеревоОМ.Строки.Сортировать("КлассОбъекта");
	Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл
		УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта");
	КонецЦикла;
	ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных");

	Элементы.ФормаВерсионироватьПриСтарте.Видимость = ЕстьБизнесПроцессы;
КонецПроцедуры
Показать

Первая вставка добавляет в качестве примера два дополнительных объекта для версионирования, один из типовой конфигурации, другой из расширения.
Вторая вставка обходит баг с получением идентификатора в функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных.

В дальнейшем для использования версионирования в любых объектах надо в модуле объекта вставить в процедуру ПередЗаписью вызов
	ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(ЭтотОбъект, Ложь);

а на форму добавить команду
&НаКлиенте
Процедура ИсторияИзменений(Команда)
	ВерсионированиеОбъектовКлиент.ПоказатьИсториюИзменений(Объект.Ссылка, ЭтаФорма);
КонецПроцедуры

&НаСервере
&Перед("ПриСозданииНаСервере")
Процедура ДР_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Команда = Команды.Добавить("ИсторияИзменений");
	Команда.Действие = "ИсторияИзменений";
	Команда.Заголовок = "История изменений";
	Команда.Подсказка = "Показать историю изменений";
	Команда.Картинка = БиблиотекаКартинок.ИсторияДанных;
	Команда.ИзменяетСохраняемыеДанные = Ложь;

	Элемент = Элементы.Вставить("ИсторияИзменений", Тип("КнопкаФормы"), ЭтаФорма.КоманднаяПанель);
	Элемент.ИмяКоманды = "ИсторияИзменений";
	Элемент.Отображение = ОтображениеКнопки.Картинка;//ИТекст;
КонецПроцедуры
Показать
user2160398; ro6ert; +2 Ответить
2. ro6ert 13.08.25 15:33 Сейчас в теме
(1) Спасибо за коммент! Тоже столкнулись с проблемой при установке настроек версионирования объекта, который создан именно в расширении. После второй вставки всё заработало
3. user2160398 13.08.25 15:39 Сейчас в теме
Оставьте свое сообщение