ООП в 1С Предприятие

1С:Предприятие — это объектно-ориентированный язык программирования, однако его реализация ООП имеет существенные отличия от традиционных объектно-ориентированных языков типа Java, C++ или Python.

Характеристики языка 1С

Встроенный язык 1С:Предприятие обладает следующими особенностями:

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

Объекты в 1С:Предприятии

В 1С существуют две группы объектов:

Встроенные (Платформенные) объекты

Встроенные объекты — это предопределённые классы, которые предоставляет сама платформа 1С:Предприятие:

Основные типы конфигурационных объектов:

  • Справочники (Catalogs) — хранят справочные данные и справочные данные (например, список товаров, клиентов)
  • Документы (Documents) — представляют бизнес-события и операции (счёта, акты, отчёты)
  • Журналы документов (Document Journals) — автоматизированные представления для работы с документами
  • Нумераторы (Numerators) — управление нумерацией документов
  • Последовательности (Sequences) — обеспечение системы нумерации
  • Регистры накопления (Accumulation Registers) — учёт операций и потоков ресурсов
  • Регистры сведений (Information Registers) — хранение справочной информации об объектах
  • План счетов (Chart of Accounts) — учётные счета и структура бухгалтерского учёта
  • Регистры бухгалтерии (Accounting Registers) — ведение бухгалтерского учёта
  • План видов расчётов (Chart of Calculation Types) — виды расчётов с сотрудниками
  • Регистры расчётов (Calculation Registers) — ведение расчётов
  • План видов характеристик (Chart of Characteristic Types) — определение дополнительных характеристик
  • Задачи (Tasks) — управление задачами и рабочим процессом
  • Бизнес-процессы (Business Processes) — моделирование бизнес-процессов
  • Отчёты (Reports) — создание и вывод отчётов
  • Обработки (Data Processors) — универсальные программные компоненты
  • Перечисления (Enumerations) — списки взаимоисключающих значений
  • Планы обмена (Exchange Plans) — управление обменом данными между информационными базами
  • Константы (Constants) — хранение глобальных параметров системы

Каждый из этих объектов является классом с предопределённой структурой. Разработчик не может изменять сами классы, но может:

  • Добавлять новые атрибуты (свойства)
  • Переопределять события и методы
  • Добавлять пользовательские функции и процедуры

Пользовательские объекты

Пользовательские объекты создаются разработчиком из предопределённых типов. Наиболее часто для создания собственных классов используются:

  • Обработки (Data Processors) — универсальные программные компоненты, которые служат аналогом собственных классов
  • Структуры — временные объекты для хранения данных
  • Таблицы значений (ValueTables) — для работы с табличными данными

Например, разработчик может создать обработку и интерпретировать её как определение собственного класса, объединяя методы и структуру данных.

Модульная структура ООП в 1С

Каждый конфигурационный объект в 1С имеет три типа модулей:

Модуль объекта (Object Module)

  • Содержит код, ответственный за обработку данных конкретного экземпляра объекта
  • Методы в этом модуле работают с данными одного объекта
  • Аналог методов экземпляра класса в обычных ОО языках
  • Вызывается автоматически при событиях объекта

Модуль менеджера (Manager Module)

  • Содержит код для работы со всем типом объекта без привязки к конкретному экземпляру
  • Методы в этом модуле работают с коллекцией всех объектов
  • Аналог статических методов в обычных ОО языках
  • Пример: Справочники.Товары.НайтиПоКоду(КодТовара) — метод менеджера

Модуль формы (Form Module)

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

Инкапсуляция в 1С

Хотя инкапсуляция в 1С не полностью реализована, существуют механизмы для её обеспечения:

Ключевое слово Export

Только процедуры и функции, отмеченные ключевым словом Export, доступны из других модулей:

text// Эта функция доступна из других модулей
Функция ДобавитьТовар(Наименование) Экспорт
  // Код
КонецФункции

// Эта функция видна только в пределах текущего модуля
Функция ВнутреннияяПроцедура()
  // Код
КонецФункции

Глобальные переменные модуля

Модули могут содержать глобальные переменные, которые недоступны снаружи и служат аналогом приватных свойств класса:

textПеременная УникальныйИдентификатор;
Переменная КешДанных;

Ограничения ООП в 1С Предприятие

Встроенный язык 1С имеет существенные ограничения в сравнении с полноценными объектно-ориентированными языками:

Отсутствие наследования

  • Невозможно создать собственные классы с явным наследованием от других классов
  • Хотя конфигурационные объекты неявно наследуют функциональность от базовых классов платформы, изменить это наследование нельзя
  • Это приводит к необходимости дублирования кода при разработке похожих компонентов

Отсутствие явного полиморфизма

  • Невозможно переопределить метод из родительского класса в дочернем
  • Нет возможности работать с объектами через единый интерфейс разного типа

Запечатанные свойства конфигурационных объектов

  • Встроенные классы платформы имеют запечатанные (sealed) свойства, которые невозможно расширить
  • Разработчик может только добавлять новые реквизиты, но не может изменять существующие

Отсутствие интерфейсов

  • Нет механизма для определения интерфейсов, как в Java или C#
  • Это усложняет написание обобщённого кода

Слабая типизация

  • Типы переменных проверяются в рантайме, а не во время разработки
  • Это может привести к ошибкам, которые выявляются только при выполнении

ООП в 1С Предприятие 8

В версии 8.3 язык 1С немного расширил поддержку объектных концепций:

  • Введена поддержка встроенных объектов (ValueList, ValueTable, Structure, Map и т.д.) с методами
  • Добавлены встроенные типы с методами и свойствами
  • Однако, возможность создания пользовательских классов с полной ООП поддержкой так и не была реализована в встроенном языке

ORM (Object-Relational Mapping) в 1С

Одна из сильнейших сторон 1С:Предприятия — встроенная ORM модель:

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

Рекомендации для ООП в 1С

Несмотря на ограничения, при разработке на 1С рекомендуется соблюдать принципы ООП:

  • Инкапсуляция — использовать ключевое слово Export для управления видимостью методов
  • Модульность — разделить код между модулями объекта, менеджера и формы
  • Отделение логики от интерфейса — использовать модули форм только для работы с UI
  • Переиспользование кода — создавать общие модули с переиспользуемыми функциями
  • Наименование — применять понятные имена для переменных, функций и типов

ООП в 1С:Элемент

В отличие от встроенного языка 1С:Предприятия, язык 1С:Элемент предоставляет полноценную поддержку ООП с:

  • Статической типизацией
  • Полноценным наследованием классов
  • Классами, методами и свойствами
  • Модификаторами доступа (public, private, protected)
  • Интерфейсами

Это делает 1С Элемент более современным и близким к традиционным объектно-ориентированным языкам программирования.

Оцените статью
1С:ФУЛЛСТЕК