← Назад к вопросам
Чем отличается Структура от Соответствия в 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)
Этот выбор критичен для производительности и поддерживаемости кода!