Чем пишут код для 1С:Предприятия 8.3 — от Конфигуратора до Git и CI
Содержание
В 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С нельзя: это нарушает лицензионное соглашение и обходит права доступа
.
Что ещё входит в «язык» на практике
| Компонент | Для чего |
|---|---|
| Система компоновки данных (СКД) | Отчёты: схема, настройки, варианты, без ручного вывода в макет |
| Макеты табличных документов | Печатные формы: счета, накладные, акты |
| Управляемые формы | Интерфейс: реквизиты формы, команды, обработчики событий |
| Библиотека стандартных подсистем (БСП) | Готовые общие модули: права, печать, обмены, обновление |
Новичку полезнее всего освоить запросы и СКД. На них держится большая часть повседневной работы: отчёты, выборки, обработки для массовых изменений.
Конфигуратор: среда, которая уже есть у каждого
Конфигуратор — режим запуска той же платформы. В окне запуска выберите базу и нажмите Конфигуратор. Отдельно ставить ничего не надо.
Что умеет Конфигуратор:
- Показывает дерево метаданных: справочники, документы, регистры, общие модули.
- Даёт редактор модулей с подсветкой, контекстной подсказкой и синтакс-помощником.
- Открывает конструкторы: запросов, СКД, форм, печати, движений документа.
- Запускает отладчик: точки останова, пошаговое выполнение, табло для просмотра значений, замер производительности.
- Сравнивает и объединяет конфигурации, обновляет типовые решения.
- Работает с хранилищем конфигурации — встроенным механизмом командной разработки.
Где Конфигуратора не хватает
- 📝 Редактор слабее современных 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.COMConnector | Python (pywin32), C#, VBScript | Скрипты и обработки под Windows |
| Внешние компоненты Native API | C++ | Работа с оборудованием, быстрые вычисления, нестандартные библиотеки |
| Поле 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. Платформа и дистрибутив
- Скачайте дистрибутив технологической платформы нужной версии. Его выдают пользователям с действующей подпиской ИТС через портал поддержки.
- На Windows платформа ставится в
C:\Program Files\1cv8\<версия>\. Несколько версий живут рядом, каждая в своём каталоге. - На Linux каталог по умолчанию —
/opt/1cv8/x86_64/<версия>/для 64-битной сборки. - Для изучения языка есть учебная версия платформы. Она бесплатная и работает без лицензии, но с ограничениями по числу записей и без клиент-серверного режима.
Храните скачанные архивы дистрибутивов в одном общем каталоге команды. Для Docker-образов и CI их всё равно придётся копировать в контекст сборки, а повторно искать нужный релиз неудобно.
Шаг 2. Зависимости
- 🐧 Linux. Толстому и тонкому клиенту нужны графические библиотеки (GTK, WebKit) и шрифты. Список пакетов зависит от дистрибутива и версии платформы — сверяйтесь с требованиями к своей версии.
- ☕ 1C:EDT. Работает на Java. Требуемая версия Java указана для каждой версии EDT. Ставят EDT через собственный установщик-лаунчер.
- 🧰 OneScript. Устанавливается отдельным установщиком, пакеты — командой
opm install vanessa-runner. - 🌐 Веб-публикация для HTTP-сервисов и OData. Нужен веб-сервер Apache или IIS и модуль расширения веб-сервера из комплекта платформы.
Шаг 3. Настройка окружения
- Создайте отдельную базу для разработки. Не дорабатывайте рабочую базу напрямую.
- Подключите базу к хранилищу или выгрузите конфигурацию в Git.
- Включите отладку. В клиент-серверном варианте сервер 1С запускают с ключом
-debug. Для файловой базы отладка работает сразу. - Подключите проверку кода: 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, Git | SonarQube, Vanessa Automation, CI в Docker |
| Интегратор | HTTP-сервисы, OData | Python или C# на стороне внешней системы |
Частые вопросы о языке и средах разработки 1С
Можно ли писать код для 1С на английском?
Нужна ли лицензия, чтобы учиться программировать в 1С?
Чем BSL отличается от «встроенного языка 1С»?
.bsl — расширение файлов модулей при выгрузке в файлы.Заменит ли EDT Конфигуратор полностью?
Можно ли написать внешнюю обработку на Python?
.epf содержит только код на встроенном языке. Python можно вызвать из обработки как внешнюю программу или обратиться к нему по HTTP, но саму обработку пишут на языке 1С.