Разработка и Конфигурация · 13 мин
На чём пишется 1С: язык, платформа и инструменты разработки
Разбираемся, на чём пишется 1С: встроенный язык конфигуратора, технологическая платформа, внешние компоненты и расширения. Примеры кода и советы для начинающих разработчиков.
1С пишется не на одном языке, а в виде многоуровневой системы. Ядро платформы разработано вендором на C++, а прикладная логика — бухгалтерский учёт, расчёт зарплаты, складские операции — создаётся на встроенном языке 1С, который часто называют «языком 1С» или «бсляшкой» (от BSL — 1C:Enterprise script). Именно на встроенном языке работают прикладные разработчики, дорабатывающие типовые конфигурации и создающие собственные решения.
Встроенный язык 1С — предметно-ориентированный язык высокого уровня с динамической типизацией. Его ключевая особенность — двуязычный синтаксис: операторы, ключевые слова и встроенные функции доступны как на русском, так и на английском. Код пишется не в отдельной среде программирования, а внутри конфигуратора — специального инструмента разработки, входящего в состав платформы.
Помимо встроенного языка, в экосистеме 1С используются язык запросов (похожий на SQL), язык выражений компоновки данных для отчётов на СКД, а также внешние компоненты на C++, C# или Java для задач, которые платформа не решает штатно. Ниже разберём каждый уровень подробно.
Что такое встроенный язык 1С и где он применяется
Встроенный язык — это интерпретируемый язык, исполняемый платформой 1С:Предприятие. Он не компилируется в машинный код: текст модуля платформа разбирает и выполняет сама. Благодаря этому изменения в коде вступают в силу сразу после обновления конфигурации, без отдельной сборки проекта.
Код размещается в модулях, которые жёстко привязаны к объектам конфигурации: модули форм, модули объектов (справочников, документов), общие модули, модуль приложения, модули менеджеров и команд. Такая структура заставляет разработчика мыслить не файлами, а прикладными сущностями — документом «Реализация товаров», регистром «Остатки номенклатуры» и так далее.
Типовые задачи, решаемые на встроенном языке: проведение документов и формирование движений по регистрам, расчёт итогов, обработка данных форм, обмен данными с внешними системами через HTTP и файлы, фоновые задания и регламентные операции.
Как выглядит код на встроенном языке
Синтаксис встроенного языка по структуре напоминает классические процедурные языки: есть процедуры и функции, условные операторы, циклы, обработка исключений через «Попытка — Исключение». Типизация динамическая — тип переменной определяется значением в момент присваивания.
Пример простой функции на русском синтаксисе, рассчитывающей сумму с НДС:
Функция СуммаСНДС(Сумма, СтавкаНДС) Экспорт
Если СтавкаНДС = 0 Тогда
Возврат Сумма;
КонецЕсли;
Возврат Сумма + Сумма * СтавкаНДС / 100;
КонецФункции
Тот же код можно записать английскими ключевыми словами: Function, If, Return, EndIf. Смешивать языки в одном модуле технически возможно, но на практике считается плохим стилем. В типовых российских конфигурациях используется русский синтаксис, в международных проектах и при разработке расширений для контура EDT чаще встречается английский.
На чём написана сама платформа 1С
Технологическая платформа 1С:Предприятие — сервер приложений, клиентские приложения, СУБД-взаимодействие — разработана фирмой «1С» преимущественно на C++. Исходный код платформы закрыт, и прикладной разработчик не может его изменить: доступна только работа с объектной моделью через встроенный язык и механизм расширений.
Платформа работает на Windows и Linux, клиентские приложения существуют также для macOS, а тонкий и веб-клиент позволяют работать через браузер. В качестве серверной СУБД обычно используются PostgreSQL (в том числе вариант, адаптированный вендором), Microsoft SQL Server, Oracle Database или IBM Db2; файловый режим подходит для небольших внедрений.
Понимание этого разделения важно практически: если задача упирается в ограничения платформы (например, нужна специфическая криптография или работа с нестандартным оборудованием), её не решить встроенным языком — потребуется внешняя компонента или интеграция через внешний сервис.
Язык запросов и система компоновки данных
Второй обязательный «язык» в арсенале разработчика 1С — язык запросов. Он декларативный и синтаксически похож на SQL, но работает не с таблицами базы данных напрямую, а с объектами метаданных: справочниками, документами, регистрами. Платформа сама транслирует запрос в диалект используемой СУБД.
Запросы пишутся прямо в тексте модуля как строковый литерал и выполняются через объект Запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 0";
Результат = Запрос.Выполнить().Выгрузить();
Для отчётов поверх запросов используется система компоновки данных (СКД) — механизм, где структура отчёта, группировки, отборы и оформление описываются декларативно, а платформа сама формирует итоговый запрос и выводит результат. Большинство отчётов в типовых конфигурациях построено именно на СКД, поэтому умение читать её настройки — базовый навык при доработке отчётности.
Расширения, внешние компоненты и смежные технологии
Когда типовую конфигурацию нужно доработать, не снимая её с поддержки, применяются расширения конфигурации. Расширение пишется на том же встроенном языке в том же конфигураторе, но хранится отдельно и накладывается на типовую конфигурацию при запуске. Это основной рекомендуемый способ доработки типовых решений.
Для задач за пределами возможностей платформы существует технология внешних компонент (Native API). Компоненты пишут на C++, реже на C# или Java, упаковывают в zip-архив по заданной структуре и подключают из кода 1С. Так реализуют, например, работу со сканерами штрихкодов, криптографию или специализированные протоколы обмена.
Также вокруг 1С сложилась экосистема смежных инструментов: OneScript — открытый интерпретатор языка, совместимого со встроенным языком 1С, для скриптов автоматизации и DevOps-задач; 1C:Enterprise Development Tools (EDT) — среда разработки на базе Eclipse с поддержкой Git и статического анализа; технология Apache Kafka и HTTP-сервисы платформы — для интеграций.
Где какой инструмент применять
Основной вариант для прикладной логики: документы, регистры, обработки, доработка типовых конфигураций. Ограничение — только возможности платформы.
Выборка данных и отчёты. Не заменяет прикладной код, а дополняет его; сложную логику в запросе реализовать нельзя.
Доработка типовой конфигурации без снятия с поддержки. Ограничение — не все объекты и места кода можно переопределить.
Оборудование, криптография, специфические протоколы. Требует навыков системного программирования и тестирования на всех целевых платформах.
Автоматизация сборки, тестирование, CI/CD и командная разработка с Git. Не заменяют конфигуратор для отладки прикладного кода.
Как начать писать на встроенном языке: порядок действий
Для старта достаточно учебной версии платформы, которую вендор распространяет бесплатно: она позволяет создавать конфигурации и писать код, но имеет ограничения на коммерческое использование и объём данных. Устанавливается платформа стандартным инсталлятором, после чего в конфигураторе создаётся пустая конфигурация.
Дальнейший путь обычно выглядит так: создание первых объектов метаданных (справочник, документ, регистр), написание обработчиков проведения, построение отчёта на СКД, затем знакомство с управляемыми формами и клиент-серверным взаимодействием. Последний этап — самый сложный для новичков: код делится на серверный и клиентский контексты, и между ними действуют ограничения на передачу данных.
- 1Установите учебную версию платформы 1С:Предприятие и запустите конфигуратор
- 2Создайте пустую конфигурацию и добавьте справочник и документ
- 3Напишите обработчик проведения документа с движениями по регистру
- 4Постройте отчёт на СКД по данным регистра
- 5Разберитесь с директивами компиляции: НаКлиенте, НаСервере, НаСервереБезКонтекста
- 6Проверьте работу в режиме предприятия и через отладчик конфигуратора
Частые ошибки начинающих разработчиков
Самая распространённая ошибка — выполнение запросов в цикле. Начинающий разработчик обращается к базе за данными на каждой итерации вместо одного запроса с соединением таблиц, и обработка, которая могла бы отработать за секунды, работает минутами. Второй типичный просчёт — игнорирование разделения контекстов: попытка вызвать серверную функцию из клиентского кода без директивы &НаСервере или передать на клиента мутабельные объекты вроде ДанныеФормы.
Третья группа ошибок связана с транзакциями и блокировками: длительные транзакции при проведении документов, чтение данных без учёта изоляции, отсутствие обработки исключений при обмене с внешними системами. Эти проблемы проявляются только под нагрузкой в рабочей базе, поэтому код стоит проверять не только функционально, но и на многопользовательском сценарии.
Как проверить корректность написанного кода
Базовая проверка выполняется штатными средствами конфигуратора: синтаксический контроль модулей (команда «Проверка конфигурации») выявляет ошибки компиляции, обращения к несуществующим объектам и нарушения контекстов. Отладчик позволяет ставить точки останова, смотреть значения переменных и пошагово проходить код, включая серверные вызовы.
Для более глубокого контроля применяется расширенная проверка конфигурации с анализом прав доступа и устаревших методов, а в командной разработке — статический анализ через EDT и проверки по стандартам разработки, которые вендор публикует открыто. Перед переносом доработки в рабочую базу обязательно тестирование на копии: восстановление из резервной копии после неудачного обновления — единственный надёжный способ отката.
Как проверить результат
Ошибок и предупреждений нет, все контексты определены корректно
Сообщения о недоступности методов или неопределённых переменных
Документ проводится, движения по регистрам соответствуют ожиданиям
Ошибки выполнения, пустые или дублирующиеся движения
Параллельное проведение не вызывает конфликтов блокировок
Ошибки превышения времени ожидания блокировки
Обновление проходит без ошибок, данные на месте
Ошибки реструктуризации, потеря данных — откатывайтесь на копию
FAQ
Можно ли писать для 1С на Python или JavaScript?
Напрямую внутри платформы — нет: прикладной код исполняется только на встроенном языке. Однако внешние сервисы на любом языке могут взаимодействовать с 1С через HTTP-сервисы, веб-сервисы или планы обмена, поэтому интеграционная логика часто выносится вовне.
Чем отличается конфигуратор от EDT?
Конфигуратор — штатный инструмент платформы, где ведётся большинство разработки и отладка. EDT — среда на базе Eclipse с поддержкой Git, статического анализа и проектной модели хранения. Конфигурации можно переносить между ними через формат выгрузки, но для отладки прикладного кода конфигуратор остаётся основным инструментом.
Нужно ли знать SQL для разработки в 1С?
Прямой доступ к СУБД запросами SQL не используется — вместо этого применяется собственный язык запросов платформы. Однако понимание принципов SQL (соединения, группировки, индексы) существенно помогает писать эффективные запросы и разбираться в планах выполнения на стороне СУБД.
Сложно ли выучить встроенный язык 1С программисту с опытом?
Сам синтаксис осваивается быстро — это простой процедурный язык. Основное время уходит на изучение объектной модели платформы: документы, регистры, проведение, управляемые формы, разделение клиентского и серверного контекстов. Именно платформа, а не язык, составляет главный порог входа.
Что такое OneScript и зачем он нужен?
OneScript — независимый открытый интерпретатор языка, синтаксически совместимого со встроенным языком 1С. Он работает вне платформы и применяется для автоматизации: скрипты выгрузки конфигураций, запуск тестов, сборка поставок, интеграция с CI/CD. Прикладную логику базы на нём не пишут.
Можно ли изменить типовую конфигурацию, не снимая её с поддержки?
Да, для этого созданы расширения конфигурации: код и изменённые объекты хранятся отдельно от типовой конфигурации и накладываются на неё при запуске. Это позволяет обновлять типовое решение штатно, сохраняя свои доработки, хотя не все места типовой конфигурации можно переопределить через расширение.
Что важно запомнить
Прикладная разработка в 1С ведётся на встроенном языке платформы внутри конфигуратора; для данных и отчётов используются язык запросов и СКД, для доработки типовых решений — расширения, а для выхода за пределы платформы — внешние компоненты на C++ или C#. Сама платформа написана вендором на C++ и закрыта для изменения. Перед любыми доработками рабочей базы делайте резервную копию и проверяйте код на тестовой среде.