Разработка и Конфигурация · 12 мин
BSL в 1С: что это за язык и как с ним работать
BSL — встроенный язык программирования 1С. Разбираем, что это, как устроен синтаксис, где пишется код, типичные задачи и ошибки новичков.
BSL (Built-in Script Language) — это встроенный язык программирования платформы «1С:Предприятие», на котором пишется вся прикладная логика конфигураций: обработчики событий форм, проведение документов, расчёты, обмены данными. Часто его называют просто «встроенный язык 1С», а в инструментах разработки — «OneScript-подобный язык» или по расширению файлов модулей (.bsl) во внешних редакторах.
Язык изначально спроектирован для бизнес-задач: в нём нет ручного управления памятью, указателей и низкоуровневых конструкций, зато есть прямой доступ к объектам метаданных — справочникам, документам, регистрам, запросам. Разработчик описывает, что должно произойти при записи документа или нажатии кнопки, а платформа берёт на себя работу с базой данных, транзакциями и пользовательским интерфейсом.
Характерная особенность BSL — двуязычный синтаксис. Ключевые слова и встроенные функции можно писать как на русском (Если ... Тогда ... КонецЕсли;), так и на английском (If ... Then ... EndIf;), причём оба варианта работают одинаково. В типовых конфигурациях исторически используется русский синтаксис, в новых проектах и открытых библиотеках всё чаще встречается английский.
Что такое BSL и где он используется
BSL — не отдельная программа, а часть платформы 1С. Код на нём хранится внутри конфигурации в специальных контейнерах — модулях — и исполняется либо на сервере 1С, либо на клиенте (тонком, веб- или толстом). Платформа компилирует код во внутреннее представление при запуске, поэтому BSL относят к интерпретируемым языкам, хотя формально в нём есть этап компиляции в байт-код.
Типичные задачи, которые решают на BSL: проведение документов с формированием движений по регистрам, заполнение и проверка данных перед записью, формирование отчётов через СКД и запросы, интеграция с внешними сервисами по HTTP, загрузка и выгрузка файлов, регламентные задания. Фактически любое поведение прикладного решения, выходящее за рамки настроек в конфигураторе, реализуется кодом на BSL.
Как устроен синтаксис языка
Основа программы на BSL — процедуры и функции, объявленные в модулях. Переменные объявляются неявно при первом присваивании или через ключевое слово Перем, типизация динамическая: одна и та же переменная может сначала хранить строку, а затем число. Каждый оператор завершается точкой с запятой — это частая причина синтаксических ошибок у новичков.
Управляющие конструкции привычны: условие Если ... ИначеЕсли ... Иначе ... КонецЕсли;, циклы Для ... Цикл ... КонецЦикла; и Пока ... Цикл ... КонецЦикла;, обход коллекций через Для Каждого ... Из ... Цикл. Обработка ошибок выполняется через Попытка ... Исключение ... КонецПопытки; с получением описания ошибки функцией ОписаниеОшибки() или объектом ИнформацияОбОшибке.
Пример простого кода на русском синтаксисе:
Функция РассчитатьСкидку(СуммаПокупки) Экспорт
Если СуммаПокупки >= 100000 Тогда
Возврат 10;
ИначеЕсли СуммаПокупки >= 50000 Тогда
Возврат 5;
КонецЕсли;
Возврат 0;
КонецФункции
Отдельный пласт языка — работа с запросами. Текст запроса пишется на собственном языке запросов 1С (похожем на SQL), который передаётся строкой в объект Запрос. Это не часть BSL в строгом смысле, но без владения языком запросов полноценная разработка невозможна: выборки из базы через запросы работают на порядки быстрее, чем перебор объектов в цикле.
Виды модулей и контекст исполнения
Понимание того, где именно будет выполняться код, критично в 1С. Один и тот же вызов может работать на клиенте и падать на сервере, потому что контексты различаются по доступным объектам: например, на сервере недоступны элементы формы и диалоги с пользователем, а на тонком клиенте недоступна прямая работа с базой данных.
| Тип модуля | Где выполняется | Типовое назначение |
|---|---|---|
| Общий модуль | Сервер, клиент — по флагам | Библиотеки процедур и функций, бизнес-логика |
| Модуль объекта | Сервер | Проведение, проверка заполнения, обработчики записи |
| Модуль формы | Клиент и сервер (директивы) | Реакция на действия пользователя, заполнение формы |
| Модуль менеджера | Сервер | Создание объектов, печатные формы, обработчики получения данных |
| Модуль сеанса | Сервер | Инициализация параметров сеанса при входе пользователя |
В модулях форм и общих клиент-серверных модулях используются директивы компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Они указывают платформе, для какого контекста компилировать процедуру. Ошибка в выборе директивы — классический источник проблем: например, вызов серверной функции из клиентского кода без директивы приводит к ошибке «Процедура или функция не определена».
Как написать и запустить первый код
Минимальный путь к первому работающему коду выглядит так: открыть конфигуратор, создать обработку (или общий модуль), написать процедуру и вызвать её. Для экспериментов удобнее всего внешняя обработка — она не требует изменения конфигурации базы.
- 1Откройте конфигуратор и создайте новую внешнюю обработку через Файл → Новый → Внешняя обработка
- 2Добавьте форму обработки и разместите на ней кнопку
- 3Создайте обработчик нажатия кнопки с директивой &НаКлиенте и вызовом Сообщить() или ПоказатьПредупреждение()
- 4Сохраните обработку в файл .epf и откройте её в режиме 1С:Предприятие через Файл → Открыть
- 5Нажмите кнопку и убедитесь, что сообщение появилось
Для проверки простых алгоритмов есть и более быстрый способ — консоль кода или встроенная обработка «Выполнить произвольный код», но они доступны только пользователям с правами администратора и не заменяют полноценную отладку. Полноценная отладка включается в конфигураторе через меню «Отладка» с установкой точек останова прямо в тексте модуля.
&НаКлиенте
Процедура КомандаПривет(Команда)
ПоказатьПредупреждение(, "Привет из BSL!");
КонецПроцедурыТипичные ошибки начинающих разработчиков
Большинство проблем новичков связано не со сложностью языка, а со спецификой платформы: контекстами исполнения, транзакциями и объектной моделью. Ниже — ошибки, которые встречаются чаще всего.
Отдельно стоит сказать про обращения к базе внутри циклов. Конструкция вида «в цикле по строкам таблицы получить ссылку и прочитать объект» порождает по запросу к СУБД на каждую итерацию. На тестовой базе это незаметно, а на рабочей с тысячами строк приводит к тайм-аутам и блокировкам. Правильный подход — один запрос с соединением таблиц и обход уже готовой выборки.
Чем BSL отличается от OneScript и других языков
Начинающие часто путают BSL и OneScript. OneScript — независимый открытый проект, реализующий синтаксис, совместимый со встроенным языком 1С, но работающий вне платформы: в нём нет прикладных объектов (документов, регистров), зато можно писать консольные скрипты, автоматизацию сборки и утилиты. Код на OneScript выполняется своим интерпретатором и не имеет доступа к базе 1С напрямую.
Сравнение вариантов
Полный доступ к объектам конфигурации и базе данных; выполняется только внутри платформы 1С
Скрипты автоматизации, CI/CD, работа с файлами вне 1С; нет доступа к прикладным объектам и СУБД
Дополняют BSL там, где не хватает возможностей платформы, но требуют отдельной разработки и сопровождения
По сравнению с языками общего назначения (C#, Java, Python) BSL проигрывает в экосистеме библиотек и инструментах, но выигрывает в скорости решения учётных задач: то, что на универсальном языке потребовало бы проектирования ORM и слоя доступа к данным, в 1С доступно из коробки. Поэтому BSL не конкурент общим языкам, а специализированный инструмент внутри своей платформы.
Как проверить, что код работает правильно
Проверка результата в 1С — это не только «программа не упала с ошибкой». Нужно убедиться, что данные в базе изменились именно так, как задумано, и не появились побочные эффекты: лишние движения по регистрам, дубли записей, потерянные связи.
Как проверить результат
Проверка конфигурации (Конфигурация → Проверка конфигурации) проходит без ошибок
Сообщения о синтаксических ошибках или неопределённых процедурах
Процедура отрабатывает, точки останова в отладчике срабатывают в ожидаемом порядке
Исключение с текстом ошибки или код не заходит в нужную ветку условия
Записи и движения документов соответствуют ожиданиям, суммы и количества сходятся
Дубли движений, пустые измерения регистров, расхождение итогов
Операция выполняется за приемлемое время на объёме, близком к рабочему
Заметная задержка, рост времени пропорционально каждой строке данных
Для поиска узких мест полезен замер производительности (Отладка → Замер производительности) — он показывает, какие строки кода и запросы занимают больше всего времени. А анализ плана запроса на стороне СУБД помогает понять, почему конкретный запрос работает медленно и не хватает ли индекса.
Частые вопросы о BSL
Нужно ли знать программирование, чтобы начать писать на BSL?
Желательно понимать базовые концепции — переменные, условия, циклы, функции, — но глубокая подготовка не обязательна. BSL считается одним из самых доступных языков для входа: синтаксис на русском языке, встроенная справка в конфигураторе и огромное количество примеров в типовых конфигурациях. Сложнее даётся не сам язык, а понимание объектной модели 1С — документов, регистров, механизмов проведения.
Можно ли писать на BSL английскими ключевыми словами?
Да, платформа поддерживает оба варианта синтаксиса, и их даже можно смешивать в одном модуле, хотя делать этого не стоит. В типовых конфигурациях используется русский синтаксис, поэтому для доработки типовых решений удобнее придерживаться его. Английский вариант распространён в открытых библиотеках и проектах, где ведётся разработка через EDT и внешние инструменты.
Чем конфигуратор отличается от 1C:EDT для написания кода?
Конфигуратор — классическая среда разработки, встроенная в платформу; код в нём хранится внутри конфигурации. 1C:EDT — среда на базе Eclipse, где конфигурация хранится как проект из файлов, включая модули в виде .bsl-файлов. EDT удобнее для командной разработки, контроля версий и статического анализа, конфигуратор — проще для быстрых доработок и обучения.
Почему код работает в толстом клиенте, но не работает в веб-клиенте?
В разных клиентах разный состав доступных возможностей. В веб-клиенте недоступны модальные диалоги в старом стиле, часть функций работы с файловой системой и COM-объекты, а весь обмен с сервером асинхронный. Проверяйте директивы компиляции и используйте асинхронные аналоги: НачатьПомещениеФайла вместо модального диалога выбора, описания оповещений вместо блокирующих вызовов.
Как вызывать серверную процедуру из клиентского кода формы?
Создайте в модуле формы процедуру с директивой &НаСервере и вызывайте её из клиентской процедуры напрямую по имени — платформа сама выполнит серверный вызов. Если логика не использует данные формы, лучше вынести её в общий серверный модуль с флагом «Вызов сервера» — это уменьшает объём передаваемых между клиентом и сервером данных. Учтите: каждый такой вызов — это сетевое обращение, поэтому не вызывайте сервер в цикле.
Что важно запомнить
BSL — встроенный язык платформы 1С для описания прикладной логики: он высокоуровневый, двуязычный по синтаксису и тесно связан с объектами конфигурации. Ключ к успешной работе — понимание контекстов исполнения (клиент/сервер), использование запросов вместо перебора объектов и обязательная проверка кода на копии базы перед применением в рабочей среде.