К статье
Практический материал

Разработка и Конфигурация · 13 мин

Встроенный язык 1С: что это и как с ним работать

Встроенный язык 1С — что это такое, из чего состоит, где пишется код, какие объекты и синтаксис используются. Практическое руководство для начинающих разработчиков 1С.

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

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

Важная особенность — код на встроенном языке исполняется в разных местах системы: на сервере, в толстом или тонком клиенте, в веб-клиенте. От контекста исполнения зависит, какие объекты и операции доступны, и это одна из первых вещей, которую нужно понять начинающему разработчику.

Что такое встроенный язык и какое место он занимает в платформе

Платформа «1С:Предприятие» состоит из трёх уровней: технологическая платформа, конфигурация (прикладное решение) и информационная база с данными. Встроенный язык относится к уровню конфигурации: с его помощью разработчик описывает, как система должна реагировать на действия пользователя и какие вычисления выполнять.

Язык не существует отдельно от платформы: его нельзя скомпилировать в самостоятельную программу или использовать вне «1С:Предприятия». Исполнением кода занимается сама платформа, которая также предоставляет объектную модель — доступ к справочникам, документам, регистрам, запросам и другим сущностям.

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

Из чего состоит язык: основные конструкции

Базовый набор конструкций невелик, и его достаточно для большинства прикладных задач. Переменные объявляются неявно при первом присваивании или явно через ключевое слово Перем. Тип значения определяется динамически: одна и та же переменная может сначала хранить число, а затем строку, хотя злоупотреблять этим не стоит — такой код трудно читать и отлаживать.

Управляющие конструкции стандартны: условный оператор Если ... Тогда ... Иначе ... КонецЕсли;, циклы Для ... Цикл ... КонецЦикла; и Пока ... Цикл ... КонецЦикла;, обход коллекций через Для Каждого ... Из ... Цикл. Подпрограммы оформляются как процедуры (не возвращают значение) и функции (возвращают через оператор Возврат).

bsl
Функция РассчитатьСкидку(СуммаПокупки)
	Если СуммаПокупки >= 100000 Тогда
		Возврат 10;
	ИначеЕсли СуммаПокупки >= 50000 Тогда
		Возврат 5;
	Иначе
		Возврат 0;
	КонецЕсли;
КонецФункции

Обработка ошибок выполняется конструкцией Попытка ... Исключение ... КонецПопытки;. Это важно при работе с внешними ресурсами — файлами, веб-сервисами, COM-объектами, — где сбой является штатной ситуацией, а не исключительным событием.

Модули: где физически хранится и пишется код

Код на встроенном языке не лежит в отдельных файлах проекта — он размещается в модулях, привязанных к объектам конфигурации. Понимание того, какой модуль для чего предназначен, — ключевой навык, потому что от места размещения зависят доступность кода и контекст его исполнения.

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

Типичная ошибка новичка — размещать всю логику в модуле формы. Такой код невозможно вызвать при программном проведении документа или из фонового задания. Правильное место для бизнес-логики — модуль объекта или общий модуль, а форма должна только отображать данные и передавать действия пользователя.

Типичные ошибки
01
Размещение бизнес-логики в модуле формы — она не сработает при программной записи объекта и фоновых операциях
02
Использование серверных вызовов в цикле из клиентского кода — резкое падение производительности из-за множества обращений к серверу
03
Смешение русского и английского синтаксиса в одном модуле — код трудно читать и поддерживать
04
Отсутствие проверки результата запроса на пустоту перед обходом выборки — обращение к несуществующим полям вызывает ошибку

Контекст исполнения: клиент, сервер и директивы компиляции

В клиент-серверной архитектуре один и тот же модуль формы содержит код, который выполняется в разных местах. Чтобы платформа понимала, где исполнять процедуру, используются директивы компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста.

На клиенте доступны интерактивные операции: диалоги, предупреждения, работа с файлами пользователя. На сервере — прямой доступ к данным информационной базы, запросы, запись объектов. Напрямую с клиента обратиться к базе нельзя: нужно вызвать серверную процедуру, которая выполнит операцию и вернёт результат.

Директива &НаСервереБезКонтекста означает, что процедура не имеет доступа к данным формы (реквизитам объекта на форме), зато выполняется быстрее и не требует сериализации состояния формы. Её используют для операций, которым достаточно переданных параметров — например, получить остаток товара по ссылке.

Объектная модель: с чем работает код

Главная ценность встроенного языка — доступ к объектной модели прикладного решения. Разработчик работает не с таблицами базы данных напрямую, а с прикладными сущностями: Справочники.Номенклатура, Документы.РеализацияТоваров, РегистрыНакопления.ОстаткиТоваров.

Для чтения данных чаще всего используется язык запросов — отдельный декларативный язык, похожий на SQL, но оперирующий объектами конфигурации. Результат запроса обходится в цикле, либо выгружается в таблицу значений. Объектная модель (получение объекта, изменение реквизитов, запись) применяется, когда нужно изменить данные с отработкой всех обработчиков событий и проверок.

Способ доступаКогда применятьОграничение
ЗапросЧтение и анализ данных, выборки, отчётыТолько чтение, не вызывает обработчики событий
Объектная модель (ПолучитьОбъект, Записать)Изменение данных с бизнес-логикой и проверкамиМедленнее при массовой обработке
Наборы записей регистровПрямая запись движений, корректировка регистровТребует понимания структуры регистра

Выбор способа влияет и на корректность, и на производительность. Например, для массового пересчёта итогов эффективнее запрос с группировкой, а для записи одного документа с проверками — объектная модель.

Сравнение подходов к данным

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

Подходит для чтения, агрегации и отчётов. Быстро, но не изменяет данные и не вызывает обработчики.

Объектная модель

Подходит для изменения данных с полной бизнес-логикой. Медленнее на массовых операциях.

Метод ПолучитьСсылку / выборки

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

Как начать писать код: практический порядок действий

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

Порядок действий
  1. 1
    Откройте конфигуратор и создайте тестовую информационную базу без данных
  2. 2
    Добавьте простой объект, например справочник «Товары» с реквизитом «Цена»
  3. 3
    Создайте общий модуль и напишите функцию с простым расчётом
  4. 4
    В модуле формы справочника добавьте обработчик события, например заполнение поля по умолчанию при создании
  5. 5
    Запустите отладку (клавиша F5), поставьте точку останова и проверьте выполнение кода по шагам
  6. 6
    Убедитесь, что изменения сохраняются в базе и обработчики срабатывают при интерактивных действиях

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

Контрольные точки

Как проверить результат

Код компилируется
Норма

Модуль сохраняется без сообщений об ошибках синтаксиса

Тревожный признак

Конфигуратор подчёркивает строки и выводит список ошибок в окне сообщений

Обработчик срабатывает
Норма

Точка останова останавливает выполнение при ожидаемом действии

Тревожный признак

Отладчик не останавливается — событие не наступает или код в другом модуле

Данные записываются
Норма

После выполнения объект открывается с новыми значениями

Тревожный признак

Изменения теряются — вероятно, не вызван метод Записать() или запись отменена транзакцией

Ограничения языка и типичные риски

Встроенный язык не предназначен для задач вне учётной системы: на нём не пишут драйверы, игры или высоконагруженные веб-сервисы общего назначения. Многопоточность в классическом виде отсутствует — параллельные вычисления реализуются через фоновые задания, у которых есть свои ограничения по передаче данных и времени выполнения.

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

Ещё одно ограничение — безопасный режим. Код внешних обработок и расширений может исполняться в безопасном режиме, где запрещены операции с файловой системой, COM-объектами и внешними компонентами. Если обработка «работает у разработчика, но не работает у пользователя», часто причина именно в безопасном режиме или в правах доступа.

Маршрут решения

Как выбрать способ доработки

Нужно добавить печатную форму или отчёт без изменения логикиИспользуйте внешнюю обработку или отчёт — конфигурация останется на поддержке
Нужно переопределить поведение типовых процедур или формИспользуйте расширение конфигурации с механизмами «Вместо», «Перед», «После»
Требуется глубокая переработка, недостижимая расширениемСнимайте конфигурацию с полной поддержки осознанно и зафиксируйте порядок ручного переноса доработок при обновлениях

Часто задаваемые вопросы

Нужно ли знать другой язык программирования, чтобы освоить встроенный язык 1С?

Нет, это не обязательно. Встроенный язык часто становится первым языком для бухгалтеров, внедренцев и аналитиков. Базовые конструкции — условия, циклы, процедуры — осваиваются на практике за несколько недель. Знание любого другого языка ускоряет обучение, но не является предварительным условием.

Можно ли писать код 1С на английском языке?

Да, платформа поддерживает английский вариант синтаксиса: If вместо Если, Procedure вместо Процедура и так далее. Однако в русскоязычных проектах и типовых конфигурациях принят русский синтаксис, и смешивать варианты в одном решении не рекомендуется — это затрудняет чтение и сопровождение.

Чем встроенный язык отличается от языка запросов 1С?

Это два разных языка с разным назначением. Встроенный язык — процедурный, описывает алгоритмы и логику. Язык запросов — декларативный, описывает, какие данные нужно получить из базы, и используется только для чтения. В типовом коде они работают вместе: запрос выбирает данные, а встроенный язык обрабатывает результат.

Где выполняется код внешней обработки, открытой пользователем?

По умолчанию — на клиенте, в контексте сеанса пользователя, часто в безопасном режиме. Если обработке нужен доступ к данным базы или привилегированные операции, внутри неё создают серверные вызовы через общие модули либо используют механизм дополнительных отчётов и обработок с настройкой разрешений.

Почему процедура из общего модуля недоступна в другом месте конфигурации?

Наиболее вероятные причины: у процедуры нет ключевого слова Экспорт, у общего модуля не установлены нужные флажки контекста (Клиент, Сервер) или включён флаг «Привилегированный режим» там, где он не нужен. Проверьте свойства модуля и сигнатуру процедуры.

Что изучать после освоения базового синтаксиса?

Логичный следующий шаг — язык запросов и система компоновки данных (СКД), затем механизмы проведения документов и движений по регистрам. Далее — управляемые формы, фоновые задания и расширения конфигурации. Такой порядок соответствует реальным задачам доработки типовых решений.

Итог

Что важно запомнить

Встроенный язык 1С — предметно-ориентированный язык внутри платформы, на котором описывается вся логика конфигурации. Код размещается в модулях, исполняется на клиенте или сервере и работает с прикладными объектами. Ключевые навыки — правильный выбор модуля и контекста, разделение клиентского и серверного кода, работа с запросами и тестирование на копии базы.