К статье
Практический материал

Разработка и Конфигурация · 11 мин

Какие объекты 1С используются при описании алгоритма

Какие объекты конфигурации 1С используются при описании алгоритма: справочники, документы, регистры, перечисления, запросы. Примеры кода и типичные ошибки.

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

Все объекты, доступные в алгоритмах, делятся на две большие группы. Первая — прикладные объекты конфигурации: справочники, документы, регистры, перечисления, планы счетов и другие. Они описывают предметную область и задаются разработчиком в конфигураторе. Вторая — универсальные объекты платформы: запросы, таблицы значений, структуры, соответствия, массивы, менеджеры временных таблиц. Они существуют независимо от конфигурации и служат инструментами обработки данных.

Понимание того, какой объект за что отвечает, — базовый навык при проектировании любого алгоритма: от простой обработки заполнения документа до сложного обмена данными. Ниже разобраны основные типы объектов, сценарии их применения и критерии выбора.

Прикладные объекты конфигурации как основа алгоритма

Прикладные объекты описывают сущности учёта: товары, контрагентов, заказы, остатки, цены. В алгоритме к ним обращаются через менеджеры объектов — например, Справочники.Номенклатура, Документы.РеализацияТоваров, РегистрыНакопления.ОстаткиТоваров. Менеджер позволяет найти элемент, создать новый, получить выборку или пустую ссылку.

Ключевое различие, которое нужно понимать при написании кода, — между ссылкой и объектом. Ссылка — это лёгкий идентификатор записи в базе, через неё доступны только реквизиты, перечисленные в запросе или в явном обращении. Объект — это полная копия данных в памяти, которую можно изменять и записывать. Получение объекта через Ссылка.ПолучитьОбъект() — дорогая операция, и в массовых обработках её стараются избегать.

Справочники и перечисления: нормативные данные

Справочники хранят условно-постоянную информацию: номенклатуру, контрагентов, склады, валюты. В алгоритмах их используют для поиска нужного элемента, проверки заполненности реквизитов и создания новых позиций. Типовой приём — поиск по наименованию или коду перед созданием, чтобы не плодить дубли:

Найденный = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);

Если Найденный.Пустая() Тогда

НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();

НовыйЭлемент.Наименование = Наименование;

НовыйЭлемент.Записать();

КонецЕсли;

Перечисления задают закрытый список значений: статусы, виды операций, способы доставки. В алгоритме значение перечисления сравнивают напрямую: Если Статус = Перечисления.СтатусыЗаказа.ВРаботе Тогда. Перечисления нельзя расширять пользователю, поэтому для списков, которые могут измениться, выбирают справочник.

Планы видов характеристик занимают промежуточное положение: они хранят типизированный список свойств, к которым привязаны значения произвольного типа. Их применяют, когда набор характеристик объекта заранее неизвестен — например, дополнительные свойства товаров.

Документы и регистры: события и учётные данные

Документ отражает факт хозяйственной деятельности и, как правило, является регистратором движений по регистрам. В алгоритмах с документами работают в двух режимах: интерактивное проведение (обработчики ОбработкаПроведения, ОбработкаЗаполнения) и программное создание с последующим вызовом Записать(РежимЗаписиДокумента.Проведение).

Регистры — главные объекты для хранения учётных данных. Регистр сведений хранит значения в разрезе измерений (курсы валют, цены, штрихкоды), регистр накопления — остатки и обороты (товары на складах, взаиморасчёты). В алгоритме проведения движения формируются через коллекцию Движения:

Движение = Движения.ОстаткиТоваров.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Номенклатура = СтрокаТЧ.Номенклатура;

Движение.Количество = СтрокаТЧ.Количество;

Сравнение регистров

Регистр сведений

Хранит значения в разрезе измерений и периода: цены, курсы, настройки. Подходит для чтения и записи без документа-регистратора.

Регистр накопления

Хранит остатки и обороты: товары, деньги, взаиморасчёты. Запись почти всегда идёт через документ-регистратор при проведении.

Справочник

Хранит нормативные данные без движений. Не подходит для остатков: нет механизма контроля и быстрого получения итогов.

Универсальные объекты платформы внутри алгоритма

Объект Запрос — основной способ чтения данных в серверных алгоритмах. Он выполняет выборку на языке запросов, возвращает результат, выборку или таблицу значений. Правильно построенный запрос заменяет десятки строк циклического обхода и работает в разы быстрее, потому что обработка идёт на стороне СУБД.

Структура и соответствие служат для передачи и хранения наборов данных в памяти. Структура удобна для параметров с известными именами ключей, соответствие — для произвольных ключей, например ссылок: КэшЦен.Вставить(СсылкаНаТовар, Цена). Массив применяют для упорядоченных списков, таблицу значений — для табличных данных с колонками, которые можно сортировать, сворачивать и выгружать в запрос через временную таблицу.

bsl
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номенклатура, КоличествоОстаток ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад)";
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();

Как выбрать объект под конкретную задачу

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

Для промежуточных вычислений прикладные объекты не нужны вовсе: выгрузите данные запросом в таблицу значений, обработайте в памяти и запишите результат. Такой подход снижает число обращений к базе и упрощает отладку, потому что промежуточные данные видны в табло.

Маршрут решения

Как выбрать объект

Нужен фиксированный список значений, заданный разработчикомИспользуйте перечисление — пользователь не сможет его изменить
Нужны исторические значения по периодам (цены, курсы)Используйте периодический регистр сведений
Нужны остатки и обороты с контролем минусаИспользуйте регистр накопления и движения документа
Нужна обработка большого объёма данных без записиИспользуйте запрос и таблицу значений в памяти

Пошаговый порядок проектирования алгоритма

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

Порядок действий
  1. 1
    Определите входные данные алгоритма и объекты, где они хранятся
  2. 2
    Выберите способ чтения: запрос для выборок, ссылка для одиночных реквизитов
  3. 3
    Спроектируйте запись: объект документа для проведения, набор записей для регистра сведений
  4. 4
    Напишите код с проверками: Пустая(), ПроверитьЗаполнение(), транзакция при множественной записи
  5. 5
    Проверьте результат: движения документа, отсутствие дублей, время выполнения на реальном объёме

Особое внимание уделите транзакциям. Если алгоритм записывает несколько объектов — например, документ и набор записей регистра сведений, — оберните запись в НачатьТранзакцию() и ЗафиксироватьТранзакцию() с обработчиком исключений. Иначе при сбое в середине в базе останется частично записанные данные.

Проверка результата и типичные ошибки

После выполнения алгоритма результат проверяют по объектным признакам: документ проведён, движения сформированы, остатки по регистру сошлись с ожидаемыми, запрос возвращает непустой результат. Для отладки используют отчёт по регистру или консоль запросов — так видно, что именно записал алгоритм.

Контрольные точки

Как проверить результат

Движения документа
Норма

Записи по нужным регистрам присутствуют, суммы и количества совпадают с табличной частью

Тревожный признак

Движений нет, лишние записи или неверный вид движения

Поиск элемента справочника
Норма

Найден ровно один элемент, дубли не создаются при повторном запуске

Тревожный признак

Повторный запуск создаёт новые элементы

Результат запроса
Норма

Выборка непустая, типы полей соответствуют ожиданиям

Тревожный признак

Пустой результат из-за неверных параметров или лишних соединений

Типичные ошибки
01
Получение объекта через ПолучитьОбъект() внутри цикла для чтения одного реквизита — резкое падение производительности; используйте запрос
02
Запись в регистр накопления напрямую, минуя документ-регистратор, — нарушается логика учёта и отчётность
03
Сравнение ссылок строкой вместо сравнения ссылок — ложные несовпадения из-за представления
04
Отсутствие проверки Найденный.Пустая() перед использованием найденной ссылки — обращение к реквизитам пустой ссылки
05
Изменение объектов в обход блокировок без транзакции — конфликты при параллельной работе пользователей
При отладке алгоритма с запросом сначала выполните текст запроса в консоли запросов с теми же параметрами. Большинство проблем — пустые выборки и неверные типы — видны там сразу, без запуска всей обработки.
ПЗ
Практическое замечание

Частые вопросы

Чем ссылка отличается от объекта в 1С?

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

Когда использовать регистр сведений, а когда справочник?

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

Можно ли в алгоритме обойтись без запроса?

Технически да — через выборки менеджеров и обход ссылок. Но для выборок более чем из нескольких десятков записей запрос быстрее и читабельнее. Обход объектов в цикле оправдан только при поэлементной записи с индивидуальной логикой.

Что такое набор записей и когда он нужен?

Набор записей — объект для чтения и записи строк регистра. Для регистра сведений его создают через РегистрыСведений.Имя.СоздатьНаборЗаписей(), устанавливают отбор по измерениям и записывают. Для регистра накопления набор обычно формируется в коллекции Движения документа.

Какие объекты нельзя изменять программно из пользовательского режима?

Объекты метаданных — состав справочников, реквизитов, регистров — изменяются только в конфигураторе. В режиме предприятия код работает с данными: элементами, документами, записями регистров. Изменение структуры конфигурации из алгоритма невозможно.

Как избежать дублей при программном создании элементов справочника?

Перед созданием выполняйте поиск по уникальному признаку: коду, наименованию, ИНН или внешнему идентификатору в отдельном реквизите. Создавайте элемент только если поиск вернул пустую ссылку. Для надёжности дополнительно включите контроль уникальности кода или индексируйте реквизит поиска.

Итог

Что важно запомнить

Алгоритм в 1С строится вокруг прикладных объектов конфигурации (справочники, документы, регистры, перечисления) и универсальных объектов платформы (запрос, таблица значений, структура, соответствие). Выбор объекта определяется природой данных: остатки — в регистр накопления, история значений — в регистр сведений, обработка в памяти — через запрос и таблицу значений. Чтение выполняйте запросами, запись — с транзакциями и проверкой результата.