4

Как создать массив структур?

Массив в 1С:Предприятие 8 позволяет хранить данные произвольного типа, а структуры — хранить и получать значения по именованным полям. Сочетание этих коллекций облегчает передачу массивов однотипных данных с клиента на сервер и обратно. Например, можно создать массив структур — массив,  элементами которого является объект типа Структура.

Давайте подробнее рассмотрим пример работы с такой структурой хранения данных.

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

&НаСервереБезКонтекста
Функция ПолучитьПоляОбъектов(МассивСсылок)
	
	ВыходнойМассив = Новый Массив;
	Запрос = Новый Запрос("ВЫБРАТЬ Код,Наименование,ПометкаУдаления ИЗ Справочник.Контрагенты ГДЕ Ссылка В (&МассивСсылок)");
	Запрос.Параметры.Вставить("МассивСсылок", МассивСсылок);
	РезЗапроса = Запрос.Выполнить();
	Если НЕ РезЗапроса.Пустой() Тогда
		ВыборкаЗапр = РезЗапроса.Выбрать();
		Пока ВыборкаЗапр.Следующий() Цикл
			Элт = Новый Структура("Код,Наименование,ПометкаУдаления");
			Элт.Код = ВыборкаЗапр.Код;	
			Элт.Наименование = ВыборкаЗапр.Наименование;
			Элт.ПометкаУдаления = ВыборкаЗапр.ПометкаУдаления;
			ВыходнойМассив.Добавить(Элт);
		КонецЦикла; 
	КонецЕсли;
	
	Возврат ВыходнойМассив;
	
КонецФункции//ПолучитьПоляОбъектов()

&НаКлиенте
Процедура ПоказатьДанные()
	...
	МассивСтруктур = ПолучитьПоляОбъектов(МассивСсылок);
	Для Каждого Элт Из МассивСтруктур Цикл
		Сообщить(Элт.Код + " " + Элт.Наименование + " " + ?(Элт.ПометкаУдаления, "помечен на удаление", ""));
	КонецЦикла;

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

Поделиться страницей в соц.сетях

Метки: Метки

4 комментария к записи “Как создать массив структур?

  1. А что, лучше каждый раз внутри цикла создавать новую структуру? Почему не чистить старую хотя бы (созданную вне цикла)?

    1. Потому что в массиве хранятся не агрегатные объекты, а ссылки на них. Если использовать одну и ту же структуру, в массиве будут содержаться данные только из последней итерации. Можете проверить на досуге

  2. Александр, спасибо большое за Вашу статью. Я нашел здесь решение как раз этой проблемы: я в цикле очищал созданную вне цикла структуру, добавлял ее в массив, и на выходе получал массив идентичных структур. Переделал с созданием новой структуры в цикле, и проблема решилась.

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

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