4.10. Структура и соответствие
Структура и соответствие являются динамическими наборами данных - коллекциями значений. Каждый элемент такой коллекции представляет собой пару «ключ» и «значение». Ключи структуры и соответствия уникальны, поэтому они однозначно идентифицируют элемент коллекции.
Структура
В структуре ключи могут быть только строковые и должны подчиняться правилам именования переменных. В соответствиях ключи могут быть почти любого типа.
Структуры часто применяются в методах объектов для указания отборов, например:
Отбор = Новый Структура("Цена", 100);
Выборка = Справочники.Номенклатура.Выбрать(,Отбор);
Структуры можно использовать для передачи списка параметров (в версии 7.7 для этой цели часто применялся список значений и его методы Установить и Получить):
Параметры = Новый Структура("ДатаНач,ДатаКон");
Параметры.ДатаНач = ВыбДата;
Параметры.ДатаКон = ДобавитьМесяц(ВыбДата,1);
Если ВыбТипОтчета <> 0 Тогда
Параметры.Вставить("ТипОтчета",ВыбТипОтчета);
КонецЕсли;
глСформироватьОбороты(Параметры);
Можно перебрать элементы структуры или соответствия с помощью конструкции «Для Каждого». Каждый элемент коллекции является объектом специального типа КлючИЗначение:
Для Каждого парам Из Параметры Цикл
ИмяПараметра = парам.Ключ;
Значение = парам.Значение;
КонецЦикла;
Для структуры можно обращаться к элементам коллекции через точку, поскольку ключи являются свойствами структуры:
НачДата = парам.ДатаНач;
КонДата - парам.ДатаКон;
Замечание. Для соответствия такое обращение через точку невозможно, так как ключи соответствия могут быть самого разнообразного типа.
С помощью метода Свойство можно получить значение заданного ключа или убедиться, что его в структуре нет, например:
Найдено = парам. Свойство ("ТипОтчета", ВыбТипОтчета);
Если Найдено Тогда
СформироватьПользовательскийОтчет (ВыбТипОтчета);
Иначе
СформироватьОтчетПоУмолчанию();
КонецЕсли;
Соответствие
В соответствиях ключи могут быть почти любого типа.
Создать соответствие
ВидОбъекта = Новый Соответствие;
Добавить элементы в соответствие
ВидОбъекта.Вставить(Перечисления.ВидыОбъектов.Контрагенты,
Перечисления.ВидыОбъектовКонтактнойИнформации.Контрагенты);
ВидОбъекта.Вставить(Перечисления.ВидыОбъектов.КонтактныеЛица, Перечисления.ВидыОбъектовКонтактнойИнформации.КонтактныеЛица);
Обратиться к элементу соответствия
ВозрастСотрудника = ВозрастСотрудников.Получить(Сотрудник);
ВозрастСотрудника = ВозрастСотрудников [Сотрудник];
Перебрать элементы соответствия
Для Каждого Элемент из Замены Цикл
Сообщить(Элемент.Ключ + " - " + Элемент.Значение);
КонецЦикла;
Уалить элемент соответствия
Замены.Удалить(УдаляемыйТовар);
Замены. Очистить();
Получить данные из соответствия
Значение = КурсыВалютДокумента.Получить(УправленческаяВалюта);
Если Значение = Неопределено Тогда
Сообщить("Данная валюта в соответствии отсутствует");
Иначе
Курс = Значение["Курс"];
Кратность = Значение["Кратность"];
КонецЕсли;
Получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Ссылка КАК Ссылка,
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета,
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета.Наименование,
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Предопределенный
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацииБазовыеВидыРасчета
|ИТОГИ ПО
| Ссылка";
Результат = Запрос.Выполнить();
ВыборкаВидовРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВидыРасчета = Новый Соответствие;
БазовыеВидаРасчета = Новый Соответствие;
СвойстваВидаРасчета = Новый Структура("Наименование, Предопределенный");
// Цикл по видам расчета, обладающим базовыми.
Пока ВыборкаВидовРасчета.Следующий() Цикл
БазовыеВидаРасчета.Очистить();
ВыборкаБазовых = ВыборкаВидовРасчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// Цикл по базовым видам расчета.
Пока ВыборкаБазовых.Следующий() Цикл
// Заполненить значения структуры "СвойстваВидаРасчета".
СвойстваВидаРасчета.Наименование = ВыборкаБазовых.Наименование;
СвойстваВидаРасчета.Предопределенный = ВыборкаБазовых.Предопределенный;
// Заполненить соответствие "БазовыеВидАРасчета".
БазовыеВидаРасчета.Вставить(ВыборкаБазовых.ВидРасчета, СвойстваВидаРасчета);
КонецЦикла;
// Заполнить соответствие "ВидыРасчета".
ВидыРасчета.Вставить(ВыборкаВидовРасчета.Ссылка, БазовыеВидаРасчета);
КонецЦикла;
У соответствия нет метода Свойство и обращение производится с помощью оператора [...] или метода Получить:
ТоварАналог = соотвАналоги[Товар].Значение;
