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

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

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

Разбираем, на чём написана 1С: платформа на C++, встроенный язык, запросы, веб-клиент и расширения. Что нужно знать разработчику и администратору 1С.

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

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

Из чего состоит система 1С: три уровня кода

Архитектурно 1С состоит из трёх различных слоёв, и на каждом используется свой «язык». Первый слой — технологическая платформа: исполняемые файлы, которые устанавливаются на сервер и рабочие места. Второй слой — конфигурация: метаданные (справочники, документы, регистры) и программный код на встроенном языке. Третий слой — данные, которые хранятся в файловой базе или в СУБД (MS SQL Server, PostgreSQL, Oracle, IBM DB2).

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

Такое разделение сделано намеренно: фирма «1С» развивает платформу, а тысячи партнёров и штатных разработчиков пишут и дорабатывают прикладные решения, не имея доступа к исходному коду ядра и не перекомпилируя его.

Платформа: C++ и кроссплатформенность

Ядро платформы 1С:Предприятие реализовано на C++. Это подтверждается косвенно и прямо: дистрибутивы поставляются в виде скомпилированных бинарных файлов для Windows и Linux, а механизм внешних компонент по технологии Native API предполагает разработку именно на C++ с подключением заголовочных файлов от фирмы «1С».

Выбор C++ объясняется требованиями к производительности: платформа должна быстро исполнять встроенный язык, строить запросы к СУБД, отрисовывать интерфейс и обслуживать сотни одновременных соединений в клиент-серверном режиме. Кластер серверов 1С — это тоже нативные процессы (rphost, ragent, rmngr), написанные на компилируемом языке.

Кроссплатформенность достигается за счёт единой кодовой базы: один и тот же функционал собирается под Windows и Linux, а тонкий клиент существует также в версиях для macOS и мобильных ОС. Веб-клиент, работающий в браузере без установки платформы, использует стандартные веб-технологии — HTML, CSS и JavaScript, которые генерируются серверной частью.

Встроенный язык 1С: на чём пишут конфигурации

Весь прикладной код конфигураций — обработчики событий документов, расчётные алгоритмы, формирование отчётов — написан на встроенном языке 1С. Его характерная особенность — двуязычный синтаксис: одни и те же конструкции можно писать по-русски («Если ... Тогда ... КонецЕсли») или по-английски («If ... Then ... EndIf»), и платформа одинаково исполнит оба варианта.

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

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

Язык запросов 1С и его связь с SQL

Отдельный компонент — язык запросов 1С. Синтаксически он напоминает SQL: конструкции «ВЫБРАТЬ ... ИЗ ... ГДЕ» соответствуют SELECT ... FROM ... WHERE. Но это не SQL: запрос оперирует объектами метаданных (документами, регистрами), а не физическими таблицами, и поддерживает специфические возможности — виртуальные таблицы, итоги, иерархию, разделители данных.

Платформа транслирует запрос 1С в SQL конкретной СУБД — MS SQL Server, PostgreSQL, Oracle или DB2. Поэтому один и тот же запрос работает на любой поддерживаемой базе, но его фактический план выполнения зависит от того, какой SQL сгенерировала платформа. При проблемах с производительностью администраторы смотрят именно транслированный SQL через технологический журнал или средства СУБД.

Если запрос в 1С работает медленно, полезно получить текст SQL, который платформа отправила в СУБД. Часто выясняется, что соединение таблиц или условие на виртуальную таблицу порождает неоптимальный план, и переписывать нужно именно запрос 1С, а не настраивать сервер баз данных.
ПЗ
Практическое замечание

Веб-клиент, мобильная платформа и расширения

Веб-клиент 1С работает в браузере и использует JavaScript, HTML и CSS. Разработчик конфигурации при этом пишет тот же встроенный язык — платформа сама преобразует логику форм в браузерное представление. Прямое программирование на JavaScript внутри конфигурации не предусмотрено, за исключением полей HTML-документа, где можно разместить произвольную веб-страницу.

Мобильная платформа — отдельная сборка под Android и iOS. Прикладной код для неё также пишется на встроенном языке 1С с ограничениями: доступен урезанный набор объектов и интерфейсных возможностей. Сборка мобильного приложения выполняется через специальный сборщик, а не через стандартные IDE этих платформ.

Для задач, которых встроенный язык не покрывает — работа с оборудованием, специфическая криптография, интеграция с нативными библиотеками — существуют внешние компоненты. Их разрабатывают на C++ по технологии Native API, либо используют COM-объекты и .NET-сборки на Windows. Также популярна интеграция через HTTP-сервисы: 1С может и публиковать REST-подобные сервисы, и вызывать внешние API.

Чем дорабатывать 1С под задачу

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

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

Расширение конфигурации

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

Внешняя компонента (Native API, C++)

Для работы с оборудованием и нативными библиотеками. Требует навыков C++ и сборки под все целевые ОС.

HTTP/веб-сервисы и внешние скрипты

Интеграция со сторонними системами на любом языке — Python, C#, Java. Логика живёт вне 1С, обмен идёт по сети.

Что это значит для разработчика: какие языки учить

Для профессии «разработчик 1С» обязателен только встроенный язык и язык запросов. Знание C++ не требуется — исходники платформы закрыты, и дорабатывать её нельзя. Однако общее понимание программирования (циклы, рекурсия, сложность алгоритмов) переносится напрямую, поскольку встроенный язык — полноценный императивный язык с процедурами, функциями и структурами данных.

Полезные смежные навыки: SQL — для анализа производительности и прямых выгрузок; JavaScript и HTML — для нестандартных интерфейсных решений через поля HTML-документа; основы C# или C++ — если планируется разработка внешних компонент. Для интеграций важны HTTP, JSON и XML: типовые механизмы обмена строятся именно на них.

Отдельно стоит упомянуть EDT (1C:Enterprise Development Tools) — среду разработки на базе Eclipse. Сама среда написана на Java, но язык разработки в ней тот же встроенный язык 1С; Java здесь — лишь технология среды, а не инструмент прикладного программиста.

Маршрут решения

Какой язык изучать под вашу задачу

Нужно доработать типовую конфигурацию или написать отчётИзучайте встроенный язык 1С и язык запросов — этого достаточно
Тормозят запросы и регламентные операцииДобавьте базовый SQL и чтение планов запросов в вашей СУБД
Нужно подключить сканер, ККТ или специфичное оборудованиеИщите готовую внешнюю компоненту; свою пишите на C++ по Native API
Нужна интеграция с сайтом или внешней системойИспользуйте HTTP-сервисы 1С и форматы JSON/XML — внешний язык не обязателен

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

Первое распространённое заблуждение — «1С написана на 1С». Встроенный язык — это язык прикладного уровня; сама среда исполнения реализована на C++, и путаница приводит к неверным ожиданиям: например, к попыткам «исправить платформу» кодом конфигурации.

Второе заблуждение — что язык запросов 1С и есть SQL. На практике между ними стоит транслятор платформы, и приёмы оптимизации из «чистого» SQL (хинты, прямые обращения к таблицам) в запросах 1С недоступны. Третье — что для 1С нужен «настоящий» язык вроде Python или Java: вся типовая и заказная бизнес-логика пишется встроенными средствами, а внешние языки нужны только для интеграций и компонентов.

Типичные ошибки
01
Попытка решить проблему платформенного уровня кодом конфигурации — ошибки ядра исправляются только обновлением платформы
02
Использование приёмов оптимизации SQL напрямую в запросах 1С — они не поддерживаются, нужно менять структуру самого запроса
03
Разработка внешней компоненты там, где достаточно HTTP-интеграции — лишняя сложность сопровождения
04
Смешение клиентского и серверного кода без директив компиляции — ошибки 'процедура не обнаружена' при переносе на сервер

Как проверить устройство конкретной системы самостоятельно

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

Список подключённых внешних компонент и расширений смотрите в конфигураторе или в разделе администрирования типовой конфигурации. Это даст полную картину: какая платформа исполняет какую конфигурацию, какие расширения и компоненты добавлены сверху и какая СУБД хранит данные.

Контрольные точки

Как проверить состав системы

Версия платформы и конфигурации
Норма

Указаны в окне 'О программе', платформа поддерживается вендором

Тревожный признак

Платформа давно не обновлялась, есть известные исправленные ошибки

Режим работы базы
Норма

Файловый для небольшой базы или клиент-серверный при многопользовательской нагрузке

Тревожный признак

Файловая база при десятках активных пользователей — риск блокировок

Расширения и компоненты
Норма

Список известен, источники понятны, обновления контролируются

Тревожный признак

Неизвестные расширения без документации и ответственного

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

1С — это язык программирования или программа?

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

Правда ли, что платформа 1С написана на C++?

Да, ядро платформы реализовано на C++ и поставляется в виде скомпилированных бинарных файлов под Windows и Linux. Исходный код закрыт, поэтому детали реализации известны по документации и интерфейсам внешних компонент Native API.

Почему в 1С русский синтаксис — это отдельный язык?

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

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

Напрямую внутри конфигурации — нет, только на встроенном языке. Но внешние системы на любом языке могут обмениваться данными с 1С через HTTP-сервисы, а на Windows доступно подключение COM-объектов, что позволяет вызывать код на других языках извне.

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

Запрос 1С оперирует объектами метаданных, а не физическими таблицами, и платформа транслирует его в SQL конкретной СУБД. Поэтому один запрос работает на разных базах, но SQL-специфичные приёмы (хинты, прямой доступ к таблицам) в нём недоступны.

Нужно ли знать C++, чтобы стать разработчиком 1С?

Нет. Для доработки конфигураций достаточно встроенного языка и языка запросов. C++ понадобится только для разработки внешних компонент по Native API, что является узкой и необязательной специализацией.

Итог

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

Платформа 1С написана на C++ и закрыта для изменений, а прикладные конфигурации пишутся на встроенном языке с русским или английским синтаксисом. Для работы с данными используется собственный язык запросов, транслируемый в SQL. Разработчику 1С достаточно встроенного языка и запросов; C++, JavaScript и другие языки нужны лишь для компонентов и интеграций.