Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦОО_ПОЭИС_Л4.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
148 Кб
Скачать
☆

4.10. Структура и соответствие

Структура и соответствие являются динамическими наборами данных - коллекциями значений. Каждый элемент такой коллекции представляет собой пару «ключ» и «значение». Ключи структуры и соответствия уникальны, поэтому они однозначно иден­тифицируют элемент коллекции.

Структура

В структуре ключи могут быть только строковые и должны подчиняться правилам именования переменных. В соответствиях ключи могут быть почти любого типа.

Структуры часто применяются в методах объектов для указания отборов, например:

Отбор = Новый Структура("Цена", 100);

Выборка = Справочники.Номенклатура.Выбрать(,Отбор);

Структуры можно использовать для передачи списка параметров (в версии 7.7 для этой цели часто применялся список значений и его методы Установить и Получить):

Параметры = Новый Структура("ДатаНач,ДатаКон");

Параметры.ДатаНач = ВыбДата;

Параметры.ДатаКон = ДобавитьМесяц(ВыбДата,1);

Если ВыбТипОтчета <> 0 Тогда

Параметры.Вставить("ТипОтчета",ВыбТипОтчета);

КонецЕсли;

глСформироватьОбороты(Параметры);

Можно перебрать элементы структуры или соответствия с помощью конструкции «Для Каждого». Каждый элемент коллекции является объектом специального типа КлючИЗначение:

Для Каждого парам Из Параметры Цикл

ИмяПараметра = парам.Ключ;

Значение = парам.Значение;

КонецЦикла;

Для структуры можно обращаться к элементам коллекции через точку, поскольку ключи являются свойствами структуры:

НачДата = парам.ДатаНач;

КонДата - парам.ДатаКон;

Замечание. Для соответствия такое обращение через точку невозможно, так как ключи соответствия могут быть самого разнообразного типа.

С помощью метода Свойство можно получить значение заданного ключа или убедиться, что его в структуре нет, например:

Найдено = парам. Свойство ("ТипОтчета", ВыбТипОтчета);

Если Найдено Тогда

СформироватьПользовательскийОтчет (ВыбТипОтчета);

Иначе

СформироватьОтчетПоУмолчанию();

КонецЕсли;

Соответствие

В соответствиях ключи могут быть почти любого типа.

Создать соответствие

ВидОбъекта = Новый Соответствие;

Добавить элементы в соответствие

ВидОбъекта.Вставить(Перечисления.ВидыОбъектов.Контрагенты,

Перечисления.ВидыОбъектовКонтактнойИнформации.Контрагенты);

ВидОбъекта.Вставить(Перечисления.ВидыОбъектов.КонтактныеЛица, Перечисления.ВидыОбъектовКонтактнойИнформации.КонтактныеЛица);

Обратиться к элементу соответствия

ВозрастСотрудника = ВозрастСотрудников.Получить(Сотрудник);

ВозрастСотрудника = ВозрастСотрудников [Сотрудник];

Перебрать элементы соответствия

Для Каждого Элемент из Замены Цикл

Сообщить(Элемент.Ключ + " - " + Элемент.Значение);

КонецЦикла;

Уалить элемент соответствия

Замены.Удалить(УдаляемыйТовар);

Замены. Очистить();

Получить данные из соответствия

Значение = КурсыВалютДокумента.Получить(УправленческаяВалюта);

Если Значение = Неопределено Тогда

Сообщить("Данная валюта в соответствии отсутствует");

Иначе

Курс = Значение["Курс"];

Кратность = Значение["Кратность"];

КонецЕсли;

Получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов?

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Ссылка КАК Ссылка,

| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета,

| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета.Наименование,

| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Предопределенный

|ИЗ

| ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацииБазовыеВидыРасчета

|ИТОГИ ПО

| Ссылка";

Результат = Запрос.Выполнить();

ВыборкаВидовРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

ВидыРасчета = Новый Соответствие;

БазовыеВидаРасчета = Новый Соответствие;

СвойстваВидаРасчета = Новый Структура("Наименование, Предопределенный");

// Цикл по видам расчета, обладающим базовыми.

Пока ВыборкаВидовРасчета.Следующий() Цикл

БазовыеВидаРасчета.Очистить();

ВыборкаБазовых = ВыборкаВидовРасчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

// Цикл по базовым видам расчета.

Пока ВыборкаБазовых.Следующий() Цикл

// Заполненить значения структуры "СвойстваВидаРасчета".

СвойстваВидаРасчета.Наименование = ВыборкаБазовых.Наименование;

СвойстваВидаРасчета.Предопределенный = ВыборкаБазовых.Предопределенный;

// Заполненить соответствие "БазовыеВидАРасчета".

БазовыеВидаРасчета.Вставить(ВыборкаБазовых.ВидРасчета, СвойстваВидаРасчета);

КонецЦикла;

// Заполнить соответствие "ВидыРасчета".

ВидыРасчета.Вставить(ВыборкаВидовРасчета.Ссылка, БазовыеВидаРасчета);

КонецЦикла;

У соответствия нет метода Свойство и обращение производится с помощью оператора [...] или метода Получить:

ТоварАналог = соотвАналоги[Товар].Значение;