Из чего сделана 1С:Предприятие 8.3 — ядро на C++, встроенный язык и СУБД
Содержание
Платформа 1С:Предприятие 8.3 написана в основном на C++. А сами прикладные решения — Бухгалтерия, ЗУП, Управление торговлей — написаны на собственном встроенном языке 1С с русским синтаксисом и языке запросов, похожем на SQL.
Отсюда частая путаница. «На чём написана 1С» — это два разных вопроса: на чём сделана сама программа-платформа и на чём программисты пишут конфигурации. Разберём оба слоя, плюс то, где живут данные, как устроены формы и чем пользуется разработчик.
Два слоя: платформа и конфигурация
Любая база 1С — это связка двух частей. Их разрабатывают разные люди, на разных языках, и обновляются они отдельно.
| Слой | Что это | На чём написан | Кто меняет |
|---|---|---|---|
| Платформа | Исполняемые файлы 1cv8.exe, 1cv8c.exe, сервер ragent, rmngr, rphost | C++ (ядро), JavaScript (веб-клиент), Java (среда EDT) | Только фирма 1С |
| Конфигурация | Метаданные, формы, макеты, модули | Встроенный язык 1С + язык запросов | Фирма 1С, франчайзи, программист компании |
| Данные | Справочники, документы, регистры | Хранятся в СУБД | Пользователи |
🔹 Платформа — это «движок». Она умеет показывать формы, выполнять код, хранить данные, проверять права, работать по сети. Сама по себе она ничего не знает про НДС или отпускные.
🔹 Конфигурация — прикладная логика. Документ «Реализация товаров и услуг», его проводки, печатная форма, отчёт по продажам — всё это код и описания в конфигурации.
💡 Поэтому платформу и конфигурацию обновляют по отдельности. Новый релиз Бухгалтерии требует платформу с номером не ниже указанного в описании релиза, но сам платформу не ставит.
Как устроено ядро платформы
Ядро — набор нативных библиотек и исполняемых файлов под Windows, Linux и macOS. Внутри есть:
- ⚙️ интерпретатор встроенного языка — код конфигурации не компилируется в машинный, а выполняется виртуальной машиной платформы;
- 🗄️ транслятор языка запросов в SQL конкретной СУБД;
- 🖼️ движок интерфейса, который сам строит формы по их описанию;
- 🔐 подсистема прав, блокировок и транзакций;
- 🌐 сетевой слой для клиент-серверного режима.
Модель «метаданные + интерпретатор» — главная особенность 1С. Разработчик не пишет таблицы и SQL-схему вручную. Он описывает объект «Справочник Контрагенты» с реквизитами, а платформа сама создаёт таблицы в базе и экранные формы.
Встроенный язык 1С: синтаксис и особенности
Встроенный язык — предметно-ориентированный. Его создали под учётные задачи, и он намеренно простой. По синтаксису он ближе всего к Паскалю и Бейсику: блоки закрываются ключевыми словами, а не скобками.
Главные свойства:
- 🇷🇺 двуязычный синтаксис — у каждого ключевого слова есть русский и английский вариант:
Если/If,Процедура/Procedure,КонецЦикла/EndDo; - 📝 динамическая типизация — тип переменной определяется значением, объявлять тип не нужно;
- 🔤 регистр не важен —
СуммаиСУММА— одна переменная; - 🧩 нет собственных классов — объектная модель задаётся метаданными, а не кодом;
- 📦 модули — код лежит в модулях объектов, менеджеров, форм, общих модулях и модуле приложения.
Пример процедуры, которая считает сумму по строкам табличной части:
Функция СуммаДокумента(Товары)
Итого = 0;
Для Каждого Строка Из Товары Цикл
Итого = Итого + Строка.Сумма;
КонецЦикла;
Возврат Итого;
КонецФункции
То же на английском синтаксисе работает без изменений в платформе:
Function DocumentTotal(Goods)
Total = 0;
For Each Row In Goods Do
Total = Total + Row.Sum;
EndDo;
Return Total;
EndFunction
В типовых конфигурациях фирмы 1С код пишут только по-русски. Английский вариант встречается в международных решениях и у разработчиков из других стран.
Язык запросов
Второй язык внутри 1С — язык запросов. Он похож на SQL, но работает с объектами конфигурации, а не с таблицами СУБД напрямую. Платформа сама переводит запрос в SQL нужной базы.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
Отличия от «чистого» SQL:
- 🔗 разыменование через точку:
Документ.Контрагент.ИНН— платформа сама построит соединение таблиц; - 📊 виртуальные таблицы регистров:
Остатки,Обороты,СрезПоследних; - ✍️ только чтение —
ВСТАВИТЬиУДАЛИТЬв языке запросов нет, данные меняют через объекты встроенного языка; - 🧮 конструктор запросов в Конфигураторе собирает текст мышкой.
Поверх запросов работает система компоновки данных (СКД). На ней сделаны почти все отчёты типовых конфигураций: пользователь меняет группировки и отборы сам, без программиста.
Где хранятся данные: файловая база и СУБД
1С не привязана к одной СУБД. Платформа поддерживает два режима работы.
| Режим | Где данные | Для кого |
|---|---|---|
| Файловый | Один файл 1Cv8.1CD в каталоге базы | 1–5 пользователей, небольшие объёмы |
| Клиент-серверный | Внешняя СУБД: Microsoft SQL Server, PostgreSQL, IBM Db2 и другие | Десятки и сотни пользователей |
Файловую СУБД фирма 1С написала сама, она встроена в платформу. Ставить отдельный сервер базы данных не нужно — поэтому небольшие фирмы и стартуют с файловой базы.
В клиент-серверном варианте между пользователем и СУБД стоит сервер 1С:Предприятия. Схема такая:
- Клиент обращается к агенту сервера
ragent— порт1540. - Агент передаёт его менеджеру кластера
rmngr— порт1541. - Работу выполняет рабочий процесс
rphost. Диапазон его портов задают в свойствах рабочего сервера, по умолчанию1560–1591. - Рабочий процесс сам ходит в СУБД и возвращает клиенту результат.
Структуру таблиц в СУБД вручную не меняют. Имена там служебные (_Reference25, _Document112), и правка в обход платформы ломает базу. Данные читают и пишут только через 1С.
Перенос между режимами — через выгрузку .dt в Конфигураторе. Загрузка .dt заменяет всю базу-приёмник, поэтому перед ней делают резервную копию приёмника и выгоняют пользователей.
Управляемые формы и клиент-серверный код
С версии 8.2 интерфейс строится на управляемых формах. В 8.3 обычные формы остались только для старых конфигураций, все типовые решения работают на управляемых. Интерфейс «Такси» — тоже поверх них.
Идея простая: разработчик описывает форму логически — какие поля, группы, команды. А как её нарисовать, решает клиент. Одна и та же форма открывается в тонком клиенте, в браузере и в мобильном приложении.
Виды клиентов:
- 💻 тонкий клиент (
1cv8c.exe) — основной вариант, почти вся логика на сервере; - 🌍 веб-клиент — работает в браузере, написан на JavaScript; базу публикуют на веб-сервере Apache или IIS;
- 📱 мобильный клиент и мобильная платформа для Android и iOS;
- 🖥️ толстый клиент (
1cv8.exe) — исторический режим, нужен для обычных форм и Конфигуратора.
Директивы компиляции
Код в модуле формы явно делится на клиентский и серверный. Для этого перед процедурой ставят директиву:
| Директива | Где выполняется | Доступ к данным формы |
|---|---|---|
&НаКлиенте | На компьютере пользователя | Да |
&НаСервере | На сервере, с передачей формы | Да |
&НаСервереБезКонтекста | На сервере, без формы | Нет — только параметры |
&НаКлиентеНаСервереБезКонтекста | И там, и там | Нет |
&НаКлиенте
Процедура ЗаполнитьЦены(Команда)
ЗаполнитьЦеныНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЦеныНаСервере()
// запросы к базе выполняются только здесь
КонецПроцедуры
💡 Каждый вызов сервера с клиента — это поход по сети. Опытный разработчик собирает всю работу с базой в один серверный вызов, а не дёргает сервер в цикле. Для серверного кода без формы берут &НаСервереБезКонтекста: форма не гоняется по сети, вызов быстрее.
Расширения и интеграция с другими системами
Расширения конфигурации
Раньше доработать типовую 1С можно было только одним способом — снять конфигурацию с поддержки и править её код. После этого каждое обновление превращалось в ручное сравнение.
С платформы 8.3.6 появились расширения — файлы .cfe. Это надстройка над конфигурацией: свои реквизиты, формы, отчёты и перехват процедур типового кода. Основная конфигурация остаётся на поддержке и обновляется как обычно.
Перехват делают аннотациями в модуле расширения:
&Перед— код выполнится до типовой процедуры;&После— после неё;&Вместо— вместо типовой (использовать осторожно: при обновлении типовой процедуры перехват не узнает о новой логике).
Загрузка .cfe и обновление конфигурации
базы данных — это два отдельных шага. Если загрузить файл и не обновить базу
, изменения не применятся.
Способы интеграции
1С умеет обмениваться данными с внешним миром несколькими способами:
| Механизм | Направление | Когда подходит |
|---|---|---|
| HTTP-сервисы | 1С принимает запросы | Свой REST API для сайта, мобильного приложения |
| Веб-сервисы (SOAP) | Приём и отправка | Обмен с системами, которые работают через WSDL |
| Стандартный интерфейс OData | 1С отдаёт и принимает данные | Быстрый REST-доступ без программирования сервисов |
COM-соединение (V83.COMConnector) | Внешняя программа управляет базой | Скрипты под Windows, обмен между базами |
| Внешние компоненты (Native API) | Расширение возможностей платформы | Работа с оборудованием, своя библиотека на C++ |
| Файлы XML и JSON | Обмен выгрузками | Конвертация данных, загрузка из банков и маркетплейсов |
Внешние компоненты — единственное место, где прикладной программист 1С пишет на C++. Так подключают кассы, весы, сканеры штрихкодов и специальные библиотеки.
Чем пользуется разработчик: Конфигуратор и EDT
Писать на 1С можно в двух средах.
Конфигуратор
Встроен в платформу, открывается из окна запуска кнопкой «Конфигуратор». В нём есть всё базовое:
- 🌳 дерево метаданных и редакторы объектов;
- ✏️ редактор модулей с подсказкой и синтакс-помощником;
- 🧱 конструкторы запросов, форм, печатных форм;
- 🐞 отладчик: точки останова, пошаговое выполнение, табло значений;
- ⏱️ замер производительности — показывает, какие строки кода съедают время;
- 🔀 сравнение и объединение конфигураций, хранилище для командной работы.
1C:Enterprise Development Tools (EDT)
Современная среда на базе Eclipse, написана на Java. Конфигурация хранится в виде файлов на диске, поэтому её можно вести в Git, делать ветки и код-ревью.
| Конфигуратор | EDT | |
|---|---|---|
| Хранение кода | Внутри базы или в хранилище 1С | Файлы проекта, Git |
| Требования к компьютеру | Скромные | Нужно много памяти |
| Командная работа | Хранилище с захватом объектов | Ветки и слияние |
| Порог входа | Ниже | Выше |
Диагностика в рабочей базе
Когда ошибка проявляется только у пользователей, отладчика мало. Тогда смотрят:
- 📒 журнал регистрации — кто, когда и что сделал, ошибки в событиях;
- 🔬 технологический журнал — включается файлом
logcfg.xml, пишет события платформы: долгие запросы, блокировки, исключения; - 🧪 отладку на сервере — сервер запускают с ключом
-debug, после чего Конфигуратор подключается к рабочим процессам.
Перезапуск службы сервера 1С с ключом отладки обрывает сеансы всех пользователей. Делают это вне рабочего времени или на копии базы.
Частые вопросы о языке и устройстве 1С
Можно ли писать конфигурации 1С на Python или C#?
Код 1С компилируется в exe-файл?
Можно ли изменить сам язык 1С или ядро платформы?
.cfe или правкой кода.