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

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

Что такое ООП в 1С и как оно устроено

Что такое ООП в 1С: объекты, классы, свойства и методы в языке 1С:Предприятие. Разбираем принципы, примеры кода и типичные ошибки разработчиков.

ООП в 1С — это объектно-ориентированный подход, реализованный во встроенном языке платформы 1С:Предприятие. Разработчик работает с объектами: справочниками, документами, регистрами, отчётами. У каждого объекта есть свойства (данные) и методы (действия), а поведение описывается в модулях. Это не «классическое» ООП как в C# или Java, но базовые принципы — инкапсуляция, наследование и полиморфизм — в платформе присутствуют в специфическом виде.

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

Что такое ООП и как оно проявляется в 1С

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

Когда вы пишете Документы.ПоступлениеТоваров.СоздатьДокумент(), вы фактически вызываете фабричный метод менеджера объекта и получаете новый экземпляр со свойствами (Дата, Номер, табличные части) и методами (Записать, Провести, УстановитьНовыйНомер). Это полноценная объектная модель, просто классы предопределены платформой, а не описываются программистом.

Основные виды объектов в платформе

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

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

Вид объектаНазначениеКлючевые методы
СправочникХранение условно-постоянных списков: товары, контрагенты, сотрудникиЗаписать, НайтиПоКоду, НайтиПоНаименованию
ДокументРегистрация хозяйственных операций, проведениеПровести, Записать, УстановитьНовыйНомер
Регистр сведенийХранение разрезов данных: цены, курсы валютДобавить, Записать, ПолучитьПоследнее
Регистр накопленияУчёт остатков и оборотов: склад, взаиморасчётыЗаписать, Остатки, Обороты

Универсальные объекты — Структура, Соответствие, Массив, ТаблицаЗначений, Запрос — создаются конструктором Новый и живут только в памяти. Они не привязаны к базе данных и используются как промежуточные контейнеры при обработке информации.

Как реализованы принципы ООП в 1С

Инкапсуляция

Доступ к данным объекта происходит через его свойства и методы, а внутренняя логика скрыта в модулях. Например, чтобы изменить документ, вы не пишете SQL напрямую в таблицы — вы получаете объект, меняете реквизиты и вызываете Записать(). Проверки корректности выполняются в обработчиках ПередЗаписью и ПриЗаписи, что защищает целостность данных.

Наследование

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

Полиморфизм

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

Ссылка и объект: ключевое различие для разработчика

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

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

Где пишется код: модули объектов и общие модули

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

Пример типового кода обработки проведения документа с записью движений в регистр:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.ОстаткиТоваров.Записывать = Истина;

Для Каждого Строка Из Товары Цикл

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

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

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

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

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

КонецЦикла;

КонецПроцедуры

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

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

Типичные ошибки при работе с объектами

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

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

Как проверить, что код работает правильно

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

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

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

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

Записи по регистрам соответствуют табличным частям

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

Движений нет или суммы не сходятся с документом

Запись объекта
Норма

Записать() завершается без исключения, данные видны в форме

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

Исключение, блокировка или тихая отмена записи

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

Обработка не выполняет запросы внутри цикла

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

Заметные паузы, рост числа обращений к СУБД

Часто задаваемые вопросы

Можно ли создать свой класс в 1С?

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

Чем ссылка отличается от объекта на практике?

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

Есть ли в 1С наследование?

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

Где правильно размещать бизнес-логику?

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

Почему нельзя менять данные напрямую в таблицах SQL?

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

Итог

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

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