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

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

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

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

Вопрос «на чём написана 1С» имеет два разных ответа, потому что под «1С» обычно понимают либо саму технологическую платформу, либо прикладные конфигурации — «Бухгалтерию», «Управление торговлей», «Зарплату и управление персоналом». Это разные слои, созданные на разных языках и разными инструментами.

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

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

На каком языке написана сама платформа 1С

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

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

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

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

Прикладные решения — «1С:Бухгалтерия», «1С:Управление торговлей», «1С:ERP» и другие — написаны на встроенном языке 1С. Это предметно-ориентированный язык, заточенный под описание бизнес-логики: проведение документов, расчёт зарплаты, формирование отчётов. Синтаксис существует в двух вариантах — русском и английском, причём их можно смешивать в одном модуле, хотя на практике этого лучше не делать.

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

Типичный фрагмент кода выглядит так:

Функция РассчитатьСуммуДокумента(ДокументСсылка) Экспорт

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| СУММА(Товары.Сумма) КАК ИтоговаяСумма

|ИЗ

| Документ.РеализацияТоваров.Товары КАК Товары

|ГДЕ

| Товары.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);

Результат = Запрос.Выполнить().Выбрать();

Возврат ?(Результат.Следующий(), Результат.ИтоговаяСумма, 0);

КонецФункции

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

Роль SQL и СУБД в работе 1С

Файловый вариант базы 1С использует собственный формат хранения, но в клиент-серверном режиме данные размещаются во внешней СУБД: Microsoft SQL Server, PostgreSQL (в том числе адаптированные сборки), Oracle Database или IBM DB2. Платформа сама формирует SQL-запросы к этим базам — разработчик не пишет чистый SQL в типовых сценариях.

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

Для чтения данных извне (например, для аналитики) безопаснее использовать типовые механизмы: HTTP-сервисы, OData-интерфейс, планы обмена или выгрузку в промежуточную базу, над которой уже можно выполнять произвольный SQL.

Внешние компоненты: когда встроенного языка не хватает

Если задачу нельзя решить встроенным языком — например, нужна работа с оборудованием, криптография, сложная математика или интеграция со специфическим протоколом, — применяют внешние компоненты по технологии Native API или COM. Их пишут на C++, C#, Java и других языках, подключают к конфигурации и вызывают из кода 1С как обычные объекты.

Кроме того, платформа поддерживает интеграцию через веб-сервисы (SOAP и HTTP/REST), что позволяет выносить любую логику во внешние приложения на любом языке — Python, Go, PHP — и обращаться к ним из 1С по сети. Это самый гибкий и безопасный способ расширения, потому что внешний сервис не влияет на стабильность сервера 1С.

Способы расширить возможности 1С

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

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

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

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

HTTP/веб-сервисы

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

Что нужно знать, чтобы программировать в 1С

Для прикладной разработки достаточно встроенного языка и языка запросов 1С. Знание C++ не требуется — исходный код платформы всё равно закрыт. Базовый набор разработчика выглядит так:

  • встроенный язык 1С (русский или английский синтаксис);
  • язык запросов 1С и конструктор запросов;
  • объектная модель конфигурации: документы, справочники, регистры, отчёты;
  • система компоновки данных (СКД) для отчётов;
  • основы работы СУБД и понимание транзакций — для клиент-серверных внедрений.

Дополнительно полезны: JavaScript и HTML — для веб-клиента и публикации интерфейсов; SQL — для диагностики проблем производительности на уровне СУБД; один из языков общего назначения (C#, Python) — для интеграций и внешних обработок данных.

Как проверить, на чём написан конкретный код в вашей базе
  1. 1
    Откройте конфигуратор и найдите интересующий объект — это встроенный язык 1С.
  2. 2
    Если логика вызывается через ПодключитьВнешнююКомпоненту — это внешняя компонента на C++ или .NET.
  3. 3
    Если код обращается к HTTPСоединение или WSПрокси — логика вынесена во внешний сервис, язык которого определяется на стороне сервиса.
  4. 4
    Проверьте, нет ли прямых обращений к СУБД — их наличие говорит о рискованной доработке вне платформы.

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

Распространённое заблуждение — что «1С написана на 1С». На встроенном языке написаны только прикладные конфигурации; платформа, которая этот код исполняет, создана на C++ и поставляется в готовом виде. Другое заблуждение — что для работы с 1С нужно знать SQL: платформа сама генерирует запросы к СУБД, а разработчик использует язык запросов 1С, который лишь похож на SQL.

Также неверно считать встроенный язык «неправильным русским программированием»: двуязычный синтаксис — осознанное решение для предметной области, а сам язык полноценен в рамках своих задач, хотя и не является языком общего назначения.

Типичные ошибки
01
Считать, что конфигурацию можно править на C++ — платформа закрыта, прикладной код пишется только на встроенном языке.
02
Править данные напрямую в СУБД — приводит к рассогласованию кэша платформы и порче базы.
03
Смешивать русский и английский синтаксис в одном модуле — затрудняет чтение и сопровождение кода.
04
Писать сложные вычисления встроенным языком там, где эффективнее внешний сервис — получают медленный и трудно тестируемый код.
Итог

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

Платформа 1С написана на C++ и закрыта для изменений. Конфигурации пишутся на встроенном языке 1С с запросами на языке, похожем на SQL. Данные хранятся в СУБД (MS SQL, PostgreSQL и др.), но править их нужно только через платформу. Для нестандартных задач используют внешние компоненты (C++, .NET, Java) или интеграцию через веб-сервисы на любом языке.

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

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

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

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

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

Почему в 1С русский синтаксис, а не английский?

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

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

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

Какой SQL используется в 1С?

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

Можно ли посмотреть исходный код платформы 1С?

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