1С. Получение ссылки не записанного объекта

Задача

Для наглядности будем производить получение ссылки не записанного объекта в следующей задаче. Есть некий механизм с отложенной записью объектов и дальнейшей обработкой. Необходимо организовать получение ссылок для отложенной обработки и дальнейшую их обработку.

Применение

Подход с отложенной записью используется чаще всего в различных обменах данными будь описанными средствами 1С:Конвертация данных или произвольных механизмом. Когда данные читаются, из них создаются объекты, а только потом происходит запись всех объектов и дальнейшая обработка.

Решение

Для разбора механизма создадим простой пример, в котором:

  1. Будем создавать 10 элементов справочника Контрагенты;
  2. Присваивать объектам новые ссылки, и сохранять объекты и ссылки в массивы;
  3. Производить запись объектов;
  4. Производить обработку объектов по ссылкам сохраненным в пункте 2;

Далее собственно код, снабженный комментариями:

&НаСервере
Процедура ВыполнитьОбработкуНаСервере()

	// Массив созданных объектов
	// для последующей обработки
	ОбъектыКОбработке	= Новый Массив; 
	
	// Массив ссылок которые будут присвоены
	// при записи созданным объектам
	СсылкиКОбработке	= Новый Массив; 
	
	// 1 этап. Создание объектов и присваивание им новых ссылок
	Для Итератор = 0 По 10 Цикл 
		
		СтруктураРеквизитов = Новый Структура();
		СтруктураРеквизитов.Вставить("Наименование", "Объект " + Итератор);
		
		// Весь фокус происходит в этой процедуре
		СоздатьОбъект(СтруктураРеквизитов, ОбъектыКОбработке, СсылкиКОбработке);
		
	КонецЦикла;
	
	// Объекты были созданы, а теперь представим, что в другой части
	// сложной системы происходит запись этих объектов
	
	// 2 этап. Запись ранее созданных объектов
	Для Каждого ОбъектКОбработке Из ОбъектыКОбработке Цикл 
		ОбъектКОбработке.Записать();
	КонецЦикла;
	
	// Объекты были записаны, а теперь представим, что в другой части
	// сложной системы происходит отложенная обработка этих объектов
	
	// 3 этап. Обоработка объектов по ранее присвоенным ссылкам
	Для Каждого СсылкаКОбработке Из СсылкиКОбработке Цикл 
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = СсылкаКОбработке.Наименование;
		Сообщение.Сообщить();
		
	КонецЦикла;	
	
КонецПроцедуры

&НаСервере
Процедура СоздатьОбъект(СтруктураРеквизитов, ОбъектыКОбработке, СсылкиКОбработке)

	// Создадим объект
	СправочникОбъект = Справочники.Контрагенты.СоздатьЭлемент();
	ЗаполнитьЗначенияСвойств(СправочникОбъект, СтруктураРеквизитов);
	
	// Получим ссылку для нашего объекта	
	UID		= Новый УникальныйИдентификатор();
	Ссылка	= Справочники.Контрагенты.ПолучитьСсылку(UID);
	
	// Установим новую ссылку для объекта
	СправочникОбъект.УстановитьСсылкуНового(Ссылка);
	
	// Добавим объект и ссылку для дальнейшей обработки
	ОбъектыКОбработке.Добавить(СправочникОбъект);
	СсылкиКОбработке.Добавить(Ссылка)
	
КонецПроцедуры

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

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