ООП в 1С

29.06.26

Разработка - Языки и среды

Рассматривается методология реализации принципов ООП в 1С.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ООП в 1С
.dt 51,62Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

 

Введение

Что нашёл:

//infostart.ru/1c/articles/125344/

https://habr.com/ru/articles/271731

https://forum.mista.ru/topic.php?id=841622

Долго не искал. Статьи очень давние. Но и предлагаемый в этой статье поход к эмуляции ООП можно реализовать и на 1С8.0.

Интересны не столько статьи, сколько комментарии к ним. Часто – не нужен ОПП в 1С.

Из всех комментариев выбрал два

  • ООП в 1С = резиновая баба

  • А как же это ООП применить на практике

Эта статья написана в стиле «не лить много воды». Лаконично. Есть комментарии в коде.

Итак. ООП - это иерархия классов.

Значит, нам нужна какая-то иерархическая …

Можно «мутить» с XML, но нужно писать интерфейс.

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

Выбираем иерархический справочник. И так, класс — это элемент в иерархическом справочнике, а объект - структура. Вот и вся модель.

Принципы организации ООП будем рассматривать так, как это описано ниже.

Абстрагирование выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя.

Источник - https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование

Наследование - это принцип, который позволяет создавать иерархии классов: дочерние классы наследуют свойства и методы от родительских классов.

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

Другими словами, инкапсуляция представляет собой способность объекта сохранять свои данные в приватной области видимости,

предоставляя для работы с ними только определенные публичные методы.

Таким образом, объект контролирует доступ к своим данным и обеспечивает их целостность.

Источник - https://skyeng.ru/magazine/wiki/it-industriya/chto-takoe-inkapsuliatciia/

Полиморфизм

  • Полиморфизм подтипов (наследования)

  • Параметрический полиморфизм (обобщённое программирование)

  • Полиморфизм в интерфейсах

Источник - https://tproger.ru/articles/osnovnye-principy-oop-polimorfizm-v-programmirovanii

Все варианты полиморфизма реализуются в предлагаемой модели ООП.

 

Модель

Создаем справочник Классы.

Классы представляют собой элементы справочника Классы. Каждый элемент справочника (класс) имеет две ТЧ:

  • Свойства

  • Методы

Каждый класс имеет свой набор свойств и методов – строки в ТЧ.

Алгоритм создания объекта на основе класса следующий.

Объект — это структура. Объект создается в памяти.

Объект создается на основе конкретного класса (элемента справочника Классы).

При создании объекта добавляются все свойства и методы предков, которые не отмечены флагом Местный.

Если некоторый класс имеет метод и для этого метода реквизт Местный = Истина, то он не подлежит наследию.

Если класс имеет метод совпадающий по имени с наследуемыми методом, то он не переопределяется (остается таким, каким назначен для класса).

На языке расширений платформы 1С8 это «Вместо».

Это простейший случай. На самом деле уместно использовать нечто похожее на терминологию расширений.

 

 

Здесь интересно, что в расширениях один раз – «расширяемся».

А здесь конечный метод создается с помощью синтаксиса До, После, Между от предками к детям.

В итоге получается такой сборный метод.

Справочник Классы в конфигураторе.

 

 

Здесь уместно уже оговорить, что конфигурация, прилагаемая к статье – написана для попытки наглядного изложения. Написана сугубо только для статьи. Без всяких проверок и наворотов.

Есть продвинутый вариант «аля» ООП в 1С. Где не просто свойства объекта, а элементы XML.

И свойства являются атрибутами элемента XML, текст элемента - метод. То есть Объект имеет методы как и в этой статье, но еще и методы элементов XML. Еще объект наделен массивами.

Так выглядит модуль менеджера справочника Классы.

 

 

Здесь еще много планов по развитию в сторону «скрещивания» классического ОПП и XML.

Также добавления перехватчиков событий для сеттеров и геттеров и так далее.

Это уже следующая статья… Такое развитие подход получил в результате применения его на практике.

Итак, рассмотрим упрощенный вариант.

 

 

Классический пример для ООП – Фигура. (Другой классический животные, гав-гав и мяу-мяу). Мы выбираем фигуру.

Фигура – корневой класс. Это абстрактный класс (Shape). Базовый класс.

Абстракция данных – это одно из четырех основных понятий ООП.

https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование

На основе класса Фигура – объекты не создаются. Он служит для передачи своих методов и свойств потомкам.

 

 

Класс Многогранник

 

 

Класс имеет одно свойство Стороны и один метод РассчитатьПериметр.

 

 

Метод:

 

 

Для расчета периметра потомков можно было бы не добавлять (свойства и метод).

Почему не добавлять? Достаточно задать свойство Стороны следующим способом:

Параллелограмм 4,7,4,7
Прямоугольник 5,6,5,6
Квадрат 3,3,3,3
Треугольник 7,9,12

И использовать наследуемый метод Многогранника.

Но мы добавим и свойства, и методы, чтобы раскрыть возможности предлагаемой модели ООП в 1С.

Класс Параллелограмм

 

 

Метод:

Периметр = 2*(Число(Объект.Сторона1.Значение) + Число(Объект.Сторона2.Значение))

Метод наследуется классом Прямоугольник.

Для квадрата и треугольника свои свойства и методы.

 

 

 

 

Это картинка из расширенной версии ООП в 1С.

Видим в отладчике, что до Квадрата местные свойства Прямоугольника не дошли (инкапсуляция).

Есть свое свойство Сторона (значение по умолчанию = 15)

Метод «Сообщение» – достался от Фигуры, он наследуется всеми классами и используется для сообщений.

Есть свой метод расчета периметра.

К статье прилагается демонстрационная конфигурация.

В конфигурации рассмотрены примеры инкапсуляции, наследования и полиморфизма.

 

 

Приведен пример расчета общего периметра группы фигур.

 

 

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

Конечно! Использование текста из справочника как алгоритма для команды Выполнить давно известно.

Но здесь не просто текст из справочника. Это метод Объекта. Наследованный или свой.

Структуры для ООП давно предложены, алгоритмы в текстовом поле справочника давно используются… Что же нового.

Немного юмора.

Попов. Радио. Патент. Ему говорят: резисторы, конденсаторы и индуктивности давно известны…

Nota bene – может, не такая резиновая?

 

Как применить

Рассматриваемая в статье модель ООП применена в подсистеме расчета себестоимости.

В настоящее время справочник Классы выглядит следующим образом:

 

 

Этапы расчета себестоимости имеют вид:

 

 

Один из этапов – Расчет всех баз распределения.

На примере баз распределения рассмотрим применение ООП, хотя очень интересные эффекты обнаружились и для документов.

ООП в 1С даже интересней классического…

В классическом ООП каждый объект «живет» самостоятельно. Здесь же в 1С целесообразно использовать связь

Объекта 1С и объекта ООП. В элементе справочника (документе) есть ссылка на класс.

При работе с элементом справочника работаем с методами его (элемента) класса, которые унаследованы от предков.

 

 

 

Класс МатериальныеТопливо – наследует текст запроса от класса (дед) – Затраты.

В справочнике Базы распределения хранятся параметры для запроса. В этом случае Корсчет = 10.03.

В итоге процедура для этапа Расчет всех баз распределения имеет вид:

 

 

Лаконичный код.

Выбираются базы распределения, помеченные для использования.

Создаются два объекта (из двух справочников) и выполняется метод.

В итоге мы Подсистеме расчета себестоимости придали некую иерархичность. Разложили всё по «полочкам».

Модель легко масштабируется в ширину (братья и сестры) и в высоту (внуки и правнуки).

Но можно также (в глубину) между отцом и детьми добавить узел («отчим») и таким образом наследовать для детей всё наработанное для отца и его предков.

Приложенный файл тестировался на платформе 1С:Предприятие 8.3 (8.3.27.1719)

 

Статьи:

  1. Расчет себестоимости. Методология

  2. Расчет себестоимости. СЛАУ. Примеры

  3. Расчет себестоимости. Базы распределения

  4. Расчет себестоимости. Отборы

  5. Расчет себестоимости. Документ Распределения косвенных (сзв)

  6. Расчет себестоимости. Документ Операция (сзв)

  7. Расчет себестоимости. Документ Себестоимость продукции (сзв)

  8. Расчет себестоимости. Подсистема расчета.

  9. ООП в 1С

Вступайте в нашу телеграмм-группу Инфостарт

ООП

См. также

Языки и среды Программист 1С:Предприятие 8 Абонемент ($m)

Подсистема для использования принципов объектно-ориентированного программирования на платформе 1С:Предприятие 8

1 стартмани

02.12.2025    2220    vadim1980    11    

3

Языки и среды Программист ИТ-компания Бесплатно (free)

В статье рассматриваются принципы работы с асинхронным программированием в Python с использованием async/await. На практических примерах показано, как создавать и управлять асинхронными задачами, использовать ключевые методы модуля asyncio, такие как create_task, gather, wait_for, и избегать распространённых ошибок. Материал будет полезен разработчикам, которые хотят улучшить производительность своих приложений за счёт асинхронного выполнения операций.

03.03.2025    4927    war41k    2    

4

Языки и среды Программист 1С:Предприятие 8 Бесплатно (free)

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    11871    YA_418728146    14    

68

Языки и среды Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    16451    SeiOkami    25    

66

Языки и среды Программист Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    7484    acvatoris    6    

14

Языки и среды Программист 1С:Предприятие 8 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    6094    prohorp    15    

12

Языки и среды Программист Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    4631    0    1cembreg    2    

11

Языки и среды Инструментарий разработчика Программист 1С:Предприятие 8 Абонемент ($m)

Вставки кода на C# внутри кода на 1С.

5 стартмани

07.04.2023    14567    6    SerVer1C    58    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. o.nikolaev 217 29.06.26 12:36 Сейчас в теме
С нами крестна сила!
2. gonza 63 30.06.26 10:30 Сейчас в теме
Ипическая сила!
Велосипед с квадратными колесами на паровой тяге!
Для отправки сообщения требуется регистрация/авторизация