Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_ПрикладноеПрограммирование8.doc
Скачиваний:
42
Добавлен:
22.09.2019
Размер:
51.67 Mб
Скачать

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

Соответствие является универсальной коллекцией, т.е. объектом, предназначенным для работы с не хранящимися в базе данных совокупностями значений. Необходимость в его использовании возникает, когда требуется работать с временным набором данных с чуть более сложной природой, нежели в структуре. Если элемент структуры можно было характеризовать только строковым ключом и значением произвольного типа, то элемент соответствия характеризуется ключом произвольного типа и значением произвольного типа. Чаще всего соответствия применяют в ситуациях, когда необходимо хранить в оперативной памяти для последующей обработки данные с ключами произвольного типа. Кроме того, соответствия удобно использовать для передачи параметров при работе с различными объектами.

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

При помощи ключей также можно получать значения соответствия, при этом, если передать ключ, не существующий в соответствии, будет возвращено «Неопределено».

Соответствия могут создаваться конструктором «Новый».

СозданноеСоответствие=Новый Соответствие;

где «СозданноеСоответствие» – имя переменной, которая будет содержать созданный объект типа «Соответствие».

После вышеприведенного создания в соответствие можно вставлять элементы (произвольное количество).

Допустим к соответствию «ВозрастСотрудников» нужно добавить новый элемент. В качестве ключа должна выступать ссылка на сотрудника (ее можно считать из переменной «Сотрудник»), в качестве значения – возраст сотрудника (его можно считать из переменной «ВозрастСотрудника»).

Тогда добавление нового элемента можно произвести так

ВозрастСотрудников=Новый Соответствие;

ВозрастСотрудников.Вставить(Сотрудник,ВозрастСотрудника);

или так:

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

Запись значений элементов соответствия можно выполнять теми же способами, которые были рассмотрены для соответствия.

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

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

или так:

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

В приведенных примерах из соответствия «ВозрастСотрудников» по ссылке на сотрудника в качестве ключа будет получено значение элемента соответствия.

Поскольку соответствие является коллекцией – перебрать элементы соответствия можно посредством цикла перебора коллекции. Например, чтобы сообщить обо всех ключах и значениях элементов соответствия «Замены», можно сделать следующее:

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

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

КонецЦикла;

Чтобы удалить элемент соответствия – необходимо знать его ключ. Например, чтобы удалить из соответствия «Замены» элемент со ссылкой на объект, содержащийся в переменной «УдаляемыйТовар», в качестве ключа, достаточно сделать следующее:

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

Если же нужно удалить все элементы соответствия – применяется метод «Очистить()»:

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

В соответствии «КурсыВалютДокумента» в качестве ключа используется значение валюты, а значениями являются структуры, содержащие «Курс» и «Кратность». Как получить курс и кратность валюты «УправленческаяВалюта» ?. Сначала по ключу (ссылке на управленческую валюту) получаем значение соответствия. Поскольку значением является структура курса валют – далее получаем значения структуры по их названиям.

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

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

Сообщить(«Данной валюты нет в соответствии»);

Иначе

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

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

КонецЕсли;