Структура или обработка в 1С: когда хватит контейнера, а когда нужен объект | infolimp.ru

Структура или обработка в 1С: когда хватит контейнера, а когда нужен объект

16 мая 2026 · infolimp.ru

Автор: 1С Инсайдер · роль: практик 1С · проверка: типовые конфигурации и рабочие сценарии · 0 комментариев

Утром в чате команды коллега спрашивает: «Передаю в процедуру семь параметров расчёта, шестой раз меняется список. Что взять — структуру или сделать обработку-объект?» На этот вопрос двое отвечают «структуру, конечно», один — «обработку», и аргументированно правы все трое. Разница только в том, под какие задачи они мысленно делают выбор. Разбираем, где Структура — лучший выбор, где честнее завести обработку, и почему попытка унифицировать обычно ломает производительность или поддержку.

Что вы реально сравниваете

Структура и обработка в 1С — это объекты разного класса. Сравнивать их «в лоб» — то же самое, что выбирать между блокнотом и текстовым редактором: оба хранят текст, но решают разные задачи.

Когда коллега говорит «возьми структуру» — он имеет в виду «не плоди сущности, передавай параметры лёгким контейнером». Когда говорит «нужна обработка» — «у тебя задача со своей логикой и состоянием, не пытайся всё уложить в контейнер».

Когда что брать

СценарийБерёмПочему
Передать в процедуру 5–10 параметров расчёта Структура Один вызов, контейнер живёт до возврата, никакой инициализации
Накопить результаты в цикле и вернуть в вызывающий код Структура (или Соответствие) Лёгкое хранилище, не требует инфраструктуры
Сложный расчёт с подзадачами, кэшем, обработкой ошибок Обработка Свой модуль, своё состояние, разделение на методы
Перенос группы операций в отдельный файл для распространения Внешняя обработка Файл .epf можно отдать клиенту, обновлять без правки конфигурации
Передача параметров через границу «клиент → сервер» Структура Сериализуется, передаётся быстро, обработка как объект — нет

Как это выглядит в коде

Структура как контейнер параметров

// Передача семи параметров расчёта одной структурой
ПараметрыРасчёта = Новый Структура;
ПараметрыРасчёта.Вставить("Контрагент", Контрагент);
ПараметрыРасчёта.Вставить("Договор", Договор);
ПараметрыРасчёта.Вставить("ДатаНачала", ДатаНачала);
ПараметрыРасчёта.Вставить("ДатаОкончания", ДатаОкончания);
ПараметрыРасчёта.Вставить("УчитыватьАвансы", Истина);
ПараметрыРасчёта.Вставить("Округление", 2);
ПараметрыРасчёта.Вставить("Валюта", Валюта);

Результат = РассчитатьПоПараметрам(ПараметрыРасчёта);

Главное преимущество структуры в роли контейнера параметров — добавление восьмого параметра не ломает сигнатуру процедуры. Просто появляется новый ключ, старые места вызова не трогаются. На команде из трёх разработчиков это экономит часы споров о порядке аргументов.

Обработка как самостоятельный объект

Когда задача обрастает логикой — кэшем уже посчитанных значений, проверкой прав, формированием журнала событий — попытка передавать всё структурами превращается в семиэтажную пирамиду «структура внутри структуры». Это сигнал, что пора заводить обработку:

// В клиентском или серверном коде — создание объекта обработки
Калькулятор = Обработки.РасчётЗадолженности.Создать();
Калькулятор.УстановитьПараметры(Контрагент, Договор, ДатаНачала, ДатаОкончания);
Калькулятор.ВключитьКэш();
Результат = Калькулятор.Рассчитать();

Здесь объект живёт между вызовами, накапливает кэш, может предоставлять промежуточные результаты — то, что в структуре пришлось бы передавать с каждым вызовом и пересобирать.

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

На синтетических тестах структура опережает обработку по созданию и обращению на порядки — это закономерно, потому что они о разном. Создание структуры — это одна операция выделения памяти под контейнер. Создание обработки — инициализация всего модуля, реквизитов, проверка прав, потенциальная компиляция модуля. В типовом сценарии «передать параметры на 100 тысяч вызовов» структура отрабатывает за миллисекунды, обработка — за секунды.

Но это не значит «структура всегда быстрее». Если сравнить «100 тысяч обращений к одному кэшу» — обработка с готовым кэшем выиграет у структуры, которая пересобирает контейнер каждый раз. Сравнивать имеет смысл реалистичный сценарий, а не голую инициализацию.

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

Чек-лист выбора

  1. Что я передаю — только данные (значения полей) или объект со своим поведением?
  2. Сколько раз я буду переиспользовать этот контейнер? Если один раз — точно структура.
  3. Нужно ли мне состояние между вызовами? Если да — обработка.
  4. Передаются ли данные через клиент-сервер? Если да — структура (обработка не сериализуется привычным образом).
  5. Будет ли этот код раздаваться клиентам отдельно от конфигурации? Если да — внешняя обработка.
  6. Может ли список параметров вырасти? Если да и сильно — структура, потому что добавление ключа не ломает сигнатуру.
  7. Есть ли в сценарии формы, отчёты или табличные части? Если есть — обработка, структура не предназначена для UI.

Типичные ошибки

Профессиональные решения для 1С и marketplace-интеграций — каталог отчётов и инструментов на витрине НОПи.

Перейти в каталог решений →