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