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

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

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

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

//пустое соответствие
ПараметрыОбработки = Новый Соответствие;

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

Методы для работы с соответствием

  • Вставить(<Ключ>, <Значение>) — добавляет новое значение в соответствие, если уже есть значение с таким ключом, то оно будет заменено. Также вставить новое значение можно через квадратные скобки: ПараметрыОбработки[«Ключ»] = 1;
  • Получить(<Ключ>) — получает значение соответствия по ключу. Вернет Неопределено, если нет такого ключа. Можно через квадратные скобки: Значение = ПараметрыОбработки[«Ключ»];
  • Удалить(<Ключ>) — удаляет элемент соответствия по ключу.
  • Очистить() — удаляет все элементы соответствия
  • Количество() — вернет количество элементов соответствия

Обращение к ключам соответствия

К ключам соответствия удобно обращаться через квадратные скобки. Если в соответствии нет такого ключа и попытаться получить его, то ошибки не будет (вернет Неопределено). Если попытаться изменить значение, то если такого ключа еще не было, то значение будет добавлено в соответствие. Если такой ключ уже есть — значение будет заменено.

ПараметрыОбработки = Новый Соответствие;
Значение = ПараметрыОбработки["Ключ1"]; //Значение = неопределено
ПараметрыОбработки["Ключ1"] = 1;
Значение = ПараметрыОбработки["Ключ1"]; //Значение = 1
ПараметрыОбработки["Ключ1"] = Ложь; //теперь Значение = Ложь

Перебор соответствия

Перебрать соответствие можно через цикл Для Каждого. На каждой итерации будет получена пара ключ и значение. При этом элементы коллекции получаются в произвольном порядке.

Для Каждого КлючИЗначение Из ПараметрыОбработки Цикл
	Сообщить(КлючИЗначение.Ключ);
	Сообщить(КлючИЗначение.Значение);
КонецЦикла;

Примеры работы с соответствием

Как добавить новое значение в соответствие

ПараметрыОбработки = Новый Соответствие;
ПараметрыОбработки["Ключ1"] = 1;
//можно так
ПараметрыОбработки.Вставить("Ключ2", 2);

Какой тип данных может быть у ключа соответствия

//тип ключа может быть произвольным
ПараметрыОбработки = Новый Соответствие;
ПараметрыОбработки["Ключ1"] = 1; //строка
ПараметрыОбработки[2] = 2; //число
ПараметрыОбработки[Истина] = Истина; //булево
Ссылка = ПредопределенноеЗначение("Справочник.Номенклатура.Товар"); 
ПараметрыОбработки[Ссылка]= "Ссылка"; //ссылка
//и т.д.

Как получить значение соответствия по ключу

Значение1 = ПараметрыОбработки["Ключ1"];
Значение2 = ПараметрыОбработки.Получить("Ключ2");

Как изменить значение ключа соответствия

ПараметрыОбработки = Новый Соответствие;
ПараметрыОбработки["Ключ1"] = 1; 
ПараметрыОбработки["Ключ1"] = 2; 
//можно и так
ПараметрыОбработки.Вставить("Ключ1", 3);

Как удалить ключ из соответствия

ПараметрыОбработки.Удалить("Ключ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 метода:

  • Количество()
  • Получить(<Ключ>)

Через метод Получить() можно обращаться к несуществующему ключу фиксированного соответствия. В этом случае метод, как и для обычного соответствия, вернет Неопределено.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: