Разработка и Конфигурация · 10 мин
Соответствие в 1С: что это и как использовать
Соответствие в 1С — это коллекция пар «ключ-значение». Разбираем, что это за тип данных, как создавать, заполнять, перебирать и где применять на практике.
Термин «соответствие» в 1С встречается в двух разных контекстах, и это часто путает начинающих. Первый и основной — универсальная коллекция «Соответствие» во встроенном языке: структура данных вида «ключ → значение», аналог словаря или хеш-таблицы в других языках программирования. Второй — бытовое употребление в учётных задачах: соответствие счетов, соответствие номенклатуры поставщика своей номенклатуре, соответствие документов друг другу. В этой статье разобраны оба смысла с упором на практику.
Коллекция «Соответствие» нужна, когда требуется быстро найти значение по уникальному ключу: получить цену по коду товара, накопить суммы по контрагентам, проверить, обрабатывался ли уже этот элемент. В отличие от массива, поиск идёт не перебором, а напрямую по ключу, поэтому на больших объёмах данных соответствие работает заметно быстрее циклов сравнения.
Что такое соответствие как тип данных
Соответствие — это не объект конфигурации, а универсальная коллекция, которая существует только в памяти во время выполнения кода. Она не хранится в базе данных напрямую: если нужно сохранить данные между сеансами, их записывают в регистры сведений, справочники или сериализуют.
Каждый элемент соответствия состоит из ключа и значения. Ключ уникален: если вставить новое значение по уже существующему ключу, старое значение будет замещено без ошибки. Значением может быть что угодно — число, строка, ссылка на справочник, другая коллекция, структура. Это делает соответствие удобным инструментом для построения вложенных структур данных.
Важная особенность: порядок элементов при обходе соответствия не гарантирован. Нельзя рассчитывать, что элементы будут перебираться в порядке добавления. Если порядок важен, дополнительно ведут массив ключей или используют таблицу значений с сортировкой.
Как создать и заполнить соответствие
Создание выполняется конструктором Новый Соответствие. Добавление элементов — методом Вставить(Ключ, Значение). Чтение — через оператор квадратных скобок Соответствие[Ключ] или метод Получить(Ключ).
Цены = Новый Соответствие;
Цены.Вставить("ТОВ-001", 1500);
Цены.Вставить("ТОВ-002", 2300);
// Чтение двумя способами
Цена = Цены["ТОВ-001"]; // 1500
Цена = Цены.Получить("ТОВ-999"); // Неопределено — ключа нетРазница между двумя способами чтения принципиальна. Обращение через квадратные скобки к несуществующему ключу вернёт Неопределено, так же как и метод Получить. Однако присваивание через скобки Цены["ТОВ-003"] = 3000; тоже создаёт элемент — это допустимый способ вставки. Ошибка возникнет только если попытаться обратиться к свойству значения, которое равно Неопределено.
Удаление элемента выполняется методом Удалить(Ключ), полная очистка — методом Очистить(). Количество элементов возвращает метод Количество(). Перед удалением желательно убедиться, что ключ существует, хотя удаление несуществующего ключа ошибкой не является.
Перебор элементов и проверка наличия ключа
Обход соответствия выполняется циклом Для Каждого ... Из ... Цикл. Переменная цикла будет иметь тип «КлючИЗначение», у которого доступны свойства Ключ и Значение.
Для Каждого Элемент Из Цены Цикл
Сообщить("Код: " + Элемент.Ключ + ", цена: " + Элемент.Значение);
КонецЦикла;
// Проверка наличия ключа
Если Цены.Получить("ТОВ-001") <> Неопределено Тогда
// ключ существует
КонецЕсли;Тонкий момент: проверка Получить(Ключ) <> Неопределено не сработает, если значение по ключу само равно Неопределено. Если такая ситуация возможна в вашей логике, надёжнее хранить в значениях структуру или признак заполненности, либо вести отдельный учёт вставленных ключей.
Типовые сценарии применения
Кэширование данных в цикле
Самая частая задача — избежать повторных запросов к базе внутри цикла. Например, при обработке таблицы товаров данные по каждому контрагенту запрашивают один раз и кладут в соответствие, а при повторном встречании берут из кэша. Это снижает нагрузку на СУБД и ускоряет обработку в разы.
Группировка и накопление итогов
Соответствие удобно для подсчёта сумм по группам: ключ — контрагент или склад, значение — накопленная сумма. При обходе данных проверяют наличие ключа: если его нет, вставляют первое значение, если есть — прибавляют к существующему. Для сложных итогов по нескольким измерениям в качестве значения используют вложенное соответствие или структуру.
Контроль дублей
При загрузке данных из файла соответствие помогает отследить уже обработанные строки: ключом делают уникальный идентификатор записи (например, ИНН + номер счёта), и перед созданием объекта проверяют, встречался ли он ранее. Это защищает от задвоения документов при повторной загрузке того же файла.
Соответствие, структура и таблица значений: что выбрать
Эти три коллекции часто взаимозаменяемы на первый взгляд, но у каждой своё назначение. Структура подходит для фиксированного набора именованных полей, известных на момент написания кода. Соответствие — когда ключи формируются динамически и их заранее неизвестное количество. Таблица значений — когда нужны сортировка, отборы, поиск по нескольким колонкам, свёртка и вывод данных пользователю.
Сравнение вариантов
Динамические ключи любого типа, быстрый поиск по ключу. Нет сортировки и отборов, порядок не гарантирован
Фиксированный набор полей, ключи — только строки, допустимые как имена идентификаторов. Удобна для параметров
Нужны сортировка, отбор, свёртка, итоги по колонкам. Тяжелее по памяти и медленнее при простом поиске по ключу
Важен порядок элементов и обход по индексу. Поиск значения — только перебором
Соответствие в учётном смысле: сопоставление данных
Вне программирования слово «соответствие» в 1С обычно означает сопоставление одних данных другим. Классические примеры: соответствие номенклатуры поставщика собственной номенклатуре при обмене по EDI или загрузке прайсов, соответствие счетов бухгалтерского и налогового учёта, сопоставление документов при синхронизации между конфигурациями (например, между УТ и БП).
Такие соответствия хранятся в базе — чаще всего в регистрах сведений. Например, регистр связывает строку наименования товара поставщика с конкретным элементом справочника «Номенклатура». При следующей загрузке документов от этого поставщика программа автоматически подставляет нужный товар. Если сопоставление не выполнено, документы загружаются с незаполненными позициями или создают дубли элементов справочника.
При работе с сопоставлением данных проверяйте результат на небольшой выборке: загрузите один-два документа, убедитесь, что товары и контрагенты подставились корректно, и только потом запускайте полную загрузку. Ошибка в правилах сопоставления на большом объёме создаёт сотни дублей, чистка которых занимает значительно больше времени, чем предварительная проверка.
Как проверить результат
Возвращается ожидаемое значение, отличное от Неопределено
Получаете Неопределено — проверьте тип и точное значение ключа
В документе подставлены существующие товары из справочника
Создаются новые элементы с наименованиями поставщика — соответствие не настроено
Число новых элементов справочника соответствует ожиданиям
Резкий рост числа элементов — признак дублей
Часто задаваемые вопросы
Чем соответствие отличается от структуры в 1С?
Ключи структуры — только строки, которые допустимы как имена идентификаторов (без пробелов, не начинаются с цифры). Ключи соответствия — значения любого типа, включая ссылки и числа. Структуру удобно передавать между клиентом и сервером, соответствие лучше подходит для динамических ключей и быстрого поиска.
Можно ли сохранить соответствие в базу данных?
Напрямую — нет, это коллекция времени выполнения. Для хранения данные переносят в регистр сведений, табличную часть или сериализуют через механизмы хранения значения. Для пар «ключ-значение» в базе чаще всего создают регистр сведений с измерением-ключом и ресурсом-значением.
Почему поиск по ключу возвращает Неопределено, хотя элемент добавлялся?
Чаще всего причина в несовпадении типов или значений ключа: строка с лишним пробелом, число вместо строки, другая ссылка на тот же логически объект из разных баз. Проверьте ключи через отладчик, сравнив тип и точное значение при вставке и при чтении.
Что быстрее: соответствие или поиск в таблице значений?
Для однократного поиска по одному ключу разница незаметна. При многократных обращениях в цикле соответствие обычно быстрее, так как поиск по ключу не требует перебора строк. Таблица значений выигрывает, когда нужны отборы по нескольким колонкам, сортировка и свёртка.
Где в типовых конфигурациях настраивается соответствие номенклатуры поставщика?
Обычно в карточке соглашения с поставщиком или в отдельном регистре сведений, доступном из раздела закупок. Точное расположение зависит от конфигурации: в УТ и ERP это регистр номенклатуры поставщиков, в БП — сопоставление при загрузке документов. Ищите по слову «номенклатура поставщика» в разделе закупок или в настройках обмена.
Можно ли перебрать соответствие в порядке добавления элементов?
Нет, порядок обхода не гарантирован платформой. Если нужен строгий порядок, ведите параллельно массив ключей в нужной последовательности или используйте таблицу значений с сортировкой по колонке.
Что важно запомнить
Соответствие в 1С — коллекция уникальных пар «ключ-значение» для быстрого поиска в коде: создаётся через Новый Соответствие, заполняется методом Вставить, читается через Получить. Порядок обхода не гарантирован, в базе напрямую не хранится. В учётных задачах «соответствие» — это сопоставление данных (номенклатуры, счетов, документов), которое хранится в регистрах сведений и требует проверки на тестовой выборке перед массовой загрузкой.