Создание соответствия
Соответствие - это универсальная коллекция, которая хранит соответствие некого ключа и значения. Если сравнивать с другими языка программирования, то соответствие это хеш-таблица или словарь. Элементами коллекции являются объекты типа КлючИЗначение. При этом и ключ и значение соответствия могут быть любого типа (в отличии от структуры, где ключ может быть только строкой). Соответствие может быть передано с клиента на сервер, и с сервера на клиент.
Для создания соответствия используется следующий конструктор:
//пустое соответствие
ОбъектСоответствие = Новый Соответствие;
В результате будет создано пустое соответствие.
Добавление значения в соответствие
Для добавления нового значения в соответствие используется метод Вставить. Если в соответствии уже есть значение с таким ключом, то оно будет заменено.
ОбъектСоответствие.Вставить("Ключ1", 1);
ОбъектСоответствие.Вставить("Ключ2", 2);
Также можно добавлять новые значения через квадратные скобки [ ]
ОбъектСоответствие["Ключ1"] = 1;
ОбъектСоответствие["Ключ2"] = 2;
Ключ соответствия
В качестве ключа соответствия может выступать значение любого типа:
//тип ключа может быть произвольным
ОбъектСоответствие = Новый Соответствие;
ОбъектСоответствие["Ключ1"] = 1; //строка
ОбъектСоответствие[2] = 2; //число
ОбъектСоответствие[Истина] = Истина; //булево
Ссылка = ПредопределенноеЗначение("Справочник.Товары.Товар");
ОбъектСоответствие[Ссылка]= "Ссылка"; //ссылка
//и т.д.
В одном соответствии не может быть больше одного элемента с одинаковым ключом.
Получить значение соответствия
Для того чтобы получить значение соответствия по ключу можно воспользоваться методом Получить или использовать квадратные скобки [ ]:
Значение1 = ОбъектСоответствие["Ключ1"];
Значение2 = ОбъектСоответствие.Получить("Ключ2");
Если такого ключа нет в соответствии, то будет получено Неопределено.
Обращение к ключам соответствия
К ключам соответствия удобно обращаться через квадратные скобки. Если в соответствии нет такого ключа и попытаться получить его, то ошибки не будет (вернет Неопределено). Если попытаться изменить значение, то если такого ключа еще не было, то значение будет добавлено в соответствие. Если такой ключ уже есть - значение будет заменено.
ОбъектСоответствие = Новый Соответствие;
Значение = ОбъектСоответствие["Ключ1"]; //Значение = неопределено
ОбъектСоответствие["Ключ1"] = 1;
Значение = ОбъектСоответствие["Ключ1"]; //Значение = 1
ОбъектСоответствие["Ключ1"] = Ложь; //теперь Значение = Ложь
Перебор соответствия
Перебрать соответствие можно через цикл Для Каждого. На каждой итерации будет получен объект КлючИЗначение. У данного объекта есть свойства Ключ и Значение. При этом элементы коллекции получаются в произвольном порядке.
Для Каждого СтрСоотв Из ОбъектСоответствие Цикл
Сообщить(СтрСоотв.Ключ);
Сообщить(СтрСоотв.Значение);
КонецЦикла;
Как удалить ключ из соответствия
Методом Удалить можно удалить один ключ из соответствия. Методом Очистить можно удалить все ключи:
//удалить элемент с ключом Ключ1
ОбъектСоответствие.Удалить("Ключ1");
//удалить все элементы из соответствия
ОбъектСоответствие.Очистить();
Поиск по соответствию
Чтобы найти какой-то ключ в соответствии нужно получить значение по ключу и сравнить его с Неопределено. Если оно не равно Неопределено, то такой ключ есть в соответствии:
ЕстьКлюч = ОбъектСоответствие["Ключ1"] <> Неопределено;
//Если в соответствии есть ключ "Ключ1", то
//переменная ЕстьКлюч будет равна Истина, иначе Ложь
Соответствие удобно использовать для быстрого поиска значения по ключу. Время поиска в соответствии константное и не зависит от количества элементов в соответствии (в отличии от массива, где значение ищется перебором, и чем больше элементов в массиве, тем медленнее ищется значение).
Количество элементов соответствия
Для получения количества всех элементов соответствия удобно использовать метод Количество:
Колво = ОбъектСоответствие.Количество();
Как скопировать соответствие
Копия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ОбъектСоответствие));
Как преобразовать соответствие в структуру
ОбъектСоответствие= Новый Соответствие;
ОбъектСоответствие.Вставить("Ключ1", 1);
ОбъектСоответствие.Вставить("Ключ2", 2);
ОбъектСоответствие.Вставить(1234, 5678);
ОбъектСоответствие.Вставить(Истина, Ложь);
Ссылка = ПредопределенноеЗначение("Справочник.Товары.Товар");
ОбъектСоответствие.Вставить(Ссылка, "Ссылка");
СтруктураПараметров = Новый Структура;
Для Каждого СтрСоотв Из ОбъектСоответствиеЦикл
//в попытке пробуем преобразовать ключ соответствия в строку
Попытка
//так как ключ структуры не может начинаться с числа, то для
//чисел добавляем в начале нижнее подчеркивание
Если ТипЗнч(СтрСоотв.Ключ) = Тип("Число") Тогда
Префикс = "_";
Иначе
Префикс = "";
КонецЕсли;
//через Формат удаляем возможные неразрывные пробелы
КлючСтруктуры = Префикс + Формат(СтрСоотв.Ключ, "ЧГ=0");
СтруктураПараметров.Вставить(КлючСтруктуры, СтрСоотв.Значение);
Исключение
//здесь можно что-то дополнительно сделать с необработанными ключами
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Фиксированное соответствие
Фиксированное соответствие создается только на основании обычного соответствия. После его создания нельзя изменить ни ключ, ни значение существующих элементов. Также нельзя добавить новые элементы в соответствие.
ОбъектСоответствие = Новый Соответствие;
ОбъектСоответствие["Ключ1"] = 1;
ОбъектСоответствие["Ключ2"] = 2;
ФиксСоот = Новый ФиксированноеСоответствие(ОбъектСоответствие);
//В соответствии ФиксСоот будет 2 ключа:
//Ключ1 = 1
//Ключ2 = 2
На основании фиксированного соответствия можно создать обычное соответствие:
//фиксированное
ФиксСоот = Новый ФиксированноеСоответствие(ОбъектСоответствие);
//обычное с теми же ключами и значения, что и фиксированное
ОбычноеСоответствие = Новый Соответствие(ФиксСоот);
Если через квадратные скобки обратиться к ключу фиксированного соответствия, которого в нем нет, то будет вызвано исключение:
ОбъектСоответствие = Новый Соответствие;
ОбъектСоответствие["Ключ1"] = 1;
ОбъектСоответствие["Ключ2"] = 2;
//фиксированное
ФиксСоот = Новый ФиксированноеСоответствие(ОбъектСоответствие);
Значение1 = ФиксСоот["Ключ1"]; //все хорошо
Значение3 = ФиксСоот["Ключ3"]; //ошибка!
//хотя в обычном соответствии просто вернуло бы Неопределено
У фиксированного соответствия есть только 2 метода:
- Количество()
- Получить(<Ключ>)
Через метод Получить можно обращаться к несуществующему ключу фиксированного соответствия. В этом случае метод, как и для обычного соответствия, вернет Неопределено.
Смотрите также:
Электронный учебник по по программированию в 1С Рекомендации по изучению программирования 1С с нуля Программное решение для сдачи и подготовки к экзаменам Программирование в 1С 8.3 с нуля - краткий самоучитель Комплексная подготовка программистов 1С:Предприятие 8.2 Сайты с уроками программирования и со справочниками Youtube-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки