Записки программиста 1с

Уникальный идентификатор

Уникальный идентификатор – это уникальный набор символов который характеризует экземпляр метаданных объектного типа в 1С(Например, элемент справочника или документ).

Уникальный идентификатор (GUID)

Если Вам встречались в базе записи “<Объект не найден>”, то значит настала пора познакомится с Уникальным идентификатором.

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

de80b7c8-aa22-11dc-a0f4-0011d85708ff

Т.е. это набор из 32 шестнадцатеричных цифр разделенных дефисами.

Надпись <Объект не найден> появляется в базе когда есть ссылка(уникальный идентификатор) на объект, а объекта в базе нет. Такое может возникнуть или при удалении объектов без проврки ссылочной целостности или при обмене между базами.

Разберем для примера надпись: <Объект не найден> (36:9c4e0022642fda9811e10393c0d776fd)

Для начала узнаем какой тип объекта был удален, для этого используем метод ПолучитьСтруктуруХраненияБазыДанных(), он возвращает таблицу значений(по умолчанию в формате SDBL) где указано соответсвие внутренних идентификаторов и объектов метаданных.

Например можно написать такой код:

ТЗ = ПолучитьСтруктуруХраненияБазыДанных();
ТЗ.ВыбратьСтроку();

В ней мы находим идентификатор  который в конце содержит 36 (цифры до двоеточия), но только не в составе числа(Document2836), а точное соответствие. В нашем случае это следующая строка:

Иванов Иван ИвановичСправочник.Сотрудники
Пример элемента справочника сотрудники

Значит удаленный элемент был элементом справочника “Сотрудники”.

Как Вы заметили внутри скобок находится тип объекта и уникальный идентификатор строкой.

Теперь мы можем на одной из архивных копий найти удаленный элемент, добавив дефисы в имеющуюся у нас строку идентификтора:

ГУИД = Новый УникальныйИдентификатор("9c4e0022-642f-da98-11e1-0393c0d776fd");
СсылкаНаУдаленныйЭлемент = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);

Зная все значения полей мы можем вручную или с помощью обработок воссоздать удаленный элемент,  но у них будет одно главное отличие – разные Уникальные идентификаторы. А если мы хотим восстановить элемент, то и идентификатор нужно восстановить тот же. Для этого нужно использовать метод “УстановитьСсылкуНового“, например так:

ВосстанавливаемыйЭлемент =  Справочники.Номенклатура.СоздатьЭлемент();
ГУИД = Новый УникальныйИдентификатор("9c4e0022-642f-da98-11e1-0393c0d776fd");
СсылкаНаУдаленныйЭлемент = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
ВосстанавливаемыйЭлемент.УстановитьСсылкуНового(СсылкаНаУдаленныйЭлемент);

Уникальный идентификатор широко применяется при передачи данных по Com-соединению. Теперь можно заполнить остальные поля.

1С: Как получить уникальный идентификатор объекта, GUID?

&НаСервере
Процедура Команда1НаСервере()
анкета=Объект.АнкетаАбитуриента;
Если НЕ анкета.Пустая() Тогда
GUID=анкета.УникальныйИдентификатор();
Объект.CUID=GUID;
Сообщить("GUID"+GUID);
конецесли;

КонецПроцедуры

1С: Как получить ссылку по уникальному идентификатору, GUID?

&НаСервере
Процедура ПолучитьПоGUIDНаСервере()
ГУИД = Новый УникальныйИдентификатор(Объект.CUID);

НайденнаяСсылка = Документы.АнкетаАбитуриента.ПолучитьСсылку(ГУИД);
Сообщить("Объект="+НайденнаяСсылка);
КонецПроцедуры

Связь Пользователя Информационной базы с Элементом Справочника пользователи.

Во-первых Для Справочника Сотрудники добавляем реквизит “ПользовательИБ” типом Строка. В Реквизит будем сохранять GUID пользователя информационной базы.

Уникальный идентификатор 1c
Уникальный идентификатор в Реквизите Пользователь ИБ.

Во-вторых напишем обработку заполняющую Реквизит “ПользовательИБ” в Справочнике Пользователи.

&НаСервере
Процедура Команда1НаСервере()
	Название=Объект.Строка;
	ОписаниеПользователяИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Название);//.ТекущийПользователь();//.УникальныйИдентификатор()//..НовоеОписаниеПользователяИБ();
	GUid=ОписаниеПользователяИБ.УникальныйИдентификатор;
	Пользователь=Объект.Пользователь;
	ОбъектП=Пользователь.ПолучитьОбъект();
	ОбъектП.ПоьзовательИБ=GUid;
	ОбъектП.Записать();
	//GUid=ОписаниеПользователяИБ.УникальныйИдентификатор();
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	Команда1НаСервере();
КонецПроцедуры.

В третьих В документ при создании на сервере добавляем код получающий Элемент справочника Пользователи с использованием GUIDа ТекущегоПользователя

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ОписаниеПользователяИБ=ПользователиИнформационнойБазы.ТекущийПользователь();
GUid=ОписаниеПользователяИБ.УникальныйИдентификатор;
Объект.Отвественный=Справочники.Пользователи.НайтиПоРеквизиту("ПоьзовательИБ", Строка(Guid));
КонецПроцедуры 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *