Разработка и Конфигурация · 9 мин
Что такое ООП в 1С и как оно устроено
Что такое ООП в 1С: объекты, классы, свойства и методы в языке 1С:Предприятие. Разбираем принципы, примеры кода и типичные ошибки разработчиков.
ООП в 1С — это объектно-ориентированный подход, реализованный во встроенном языке платформы 1С:Предприятие. Разработчик работает с объектами: справочниками, документами, регистрами, отчётами. У каждого объекта есть свойства (данные) и методы (действия), а поведение описывается в модулях. Это не «классическое» ООП как в C# или Java, но базовые принципы — инкапсуляция, наследование и полиморфизм — в платформе присутствуют в специфическом виде.
Понимание того, как устроена объектная модель 1С, критично для любого, кто пишет код: от доработки типовой конфигурации до разработки собственных подсистем. Ошибки в работе с объектами приводят к порче данных в базе, блокировкам и падению производительности. Ниже разберём, какие объекты существуют в 1С, как реализованы принципы ООП, чем объект отличается от ссылки и какие подходы считаются безопасными.
Что такое ООП и как оно проявляется в 1С
Объектно-ориентированное программирование строится вокруг понятия «объект» — сущности, объединяющей данные и операции над ними. В классических языках разработчик описывает классы и создаёт их экземпляры. В 1С модель другая: «классы» — это виды метаданных (Справочники, Документы, РегистрыСведений и т.д.), а конкретные объекты конфигурации (например, «Номенклатура» или «ПоступлениеТоваров») — их реализации.
Когда вы пишете Документы.ПоступлениеТоваров.СоздатьДокумент(), вы фактически вызываете фабричный метод менеджера объекта и получаете новый экземпляр со свойствами (Дата, Номер, табличные части) и методами (Записать, Провести, УстановитьНовыйНомер). Это полноценная объектная модель, просто классы предопределены платформой, а не описываются программистом.
Основные виды объектов в платформе
Объекты 1С делятся на две большие группы: прикладные объекты конфигурации и универсальные объекты платформы. Первые описывают предметную область, вторые — служебные типы вроде массивов, структур, таблиц значений и запросов.
С прикладными объектами работа идёт через три сущности: ссылка, объект и менеджер. Ссылка — лёгкий указатель на запись в базе, объект — полноценная копия данных в памяти с возможностью изменения, менеджер — точка входа для создания и поиска (например, Справочники.Номенклатура).
| Вид объекта | Назначение | Ключевые методы |
|---|---|---|
| Справочник | Хранение условно-постоянных списков: товары, контрагенты, сотрудники | Записать, НайтиПоКоду, НайтиПоНаименованию |
| Документ | Регистрация хозяйственных операций, проведение | Провести, Записать, УстановитьНовыйНомер |
| Регистр сведений | Хранение разрезов данных: цены, курсы валют | Добавить, Записать, ПолучитьПоследнее |
| Регистр накопления | Учёт остатков и оборотов: склад, взаиморасчёты | Записать, Остатки, Обороты |
Универсальные объекты — Структура, Соответствие, Массив, ТаблицаЗначений, Запрос — создаются конструктором Новый и живут только в памяти. Они не привязаны к базе данных и используются как промежуточные контейнеры при обработке информации.
Как реализованы принципы ООП в 1С
Инкапсуляция
Доступ к данным объекта происходит через его свойства и методы, а внутренняя логика скрыта в модулях. Например, чтобы изменить документ, вы не пишете SQL напрямую в таблицы — вы получаете объект, меняете реквизиты и вызываете Записать(). Проверки корректности выполняются в обработчиках ПередЗаписью и ПриЗаписи, что защищает целостность данных.
Наследование
Классического наследования классов в 1С нет. Его роль частично выполняют: общие реквизиты (один реквизит для нескольких объектов), подписки на события (единый обработчик для группы объектов), определяемые типы и общие модули с переиспользуемой логикой. В управляемых формах наследуется поведение стандартных команд и обработчиков платформы.
Полиморфизм
Полиморфизм проявляется через универсальные коллекции метаданных. Код вида Для Каждого Док Из Документы Цикл обходит все виды документов, и у каждого можно вызвать одинаковые методы — НайтиПоНомеру, СоздатьДокумент. Подписки на события тоже полиморфны: один обработчик срабатывает для разных типов объектов.
Ссылка и объект: ключевое различие для разработчика
Самая частая ошибка начинающих — путать ссылку и объект. Ссылка (СправочникСсылка.Номенклатура) — это только идентификатор записи. Через неё можно читать реквизиты (платформа неявно выполнит запрос к базе), но нельзя изменять данные. Объект (СправочникОбъект.Номенклатура) получают вызовом Ссылка.ПолучитьОбъект() — он загружает данные в память и позволяет их менять с последующей записью.
Каждое обращение к реквизиту через точку от ссылки — это отдельный запрос к базе. Конструкция Если Док.Контрагент.ИНН = ... Тогда в цикле порождает десятки запросов и резко замедляет код. Правильный подход — получить нужные данные одним запросом или через объект.
Где пишется код: модули объектов и общие модули
Логика объекта размещается в его модуле: модуль объекта (ПередЗаписью, ПриЗаписи, ОбработкаПроведения), модуль менеджера (создание, печать, обработка получения данных) и модуль формы (интерактивная логика интерфейса). Общая бизнес-логика, не привязанная к конкретному объекту, выносится в общие модули.
Пример типового кода обработки проведения документа с записью движений в регистр:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого Строка Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = Строка.Номенклатура;
Движение.Количество = Строка.Количество;
КонецЦикла;
КонецПроцедуры
Здесь виден объектный стиль: документ обращается к своим табличным частям и коллекции движений как к свойствам, вызывает методы Добавить и присваивает значения реквизитам движения.
- 1Получите ссылку на нужный элемент (запросом или поиском)
- 2Вызовите Ссылка.ПолучитьОбъект() для загрузки данных в память
- 3Измените реквизиты и табличные части объекта
- 4Вызовите Объект.Записать() внутри транзакции при множественных изменениях
- 5Проверьте результат: перечитайте данные и убедитесь, что изменения применились
Типичные ошибки при работе с объектами
Первая группа ошибок — производительность: чтение реквизитов через точку в циклах, вызов ПолучитьОбъект там, где достаточно запроса, запись объектов по одному вместо пакетной обработки. Вторая группа — целостность: изменение объекта без проверки результата записи, игнорирование исключений, работа без транзакций при связанных изменениях.
Как проверить, что код работает правильно
После изменения объектов проверяйте не только отсутствие ошибок, но и фактическое состояние данных. Для документов — корректность движений по регистрам, для справочников — уникальность кодов и отсутствие дублей. В отладчике полезно смотреть значение Объект.Модифицированность() перед записью.
Как проверить результат
Записи по регистрам соответствуют табличным частям
Движений нет или суммы не сходятся с документом
Записать() завершается без исключения, данные видны в форме
Исключение, блокировка или тихая отмена записи
Обработка не выполняет запросы внутри цикла
Заметные паузы, рост числа обращений к СУБД
Часто задаваемые вопросы
Можно ли создать свой класс в 1С?
Нет, встроенный язык не поддерживает объявление классов. Вместо классов используют общие модули с экспортными процедурами и функциями, а данные передают через структуры. Для расширения поведения объектов применяют подписки на события и расширения конфигурации.
Чем ссылка отличается от объекта на практике?
Ссылка — это указатель на запись в базе, через неё можно только читать данные. Объект — загруженная в память копия записи, которую можно менять и записывать. Объект получают методом ПолучитьОбъект() от ссылки.
Есть ли в 1С наследование?
Классического наследования классов нет. Его заменяют общие реквизиты, определяемые типы, подписки на события и общие модули. В формах часть поведения наследуется от стандартных обработчиков платформы.
Где правильно размещать бизнес-логику?
Логику, относящуюся к конкретному объекту, — в его модуле объекта или модуле менеджера. Переиспользуемую логику — в общих серверных модулях. В модуле формы оставляют только интерфейсные обработчики, вызывающие серверные процедуры.
Почему нельзя менять данные напрямую в таблицах SQL?
Платформа ведёт служебные данные: итоги регистров, нумерацию, версии объектов. Прямая правка таблиц обходит эти механизмы и приводит к рассогласованию базы, ошибкам при обновлении и потере поддержки. Все изменения выполняются только через объектную модель.
Что важно запомнить
ООП в 1С — это работа с предопределёнными платформой объектами через их свойства, методы и модули. Различайте ссылку и объект, размещайте логику в правильных модулях, избегайте запросов в циклах и никогда не правьте данные напрямую в СУБД.