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