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