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

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

Что такое встроенный язык 1С:Предприятие

Встроенный язык 1С:Предприятие: назначение, синтаксис, отличия от внешних языков, где исполняется код, типичные ошибки новичков и примеры практического применения.

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

Главная особенность языка — его ориентация на бизнес-задачи. Разработчик оперирует не низкоуровневыми конструкциями, а прикладными сущностями: документами, справочниками, регистрами, перечислениями. Запрос к базе данных, запись объекта, обход табличной части — всё это делается встроенными средствами без ручной работы с SQL или файловой системой.

Язык поддерживает русскоязычный и англоязычный синтаксис, причём их можно смешивать в одном модуле. На практике в типовых конфигурациях преобладает русский вариант, поэтому порог входа для специалистов без классического программистского образования заметно ниже, чем у универсальных языков.

Для чего нужен встроенный язык и где он применяется

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

Типичные сценарии использования языка:

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

Основные характеристики языка

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

Ключевые черты языка:

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

Язык не поддерживает классическое объектно-ориентированное программирование с наследованием и полиморфизмом в привычном виде. Вместо этого платформа предоставляет готовые объектные типы (ДокументОбъект, СправочникСсылка и т.д.), поведение которых расширяется через обработчики событий и общие модули.

Где исполняется код: клиент и сервер

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

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

Общие модули настраиваются флагами «Сервер», «Клиент», «Вызов сервера». Модуль с включённым флагом «Вызов сервера» можно вызывать из клиентского кода — платформа сама передаст вызов на сервер. Это стандартный способ получить данные в управляемой форме.

1c
&НаСервере
Функция ПолучитьОстаток(Номенклатура)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Остатки.КоличествоОстаток ИЗ РегистрНакопления.Товары.Остатки(, Номенклатура = &Номенклатура) КАК Остатки";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.КоличествоОстаток;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции

Как выглядит типичный код: пример обработчика

Классическая задача — проверить заполнение документа перед записью. Код размещается в модуле объекта документа в обработчике ПередЗаписью:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Товары.Количество() = 0 Тогда

Отказ = Истина;

Сообщить("Не заполнена табличная часть ""Товары"".");

КонецЕсли;

КонецПроцедуры

Здесь видно несколько характерных приёмов: параметр Отказ управляет дальнейшим выполнением операции (установка в Истина отменяет запись), обращение к табличной части идёт как к коллекции, а сообщение пользователю выводится через встроенный оператор. Аналогичная структура используется в большинстве проверок и валидаций.

Как написать первый обработчик
  1. 1
    Откройте конфигуратор и найдите нужный объект в дереве конфигурации
  2. 2
    Откройте модуль объекта или модуль формы через контекстное меню
  3. 3
    Выберите событие из списка — платформа создаст заготовку процедуры
  4. 4
    Напишите код проверки или расчёта внутри процедуры
  5. 5
    Запустите отладку (F5) и проверьте поведение на тестовых данных

Чем встроенный язык отличается от внешних языков

Сравнение помогает понять границы применимости языка и не ждать от него того, для чего он не предназначен.

КритерийВстроенный язык 1СУниверсальные языки (C#, Java, Python)
Среда исполненияТолько внутри платформы 1СЛюбая ОС и среда выполнения
Предметная областьУчётные и бизнес-задачиУниверсальное применение
ТипизацияДинамическаяЧаще статическая (у Python — динамическая)
Работа с БДЯзык запросов 1С, объектная модельSQL, ORM по выбору разработчика
ООПОграничено, объектные типы задаёт платформаПолноценные классы и наследование

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

Когда какой инструмент выбирать

Встроенный язык

Любая логика внутри конфигурации: проведение, расчёты, проверки, отчёты. Единственный вариант для изменения поведения объектов 1С.

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

Выборка и агрегация данных из базы. Не изменяет данные, только читает.

Внешние языки и сервисы

Интеграции, веб-приложения, задачи вне платформы. Связь с 1С через HTTP, COM или обмен файлами.

Типичные ошибки начинающих разработчиков

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

Типичные ошибки
01
Обращение к базе данных из клиентского контекста — запросы и запись объектов выполняются только на сервере; код на клиенте выдаст ошибку исполнения
02
Запросы внутри цикла — обращение к базе на каждой итерации резко замедляет работу; данные нужно выбирать одним запросом и обходить в памяти
03
Изменение типовых модулей вместо расширений — прямая правка типовой конфигурации усложняет обновления; используйте механизм расширений
04
Игнорирование параметра Отказ в обработчиках — сообщение об ошибке без установки Отказ не отменяет операцию, и документ записывается некорректно
05
Хранение промежуточных данных в реквизитах формы без необходимости — это увеличивает объём передаваемых между клиентом и сервером данных

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

Как проверить, что код работает правильно

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

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

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

Выполнение обработчика
Норма

Точка останова срабатывает, код проходит без исключений

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

Обработчик не вызывается — проверьте, в том ли модуле написан код и не отключён ли режим совместимости

Корректность данных
Норма

После проведения документа движения в регистрах соответствуют ожидаемым

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

Движения отсутствуют или суммы расходятся — проверяйте логику заполнения наборов записей

Производительность
Норма

Операция выполняется без заметной задержки на типовом объёме данных

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

Длительное выполнение — ищите запросы в цикле и обращения к серверу в клиентском цикле

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

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

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

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

Можно ли писать код на английском синтаксисе?

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

Где хранится код на встроенном языке?

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

Можно ли выполнить код 1С вне платформы?

Нет, встроенный язык исполняется только средой 1С:Предприятие. Для задач вне платформы существуют отдельные инструменты, а взаимодействие с внешними системами организуется через HTTP-сервисы, веб-сервисы, COM-соединение или файловый обмен.

Что такое расширение конфигурации и зачем оно нужно?

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

Чем отличаются директивы &НаСервере и &НаСервереБезКонтекста?

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

Итог

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

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