Платформа «1С: Предприятие» — что под капотом?
Привет, Хабр!
В этой статье мы начнем рассказ о том, как устроена внутри платформа «1С:Предприятие 8» и какие технологии используются при ее разработке.

- кластер серверов
- «тонкий» клиент, способный подключаться к серверу по http и собственному бинарному протоколу
- клиент для работы в двухзвенной архитектуре с БД, размещенной на жестком диске или сетевой папке
- веб-клиент
- средства администрирования сервера приложений
- среда разработки (известная как Конфигуратор)
- среда исполнения для iOS, Android и Windows Phone (мобильная платформа 1С)
Нативные приложения
- STL (в частности, строки, контейнеры и алгоритмы)
- множественное наследование, в т.ч. множественное наследование реализации
- шаблоны
- исключения
- умные указатели (собственная реализация)
Компоненты
Для обеспечения модульности весь функционал разделен на компоненты, представляющие из себя динамические библиотеки (*.dll под Windows, *.so — под Linux). Всего компонентов более полутора сотен, приведем описания некоторых из них:
| backend | Содержит «движок» метаданных платформы |
| accnt | Объекты, которые прикладные разработчики используют для построения бухгалтерского учета (планы счетов и регистры бухгалтерии) |
| bsl | Движок исполнения встроенного языка |
| nuke | Собственная реализация аллокатора памяти |
| dbeng8 | Движок файловой базы. Простая файл-серверная машина баз данных, основанная на ISAM, включающая также простой SQL-процессор |
| wbase | Содержит базовые классы и функции для реализации пользовательского интерфейса Windows — оконные классы, доступ к GDI и т. п. |
- Разделение способствует лучшему проектированию, в частности лучшей изоляции кода
- Из набора компонентов можно гибко собирать разные варианты поставки:
- Например, инсталляция тонкого клиента будет содержать wbase, но не будет backend
- а на сервере wbase, наоборот, не будет
- оба варианта будут, конечно, содержать nuke и bsl
SCOM
- Предоставляет фабричные методы, позволяющие создать класс из другой компоненты зная только его название (без раскрытия реализации)
- Предоставляет инфраструктуру умных указателей с подсчетом ссылок. За временем жизни SCOM-класса не нужно следить вручную
- Позволяет узнать реализует ли объект конкретный интерфейс и автоматически привести указатель на объект к указателю на интерфейс
- Создать объект-сервис, всегда доступный через метод get_service и т.д.
SCOM_CLASS_ENTRY(JSONStreamReader)Этот макрос опишет специальный статический класс-регистратор, конструктор которого будет вызван при загрузке компоненты в память.
После это можно создать его экземпляр в другой компоненте:IJSONStreamReaderPtr jsonReader = create_instance(SCOM_CLSIDOF(JSONStreamReader));Для поддержки сервисов SCOM предлагает дополнительную, достаточно сложную инфраструктуру. Центральным в ней является понятие SCOM-процесса, который служит контейнером для запущенных сервисов (т.е. выполняет роль Service Locator), а также содержит привязку к локализуемым ресурсами. SCOM процесс привязывается к потоку ОС. Благодаря этому внутри приложения можно вот так получать сервисы:
SCOM_Process* process = core::current_process(); if (process) return get_service(process);Более, того переключая логические (SCOM) процессы привязанные к потоку, можно получить практически независимые с точки зрения информационного пространства приложения, выполняющиеся в рамках одного потока. Так устроен наш тонкий клиент, работающий с файловой базой — внутри одного процесса ОС находятся два SCOM-процесса, один связан с клиентом, а второй — с сервером. Такой подход позволяет унифицировать написания кода, который будет работать как на локальной файловой базе, так и в «настоящем» клиент-серверном варианте. Цена за такое единообразие — накладные расходы, но практика показывает, что они того стоят.
На основе компонентной модели SCOM реализована и бизнес-логика и интерфейсная часть 1С: Предприятия.
Пользовательский интерфейс
Кстати, об интерфейсах. Мы не используем стандартные контролы Windows, наши элементы управления реализованы напрямую на Windows API. Для Linux-версии сделана прослойка, работающая через библиотеку wxWidgets.
Библиотека элементов управления не зависит от других частей «1С:Предприятия» и используется нами еще в нескольких небольших внутренних утилитах.За годы развития 1С:Предприятие внешний вид контролов менялся, но серьезное изменение принципов произошло только один раз, в 2009 году, с выходом версии 8.2 и появлением «управляемых форм». Помимо изменения внешнего вида, фундаментально изменился принцип компоновки формы — произошел отказ от попиксельного позиционирования элементов в пользу flow-компоновки элементов. Кроме того, в новой модели элементы управления работают не напрямую с доменными объектами, а со специальными DTO (Data Transfer Objects).
Эти изменения позволили создать веб-клиент «1С:Предприятия», повторяющий С++ логику контролов на JavaScript. Мы стараемся поддерживать функциональную эквивалентность между тонким и веб клиентами. В том случае, когда это невозможно, например, из-за ограничений доступных из JavaScript API (например, возможности работы с файлами очень ограничены), мы часто реализуем нужную функциональность при помощи расширений браузеров, написанных на C++. На данный момент мы поддерживаем Internet Explorer и Microsoft Edge (Windows), Google Chrome(Windows), Firefox (Windows и Linux) и Safari (MacOS).Кроме того, технология управляемых форм используется для создания интерфейса мобильных приложений на платформе 1С. На мобильных устройствах отрисовка контролов реализована с использованием «родных» для операционной системы технологий, но уже для логики компоновки формы и реакции интерфейса используется тот же код, что и в «большой» платформе «1С:Предприятие».

Интерфейс 1С на ОС Linux

Интерфейс 1С на мобильном устройстве
Интерфейс 1С на других платформах

Интерфейс 1С на ОС Windows

Интерфейс 1С — веб-клиент
Open source
- cURL для работы с HTTP и FTP.
- OpenSSL для работы с криптографией и установки TLS соединений
- libxml2 и libxslt для разбора XML
- libetpan для работы с почтовыми протоколами (POP3, SMTP, IMAP)
- mimetic для разбора сообщений электронной почты
- sqllite для хранения журналов работы пользователей
- ICU для интернационализации
Заключение
В статье мы коснулись нескольких основных аспектов разработки платформы «1С: Предприятие». В ограниченном объеме статьи мы затронули лишь некоторые интересные, на наш взгляд, аспекты.
Общее описание различных механизмов платформы можно посмотреть тут.
Какие темы были бы интересны Вам в следующих статьях?Как реализована мобильная платформа 1С?
Описание внутреннего устройства веб-клиента?
Или, может быть, Вам интересен процесс выбора фич для новых релизов, разработки и тестирования?Пишите в комментариях!
- 1С
- erp системы
- разработка приложений
- кроссплатформенная разработка
- 1С:Предприятие
- C++
- программирование
- Блог компании 1С
- Веб-разработка
- Анализ и проектирование систем
- C++
Язык 1C
Язык программирования 1C — язык для создания кодов и алгоритмов внутри программного обеспечения «1C:Предприятие» и оптимизированный для работы на платформе. Он не имеет собственного названия и обозначается как «встроенный язык программирования».

Освойте профессию
«1С-программист»Где используется 1C
Язык 1C — предметно-ориентированный: коды на нем пишутся только на платформе «1С:Предприятие». Целевая аудитория программы — крупные организации и предприятия. Они используют платформу для систематизации бизнеса и полной автоматизации таких процессов, как составление отчетов, ведение бухгалтерии и документооборот.
Особенности 1C
1C считается языком высокого уровня. Он схож с такими языками, как JavaScript, Pascal и BASIC, что значительно облегчает его изучение. В то же время у 1С есть ряд характерных особенностей, отличающих его от других языков программирования.
- Простота. У этого языка низкий порог вхождения. Обычно разработчики изменяют готовые типовые конфигурации, что делает программирование на 1C понятным для начинающих.
- Доступность. Все коды пишутся на русском, что значительно экономит время, затрачиваемое на перевод. Но 1C — двуязычная программа: по желанию вы можете свободно программировать и на английском языке.
- Предварительная компиляция. Модули, написанные на языке 1C, перед началом исполнения компилируются во внутренний байт-код.
- Сохранение скомпилированных модулей. Все они остаются в кэше.
- Мягкая типизация. Типы переменных определяются их значением.
- Наличие синтаксис-помощника. Это справочник-подсказка, содержащий всю информацию о синтаксисе 1C и правилах работы.
9,5 месяцев
1С-программистЛегкий вход в 1C с нуля — не нужно технического образования

Из чего состоит «1C:Предприятие»
Программа 1C состоит из двух частей: платформы и конфигурации.
Платформа — это база, на основе которой разрабатываются конфигурации: без нее создание и изменение конфигураций невозможно. Конфигурация или прикладное решение — написанная на языке 1C программа, которую используют пользователи. Одна платформа может содержать сразу несколько конфигураций. По методу разработки конфигурации делятся на типовые — созданные самой компанией — и нетиповые. К последним относят разработанные с нуля или видоизмененные типовые конфигурации.
Что такое переменные
Переменные — место размещения данных, необходимое для их временного хранения в процессе обработки. Это значит, что все ваши переменные исчезают после того как программа завершается. В переменной можно хранить только одно значение.
У каждой переменной есть свое имя, которое образуется по следующим правилам:
- Каждое имя начинается с русской или английской буквы. Также допустимо начало со знака «_».
- Имя может содержать числа, но не может с них начинаться.
- Длина имени не ограничена.
- Нельзя использовать букву «ё».
- Имя не должно содержать пробелов.
Создать переменную проще простого. Для этого достаточно просто придумать имя и записать его перед знаком равенства. Например:
Переменные объявляются в явном и неявном виде, при этом назначение типа переменной всегда будет неявным. Объявлять переменную в явном виде совсем не обязательно.
Модули и методы
Программный код 1C расположен в конфигурации. Сама конфигурация состоит из объектов, а объекты — из модулей. Именно здесь хранится код.
Модуль — это текстовый файл с прописанным программным кодом.
Но что программа делает с готовыми модулями?
Чтобы выполнить какое-то действие с объектом и изменить конфигурацию, программа использует методы — различные способы, запускающие процесс обработки данных. Определенный набор методов уже заранее создан разработчиками программы, но вы также можете создать собственные методы, написав их на 1C.

1С-программист — самая востребованная IT-профессия в России. Она подойдет всем, независимо от опыта и образования
События
У программы 1C есть свой жизненный цикл: запуск, действия пользователя, выключение. Команды, которые задаются пользователем, выполняются программой и вносят определенные изменения, называются событиями.
События — набор действий, которые используются в конкретных ситуациях. Это значит, что исполнение модулей происходит только тогда, когда возникает нужное событие. Благодаря системе событий встроенный язык также называют событийно-зависимым.
Важно: все возможные события заданы платформой и известны заранее, поэтому придумать что-то новое и неизвестное программе нельзя.
Значения и их коллекции
Значение — то, с чем работает программа. Это данные, записанные с диска или введенные программистом вручную. Программа использует их, обрабатывает и показывает результат. Простые значения бывают разных типов, где каждый задает определенную функцию:
- Null. Используется, чтобы обозначить отсутствие значения.
- Число. Задает число, с которым можно выполнять простые арифметические действия — сложение, вычитание, умножение или деление.
- Дата. Используется для указания даты и времени. Обратите внимание на особенность программирования на 1C — дата и время всегда прописываются полностью, с точностью до секунд.
- Строка. Прописывается в кавычках и задает символьную строку.
- Булево. Получается в результате логических операций и обозначает «правду» или «ложь». Чтобы было понятнее, возьмем в качестве примера операцию Равно: если вы сравните два одинаковых числа, то получите правду, если два разных — ложь.
- Неопределенно. Применяется для значений, не относящихся ни к одному из вышеперечисленных типов.
Совокупность примитивных значений образует объекты встроенного языка. Примером такого объекта являются универсальные коллекции значений — временные хранилища данных, существующие в оперативной памяти компьютера на протяжении одного рабочего сеанса.
Рассмотрим самые значимые коллекции:
- Таблица значений. Объект, служащий для хранения и обработки значений любого типа. Выглядит как обычная таблица, созданная в Excel.
- Дерево значений. То же, что и таблица значений. Отличительная особенность дерева — иерархический способ записи данных. Это значит, что у каждой строки есть подчиненная строка, у которой также могут быть свои подчиненные. Только одна строка, самая первая, считается родительской и не имеет своего родителя.
- Список значений. Временное хранилище данных, позволяет управлять значениями, редактировать их или удалять. Используется для работы с интерфейсом.
- Массив. Служит для сбора и хранения произвольных значений. Массив — пронумерованная коллекция: это значит, что у каждого элемента есть порядковый номер, который называется индексом и начинается с нуля. Массив также может быть многомерным, то есть созданным из других массивов.
- Структура и соответствие. Служат для хранения данных и состоят из двух парных элементов «ключ-значение». Каждое значение здесь имеет собственное уникальное имя, т. е. ключ. В структуре ключ — строго строкового типа, а значение — произвольного. В соответствии ключ также становится произвольным.
Как программировать на 1C
Весь процесс программирования происходит в уже знакомом нам модуле. Давайте рассмотрим его поэтапно на примере самой простой программы «Привет, мир!».
- Запустите программу «1C:Предприятие».
- Откройте пустую базу в режиме конфигуратора.
- На панели управления нажмите на «Открыть конфигурацию».
- В открывшемся меню правой кнопкой мыши нажмите на пункт «Конфигурация» и откройте модуль приложения.
- Перед вами открывается пустая программа — текстовый документ, в котором можно писать.
- Наберите команду: Сообщить («Привет, мир!»);.
- Запускаем программу «1C:Предприятие» с помощью кнопки «Начать отладку».
- В приложении появится готовое сообщение.
1С-программист
Вход в профессию простой: весь код на русском языке, не нужно уметь программировать и иметь техническое образование. При этом вакансий на рынке около 10 000 — можно найти работу удаленно или в вашем регионе.
Язык 1С: плюсы и минусы для аналитических платформ
Привет, Хабр! На связи Саша Чебанов, product owner платформы Modus.
Мы часто сталкиваемся с несколько устаревшим мнением, что язык 1С – это только про финансовые системы. В этой статье я постараюсь подробнее рассказать, что он из себя представляет, где мы его применяем, какие плюсы и минусы у него есть. Поехали!
Язык программирования 1C — это язык для написания кода и создания алгоритмов при работе с технологической платформой «1С:Предприятие». Для простоты понимания и сокращения букв я буду писать «язык 1С» или просто «1С».
Так вот, 1С — это давно не только язык локальной бухгалтерской или финансовой программы, а мощное решение, проверенное огромным количеством компаний сектора enterprise. Например, в сервисе «1С:Фреш» тысячи предприятий и десятки тысяч пользователей, которые одновременно работают в облаке.
1С предназначен для:
- описания внутренней логики работы приложений «1С: Предприятие»;
- ввода и вывода информации и ее изменения;
- работы с формами объектов и списков, описания их внешнего вида и поведения;
- работы с данными информационных баз: их получения, модификации и обновления.
А еще на нем написана часть нашей платформы — Modus ETL . 1С мы выбрали, в первую очередь, за скорость разработки, простую верстку интерфейсов, простейшее описание взаимодействия клиентской и серверной части. Эти особенности помогают сконцентрировать большую часть ресурсов на алгоритмах работы решения. Соответственно, мы снижаем себестоимость развития продукта, стоимость кастомизации и стоимость владения для заказчика.
Уточню, что мы используем 1С для решения только части наших задач, там, где он лучше всего справляется: в части хранения алгоритмов и правил работы с данными, описания мастеров сбора и преобразования, большинства интерфейсов пользователей, служебных отчетов, их рассылки.
Для специальных задач, например, визуализации ориентированных ациклических графов или выполнения многопоточных сборов данных у нас есть компоненты на JavaScript и Go.

У 1С есть плюсы и минусы, ниже поговорим про них.
Высокая скорость разработки
У 1С есть технологическая платформа – это и среда исполнения, и набор средств для разработки приложений и администрирования.

По большому счету, 1С – это большая low-code платформа для настройки доступных на этом уровне объектов. Поэтому с точки зрения frontend мы не программируем «с нуля» формы интерфейсов, а конфигурируем из доступных шаблонов, настраиваем получившийся элемент и передаем информацию в движок. Дальше за отображение элемента отвечает платформа.
Клиентская и серверная части кода описываются в одном месте, упрощая процесс отладки и передачи информации между клиентом и сервером. Так мы сосредотачиваем силы на реализации целей работы форм, а не на процессе программирования их взаимодействия.
Платформа сильно сокращает время на модификацию продукта. К примеру, перед нами стоит задача обеспечить ввод, модификацию и выполнение шагов преобразования данных, при этом нужно предоставить простой и понятный интерфейс пользователю, хранить историю изменений объектов и ограничить доступ к каким-то данным у части пользователей. Трудозатраты вырастут в 8-10 раз, если мы решим сделать задачу не в 1С, а в web-серверном приложении, где, например, серверная часть написана на Go, а клиентская на Reackt.
В качестве еще одного примера приведу антикейс другой компании. У них есть система управления внутренней инфраструктурой, которая написана на 1С. В 2022 году решили ее переписать: разработать backend на Python, frontend на JavaScript. Количество спринтов для реализации задач, решавшихся в 1С за один, выросло в несколько раз. В итоге, они вернулись к 1С.
Концентрация на архитектуре и функциональности, а не на коде
Язык 1С прост для описания логики работы приложения, а платформа за счет шаблонов дает возможность сконцентрироваться на логике выполнения программы, а не отслеживать каждую строку кода.
Поэтому 1С-программист меньше погружен в код и больше – в бизнес-процессы: управление производством ( ERP ), складом ( WMS ), бюджетирование, документооборот и т.п. Он должен понимать, как организованы и работают эти процессы, чтобы составить архитектуру будущего приложения.
Платформа берет на себя работу с кодом, облегчает решение прикладных задач и дает возможность погружаться в работу с предметно ориентированными объектами метаданных (справочниками, документами, регистрами и т.д.).
Более низкая стоимость владения и сопровождения продукта на 1С
Существенная часть стоимости владения для заказчика – это стоимость обслуживания аналитической системы, куда входит ФОТ сотрудников.
В современных реалиях сопровождать продукт на 1С легче, чем решения на других языках – обычно конфигурации поставляются с открытым для доработки кодом, и заказчик может сам кастомизировать его, если это нужно, не привлекая вендора.
И чаще всего, для этого не нужно нанимать дополнительного специалиста – в компаниях, как правило, уже есть разработчики 1С. И стоимость часа их работы ниже, чем программистов Java, С# и других.
Если такого специалиста в штате нет, то найти его тоже проще. Если посмотреть резюме, то количество кандидатов 1C – примерно 40% от общего количества соискателей, а оставшиеся 60% будут распределяться между 10-15 другими языками. Например, на сайте hh.ru в Москве прямо сейчас ищут работу программиста около 490 000 человек. Из них по языкам: 172 328 программируют на 1С, 5 040 – на Go, 75 884 на JavaScript, 38 767 – на С#.
Минусы 1С
Конечно, 1С, как и большинство других языков, не может делать все, но в рамках того, что требуется для учетной системы, он может полностью решить необходимые задачи.
Приведу пример, что нельзя или неудобно делать на 1С:

- Визуальные формы для удобной работы с не специфичными для 1С объектами. Например, вот здесь я писал про WorkFlow. Мы подключили библиотеку GoJS и использовали JavaScript, внедрив ее в 1С.
- Выполнять большое количество математических расчетов с оптимальным потреблением памяти.
- Решать задачи, связанные с компьютерной графикой и т.д.
- Полностью кастомизировать шаблоны. Это не значит, что интерфейс будет «как в «1С:Бухгалтерия» 2000-х годов». Просто форма 1С всегда выдержана в одном стиле, который мы можем кастомизировать, но не полностью.
Например, вот интерфейс рабочего списка из Modus ETL.
Мы не сможем здесь:
- убрать или поменять лого 1С и обозначение меню тремя чертами в верхней части;
- отменить уведомления;
- изменить структуру размещения подсистемы;
- изменить «звездочку» на кнопке, чтобы добавить ее в избранное или вернуться назад, вбок и т.п.
Мы сильно отходим от 1С как учетной системы для финансового блока и используем те же самые объекты метаданных, но в результате система генерирует SQL-сценарии, обновляет и собирает данные.
Недостающий функционал дописываем на другом стеке – выделяем части, которые не могут быть реализованы на 1С, и рассматриваем их, как отдельные сервисы или встраиваемые компоненты. Например, для высоконагруженных систем мы пишем сервис получения данных на Go. Часть, связанную с графическим проектированием, пишем на JavaScript.
Если бы у нас было много таких форм и элементов, не стоило бы использовать 1С – риски были бы слишком велики, нужно было бы долго отлаживать всю систему при добавлении новых компонентов. К примеру, связать 1C и JavaScript не так просто. Но т.к. у нас всего 2 такие формы, то 1С здесь оправдан.
Интеграция с другими системами
Есть несколько вариантов интеграции аналитической платформы, написанной на языке 1С, и учетных систем, написанных на других языках:
- через http-сервис;
- через веб-сервисы ( SOAP );
- через файловый обмен;
- через сервисы интеграции (новый функционал для поддержки брокеров сообщений, типа «1С: Шина» или Rabbit MQ).
В последнее время набирает популярность способ интеграции через http-сервис.
Например, наш Агент ETL, который предназначен для сбора данных из различных источников, взаимодействует с 1С через http-сервис. Если нужно интегрировать аналитическую платформу с каким-то необычным ПО – например, мы работали с лабораторной системой, которая управляла всем технологическим процессом – мы подключаемся через API .
Подведу итог. Спектр задач, которые можно решить на 1С, шире, чем кажется на первый взгляд. Учет в широком смысле этого слова может касаться совершенно любых предметов реального мира, будь то информация о финансах и товарах или информация о подключениях к базам данных и web- сервисах, правилах генерации кода или парсинга.
Зачастую, 1С недооценивают из-за предвзятого, в целом, отношения. Если адекватно взвесить плюсы и минусы, подобрать технологический стек, исходя из реальных бизнес-задач, а не предпочтений конкретных разработчиков, то 1С без сомнения может решать поставленные задачи.
- Блог компании Modus BI
- Анализ и проектирование систем
- Data Mining
- Хранилища данных
На чем написана 1С?

Зашел разговор про 1с и я услышал следующее мнение — что 1с написана на ЯП Русского разлива, т.е. даже буквы в этом ЯП Русские, так же этот гражданин приложил скрин (в конце поста). Проясните ситуацию, на чем написана 1с, и если она все такие написана на C++, то каким боком относиться к ней ЯП на Русский манер? Вообще любая инфа на этот счет будет интересна.
Отслеживать
задан 21 сен 2018 в 8:20
1,552 4 4 золотых знака 16 16 серебряных знаков 32 32 бронзовых знака
Может это Google переводчик перевел? 😀
21 сен 2018 в 8:24Хз, кто это перевел. Я как бы не знаток в вопросе, но когда я услышал про кириллический ЯП — мне захотелось присесть.
21 сен 2018 в 8:29
А что такого страшного в русском языке в программировании? По большому счету, русифицировать тот же C++ — нет проблем, работа простейшая, буквально для начинающего программиста. но зачем? Мое искреннее мнение — наше счастье (и преимущество), что языки программирования англоязычные, так что мы воспринимаем их по сути как математические формулы, а не как инструкции на русском. Одного приведенного скриншота достаточно, чтобы это понять 🙂
21 сен 2018 в 9:31
@Harry Вы сами ответили на свой вопрос. Страшного — ничего, но и полезного — еще меньше. Остается мечтать о том, что бы и валюта и границы между странами стерлись, а там может и язык в более общий сольется, столько преград сразу рухнет. ух!
21 сен 2018 в 9:59
В недалеком прошлом было несколько языков программирования на русском: Алмир, Аналитик, Рапира. Язык Лого традиционно переводится на язык той страны, в которой используется. | Как уже тут сказали, русифицировать C++ элементарно. Зацените, например, боярский диалект.