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

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

Какой язык программирования используется в 1С:Предприятие

Какой язык программирования используется в 1С:Предприятие — встроенный язык 1С, его синтаксис, русские и английские команды, внешние компоненты и интеграции.

Все прикладные решения на платформе 1С:Предприятие — бухгалтерский учёт, зарплата, торговля, производство — написаны на собственном встроенном языке, который разработчики называют «встроенный язык 1С» или просто «язык 1С». Это не Python, не Java и не C#: платформа не компилирует код в машинные инструкции, а исполняет его собственным интерпретатором внутри клиентского приложения или сервера 1С.

Главная особенность языка — двуязычный синтаксис. Одна и та же команда может быть записана по-русски (Если ... Тогда ... КонецЕсли;) или по-английски (If ... Then ... EndIf;), причём оба варианта можно смешивать в одном модуле. Именно поэтому код типовых конфигураций выглядит как русский текст, а не как привычный программный листинг.

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

Что представляет собой встроенный язык 1С

Встроенный язык 1С — предметно-ориентированный язык, созданный для описания бизнес-логики: проведения документов, расчёта итогов, формирования отчётов, обработки справочников. Он тесно связан с объектной моделью конфигурации: разработчик работает не с таблицами базы данных напрямую, а с объектами «Документ», «Справочник», «РегистрНакопления» и их методами.

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

Пример типичного кода на встроенном языке:

Функция ПолучитьОстатокТовара(Товар) Экспорт

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

Запрос.Текст = "ВЫБРАТЬ СУММА(Количество) КАК Остаток

|ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки

|ГДЕ Номенклатура = &Товар";

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

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

Если Результат.Следующий() Тогда

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

Иначе

Возврат 0;

КонецЕсли;

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

Русский и английский синтаксис: какой выбрать

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

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

КонструкцияРусский вариантАнглийский вариант
УсловиеЕсли ... Тогда ... КонецЕсли;If ... Then ... EndIf;
ЦиклДля ... Цикл ... КонецЦикла;For ... Do ... EndDo;
ПроцедураПроцедура ... КонецПроцедурыProcedure ... EndProcedure
ФункцияФункция ... КонецФункцииFunction ... EndFunction
ПопыткаПопытка ... Исключение ... КонецПопытки;Try ... Except ... EndTry;

Где выполняется код: клиент, сервер, тонкий и веб-клиент

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

В модулях форм контекст явно разделяется директивами компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Передавать между клиентом и сервером можно только сериализуемые данные — примитивные типы, структуры, массивы; ссылку на объект базы данных передать можно, а открытую транзакцию или объект «Запрос» — нет.

Тонкий и веб-клиент накладывают дополнительные ограничения: часть функций работы с файловой системой и COM-объектами недоступна или требует расширения работы с файлами. Это нужно учитывать при проектировании, чтобы обработка не «падала» у пользователей браузерного доступа.

Типичные ошибки при разделении контекста
01
Вызов серверной процедуры в цикле с клиента — каждый вызов идёт по сети, и форма открывается десятки секунд вместо одной.
02
Передача на клиент несериализуемых объектов (ТаблицаЗначений в некоторых режимах, объекты запроса) — ошибка выполнения или неявные ограничения.
03
Использование модальных окон без асинхронных обработчиков — в веб-клиенте такой код блокируется браузером.

Язык запросов 1С — отдельный диалект внутри платформы

Помимо встроенного языка, в платформу встроен собственный язык запросов, внешне похожий на SQL. Он предназначен для выборки данных из информационной базы и поддерживает соединения, группировки, итоги, виртуальные таблицы регистров. Ключевые слова также имеют русский и английский варианты: ВЫБРАТЬ ... ИЗ ... ГДЕ или SELECT ... FROM ... WHERE.

Язык запросов 1С — не полноценный SQL: в нём нет команд изменения данных (INSERT, UPDATE, DELETE). Записываются данные только через объектную модель встроенного языка — методами Записать() у объектов и наборов записей. Такое разделение защищает целостность бизнес-логики: платформа гарантирует, что при записи документа отработают все обработчики проведения.

Запросы используются также в системе компоновки данных (СКД) — механизме построения отчётов, где пользователь может сам менять отборы и группировки без изменения кода.

Чем язык 1С отличается от универсальных языков

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

Ограничения, о которых стоит знать заранее:

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

Сравнение подходов к расширению функциональности

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

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

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

Выборки и агрегация данных, отчёты на СКД. Не умеет изменять данные и работать вне информационной базы.

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

Драйверы оборудования, криптография, тяжёлые вычисления на C++/C#. Требуют отдельной разработки и установки на клиенты и сервер.

Интеграция через HTTP/веб-сервисы

Обмен с внешними системами, написанными на любых языках. Требует проектирования API и обработки ошибок сети.

Когда нужны другие языки: внешние компоненты и интеграции

Если задача выходит за рамки платформы, применяют внешние компоненты по технологии Native API (или устаревший COM): их пишут на C++ или C# и подключают из кода 1С методом ПодключитьВнешнююКомпоненту(). Так реализуют драйверы касс и сканеров, нестандартную криптографию, распознавание изображений.

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

Для административных задач — пакетного обновления, тестирования, выгрузки конфигурации — используются внешние инструменты, например OneScript: открытый интерпретатор языка, совместимого с синтаксисом 1С, работающий вне платформы. На нём пишут скрипты автоматизации DevOps-процессов.

Как начать изучать язык 1С самостоятельно

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

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

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

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

Как проверить результат обучения

Обработка запускается в тонком клиенте
Норма

Форма открывается, данные выводятся без ошибок

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

Ошибка «Метод объекта не обнаружен» или недоступность операций с файлами

Запрос к регистру
Норма

Возвращает корректные итоги за приемлемое время

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

Полное сканирование таблицы, зависание на больших объёмах

Серверный вызов из формы
Норма

Один вызов, передаются только простые типы и структуры

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

Вызовы в цикле, передача объектов запроса или транзакций

Частые вопросы о языке 1С

Это полноценный язык программирования или «не настоящий»?

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

Можно ли писать в 1С на Python, C# или Java?

Напрямую — нет, платформа исполняет только встроенный язык. Косвенно — да: через внешние компоненты (C++/C#), через вызов внешних веб-сервисов, написанных на любом языке, или через COM-интеграцию на Windows. Бизнес-логика конфигурации при этом всё равно остаётся на встроенном языке.

Что лучше учить — русский или английский синтаксис?

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

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

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

Нужно ли знать SQL для работы с 1С?

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

Подойдёт ли 1С как первый язык программирования?

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

Итог

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

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