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

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

На каком языке написана 1С и что нужно знать разработчику

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

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

Для практика важно разделять эти слои. Ядро платформы разработчик не меняет и не видит — оно поставляется в компилированном виде фирмой «1С». Вся доработка типовых решений, написание отчётов, обменов и интеграций ведётся на встроенном языке в конфигураторе. Дополнительно используются язык запросов 1С (похож на SQL), язык макетов и, при необходимости, внешние компоненты на C++ или C# по технологии Native API и COM.

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

Из чего состоит платформа: ядро на C++ и встроенный язык

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

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

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

Как устроен встроенный язык 1С

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

Язык динамически типизирован: тип переменной определяется присвоенным значением. Есть примитивные типы (число, строка, дата, булево), универсальные коллекции (массив, структура, соответствие, таблица значений) и ссылочные типы объектов конфигурации (документы, справочники). Жёсткой статической проверки типов нет, поэтому ошибки типов проявляются в рантайме — это нужно учитывать при тестировании.

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

Функция ПолучитьОстатокНоменклатуры(Номенклатура) Экспорт

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

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

"ВЫБРАТЬ

| Остатки.КоличествоОстаток КАК Остаток

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК Остатки";

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

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

Если Результат.Количество() = 0 Тогда

Возврат 0;

КонецЕсли;

Возврат Результат[0].Остаток;

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

Клиентский и серверный контекст: где исполняется код

Одна из главных практических тем — разделение кода по месту исполнения. Директивы компиляции определяют, где работает процедура: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста. Клиентский код видит форму и пользовательский интерфейс, но не имеет прямого доступа к базе данных; серверный код работает с данными, но не может показать диалог.

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

В файловом варианте базы деление формально сохраняется, но клиент и сервер физически совмещены. В клиент-серверном варианте (СУБД + сервер 1С) разница ощутима, и ошибки контекста всплывают сразу: например, попытка обратиться к файловой системе сервера из клиентского кода или наоборот.

Язык запросов 1С и другие «языки внутри языка»

Работа с данными в 1С идёт преимущественно через язык запросов — декларативный язык, синтаксически близкий к SQL, но оперирующий объектами конфигурации, а не таблицами СУБД. Запросы пишутся прямо в строках встроенного языка или в конструкторе запросов. Платформа транслирует их в SQL конкретной СУБД (MS SQL, PostgreSQL, Oracle, IBM Db2).

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

Важно понимать ограничение: язык запросов 1С не позволяет изменять данные (нет INSERT/UPDATE/DELETE) — он только читает. Запись выполняется объектно, через методы Записать() объектов и наборов записей, что гарантирует срабатывание бизнес-логики и контроль прав.

Внешние компоненты и интеграции: где встречаются C++, C# и JavaScript

Когда встроенного языка не хватает — нужна криптография, работа с оборудованием, специфические протоколы — используются внешние компоненты. Они пишутся на C++ по технологии Native API или как COM-объекты (Windows), подключаются к платформе и вызываются из встроенного языка как обычные объекты. Типовые примеры — компоненты работы со сканерами штрихкодов и ККТ.

В веб-клиенте и для расширения интерфейса применяется JavaScript в полях HTML-документа: так встраивают карты, графики, нестандартные элементы управления. Обмен с внешними системами идёт через HTTP-сервисы, веб-сервисы (SOAP) и REST API, которые публикуются средствами платформы; на стороне внешних систем код пишется на любом языке.

Отдельное направление — EDT (1C:Enterprise Development Tools), среда разработки на базе Eclipse, где встроенный язык используется с английским синтаксисом, а сам проект хранится в виде файлов, удобных для Git. Это не меняет сам язык, но меняет процесс: появляется полноценная работа с ветками, код-ревью и статический анализ через плагины вроде BSL Language Server.

Чем дополняют встроенный язык

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

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

JavaScript в HTML-полях

Для нестандартного интерфейса в веб-клиенте. Ограничение: усложняет поддержку и отладку.

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

Для интеграции с любыми внешними системами. Ограничение: требуется публикация и настройка веб-сервера.

1C:EDT + BSL Language Server

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

Что учить, чтобы дорабатывать конфигурации

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

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

Порядок освоения разработки в 1С
  1. 1
    Установите платформу и разверните демо-базу типовой конфигурации
  2. 2
    Изучите конфигуратор: метаданные, модули, синтакс-помощник, отладчик
  3. 3
    Напишите внешнюю обработку с запросом и выводом результата
  4. 4
    Освойте язык запросов и конструктор запросов
  5. 5
    Сделайте отчёт на СКД без единой строки кода
  6. 6
    Попробуйте доработку через расширение конфигурации
  7. 7
    Проверьте результат на копии базы, а не на рабочей

Типичные ошибки и ограничения

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

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

Типичные ошибки начинающих
01
Правка типовой конфигурации напрямую вместо расширения — ломает обновления
02
Циклические обращения к базе вместо одного запроса — резкое падение производительности
03
Серверные вызовы из клиентского кода в цикле — «тормозящие» формы
04
Изменение данных без транзакции — нецелостные данные при сбое
05
Проверка доработок сразу на рабочей базе — риск потери реальных данных
Синтакс-помощник в конфигураторе (Ctrl+F1 по ключевому слову) закрывает большинство вопросов по встроенному языку быстрее поисковика: описания методов там всегда соответствуют установленной версии платформы, а версии между собой заметно различаются.
ПЗ
Практическое замечание

Ответы на частые вопросы

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

1С — это платформа (среда исполнения и инструменты разработки) плюс прикладные конфигурации на её основе. Встроенный язык платформы — отдельный язык программирования, который существует только внутри экосистемы 1С и не используется самостоятельно.

Можно ли писать конфигурации на C#, Java или Python?

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

Зачем в 1С два синтаксиса — русский и английский?

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

На каком языке писать обмен между 1С и сайтом?

Со стороны 1С — на встроенном языке, через HTTP-сервисы или подключение к веб-сервисам. Со стороны сайта — на языке сайта (PHP, Python, C# и т.д.), который обращается к опубликованным сервисам 1С по HTTP.

Сложно ли освоить встроенный язык после другого языка программирования?

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

Что такое расширение конфигурации и когда его применять?

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

Итог

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

Ядро 1С написано на C++, конфигурации — на встроенном языке с русским или английским синтаксисом, данные читаются языком запросов. Ключевые навыки разработчика: встроенный язык, запросы, СКД, понимание контекста клиент/сервер и работа через расширения вместо правки типового кода.