К статье
Практический материал

Разработка и Конфигурация · 11 мин

На чём написан язык программирования 1С и как устроена платформа

Из чего состоит платформа 1С:Предприятие, на каких языках написано ядро, что такое встроенный язык 1С и как он работает с метаданными, СУБД и расширениями.

Короткий ответ на вопрос звучит так: сам язык 1С — это встроенный скриптовый язык платформы «1С:Предприятие», а ядро платформы, которое этот язык исполняет, написано преимущественно на C++. Разработчик прикладного решения пишет код на встроенном языке (на русском или английском синтаксисе), а платформа интерпретирует его и выполняет всю низкоуровневую работу: обращения к базе данных, отрисовку интерфейса, управление транзакциями.

Такое разделение важно понимать, потому что оно объясняет и сильные, и слабые стороны экосистемы. Прикладной код 1С не компилируется в машинный код процессора, как программы на C++ или C#. Вместо этого он выполняется внутри среды исполнения, которую предоставляет платформа. Поэтому производительность решения зависит не только от качества кода, но и от версии платформы, настроек сервера и СУБД.

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

Из чего состоит платформа 1С:Предприятие

Платформа — это многослойная система, а не один исполняемый файл. Основные слои: ядро (исполнение кода, работа с метаданными, транзакции), слой доступа к данным (абстракция над конкретными СУБД), клиентские приложения (толстый, тонкий и веб-клиент), сервер приложений (кластер серверов 1С) и инструменты разработки — конфигуратор и среда 1C:Enterprise Development Tools (EDT).

Ядро платформы и серверные компоненты реализованы на C++ — это даёт переносимость между Windows и Linux и высокую производительность при работе с памятью и потоками. Веб-клиент, который работает в браузере без установки платформы, построен на веб-технологиях: серверная часть формирует интерфейс, а в браузере выполняется JavaScript-код, отвечающий за отображение форм.

EDT — среда разработки нового поколения — построена на платформе Eclipse (Java), в отличие от классического конфигуратора, который является частью самой платформы. Это объясняет различия в требованиях к ресурсам и в подходе к хранению конфигурации: EDT работает с проектом в виде файлов, что удобно для систем контроля версий.

Как выполняется код на встроенном языке

Код на встроенном языке хранится в модулях: модулях объектов, форм, общих модулях, модулях менеджеров. При обращении к процедуре платформа компилирует модуль во внутреннее промежуточное представление (байт-код) и исполняет его в своей виртуальной среде. Это похоже на модель Java или C#, только вместо JVM или CLR используется собственный исполнитель платформы.

Практическое следствие: один и тот же код без изменений работает в файловом и клиент-серверном варианте, на Windows и Linux, в толстом и тонком клиенте — если разработчик корректно использовал директивы компиляции (&НаКлиенте, &НаСервере). Платформа сама решает, где исполнять фрагмент кода, и переносит вызов между клиентом и сервером.

Ограничение этой модели — производительность вычислительных задач. Циклы с миллионами итераций, сложная математика, обработка больших бинарных данных на встроенном языке выполняются заметно медленнее, чем на компилируемых языках. Для таких задач предусмотрены внешние компоненты.

Какие языки и технологии используются вокруг ядра

Экосистема 1С не ограничивается встроенным языком. В реальных проектах задействовано несколько технологических слоёв, и разработчику полезно знать, где проходит граница между ними.

КомпонентЯзык / технологияРоль
Ядро платформы, сервер 1СC++Исполнение кода, транзакции, кластер
Прикладные конфигурацииВстроенный язык 1СБизнес-логика, формы, отчёты
Запросы к даннымЯзык запросов 1С → SQLВыборка и агрегация данных в СУБД
Веб-клиентJavaScript, HTML, CSSОтображение интерфейса в браузере
EDTJava (Eclipse)Среда разработки
Внешние компонентыC++, C#, DelphiОборудование, криптография, спецзадачи
Расширения и интеграцииHTTP/REST, SOAP, XML, JSONОбмен с внешними системами

Внешние компоненты подключаются по технологии Native API (кроссплатформенные библиотеки DLL/SO) или через COM на Windows. Типичный пример — драйверы торгового оборудования: сканеры штрихкодов, фискальные регистраторы, весы. Платформа вызывает их из встроенного языка через стандартизированный интерфейс.

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

Собственный язык — осознанное архитектурное решение. Платформа оперирует метаданными: разработчик описывает структуру документа или регистра декларативно, а платформа автоматически создаёт таблицы в СУБД, формы ввода, права доступа и механизмы проведения. Встроенный язык «знает» об этих объектах на уровне типов, поэтому код вроде проведения документа или построения отчёта занимает десятки строк вместо сотен.

Дополнительные причины: низкий порог входа для специалистов без классического программистского образования, русскоязычный синтаксис, понятный бухгалтерам и аналитикам при чтении кода, и полный контроль вендора над совместимостью. Платформа гарантирует, что конфигурация, написанная много лет назад, запустится на новой версии с минимальными доработками.

Обратная сторона — привязка к экосистеме. Код на встроенном языке нельзя выполнить вне платформы, перенести в другую среду разработки или скомпилировать в самостоятельное приложение. Это нужно учитывать при выборе стека для задач, выходящих за рамки учётных систем.

Где какой язык применять

Встроенный язык 1С

Вся бизнес-логика, проведение документов, отчёты, печатные формы. Ограничение: не подходит для тяжёлых вычислений и системного программирования.

Язык запросов

Выборки и агрегации из базы. Ограничение: только чтение данных, изменение выполняется объектными методами.

Внешние компоненты (C++/C#)

Работа с оборудованием, криптография, ресурсоёмкие алгоритмы. Ограничение: требуют отдельной разработки и установки на каждый клиент или сервер.

HTTP/REST-интеграции

Обмен с сайтами, CRM, банками. Ограничение: требуется продумывать надёжность, повторные вызовы и обработку ошибок сети.

Как проверить, что происходит под капотом, на практике

Убедиться в описанной архитектуре можно простыми наблюдениями. Откройте конфигуратор и посмотрите свойства общего модуля: у него есть флажки «Сервер», «Клиент (обычное приложение)», «Клиент (управляемое приложение)» — это и есть указание платформе, в каком контексте компилировать и исполнять код.

Второй способ — технологический журнал. Включив запись событий DBMSSQL, вы увидите, в какие именно SQL-операторы платформа превращает запросы 1С. Это наглядно показывает трансляцию языка запросов в диалект конкретной СУБД и помогает находить узкие места производительности.

Как увидеть трансляцию запроса в SQL
  1. 1
    Включите технологический журнал на сервере или в файловой базе: создайте файл logcfg.xml с событием DBMSSQL и укажите каталог для логов.
  2. 2
    Выполните в пользовательском режиме действие, которое обращается к базе, например проведите документ или откройте динамический список.
  3. 3
    Откройте файлы технологического журнала и найдите события DBMSSQL — рядом с ними события DBPOSTGRS, DBMSSQL или DBORACLE покажут итоговый SQL.
  4. 4
    Сопоставьте текст запроса 1С из модуля с полученным SQL и оцените план выполнения на стороне СУБД.
  5. 5
    После диагностики отключите или сократите запись журнала, чтобы не переполнять диск.

Частые заблуждения о языке 1С

Первое заблуждение — «1С написана на 1С». Платформа и конфигурация — разные уровни: ядро написано на C++, а на встроенном языке написаны только прикладные решения (Бухгалтерия, Управление торговлей, ЗУП и другие конфигурации). Второе заблуждение — что встроенный язык является диалектом BASIC или Pascal. Внешнее сходство синтаксиса есть, но формально это самостоятельный язык со своей объектной моделью, ориентированной на учётные сущности.

Третье заблуждение — что раз платформа интерпретирует код, оптимизация не нужна. На практике основные потери производительности происходят не в самом языке, а в неоптимальных запросах, обращениях к базе в цикле и избыточных серверных вызовах из клиентского кода. Эти ошибки видны в технологическом журнале и устраняются без изменения платформы.

Типичные ошибки
01
Обращение к базе данных внутри цикла вместо одного запроса с группировкой — приводит к тысячам лишних обращений к СУБД и резкому росту времени выполнения.
02
Выполнение тяжёлых вычислений на встроенном языке там, где задача решается запросом или внешней компонентой — код работает на порядки медленнее.
03
Игнорирование директив &НаКлиенте/&НаСервере — лишние серверные вызовы из формы делают интерфейс медленным при работе по сети.
04
Попытка писать SQL напрямую в тексте запроса 1С — такой запрос не пройдёт проверку синтаксиса, нужно использовать конструкции языка запросов.

Что это значит при выборе инструментов доработки

Если задача укладывается в учётную логику — новый документ, отчёт, обработка, печатная форма — используйте встроенный язык и, по возможности, расширения конфигурации вместо изменения типового кода. Расширения позволяют дорабатывать решение без снятия конфигурации с поддержки, что упрощает обновления.

Если нужна интеграция — поднимайте HTTP-сервисы на стороне 1С или вызывайте внешние API из встроенного языка. Если требуется работа с оборудованием или ресурсоёмкий алгоритм — рассмотрите внешнюю компоненту. Понимание того, на чём написан каждый слой, помогает сразу выбрать правильный инструмент и не пытаться решать задачу неподходящим средством.

Итог

Что важно запомнить

Ядро платформы 1С написано на C++, прикладная логика — на встроенном интерпретируемом языке, запросы транслируются в SQL конкретной СУБД, веб-клиент работает на JavaScript, а для оборудования и тяжёлых задач подключаются внешние компоненты. Выбор слоя для каждой задачи — ключ к производительному и поддерживаемому решению.

Частые вопросы

Можно ли писать для 1С на C# или Python напрямую?

Напрямую внутри конфигурации — нет: прикладной код пишется только на встроенном языке. Однако внешние компоненты можно разрабатывать на C# или C++ и вызывать их из 1С, а обмениваться данными с программами на Python — через HTTP-сервисы, файлы или очереди сообщений.

Чем встроенный язык 1С отличается от языка запросов?

Встроенный язык — императивный: в нём описывают последовательность действий, алгоритмы, обработку событий. Язык запросов — декларативный: в нём описывают, какие данные нужно получить, а платформа сама строит план и транслирует запрос в SQL. Для выборок всегда предпочтительнее запрос, для логики — встроенный язык.

Почему код 1С можно писать по-русски?

Встроенный язык имеет два синтаксиса — русский и английский, причём ключевые слова и встроенные функции существуют в обоих вариантах и взаимозаменяемы. Это сделано для снижения порога входа: читать и сопровождать код могут специалисты без сильного английского. В крупных проектах часто договариваются об одном стиле для единообразия.

Компилируется ли конфигурация 1С в исполняемый файл?

Нет. Конфигурация хранится в базе данных и поставляется в виде файлов поставки, а модули компилируются платформой во внутреннее представление при исполнении. Получить самостоятельный .exe из конфигурации нельзя — для запуска всегда требуется установленная платформа соответствующей версии.

На каких СУБД работает платформа и влияет ли это на язык?

Платформа поддерживает файловый вариант и клиент-серверный с MS SQL Server, PostgreSQL (включая отечественные сборки), Oracle и IBM Db2. На встроенный язык и язык запросов выбор СУБД не влияет — платформа сама транслирует запросы. Различия проявляются в тонкостях производительности и требованиях к администрированию конкретной СУБД.

Что выбрать для изучения: конфигуратор или EDT?

Для начинающего проще конфигуратор: он входит в платформу и не требует отдельной настройки. EDT (на базе Eclipse/Java) удобнее в командной разработке, лучше работает с Git и крупными проектами, но требовательнее к ресурсам. Знания встроенного языка полностью переносимы между обеими средами.