← Назад к вопросам

Чем отличается Структура от Соответствия в 1С?

1.0 Junior🔥 161 комментариев
#Объекты метаданных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура vs Соответствие в 1С

Это фундаментальные различия между двумя типами коллекций в 1С, часто путаемыми начинающими разработчиками.

Структура (Structure)

Структура — это типизированный контейнер с фиксированным набором свойств, известных на этапе разработки.

// Создание Структуры со свойствами
ТвоёОтключение = Новый Структура();
ТвоёОтключение.Вставить("Имя", "Иван");
ТвоёОтключение.Вставить("Возраст", 30);
ТвоёОтключение.Вставить("Активен", Истина);

// Или инициализация с параметрами
ТвоёОтключение = Новый Структура("Имя,Возраст,Активен", "Иван", 30, Истина);

// Доступ к свойствам
Сообщить(ТвоёОтключение.Имя); // "Иван"
Сообщить(ТвоёОтключение["Возраст"]); // 30

Характеристики:

  • Типизирована — вы знаете, какие ключи и типы значений
  • Быстрая работа — оптимизирована под известный набор свойств
  • Неизменяемость структуры — нельзя добавить новое свойство после создания
  • Идеальна для данных — передача результатов функций, пакетные операции
  • Удобна для отладки — IDE показывает все свойства

Соответствие (Map)

Соответствие — это динамический словарь с произвольными ключами и значениями.

// Создание пустого Соответствия
Сочетание = Новое Соответствие();
Сочетание.Вставить("Имя", "Иван");
Сочетание.Вставить("Возраст", 30);
Сочетание.Вставить("НовоеСвойство", "можно добавить в любой момент");

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

// Проверка наличия ключа
Если Сочетание.Получить("Имя") <> Неопределено Тогда
    СообщитьПолученное = Сочетание.Получить("Имя");
КонецЕсли;

Характеристики:

  • Динамична — добавлять ключи можно в любой момент
  • Нетипизирована — ключи и значения могут быть любыми типами
  • Гибкость — идеально для неизвестного набора данных
  • Медленнее чем Структура из-за динамической природы
  • Сложнее отладить — не видны свойства заранее

Сравнительная таблица

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

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

Когда использовать Структуру

// Результат функции с известными полями
Функция ПолучитьДанныеСотрудника(Сотрудник)
    
    Результат = Новая Структура();
    Результат.Вставить("ФИО", Сотрудник.Наименование);
    Результат.Вставить("Должность", Сотрудник.Должность);
    Результат.Вставить("ДатаПриема", Сотрудник.ДатаПриема);
    
    Возврат Результат;
    
КонецФункции

// Использование
Данные = ПолучитьДанныеСотрудника(МойСотрудник);
Сообщить(Данные.ФИО);
Сообщить(Данные.Должность);

Когда использовать Соответствие

// Кэш с динамическими ключами
Кэш = Новое Соответствие();

// Парсинг JSON с неизвестной структурой
Функция ПарситьДинамическийJSON(JSONТекст)
    
    ПарсОбъект = Новый ПарсерJSON();
    ДанныеСтруктура = ПарсОбъект.Прочитать(JSONТекст);
    
    // ДанныеСтруктура — Соответствие
    Для Каждого КлючЗначение Из ДанныеСтруктура Цикл
        Сообщить(КлючЗначение.Ключ + " = " + КлючЗначение.Значение);
    КонецЦикла;
    
КонецФункции

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

Преобразование между ними

// Структура → Соответствие
МояСтруктура = Новая Структура("Ключ1,Ключ2", "Значение1", "Значение2");
МоеСоответствие = Новое Соответствие(МояСтруктура);

// Соответствие → Структура (через JSON)
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.ЗаписатьЗначение(МоеСоответствие);
МояСтруктура = Новый ПарсерJSON().Прочитать(ЗаписьJSON.ПолучитьСтроку());

Практическое правило

  • Структура — когда вы точно знаете поля и хотите типизации и скорости
  • Соответствие — когда структура динамична или работаете с внешним JSON
  • В 95% случаев в бизнес-логике используйте Структуру
  • Соответствие нужно для специальных случаев (парсинг JSON, динамические кэши, API)

Этот выбор критичен для производительности и поддерживаемости кода!