Использование структур в функциях 1с позволяет передать более 1 значения из функций.
Рассмотрим пример создания функций в 1с : Предприятие с применением структур.
Постановка задачи: По Фамилии Студента получить получить его:
1. Специальность;
2. Курс;
3. Группа;
4. Номер Документа Прием;
5.Дата Документа Прием;
Подготовительные мероприятия:
Во-первых создадим несколько справочников.
1. Справочник Физические Лица
2. Специальности
3. Группы
Во-вторых сделаем два перечисления:
- Курсы
- Статус Студента
В-третьих создадим Регистр Сведений Движение Контингента:
В четвертых спроектируем документ Прием. Документ будет содержать следующие Реквизиты:
Далее настроим движение для нашего документа:
Код движения документа:
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ДвижениеКонтингента
Движения.ДвижениеКонтингента.Записывать = Истина;
Для Каждого ТекСтрокаСтудентыСписок Из СтудентыСписок Цикл
Движение = Движения.ДвижениеКонтингента.Добавить();
Движение.Физлицо = ТекСтрокаСтудентыСписок.Физлицо;
Движение.Группа = Группа;
Движение.Специальность = Специальность;
Движение.Курс = Курс;
Движение.Статус = ТекСтрокаСтудентыСписок.Статус;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Сделаем обработку для вывода информации о номере и дате документа Прием по Физическому лицу. Обработка будет содержать только один Реквизит Физическое лицо:
Начнем использование структур в функциях 1с, для этого создадим новую структуру.
параметры1=новый структура();
Заполним структуру параметры1 после извлечения информации при помощи запроса.
параметры1.Вставить("Дата",ВыборкаДетальныеЗаписи.Дата);
параметры1.Вставить("Номер",ВыборкаДетальныеЗаписи.Номер);
Полный код функции выглядит следующим образом:
физлицо=справочники.ФилЛица.НайтиПоНаименованию(физлицоСтрока);
параметры1=новый структура();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвижениеКонтингента.Регистратор.Дата КАК Дата,
| ДвижениеКонтингента.Регистратор.Номер КАК Номер
|ИЗ
| РегистрСведений.ДвижениеКонтингента КАК ДвижениеКонтингента
|ГДЕ
| ДвижениеКонтингента.Физлицо = &Физлицо";
Запрос.УстановитьПараметр("Физлицо", Физлицо);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
параметры1.Вставить("Дата",ВыборкаДетальныеЗаписи.Дата);
параметры1.Вставить("Номер",ВыборкаДетальныеЗаписи.Номер);
КонецЦикла;
возврат Параметры1;
Код процедуры получения информации на Клиенте выглядит так:
&НаКлиенте
Процедура Команда2(Команда)
физлицоСтрока=элементы.Физлицо.ТекстРедактирования;//Объект.Физлицо;
статус=Команда3НаСервере(физлицоСтрока);
//сообщить(статус);
сообщить(“номер=”+статус.номер);
сообщить(“дата=”+статус.дата);
КонецПроцедуры
Итого использование структуры состоит из 2-х частей:
Во-первых создание структуры. В нашем примере на стороне Сервера:
параметры1=новый структура();
параметры1.Вставить("Дата",ВыборкаДетальныеЗаписи.Дата);
параметры1.Вставить("Номер",ВыборкаДетальныеЗаписи.Номер);
Как известно, структура в 1с 8.3 – это программная коллекция значений , содержащая набор элементов “Ключ” и “Значение”. В нашем примере структура параметры1 состоит из 2-х пар:
- Ключ “Дата” – Значение ВыборкаДетальныеЗаписи.Дата
- Ключ “Номер” – Значение ВыборкаДетальныеЗаписи.Номер
Во-вторых получение информации из структуры.
статус=Команда3НаСервере(физлицоСтрока);
сообщить("номер="+статус.номер);
сообщить("дата="+статус.дата);
Переменная статус получит из функции структуру. Структура содержит две пары значений.
Для доступа к значениям Структуры применяется операция разыменования: указывается имя переменной, объявленной как Структура, а затем Ключ значения через точку. Разыменование возможно как слева от оператора присваивания, так и справа.
Получение информации производится из структуры так:
Номер=статус.номер;
Дата=статус.дата;
Ссылка на файл Информационной базы: Ссылка.
Спасибо ценная информация.