Чем пишут код для 1С:Предприятия 8.3 — от Конфигуратора до Git и CI

· 11 мин

Содержание

В 1С программируют на встроенном языке платформы 1С:Предприятие (его ещё называют BSL) и на языке запросов, похожем на SQL. Код пишут в Конфигураторе, который входит в платформу, или в среде 1C:EDT на базе Eclipse. Конфигуратора хватает для доработок одной базы. EDT и связка VS Code + Git нужны, когда над проектом работает команда.

Вокруг языка за годы вырос набор внешних инструментов: OneScript для скриптов и автоматизации, Vanessa Automation и YAxUnit для тестов, SonarQube с BSL-плагином для проверки качества, Docker и Jenkins или GitLab CI для сборок. Другие языки — Python, C#, JavaScript — к 1С подключаются через COM, HTTP-сервисы, OData и внешние компоненты, но прикладную логику внутри конфигурации на них не пишут.

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

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

Что нужно знать о языке:

  • 🔤 Два варианта синтаксиса. Ключевые слова есть на русском и английском: Если ... Тогда ... КонецЕсли и If ... Then ... EndIf. Типовые конфигурации написаны по-русски.
  • 🧩 Синтаксис ближе всего к Паскалю и Visual Basic. Процедуры, функции, циклы Для, Для Каждого, Пока, обработка исключений Попытка ... Исключение.
  • 📦 Динамическая типизация. Тип переменной не объявляют, он определяется значением.
  • 🖥️ Контекст исполнения. Каждая процедура выполняется либо на клиенте, либо на сервере. Это задают директивы &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.
  • 🗃️ Объектная модель. Вместо таблиц вы работаете с объектами метаданных: Справочники.Номенклатура, Документы.РеализацияТоваровУслуг, регистрами.

Пример короткой серверной функции, которая считает сумму по табличной части документа:

&НаСервере
Функция СуммаПоТоварам(ДокументСсылка)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(СУММА(Товары.Сумма), 0) КАК Сумма
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК Товары
    |ГДЕ
    |    Товары.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Возврат Выборка.Сумма;

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

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

Второй язык, без которого не обойтись, — язык запросов. Он похож на SQL: ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО, соединения. Платформа сама переводит запрос в диалект СУБД: MS SQL Server, PostgreSQL, файловой базы.

Разница с чистым SQL заметная. Есть виртуальные таблицы регистров (Остатки, Обороты, СрезПоследних), разыменование ссылок через точку, временные таблицы через ПОМЕСТИТЬ. Писать прямые SQL-запросы к базе 1С нельзя: это нарушает лицензионное соглашение и обходит права доступа .

Что ещё входит в «язык» на практике

КомпонентДля чего
Система компоновки данных (СКД)Отчёты: схема, настройки, варианты, без ручного вывода в макет
Макеты табличных документовПечатные формы: счета, накладные, акты
Управляемые формыИнтерфейс: реквизиты формы, команды, обработчики событий
Библиотека стандартных подсистем (БСП)Готовые общие модули: права, печать, обмены, обновление

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

Конфигуратор: среда, которая уже есть у каждого

Конфигуратор — режим запуска той же платформы. В окне запуска выберите базу и нажмите Конфигуратор. Отдельно ставить ничего не надо.

Что умеет Конфигуратор:

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

Где Конфигуратора не хватает

  • 📝 Редактор слабее современных IDE: нет мультикурсора, гибкого рефакторинга, удобного поиска по всем модулям сразу.
  • 🔀 Хранилище конфигурации блокирует объект на время правки. Двое не могут одновременно менять один модуль.
  • 🧪 Нет встроенной статической проверки уровня линтера. Есть только синтаксический контроль и Проверка конфигурации.

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

Расширения конфигурации

Расширения появились в платформе 8.3.6. Это способ дорабатывать типовую конфигурацию , не снимая её с поддержки. Свой код лежит в отдельном файле .cfe, а методы типовых модулей перехватываются аннотациями &Перед, &После, &Вместо. Создают расширения в том же Конфигураторе или в EDT. Именно с расширений сегодня начинают почти любую доработку типовой.

1C:EDT и VS Code: внешние редакторы кода

1C:Enterprise Development Tools

1C:EDT — отдельная среда разработки от фирмы 1С на платформе Eclipse. Она не заменяет платформу: для запуска и отладки нужна установленная 1С:Предприятие 8.3.

Чем EDT отличается от Конфигуратора:

  • 📂 Проект хранится как набор файлов на диске, а не внутри базы. Его сразу можно класть в Git.
  • 🔍 Проверки кода «на лету»: неиспользуемые переменные, ошибки типов, нарушения стандартов.
  • 🔁 Рефакторинг: переименование объекта с правкой всех ссылок.
  • 🌿 Ветки и слияния — штатно через Git, без хранилища.

Минусы тоже есть. EDT заметно требовательнее к памяти: на больших конфигурациях вроде ERP комфортно работать от 16 ГБ ОЗУ, лучше 32 ГБ. Первая загрузка проекта крупной типовой занимает много времени.

VS Code и BSL Language Server

Часть разработчиков пишет код в Visual Studio Code. Для этого ставят расширение для языка 1С (в маркетплейсе ищется по слову «BSL» или «1C»). Оно даёт подсветку, подсказки и переход к определению.

Под капотом многих таких расширений работает BSL Language Server — открытый проект сообщества. Он же используется как плагин для SonarQube и проверяет код по десяткам правил: от лишних запросов в цикле до нарушений стандартов разработки.

VS Code — только редактор. Формы, макеты и структуру метаданных в нём не настроить. Модули он правит в выгрузке конфигурации в файлы, а собирать и проверять результат всё равно приходится платформой.

Git и хранилище: как версионируют код 1С

У 1С два пути контроля версий.

СпособКак работаетКогда выбирают
Хранилище конфигурацииВстроено в платформу. Объект захватывают, правят, помещают обратноНебольшая команда, работа только в Конфигураторе
Git + EDTПроект в файлах, ветки, merge requests, код-ревьюКоманды от 3–4 человек, продуктовая разработка
Хранилище + синхронизация в GitИстория хранилища выгружается в Git-репозиторий утилитой GitSyncПереходный вариант: разработка в Конфигураторе, ревью и CI в Git

Выгрузить конфигурацию в файлы можно и без EDT. В Конфигураторе меню Конфигурация → Выгрузить конфигурацию в файлы. Получится каталог с XML-описаниями метаданных и .bsl-модулями. Обратная операция — Конфигурация → Загрузить конфигурацию из файлов.

Тот же процесс доступен из командной строки — это основа любой автоматизации:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F"D:\Bases\Dev" /N"Admin" /P"" /DumpConfigToFiles "D:\Repo\src" /Out "D:\Logs\dump.log" /DisableStartupDialogs

Номер версии в пути подставьте свой: он совпадает с каталогом в C:\Program Files\1cv8\.

OneScript, Vanessa и YAxUnit: автоматизация и тесты

OneScript

OneScript — независимая открытая реализация встроенного языка 1С. Скрипт пишут тем же синтаксисом, что и модуль обработки, но запускают без платформы и без лицензии, как обычную программу: oscript script.os.

Зачем он разработчику 1С:

  • 🛠️ Писать служебные скрипты на знакомом языке: выгрузка, сборка, развёртывание баз.
  • 📦 Ставить готовые пакеты через менеджер opm. Самые известные — vanessa-runner (команда vrunner) для управления базами из командной строки и gitsync для синхронизации хранилища с Git.
  • ⚙️ Собирать конвейеры CI: создать пустую базу , загрузить конфигурацию из исходников, обновить её, прогнать тесты.

У OneScript нет объектов метаданных, форм и базы данных. Это инструмент вокруг 1С, а не замена платформы.

Тестирование

ИнструментВид тестовКак пишут
Vanessa AutomationСценарные (BDD) через интерфейс клиентаСценарии на языке Gherkin: «Дано… Когда… Тогда…»
Vanessa-ADDПредшественник Vanessa Automation, BDD и модульныеВстречается в старых проектах
YAxUnitМодульные тестыТесты в отдельном расширении, на встроенном языке
1С:Сценарное тестированиеСценарные, от фирмы 1СЗапись действий пользователя

Для новых проектов обычно берут Vanessa Automation для сценариев и YAxUnit для модульных тестов. Vanessa-ADD продолжает работать, но активное развитие ушло в Vanessa Automation.

Python, C#, JavaScript: как другие языки работают с 1С

Внутри конфигурации — только встроенный язык. Но снаружи с базой 1С можно работать из любого языка. Выбор механизма зависит от задачи.

МеханизмЯзыки снаружиТипичная задача
HTTP-сервисыЛюбые: Python, C#, JavaScript, Go, PHPСвой REST API: сайт, мобильное приложение, интеграции
Стандартный интерфейс ODataЛюбыеЧтение и запись объектов без программирования API
Веб-сервисы (SOAP)Любые, чаще C# и JavaОбмен с корпоративными системами
COM-соединение V83.COMConnectorPython (pywin32), C#, VBScriptСкрипты и обработки под Windows
Внешние компоненты Native APIC++Работа с оборудованием, быстрые вычисления, нестандартные библиотеки
Поле HTML-документаJavaScript, HTMLГрафики, карты, редакторы внутри формы

Пример подключения из Python к файловой базе через COM (только Windows, нужна установленная платформа той же разрядности, что и Python):

import win32com.client

connector = win32com.client.Dispatch("V83.COMConnector")
base = connector.Connect('File="D:\\Bases\\Buh";Usr="Admin";Pwd=""')

query = base.NewObject("Query")
query.Text = "ВЫБРАТЬ ПЕРВЫЕ 5 Наименование ИЗ Справочник.Контрагенты"
result = query.Execute().Select()
while result.Next():
    print(result.Наименование)

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

Окружение разработчика: дистрибутив, зависимости, Docker и CI

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

Шаг 1. Платформа и дистрибутив

  1. Скачайте дистрибутив технологической платформы нужной версии. Его выдают пользователям с действующей подпиской ИТС через портал поддержки.
  2. На Windows платформа ставится в C:\Program Files\1cv8\<версия>\. Несколько версий живут рядом, каждая в своём каталоге.
  3. На Linux каталог по умолчанию — /opt/1cv8/x86_64/<версия>/ для 64-битной сборки.
  4. Для изучения языка есть учебная версия платформы. Она бесплатная и работает без лицензии, но с ограничениями по числу записей и без клиент-серверного режима.

Храните скачанные архивы дистрибутивов в одном общем каталоге команды. Для Docker-образов и CI их всё равно придётся копировать в контекст сборки, а повторно искать нужный релиз неудобно.

Шаг 2. Зависимости

  • 🐧 Linux. Толстому и тонкому клиенту нужны графические библиотеки (GTK, WebKit) и шрифты. Список пакетов зависит от дистрибутива и версии платформы — сверяйтесь с требованиями к своей версии.
  • ☕ 1C:EDT. Работает на Java. Требуемая версия Java указана для каждой версии EDT. Ставят EDT через собственный установщик-лаунчер.
  • 🧰 OneScript. Устанавливается отдельным установщиком, пакеты — командой opm install vanessa-runner.
  • 🌐 Веб-публикация для HTTP-сервисов и OData. Нужен веб-сервер Apache или IIS и модуль расширения веб-сервера из комплекта платформы.

Шаг 3. Настройка окружения

  1. Создайте отдельную базу для разработки. Не дорабатывайте рабочую базу напрямую.
  2. Подключите базу к хранилищу или выгрузите конфигурацию в Git.
  3. Включите отладку. В клиент-серверном варианте сервер 1С запускают с ключом -debug. Для файловой базы отладка работает сразу.
  4. Подключите проверку кода: BSL Language Server в редакторе или SonarQube на сервере.

Шаг 4. Запуск платформы из командной строки

Те же режимы, что и в окне запуска, доступны ключами 1cv8:

rem Загрузить конфигурацию из файла .cf и обновить конфигурацию базы данных
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F"D:\Bases\Test" /N"Admin" /P"" /LoadCfg "D:\Build\conf.cf" /UpdateDBCfg /Out "D:\Logs\load.log"

rem Выгрузить базу в .dt для резервной копии
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F"D:\Bases\Test" /N"Admin" /P"" /DumpIB "D:\Backup\test.dt" /Out "D:\Logs\dump.log"

Загрузку .cf и /UpdateDBCfg запускайте только на тестовой базе или копии: команда заменяет конфигурацию целиком. Обновление структуры требует монопольного доступа, поэтому пользователи в этой базе в момент запуска работать не должны.

Для сборок без графического интерфейса в новых версиях платформы есть отдельная утилита ibcmd. Её поддерживаемые команды смотрите в справке ibcmd help своей версии.

Docker и CI/CD

Контейнеры в мире 1С используют в первую очередь для сборки и тестов, а не для боевых баз:

  • 🐳 Сообщество поддерживает открытые Dockerfile для клиента, сервера 1С, EDT и OneScript. Дистрибутив платформы в образ вы добавляете сами — в публичных образах его нет.
  • 🔄 Конвейер обычно такой: коммит в Git → Jenkins или GitLab CI → контейнер собирает базу из исходников → vrunner прогоняет синтаксический контроль, YAxUnit и Vanessa Automation → SonarQube публикует отчёт.
  • 🔐 Платформе в контейнере нужна лицензия, как и на обычной машине. Программные лицензии привязываются к параметрам оборудования, поэтому для CI заранее продумайте, где и как она будет активирована.

Облачный вариант разработки — фирменный сервис 1С:Фреш и аренда серверов у партнёров. Там удобно держать стенды для тестов, но код всё равно пишется в Конфигураторе или EDT.

Какой инструмент выбрать под вашу задачу

Какая у вас ситуация?

Короткая шпаргалка по ролям:

РольМинимумЖелательно
Бухгалтер, который пишет отчётыКонфигуратор, СКДКонсоль запросов
Программист внедренияКонфигуратор, расширения, хранилищеBSL Language Server, YAxUnit
Разработчик продуктаEDT, GitSonarQube, Vanessa Automation, CI в Docker
ИнтеграторHTTP-сервисы, ODataPython или C# на стороне внешней системы

Частые вопросы о языке и средах разработки 1С

Можно ли писать код для 1С на английском?
Да. У встроенного языка есть полный английский вариант ключевых слов и имён методов. Платформа понимает оба варианта даже внутри одного модуля, но в командах принято держаться одного.
Нужна ли лицензия, чтобы учиться программировать в 1С?
Для обучения хватит учебной версии платформы: она бесплатная, но ограничена по объёму данных. OneScript и VS Code лицензий 1С не требуют вовсе.
Чем BSL отличается от «встроенного языка 1С»?
Ничем. BSL — сокращение от 1C:Enterprise Business Script Language, так встроенный язык называют в сообществе, а .bsl — расширение файлов модулей при выгрузке в файлы.
Заменит ли EDT Конфигуратор полностью?
Пока нет. Ряд операций — например, обновление типовой конфигурации с поддержкой и работа с хранилищем — многие команды по-прежнему делают в Конфигураторе. EDT берут для ежедневной разработки, а Конфигуратор остаётся под рукой.
Можно ли написать внешнюю обработку на Python?
Нет. Внешняя обработка .epf содержит только код на встроенном языке. Python можно вызвать из обработки как внешнюю программу или обратиться к нему по HTTP, но саму обработку пишут на языке 1С.