Соответствие в 1С 8.3

Apr 03, 2022 13:33

Создание соответствия

Соответствие - это универсальная коллекция, которая хранит соответствие некого ключа и значения. Если сравнивать с другими языка программирования, то соответствие это хеш-таблица или словарь. Элементами коллекции являются объекты типа КлючИЗначение. При этом и ключ и значение соответствия могут быть любого типа (в отличии от структуры, где ключ может быть только строкой). Соответствие может быть передано с клиента на сервер, и с сервера на клиент.

Для создания соответствия используется следующий конструктор:

//пустое соответствие
ОбъектСоответствие = Новый Соответствие;

В результате будет создано пустое соответствие.

Добавление значения в соответствие

Для добавления нового значения в соответствие используется метод Вставить. Если в соответствии уже есть значение с таким ключом, то оно будет заменено.


ОбъектСоответствие.Вставить("Ключ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-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up