Встроенный язык 1С:Предприятия — на чём на самом деле пишут конфигурации

· 10 мин

Содержание

Для разработки в 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 строк:

  1. Функция объявляется словами Функция … КонецФункции, процедура — Процедура … КонецПроцедуры. Разница одна: функция возвращает значение.
  2. Слово Экспорт делает метод доступным из других модулей.
  3. Текст запроса — обычная строка. Перенос строки внутри неё помечают символом |.
  4. Параметры запроса начинаются с & и задаются методом УстановитьПараметр.
  5. Агрегат СУММА без группировки всегда возвращает одну строку, поэтому Следующий() вызывается без проверки. ЕСТЬ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# / JavaPython
ТипизацияДинамическаяСтатическаяДинамическая
Классы и наследованиеНет пользовательских классовПолноценное ООППолноценное ООП
Работа с БДВстроенная, через метаданные и язык запросовЧерез ORM или драйверЧерез ORM или драйвер
ИнтерфейсФормы строит платформа по описаниюОтдельные фреймворкиОтдельные фреймворки
Где выполняетсяНа клиенте и сервере 1С, по директивамГде угодноГде угодно
Область примененияУчётные и управленческие системыПочти любаяПочти любая

Три отличия, на которых спотыкаются чаще всего:

  • 🚫 Нет своих классов. Создать собственный тип с наследованием нельзя. Роль «классов» играют объекты метаданных: документ — это и таблица в базе, и форма, и модуль с бизнес-логикой. Общий код раскладывают по общим модулям.
  • 🌐 Клиент и сервер в одном модуле. В модуле управляемой формы каждый метод помечают директивой: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Переход с клиента на сервер — это сетевой вызов. Лишние серверные вызовы в цикле — главный источник «тормозов».
  • 🗄️ Таблицы базы не создают руками. Разработчик добавляет в дерево конфигурации справочник или регистр, а платформа сама создаёт таблицы в СУБД (PostgreSQL, MS SQL Server и других) или в файловой базе. Прямых SQL-запросов к таблицам типовая разработка не использует.

Зато в 1С за вечер собирают то, на что в Java уйдёт неделя: документ с табличной частью, формой, проведением по регистрам и отчётом. Ради этого язык и создавался.

Где пишут код: модули, формы, запросы и отчёты

Код в 1С не лежит в одном файле. Он распределён по модулям, привязанным к объектам конфигурации. Чтобы понимать, куда писать, нужно знать основные виды.

Вид модуляЧто в нём пишут
Модуль объекта (документа, справочника)Обработчики записи и проведения: ПередЗаписью, ОбработкаПроведения
Модуль менеджераМетоды, которые работают с объектом в целом, без конкретного экземпляра
Модуль формыРеакция на действия пользователя: кнопки, изменение полей
Общий модульБиблиотека функций, которую вызывают из разных мест
Модуль сеанса, модули приложенияДействия при старте и завершении работы

Помимо обычных модулей, язык используется ещё в нескольких местах экосистемы 1С:

  • 📈 Отчёты на СКД. Система компоновки данных строит отчёт по запросу почти без кода. Код нужен, когда требуется нестандартная обработка результата.
  • 🔗 Интеграции. HTTP-сервисы и веб-сервисы конфигурации, чтение и запись JSON (ЧтениеJSON, ЗаписьJSON), обмен через XML. Здесь пригодится понимание REST и форматов обмена.
  • 🧰 Внешние обработки и отчёты. Отдельные файлы .epf и .erf, которые подключают к базе без изменения конфигурации. Так пишут печатные формы и разовые обработки данных.
  • 🧷 Расширения конфигурации . Файл .cfe позволяет доработать типовую конфигурацию , не снимая её с поддержки. Это основной способ дорабатывать Бухгалтерию и ЗУП без проблем при обновлении.

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

Инструменты разработчика

Код пишут в одной из двух сред:

  1. Конфигуратор — встроенный режим платформы. Запускается из окна выбора баз кнопкой Конфигуратор. Есть отладчик, конструктор запросов, синтакс-помощник со всеми методами языка.
  2. 1C:Enterprise Development Tools (EDT) — среда на базе Eclipse. Хранит конфигурацию в виде файлов, удобна для работы с Git и командной разработки.

Новичку проще начать с Конфигуратора: в нём меньше настроек и сразу под рукой синтакс-помощник. На EDT переходят, когда в команде появляется Git и код-ревью.

Что нужно знать, чтобы начать программировать в 1С

Сам язык — меньшая часть того, что требуется. Работодатели обычно смотрят на четыре блока навыков.

  • 🧠 Встроенный язык и язык запросов. Условия, циклы, коллекции, вложенные запросы, временные таблицы, соединения, виртуальные таблицы регистров (Остатки, Обороты).
  • 🏗️ Объекты метаданных. Чем справочник отличается от документа, зачем нужны регистры сведений, накопления и бухгалтерии, как устроено проведение.
  • 🖥️ Управляемые формы. Клиент-серверное взаимодействие, директивы компиляции, асинхронные методы. В современных платформах для асинхронного кода есть Асинх и Ждать — они появились в 8.3.18.
  • 📒 Предметная область. Хотя бы базовое понимание бухгалтерского счёта, проводки, остатков на складе и расчёта зарплаты. Без этого программист не поймёт постановку задачи от бухгалтера.

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

Проверьте себя
Как в 1С объявить метод, доступный из других модулей?
Какой директивой помечают серверный метод формы, которому не нужны данные формы?
Можно ли в 1С создать свой класс с наследованием?

С чего начать на практике

Удобный путь для самостоятельного старта:

  1. Установите учебную версию платформы 1С:Предприятие 8.3 — она бесплатная и предназначена для обучения.
  2. Создайте пустую информационную базу и откройте её в Конфигураторе.
  3. Сделайте справочник «Товары», документ «Приход» и регистр накопления «Остатки».
  4. Напишите обработку проведения и отчёт по остаткам.
  5. Повторите то же на типовой конфигурации: найдите, как устроено проведение реализации в демонстрационной базе Бухгалтерии.

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

Нужен ли 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. Платформа понимает оба. В Конфигураторе можно выбрать, на каком варианте подставляются подсказки.
Язык 1С — это объектно-ориентированный язык?
Частично. Вы работаете с объектами платформы и их методами, но собственные классы и наследование создать нельзя. Поэтому его называют предметно-ориентированным.
Сколько времени нужно, чтобы выучить язык 1С с нуля?
Синтаксис осваивают за 2–4 недели. На уверенную работу с метаданными, запросами и формами уходит несколько месяцев практики на реальных задачах.
Чем язык запросов 1С отличается от SQL?
Он похож на SELECT в SQL, но работает с объектами конфигурации, а не с таблицами СУБД. В нём есть обращение к реквизитам через точку и виртуальные таблицы регистров. Изменять данные запросом нельзя — только читать.
Нужно ли высшее техническое образование для работы 1С-программистом?
Формально нет. Работодатели смотрят на практические навыки и сертификаты. Понимание основ бухгалтерского учёта ценится не меньше диплома.