Встроенный язык 1С:Предприятия — на чём на самом деле пишут конфигурации
Содержание
Для разработки в 1С нужен один язык — встроенный язык платформы 1С:Предприятие 8. Его в обиходе зовут «языком 1С», «1С-кой» или BSL. Учить заранее C#, Java или Python не обязательно: весь прикладной код конфигураций (Бухгалтерии, ЗУП, Управления торговлей) пишут именно на нём, а данные из базы достают на встроенном языке запросов, похожем на SQL.
Получается связка из двух языков: встроенный — для логики, язык запросов — для выборки данных. Плюс к ним — умение работать с метаданными в Конфигураторе или в 1C:Enterprise Development Tools (EDT). Это и есть стартовый набор программиста 1С.
Как называется язык 1С и что он собой представляет
В документации платформы язык называется просто «встроенный язык». Отдельного торгового имени у него нет. Аббревиатура BSL (1C:Enterprise Script Language) пришла из сообщества: под этим именем существуют расширения для редакторов кода и анализатор BSL Language Server.
Ключевые свойства языка:
- 🇷🇺 Двуязычный синтаксис. Каждое ключевое слово и каждый метод имеют русское и английское написание:
ЕслииIf,НовыйиNew. Их можно смешивать в одном модуле, но на практике типовые конфигурации написаны по-русски. - 🔤 Регистр не важен.
КонецЕсли,конецеслииКОНЕЦЕСЛИ— одно и то же. - 🧩 Динамическая типизация. Тип переменной не объявляют:
Сумма = 0делает её числом, аСумма = "ноль"— строкой. - ⚙️ Исполняет платформа. Код не собирается в отдельный исполняемый файл. Модули хранятся в конфигурации, а платформа компилирует их во внутреннее представление и выполняет на клиенте или на сервере.
- 🧱 Предметно-ориентированный. Язык не живёт сам по себе: он опирается на объекты метаданных — справочники, документы, регистры, планы счетов. Большую часть работы делают встроенные типы платформы, а не написанные с нуля классы.
Важная деталь для новичка: язык неразрывно связан с платформой. Без 1С:Предприятия он почти бесполезен. Исключение — свободный интерпретатор OneScript, который выполняет скрипты с тем же синтаксисом вне платформы. Им пользуются для автоматизации сборок и служебных задач.
Синтаксис: как выглядит код на языке 1С
Синтаксис напоминает смесь Паскаля и Бейсика. Блоки закрываются словами, а не фигурными скобками. Инструкции разделяет точка с запятой, комментарий начинается с //.
Пример серверной функции, которая считает сумму проведённых реализаций по контрагенту за период (имена объектов — из 1С:Бухгалтерии 3.0):
// Возвращает сумму проведённых реализаций контрагенту за период
Функция СуммаРеализаций(Контрагент, НачалоПериода, КонецПериода) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Реализация.СуммаДокумента), 0) КАК Сумма
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Проведен
| И Реализация.Контрагент = &Контрагент
| И Реализация.Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Начало", НачалоДня(НачалоПериода));
Запрос.УстановитьПараметр("Конец", КонецДня(КонецПериода));
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.Сумма;
КонецФункции
Что видно из этих 25 строк:
- Функция объявляется словами
Функция … КонецФункции, процедура —Процедура … КонецПроцедуры. Разница одна: функция возвращает значение. - Слово
Экспортделает метод доступным из других модулей. - Текст запроса — обычная строка. Перенос строки внутри неё помечают символом
|. - Параметры запроса начинаются с
&и задаются методомУстановитьПараметр. - Агрегат
СУММАбез группировки всегда возвращает одну строку, поэтомуСледующий()вызывается без проверки.ЕСТЬNULLзащищает от NULL, если реализаций не было.
Основные конструкции и их английские пары
| По-русски | По-английски | Назначение |
|---|---|---|
Если … Тогда … ИначеЕсли … Иначе … КонецЕсли | If … Then … ElsIf … Else … EndIf | Условие |
Для Сч = 1 По 10 Цикл … КонецЦикла | For … To … Do … EndDo | Цикл со счётчиком |
Для Каждого Стр Из Таблица Цикл … КонецЦикла | For Each … In … Do … EndDo | Обход коллекции |
Пока … Цикл … КонецЦикла | While … Do … EndDo | Цикл с условием |
Попытка … Исключение … КонецПопытки | Try … Except … EndTry | Обработка ошибок |
Возврат | Return | Выход из метода |
Новый Массив | New Array | Создание объекта |
Универсальные коллекции
Вместо самописных структур данных в 1С пользуются готовыми коллекциями:
- 📦
Массив— упорядоченный список, индексы с нуля; - 🗂️
Структура— набор пар «ключ — значение», ключ — строка-идентификатор; - 🔑
Соответствие— словарь, где ключом может быть любое значение, в том числе ссылка на справочник; - 📊
ТаблицаЗначений— таблица в памяти с колонками, сортировкой, группировкой и поиском; - 📋
СписокЗначений— список с представлениями и пометками, удобен для выбора в формах.
Тернарный оператор в 1С тоже есть: ?(Условие, ЗначениеЕслиДа, ЗначениеЕслиНет). Им удобно подставлять значение по умолчанию в одну строку.
Чем язык 1С отличается от C#, Java и Python
Программисту, который пришёл из «общих» языков, сначала непривычно. Дело не в русских словах — к ним привыкают за неделю. Отличается сама модель разработки.
| Что сравниваем | Язык 1С | C# / Java | Python |
|---|---|---|---|
| Типизация | Динамическая | Статическая | Динамическая |
| Классы и наследование | Нет пользовательских классов | Полноценное ООП | Полноценное ООП |
| Работа с БД | Встроенная, через метаданные и язык запросов | Через ORM или драйвер | Через ORM или драйвер |
| Интерфейс | Формы строит платформа по описанию | Отдельные фреймворки | Отдельные фреймворки |
| Где выполняется | На клиенте и сервере 1С, по директивам | Где угодно | Где угодно |
| Область применения | Учётные и управленческие системы | Почти любая | Почти любая |
Три отличия, на которых спотыкаются чаще всего:
- 🚫 Нет своих классов. Создать собственный тип с наследованием нельзя. Роль «классов» играют объекты метаданных: документ — это и таблица в базе, и форма, и модуль с бизнес-логикой. Общий код раскладывают по общим модулям.
- 🌐 Клиент и сервер в одном модуле. В модуле управляемой формы каждый метод помечают директивой:
&НаКлиенте,&НаСервере,&НаСервереБезКонтекста. Переход с клиента на сервер — это сетевой вызов. Лишние серверные вызовы в цикле — главный источник «тормозов». - 🗄️ Таблицы базы не создают руками. Разработчик добавляет в дерево конфигурации справочник или регистр, а платформа сама создаёт таблицы в СУБД (PostgreSQL, MS SQL Server и других) или в файловой базе. Прямых SQL-запросов к таблицам типовая разработка не использует.
Зато в 1С за вечер собирают то, на что в Java уйдёт неделя: документ с табличной частью, формой, проведением по регистрам и отчётом. Ради этого язык и создавался.
Где пишут код: модули, формы, запросы и отчёты
Код в 1С не лежит в одном файле. Он распределён по модулям, привязанным к объектам конфигурации. Чтобы понимать, куда писать, нужно знать основные виды.
| Вид модуля | Что в нём пишут |
|---|---|
| Модуль объекта (документа, справочника) | Обработчики записи и проведения: ПередЗаписью, ОбработкаПроведения |
| Модуль менеджера | Методы, которые работают с объектом в целом, без конкретного экземпляра |
| Модуль формы | Реакция на действия пользователя: кнопки, изменение полей |
| Общий модуль | Библиотека функций, которую вызывают из разных мест |
| Модуль сеанса, модули приложения | Действия при старте и завершении работы |
Помимо обычных модулей, язык используется ещё в нескольких местах экосистемы 1С:
- 📈 Отчёты на СКД. Система компоновки данных строит отчёт по запросу почти без кода. Код нужен, когда требуется нестандартная обработка результата.
- 🔗 Интеграции. HTTP-сервисы и веб-сервисы конфигурации, чтение и запись JSON (
ЧтениеJSON,ЗаписьJSON), обмен через XML. Здесь пригодится понимание REST и форматов обмена. - 🧰 Внешние обработки и отчёты. Отдельные файлы
.epfи.erf, которые подключают к базе без изменения конфигурации. Так пишут печатные формы и разовые обработки данных. - 🧷 Расширения конфигурации
. Файл
.cfeпозволяет доработать типовую конфигурацию , не снимая её с поддержки. Это основной способ дорабатывать Бухгалтерию и ЗУП без проблем при обновлении.
Дорабатывать рабочую базу напрямую нельзя. Сначала копия, проверка доработки на ней, и только потом перенос. Ошибка в модуле проведения может испортить движения всех документов, которые проведут после неё.
Инструменты разработчика
Код пишут в одной из двух сред:
- Конфигуратор — встроенный режим платформы. Запускается из окна выбора баз кнопкой
Конфигуратор. Есть отладчик, конструктор запросов, синтакс-помощник со всеми методами языка. - 1C:Enterprise Development Tools (EDT) — среда на базе Eclipse. Хранит конфигурацию в виде файлов, удобна для работы с Git и командной разработки.
Новичку проще начать с Конфигуратора: в нём меньше настроек и сразу под рукой синтакс-помощник. На EDT переходят, когда в команде появляется Git и код-ревью.
Что нужно знать, чтобы начать программировать в 1С
Сам язык — меньшая часть того, что требуется. Работодатели обычно смотрят на четыре блока навыков.
- 🧠 Встроенный язык и язык запросов. Условия, циклы, коллекции, вложенные запросы, временные таблицы, соединения, виртуальные таблицы регистров (
Остатки,Обороты). - 🏗️ Объекты метаданных. Чем справочник отличается от документа, зачем нужны регистры сведений, накопления и бухгалтерии, как устроено проведение.
- 🖥️ Управляемые формы. Клиент-серверное взаимодействие, директивы компиляции, асинхронные методы. В современных платформах для асинхронного кода есть
АсинхиЖдать— они появились в 8.3.18. - 📒 Предметная область. Хотя бы базовое понимание бухгалтерского счёта, проводки, остатков на складе и расчёта зарплаты. Без этого программист не поймёт постановку задачи от бухгалтера.
Сертификация 1С не обязательна для трудоустройства, но помогает. Самые известные экзамены — «1С:Профессионал» по платформе и конфигурациям и «1С:Специалист», где решают практическую задачу на время.
С чего начать на практике
Удобный путь для самостоятельного старта:
- Установите учебную версию платформы 1С:Предприятие 8.3 — она бесплатная и предназначена для обучения.
- Создайте пустую информационную базу и откройте её в Конфигураторе.
- Сделайте справочник «Товары», документ «Приход» и регистр накопления «Остатки».
- Напишите обработку проведения и отчёт по остаткам.
- Повторите то же на типовой конфигурации: найдите, как устроено проведение реализации в демонстрационной базе Бухгалтерии.
После такой учебной задачи становится ясно, как связаны язык, метаданные и база. Дальше — книги по платформе, курсы и задачи на реальных базах.
Нужен ли 1С-нику второй язык программирования
Для первой работы — нет. Но с ростом второй язык становится заметным преимуществом. Вот где он реально пригодится:
| Язык или технология | Зачем 1С-программисту |
|---|---|
| SQL | Разбор медленных запросов, анализ планов выполнения в СУБД, понимание индексов |
| C++ | Внешние компоненты по технологии Native API для работы с оборудованием и библиотеками |
| JavaScript, HTML | Поле HTML-документа в формах, веб-клиент, мобильные интерфейсы |
| Python, OneScript, bash | Автоматизация сборки, выгрузки, обновлений, CI/CD |
| Git | Командная разработка в EDT, история изменений |
Отдельно стоит платформа 1С:Предприятие.Элемент. У неё свой язык, похожий на встроенный язык 8.3 по стилю, но со статической типизацией. Для работы с 8.3 он не нужен, но знакомство с ним полезно тем, кто смотрит на облачные и веб-проекты фирмы.
Если вы уже пишете на Python или C#, переход на 1С займёт меньше времени, чем кажется. Главное — перестроиться с «пишу классы» на «настраиваю метаданные и пишу обработчики».
Карьера 1С-программиста: перспективы и рост
Рынок разработки 1С в России большой и стабильный: на платформе работают сотни тысяч организаций, и каждой периодически нужны доработки, интеграции и обновления. Спрос на специалистов держится, особенно на опытных.
Типичная лестница выглядит так:
- 🌱 Стажёр / младший разработчик. Печатные формы, отчёты, простые обработки, исправление ошибок по заявкам.
- 🌿 Разработчик. Доработка типовых конфигураций через расширения, интеграции, обмены данными.
- 🌳 Ведущий разработчик. Проектирование доработок, оптимизация производительности, код-ревью.
- 🏛️ Архитектор или руководитель проекта. Внедрение ERP-систем, выбор архитектуры, работа с заказчиком.
Параллельная ветка — консультант-внедренец: меньше кода, больше настройки и общения с бухгалтерией. Ещё одна — эксперт по технологическим вопросам: сервер 1С, СУБД, производительность.
Ориентиры по доходу
Зарплата сильно зависит от города, опыта и компании. Ориентировочно, по открытым вакансиям в крупных городах:
| Уровень | Опыт | Примерный доход в месяц |
|---|---|---|
| Младший разработчик | до 1 года | 60–120 тыс. ₽ |
| Разработчик | 2–4 года | 150–250 тыс. ₽ |
| Ведущий / архитектор | от 5 лет | 250–400 тыс. ₽ и выше |
Это примерные цифры, а не обещание. В регионах они ниже, на удалённой работе в крупных интеграторах — ближе к столичным.
Частые вопросы
Можно ли писать код 1С на английском?
Procedure, If, New. Платформа понимает оба. В Конфигураторе можно выбрать, на каком варианте подставляются подсказки.