Разработка и Конфигурация · 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.
Чем дополняют встроенный язык
Для оборудования, криптографии, низкоуровневых задач. Ограничение: нужна сборка под каждую платформу и разрядность.
Для нестандартного интерфейса в веб-клиенте. Ограничение: усложняет поддержку и отладку.
Для интеграции с любыми внешними системами. Ограничение: требуется публикация и настройка веб-сервера.
Для командной разработки и статического анализа. Ограничение: другой рабочий процесс, к которому нужно привыкнуть.
Что учить, чтобы дорабатывать конфигурации
Минимальный практический набор: встроенный язык (русский синтаксис для типовых), язык запросов, основы СКД для отчётов, понимание метаданных (справочники, документы, регистры накопления и сведений). Опыт программирования на других языках помогает, но не заменяет знания объектной модели 1С — большинство ошибок новичков связано именно с непониманием регистров и виртуальных таблиц.
Общий порядок входа в разработку выглядит так: установить учебную версию платформы, развернуть демо-базу типовой конфигурации, изучить конфигуратор (дерево метаданных, модули, отладчик), написать простую внешнюю обработку, затем — доработку через расширение конфигурации. Расширения позволяют менять типовое поведение без снятия конфигурации с поддержки, что критично для обновлений.
- 1Установите платформу и разверните демо-базу типовой конфигурации
- 2Изучите конфигуратор: метаданные, модули, синтакс-помощник, отладчик
- 3Напишите внешнюю обработку с запросом и выводом результата
- 4Освойте язык запросов и конструктор запросов
- 5Сделайте отчёт на СКД без единой строки кода
- 6Попробуйте доработку через расширение конфигурации
- 7Проверьте результат на копии базы, а не на рабочей
Типичные ошибки и ограничения
Первая ошибка — доработка типовой конфигурации напрямую вместо расширений. Последствие: конфигурация снимается с поддержки, обновления превращаются в ручное сливание изменений, а при массовых доработках обновление становится практически невозможным. Вторая ошибка — чтение данных циклами вместо запросов, что приводит к заметным задержкам уже на средних объёмах данных.
Третья группа ошибок связана с контекстом исполнения: серверные вызовы в циклах, обращение к данным формы из серверных процедур без контекста, попытки показать диалог на сервере. Четвёртая — игнорирование транзакций при записи связанных объектов: при сбое в середине операции в базе остаются нецелостные данные.
Синтакс-помощник в конфигураторе (Ctrl+F1 по ключевому слову) закрывает большинство вопросов по встроенному языку быстрее поисковика: описания методов там всегда соответствуют установленной версии платформы, а версии между собой заметно различаются.
Ответы на частые вопросы
1С — это язык программирования или программа?
1С — это платформа (среда исполнения и инструменты разработки) плюс прикладные конфигурации на её основе. Встроенный язык платформы — отдельный язык программирования, который существует только внутри экосистемы 1С и не используется самостоятельно.
Можно ли писать конфигурации на C#, Java или Python?
Нет, прикладная логика конфигураций пишется только на встроенном языке. Другие языки применяются снаружи: внешние компоненты на C++, интеграционные сервисы и обмены — на любом языке через HTTP или COM.
Зачем в 1С два синтаксиса — русский и английский?
Это историческая особенность платформы: оба варианта ключевых слов полностью равнозначны и компилируются одинаково. Типовые конфигурации написаны на русском синтаксисе, EDT и часть коммерческих разработок — на английском. Выбор влияет только на читаемость для команды.
На каком языке писать обмен между 1С и сайтом?
Со стороны 1С — на встроенном языке, через HTTP-сервисы или подключение к веб-сервисам. Со стороны сайта — на языке сайта (PHP, Python, C# и т.д.), который обращается к опубликованным сервисам 1С по HTTP.
Сложно ли освоить встроенный язык после другого языка программирования?
Сам синтаксис осваивается быстро — язык простой и прощает многие вольности. Основное время уходит на объектную модель (регистры, документы, виртуальные таблицы), язык запросов и понимание учётных механизмов типовых конфигураций.
Что такое расширение конфигурации и когда его применять?
Расширение — механизм доработки типовой конфигурации без изменения её кода: свои модули, формы и переопределённые обработчики хранятся отдельно. Применять стоит почти всегда, когда доработка совместима с возможностями расширений, — это сохраняет простое обновление типового решения.
Что важно запомнить
Ядро 1С написано на C++, конфигурации — на встроенном языке с русским или английским синтаксисом, данные читаются языком запросов. Ключевые навыки разработчика: встроенный язык, запросы, СКД, понимание контекста клиент/сервер и работа через расширения вместо правки типового кода.