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-запросы напрямую
- Платформа автоматически генерирует необходимые структуры базы данных
- Разработчик работает с объектами через специализированные объекты скриптовой системы (
CatalogObject,DocumentObjectи т.д.) вместо прямого SQL - Это обеспечивает оптимизацию хранения и работы с данными — если изменены только определённые поля, в БД пишутся только измененные данные
Рекомендации для ООП в 1С
Несмотря на ограничения, при разработке на 1С рекомендуется соблюдать принципы ООП:
- Инкапсуляция — использовать ключевое слово
Exportдля управления видимостью методов - Модульность — разделить код между модулями объекта, менеджера и формы
- Отделение логики от интерфейса — использовать модули форм только для работы с UI
- Переиспользование кода — создавать общие модули с переиспользуемыми функциями
- Наименование — применять понятные имена для переменных, функций и типов
ООП в 1С:Элемент
В отличие от встроенного языка 1С:Предприятия, язык 1С:Элемент предоставляет полноценную поддержку ООП с:
- Статической типизацией
- Полноценным наследованием классов
- Классами, методами и свойствами
- Модификаторами доступа (public, private, protected)
- Интерфейсами
Это делает 1С Элемент более современным и близким к традиционным объектно-ориентированным языкам программирования.


