Система 1С:Предприятие давно перестала быть просто бухгалтерским ПО — сегодня это мощная платформа для автоматизации бизнес-процессов любого масштаба. Но чтобы адаптировать её под специфические задачи компании, требуется программирование. А вот здесь у новичков часто возникает вопрос: на чем вообще пишут код для 1С?
Ответ не так однозначен, как может показаться. Да, у платформы есть собственный встроенный язык, но современные разработчики активно используют и внешние инструменты — от специализированных редакторов до полноценных IDE. В этой статье мы разберём все актуальные способы программирования в экосистеме 1С: от классического подхода до передовых практик с применением Git, Docker и даже Python.
Важно понимать, что выбор инструмента зависит от задачи. Для простой доработки конфигурации хватит стандартных средств, а для сложных интеграций или командной работы потребуются внешние решения. Мы не будем убеждать вас в превосходстве одного метода над другим — вместо этого покажем реальные кейсы, где каждый подход оправдан.
1. Встроенный язык 1С: основа всего
Начнём с базы: встроенный язык программирования 1С (часто называемый просто "язык 1С" или "1С:Язык"). Это проприетарный язык, разработанный специально для платформы 1С:Предприятие. Он используется для:
- 📝 написания обработок и отчётов
- 🔧 модификации типовых конфигураций (Бухгалтерия, ЗУП, УТ и др.)
- 🤖 автоматизации бизнес-процессов
- 🔄 интеграции с другими системами через
HTTPЗапрос,COMОбъекти т.д.
Синтаксис языка напоминает Pascal или Basic, но с уникальными конструкциями для работы с объектами 1С. Например, обращение к справочнику выглядит так:
Справочник = Справочники.Номенклатура;
Элемент = Справочник.НайтиПоНаименованию("Ноутбук");
Главное преимущество встроенного языка — полная интеграция с платформой. Вы можете:
- 🔹 напрямую работать с метаданными конфигурации
- 🔹 использовать встроенные объекты (
Документ,Справочник,РегистрСведений) - 🔹 отлаживать код прямо в конфигураторе с пошаговым выполнением
⚠️ Внимание: Встроенный язык не подходит для задач, требующих высокой производительности вычислений (например, сложные математические расчёты). В таких случаях лучше использовать внешние компоненты на C++ или C#.
2. Конфигуратор 1С: основной инструмент разработчика
Конфигуратор — это среда разработки, поставляемая вместе с платформой 1С:Предприятие. Именно здесь происходит:
- 📁 редактирование структуры базы данных (справочники, документы, регистры)
- 💻 написание и отладка кода на встроенном языке
- 🔍 анализ производительности запросов
- 📊 создание форм и отчётов
Интерфейс конфигуратора разделён на несколько ключевых областей:
| Область | Назначение |
|---|---|
| Дерево метаданных | Иерархический список всех объектов конфигурации (справочники, документы, отчёты и т.д.) |
| Панель свойств | Настройка параметров выбранного объекта (например, длины поля или типа данных) |
| Редактор модулей | Написание и редактирование программного кода |
| Окно сообщений | Вывод отладочной информации и ошибок |
| Инспектор переменных | Просмотр значений переменных во время отладки |
Конфигуратор позволяет работать в двух основных режимах:
- Режим "1С:Предприятие" — для тестирования изменений в пользовательском интерфейсе.
- Режим "Конфигуратор" — для редактирования структуры и кода.
Для ускорения работы используйте горячие клавиши:
- 🔘
F5— запуск отладки - 🔘
F7— пошаговое выполнение кода - 🔘
Ctrl+Shift+F— глобальный поиск по текстам модулей - 🔘
Alt+F12— открытие списка процедур и функций текущего модуля
⚠️ Внимание: При работе в конфигураторе всегда делайте резервные копии перед массовыми изменениями. Ошибка в коде может привести к невозможности открытия базы! Используйте команду Файл → Сохранить данные конфигурации в файл... для создания бекапа.
3. Внешние редакторы кода: когда конфигуратора недостаточно
Хотя конфигуратор покрывает большинство задач, многие разработчики предпочитают использовать внешние редакторы кода для:
- 🔄 работы с системой контроля версий (Git, SVN)
- 📁 одновременного редактирования нескольких файлов
- 🔍 продвинутого поиска и замены по регулярным выражениям
- 🎨 кастомизации интерфейса (тем, шрифтов, плагинов)
Самые популярные инструменты среди 1С-разработчиков:
| Редактор | Преимущества | Недостатки |
|---|---|---|
| VS Code + расширение 1C Syntax | Бесплатный, кросс-платформенный, поддержка Git, множество плагинов | Требует настройки, нет встроенной отладки |
| Sublime Text + 1C (BSL) Language | Высокая скорость работы, удобный поиск по файлам | Платная лицензия, ограниченная поддержка 1С-синтаксиса |
| Notepad++ с подсветкой синтаксиса | Лёгкий, не требует установки, подходит для быстрых правок | Минимальный функционал для 1С, нет интеграции с платформой |
| 1C:EDT (Eclipse Development Tools) | Официальный инструмент от 1С, поддержка командной работы, интеграция с Git | Тяжёлый, сложный для новичков, платный |
Для работы с внешними редакторами необходимо экспортировать тексты модулей из конфигуратора. Это можно сделать:
- Через меню
Файл → Сохранить тексты модулей во внешние файлы... - Используя утилиту 1C:Enterprise Development Tools (EDT).
- С помощью сторонних инструментов вроде OneScript или Vanessa-ADD.
Для удобной работы в VS Code установите расширения 1C Syntax (для подсветки кода) и BSL Language Server (для автодополнения и проверки ошибок).
4. Системы контроля версий: Git для 1С
До недавнего времени контроль версий в мире 1С ассоциировался разве что с 1C:Хранилище конфигураций — встроенным решением от разработчика платформы. Однако с ростом сложности проектов и переходом на командную разработку Git стал неотъемлемой частью процесса.
Основные преимущества использования Git для 1С:
- 🔄 возможность отката к любой версии кода
- 👥 параллельная работа нескольких разработчиков
- 📊 визуализация истории изменений
- 🔗 интеграция с системами сборки (Jenkins, GitLab CI)
Но здесь есть нюансы: стандартный формат хранения конфигурации 1С (.cf, .epf) не предназначен для текстового сравнения. Поэтому используют:
- 📁 Выгрузку текстов модулей в отдельные файлы (
.bsl,.os) - 📁 Формат DT (Design Time) — структурированное представление метаданных в JSON
- 📁 Утилиты конвертации вроде v8unpack или 1C:EDT
Пример типичного рабочего процесса с Git:
- Экспортируем тексты модулей из конфигуратора в папку проекта.
- Редактируем файлы во внешнем редакторе (VS Code, Sublime Text).
- Коммитим изменения в репозиторий.
- После согласования импортируем изменения обратно в конфигуратор.
⚠️ Внимание: При работе с Git в 1С никогда не коммитьте бинарные файлы конфигурации (.cf,.epf,.erf). Они не предназначены для слияния и приведут к конфликтам. Используйте только текстовые форматы!
Создать репозиторий на GitHub/GitLab|Экспортировать тексты модулей в папку проекта|Настроить .gitignore (исключить .cf, .epf)|Установить расширение для синтаксиса BSL|Создать ветку для новой функциональности-->
5. Автоматизация и тестирование: OneScript и Vanessa-ADD
Для комплексного тестирования и автоматизации рутинных задач в экосистеме 1С появились специализированные инструменты:
OneScript — это открытый язык программирования, совместимый с синтаксисом 1С, но выполняемый вне платформы. Он позволяет:
- 🧪 писать автоматизированные тесты
- 🔄 обрабатывать данные без запуска 1С
- 📊 генерировать отчёты в фоновом режиме
- 🔧 создавать утилиты для администрирования баз
Пример скрипта на OneScript для выгрузки данных в Excel:
ПодключитьБиблиотеку("OneScript.Excel");
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Цена");
Для Каждого Товар Из Справочники.Номенклатура Цикл
Строки = Таблица.Добавить();
Строки.Товар = Товар.Наименование;
Строки.Цена = Товар.Цена;
КонецЦикла;
Excel = Новый ExcelДокумент;
Excel.ВывестиТаблицу(Таблица);
Excel.СохранитьКак("Цены.xlsx");
Vanessa-ADD — это фреймворк для автоматизированного тестирования 1С-приложений. С его помощью можно:
- 📝 создавать тестовые сценарии на языке 1С
- 🔍 проверять корректность работы форм и отчётов
- 📊 генерировать отчёты о покрытии тестами
- 🔄 интегрироваться с системами CI/CD
Пример теста в Vanessa-ADD:
Процедура ПроверитьСозданиеДокумента()
// Arrange
ТестовыйКлиент = Новый КлиентVanessaADD();
ТестовыйКлиент.ПодключитьсяКБазе("File=D:\Bases\Test");
// Act
Документ = ТестовыйКлиент.СоздатьДокумент("ЗаказПокупателя");
Документ.Контрагент = ТестовыйКлиент.НайтиСправочникЗначение("Контрагенты", "ООО Ромашка");
Документ.Записать();
// Assert
Если Документ.Проведен() Тогда
Vanessa.ДобавитьОшибку("Документ не должен проводиться автоматически!");
КонецЕсли;
КонецПроцедуры
Зачем нужны тесты в 1С?
Автоматизированные тесты позволяют:
1. Уменьшить количество багов при доработках.
2. Ускорить регрессионное тестирование после обновлений платформы.
3. Документировать ожидаемое поведение системы.
4. Безопасно рефакторить устаревший код.
6. Интеграция с другими языками: Python, C#, JavaScript
В некоторых случаях возможностей встроенного языка 1С недостаточно. Тогда на помощь приходят внешние компоненты и интеграция с другими языками программирования.
Самые востребованные сценарии:
- 🐍 Python — для анализа данных (Pandas), машинного обучения (scikit-learn), работы с API.
- 🖥️ C# — для высоконагруженных вычислений или создания десктопных утилит.
- 🌐 JavaScript — для взаимодействия с веб-сервисами или разработки фронтенда.
Пример вызова Python-скрипта из 1С:
ПутьКPython = "C:\Python39\python.exe";
ПутьКСкрипту = "C:\Scripts\process_data.py";
Команда = """" + ПутьКPython + """ """ + ПутьКСкрипту + """ """" + Параметры + """";
Результат = ВыполнитьКомандуСистемы(Команда);
// Обработка результата
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Сообщить("Ошибка выполнения скрипта!");
Иначе
Данные = Новый Структура();
Данные.Вставить("Результат", Результат);
КонецЕсли;
Для интеграции с C# часто используют COM-объекты или HTTP-сервисы. Пример создания COM-объекта в 1С:
Попытка
COMОбъект = Новый COMОбъект("MyCustomLibrary.Calculator");
Результат = COMОбъект.Sum(10, 20);
Сообщить("Результат: " + Результат);
Исключение
Сообщить("Ошибка при создании COM-объекта: " + ОписаниеОшибки());
КонецПопытки;
Для работы с JavaScript актуальны два подхода:
- Встраивание скриптов в HTML-формы 1С (например, для кастомизации интерфейса).
- Вызов внешних JS-библиотек через
HTTPЗапросили Node.js.
⚠️ Внимание: При интеграции с внешними языками учитывайте ограничения платформы 1С. Например, в тонком клиенте и веб-клиенте недоступны некоторые функции работы с файловой системой, что может усложнить взаимодействие с внешними скриптами.
7. Современные подходы: Docker, CI/CD, облачные решения
С развитием DevOps-практик в мире 1С появились инструменты для автоматизации развёртывания и непрерывной интеграции:
Docker позволяет создавать изолированные контейнеры с предустановленной платформой 1С. Это удобно для:
- 🐳 быстрого развёртывания тестовых сред
- 🔄 обеспечения одинаковой среды для всех разработчиков
- 📦 упаковки решений для клиентов
Пример Dockerfile для 1С:
FROM ubuntu:20.04
Установка зависимостей
RUN apt-get update && apt-get install -y \
wine \
ttf-mscorefonts-installer \
&& rm -rf /var/lib/apt/lists/*
Копирование дистрибутива 1С
COPY 1Cv8.x86_64.tar.gz /opt/
RUN tar -xzf /opt/1Cv8.x86_64.tar.gz -C /opt/
Настройка окружения
ENV WINEPREFIX=/opt/1Cv8/wineprefix
ENV WINEARCH=win64
Запуск платформы
CMD wine /opt/1Cv8/8.3.20.1503/bin/1cv8.exe
CI/CD (Continuous Integration/Continuous Delivery) в 1С реализуется через:
- 🔄 GitLab CI или GitHub Actions для автоматической сборки
- 📦 Jenkins для развёртывания на тестовые и боевые серверы
- 🧪 SonarQube для анализа качества кода
Облачные решения (например, 1C:Fresh или 1C:Gile) позволяют:
- ☁️ разрабатывать и тестировать конфигурации прямо в браузере
- 👥 организовывать совместную работу над проектом
- 🔒 автоматически создавать резервные копии
Использование Docker и CI/CD в 1С сокращает время на развёртывание новых версий и уменьшает количество ошибок при обновлениях.
8. Какой инструмент выбрать: рекомендации для разных задач
Выбор инструмента зависит от сложности задачи, опыта команды и требований к проекту. Вот наши рекомендации:
| Задача | Рекомендуемый инструмент | Альтернатива |
|---|---|---|
| Простая доработка типовой конфигурации | Встроенный язык + Конфигуратор | VS Code с плагином 1C Syntax |
| Командная разработка | 1C:EDT + Git | VS Code + OneScript + Git |
| Автоматизированное тестирование | Vanessa-ADD | OneScript + собственные скрипты |
| Интеграция с внешними системами | HTTP-сервисы + Python/C# | COM-объекты (для Windows) |
| Высоконагруженные вычисления | Внешние компоненты на C#/C++ | Оптимизация запросов в 1С |
Для новичков оптимальный старт:
- Освойте встроенный язык и конфигуратор.
- Научитесь работать с запросами и отчётами.
- Изучите основы Git для контроля версий.
- Попробуйте VS Code для удобного редактирования кода.
Для опытных разработчиков актуальны:
- 🔹 1C:EDT для сложных проектов
- 🔹 Vanessa-ADD для тестирования
- 🔹 Docker для изолированных сред
- 🔹 CI/CD для автоматизации сборок
Не бойтесь экспериментировать! Например, комбинация VS Code + Git + OneScript может оказаться продуктивнее, чем классический конфигуратор, особенно если вы привыкли к современным инструментам разработки.
Если вы только начинаете, начните с простых задач в конфигураторе, а затем постепенно осваивайте внешние инструменты. Не пытайтесь сразу использовать всё и сразу — это приведёт к путанице.
FAQ: Частые вопросы о программировании в 1С
Можно ли программировать в 1С без знания встроенного языка?
Технически да, но это сильно ограничит ваши возможности. Внешние инструменты (Python, C#) могут помочь с интеграцией или вычислениями, но основная логика бизнес-процессов всё равно пишется на встроенном языке. Без его знания вы не сможете:
- 🔹 модифицировать типовые конфигурации
- 🔹 создавать новые документы или справочники
- 🔹 писать обработки и отчёты
Рекомендуем начать именно со встроенного языка, а затем расширять инструментарий.
Какой редактор кода лучше для 1С: VS Code или 1C:EDT?
Это зависит от задачи:
- 🔹 VS Code подойдёт, если вам нужна лёгкость, бесплатность и интеграция с Git. Он отлично справляется с редактированием кода, но не имеет встроенных средств для работы с метаданными.
- 🔹 1C:EDT — официальный инструмент от 1С, который поддерживает полный цикл разработки, включая редактирование метаданных, отладку и работу с хранилищем. Однако он тяжёлый и платный.
Для большинства задач VS Code будет достаточным, а 1C:EDT оправдан для крупных командных проектов.
Нужно ли использовать Git для 1С, если я работаю один?
Даже в одиночной разработке Git принесёт пользу:
- 🔹 Вы сможете откатываться к предыдущим версиям кода, если что-то пойдёт не так.
- 🔹 Удобно отслеживать изменения между версиями.
- 🔹 Можно экспериментировать в отдельных ветках, не боясь сломать основную версию.
- 🔹 Легче переносить код между разными проектами.
Минимальная настройка Git для 1С занимает не более часа, но сэкономит вам десятки часов в будущем.
Можно ли писать мобильные приложения для 1С?
Да, но с оговорками. Платформа 1С поддерживает:
- 📱 Мобильное приложение "1С:Предприятие" — работает на Android и iOS, но имеет ограниченный функционал по сравнению с десктопной версией.
- 🌐 Веб-клиент — адаптивный интерфейс, который можно открывать в браузере мобильного устройства.
Для создания полноценных нативных мобильных приложений с интеграцией с 1С обычно используют:
- 🔹 REST API платформы 1С (пublikacija na веб-сервере)
- 🔹 Внешние бэкенды на Python/Node.js, которые взаимодействуют с 1С через
HTTPЗапросилиCOMОбъект.
Пример: вы можете написать мобильное приложение на Flutter или React Native, которое будет общаться с 1С через REST-сервис.
Как обмениваться данными между 1С и другими системами?
Существует несколько способов:
- Файловый обмен (например, через
XML,JSON,Excel). Просто, но требует ручного контроля. - HTTP-сервисы (REST/SOAP). Современный и гибкий способ, поддерживаемый платформой 1С начиная с версии 8.3.6.
- Прямое подключение к базе через
ODBCилиOLE DB. Быстро, но небезопасно. - Обмен через промежуточную базу (например, PostgreSQL или MS SQL). Надёжно, но требует дополнительной инфраструктуры.
- Использование message broker (RabbitMQ, Kafka). Оптимально для высоконагруженных систем.
Пример кода для отправки HTTP-запроса из 1С:
Запрос = Новый HTTPЗапрос("https://api.example.com/data");
Запрос.УстановитьТелоИзСтроки(JSONЗаписать(ДанныеДляОтправки));
Ответ = Новый HTTPСоединение("api.example.com", 443,,, Новый ЗащищенноеСоединениеOpenSSL());
Ответ.ОтправитьДляОбработки(Запрос);
Результат = Ответ.ПолучитьТелоКакСтроку();