1cved

Как работает тип Соответствие в 1С

Как работает тип Соответствие в 1С 8.3 и 8.2

03.03.2026 admin Comments Off

Что такое тип Соответствие

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

Соответствие является одним из наиболее часто используемых типов коллекций в 1С наряду с Массивом и Структурой. Основное отличие от Структуры — возможность использовать в качестве ключей не только строки, но и значения других типов данных.

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

Создание соответствия выполняется с помощью оператора Новый:

МоеСоответствие = Новый Соответствие;

Элементы добавляются методом Вставить():

МоеСоответствие.Вставить("Ключ1", Значение1);
МоеСоответствие.Вставить("Ключ2", Значение2);
МоеСоответствие.Вставить("Ключ3", Значение3);

Также можно создать соответствие через глобальный контекст:

МоеСоответствие = СоздатьОбъект("Соответствие");

При создании соответствия можно указать начальную ёмкость:

МоеСоответствие = Новый Соответствие(100);

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

Для получения значения используется метод Получить():

Значение = МоеСоответствие.Получить("Ключ1");

Если ключ отсутствует, метод вернёт Неопределено. В 1С 8.3 можно использовать оператор []:

Значение = МоеСоответствие["Ключ1"]; // только в 1С 8.3

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

Проверка наличия ключа выполняется методом СодержитКлюч():

Если МоеСоответствие.СодержитКлюч("Ключ1") Тогда
    Сообщить("Ключ найден");
Иначе
    Сообщить("Ключ не найден");
КонецЕсли;

Также можно использовать Получить() с проверкой на Неопределено:

Значение = МоеСоответствие.Получить("Ключ1");
Если Значение <> Неопределено Тогда
    Сообщить("Значение: " + Значение);
КонецЕсли;

Как изменить значение по ключу

Изменение выполняется методом Вставить() или оператором [] (только 8.3):

МоеСоответствие.Вставить("Ключ1", НовоеЗначение);
МоеСоответствие["Ключ1"] = НовоеЗначение; // только 8.3

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

Количество элементов возвращается методом Количество():

КоличествоЭлементов = МоеСоответствие.Количество();
Сообщить("В соответствии " + КоличествоЭлементов + " элементов");

Как обойти все элементы соответствия

Для Каждого Элемент Из МоеСоответствие Цикл
    Ключ = Элемент.Ключ;
    Значение = Элемент.Значение;
    Сообщить("Ключ: " + Ключ + ", Значение: " + Значение);
КонецЦикла;

Каждый элемент имеет свойства Ключ и Значение.

Можно использовать итератор:

Итератор = МоеСоответствие.ПолучитьИтератор();
Пока Итератор.Следующий() Цикл
    Элемент = Итератор.Текущий;
    Ключ = Элемент.Ключ;
    Значение = Элемент.Значение;
    Сообщить("Ключ: " + Ключ + ", Значение: " + Значение);
КонецЦикла;

Как удалить элемент соответствия

МоеСоответствие.Удалить("Ключ1");

С проверкой успешности:

Если МоеСоответствие.Удалить("Ключ1") Тогда
    Сообщить("Элемент удалён");
Иначе
    Сообщить("Элемент не найден");
КонецЕсли;

Как очистить все элементы соответствия

МоеСоответствие.Очистить();
Если МоеСоответствие.Количество() = 0 Тогда
    Сообщить("Соответствие очищено");
КонецЕсли;

Дополнительные методы работы с соответствием

Копирование соответствия

КопияСоответствия = МоеСоответствие.Скопировать();

Объединение соответствий

Для Каждого Элемент Из ВтороеСоответствие Цикл
    ПервоСоответствие.Вставить(Элемент.Ключ, Элемент.Значение);
КонецЦикла;

Получение всех ключей и значений

ВсеКлючи = МоеСоответствие.Ключи();
ВсеЗначения = МоеСоответствие.Значения();

Примеры использования

Пример 1: Кэширование данных

КэшСправочников = Новый Соответствие;

Функция ПолучитьСправочник(КодСправочника)
    Если КэшСправочников.СодержитКлюч(КодСправочника) Тогда
        Возврат КэшСправочников.Получить(КодСправочника);
    Иначе
        Данные = ЗапросСправочника(КодСправочника);
        КэшСправочников.Вставить(КодСправочника, Данные);
        Возврат Данные;
    КонецЕсли;
КонецФункции;

Пример 2: Подсчёт количества вхождений

Результат = Новый Соответствие;

Для Каждого Элемент Из МассивДанных Цикл
    Если Результат.СодержитКлюч(Элемент) Тогда
        Результат[Элемент] = Результат[Элемент] + 1;
    Иначе
        Результат.Вставить(Элемент, 1);
    КонецЕсли;
КонецЦикла;

Пример 3: Группировка данных

ГруппировкаПоКонтрагентам = Новый Соответствие;

Для Каждого Документ Из ВыборкаДокументов Цикл
    Контрагент = Документ.Контрагент;
    
    Если Не ГруппировкаПоКонтрагентам.СодержитКлюч(Контрагент) Тогда
        ГруппировкаПоКонтрагентам.Вставить(Контрагент, Новый Массив);
    КонецЕсли;
    
    ГруппировкаПоКонтрагентам[Контрагент].Добавить(Документ);
КонецЦикла;

Особенности работы с типом Соответствие

Типы данных ключей

Соответствие = Новый Соответствие;
Соответствие.Вставить("Строка", "Значение1");
Соответствие.Вставить(123, "Значение2");
Соответствие.Вставить(Новый Дата(2024, 1, 1), "Значение3");
Соответствие.Вставить(Истина, "Значение4");

Сравнение ключей

Сравнение ключей выполняется оператором =. Для объектов (ссылок на элементы справочников, документов и т.д.) сравнение выполняется по ссылке.

Производительность

Соответствие обеспечивает быстрый доступ к элементам по ключу за счёт использования хэш-таблицы. Сложность поиска в среднем O(1), что эффективно для больших коллекций.

Заключение

Соответствие — мощный инструмент для работы с коллекциями данных в 1С. Основное преимущество — быстрый доступ по ключу и гибкость выбора типа ключа.

Понимание методов работы с соответствием помогает писать эффективный и читаемый код при кэшировании, группировке и подсчёте данных. Регулярное использование этого типа становится привычкой опытных разработчиков 1С.