Разработка и Конфигурация · 11 мин
Что такое встроенный язык 1С:Предприятие
Встроенный язык 1С:Предприятие: назначение, синтаксис, отличия от внешних языков, где исполняется код, типичные ошибки новичков и примеры практического применения.
Встроенный язык 1С:Предприятие — это предметно-ориентированный язык программирования, который входит в состав технологической платформы и используется для описания логики прикладных решений. Все алгоритмы конфигурации — проведение документов, расчёт итогов, обработка данных, формирование отчётов — пишутся именно на нём. Язык не существует отдельно от платформы: код на нём исполняется только внутри среды 1С и обращается к объектам конфигурации через встроенные механизмы.
Главная особенность языка — его ориентация на бизнес-задачи. Разработчик оперирует не низкоуровневыми конструкциями, а прикладными сущностями: документами, справочниками, регистрами, перечислениями. Запрос к базе данных, запись объекта, обход табличной части — всё это делается встроенными средствами без ручной работы с SQL или файловой системой.
Язык поддерживает русскоязычный и англоязычный синтаксис, причём их можно смешивать в одном модуле. На практике в типовых конфигурациях преобладает русский вариант, поэтому порог входа для специалистов без классического программистского образования заметно ниже, чем у универсальных языков.
Для чего нужен встроенный язык и где он применяется
Конфигурация 1С во многом строится декларативно: структуру справочников, документов и регистров разработчик описывает в конфигураторе мышью, без кода. Встроенный язык подключается там, где требуется поведение, которое нельзя задать настройками: проверка корректности заполнения документа, автоматический расчёт скидки, запрет проведения при отрицательных остатках, формирование произвольного отчёта.
Типичные сценарии использования языка:
- обработчики событий объектов — ПередЗаписью, ПриПроведении, ОбработкаЗаполнения;
- обработчики событий форм — ПриОткрытии, ПриИзменении реквизита;
- процедуры и функции в общих модулях, которые вызываются из разных мест конфигурации;
- алгоритмы в регламентных заданиях, выполняемые по расписанию;
- произвольный код в схеме компоновки данных и в выражениях печатных форм.
Основные характеристики языка
Встроенный язык 1С — интерпретируемый, с динамической типизацией. Переменные объявляются без указания типа, тип определяется присвоенным значением и может меняться в ходе выполнения. Это ускоряет написание кода, но требует внимательности: ошибка типа обнаруживается только в момент выполнения, а не при компиляции.
Ключевые черты языка:
- двуязычный синтаксис — операторы и встроенные функции доступны на русском и английском;
- процедурная модель с возможностью экспорта процедур и функций из модулей;
- встроенные типы данных: число, строка, дата, булево, массив, структура, соответствие, таблица значений;
- тесная интеграция с языком запросов 1С — текст запроса пишется внутри кода и исполняется платформой;
- встроенный отладчик в конфигураторе с точками останова и просмотром значений.
Язык не поддерживает классическое объектно-ориентированное программирование с наследованием и полиморфизмом в привычном виде. Вместо этого платформа предоставляет готовые объектные типы (ДокументОбъект, СправочникСсылка и т.д.), поведение которых расширяется через обработчики событий и общие модули.
Где исполняется код: клиент и сервер
В трёхзвенной архитектуре 1С код может выполняться на клиенте (тонкий, толстый или веб-клиент) и на сервере. Место исполнения определяется директивами компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Это одно из ключевых отличий от традиционных языков, где разработчик сам организует взаимодействие клиента и сервера.
На клиенте доступна работа с интерфейсом, файловой системой пользователя и диалогами, но недоступны прямые обращения к базе данных. На сервере можно выполнять запросы, изменять объекты и проводить документы, но нельзя показать пользователю окно или запросить файл. Понимание этого разделения критично: попытка обратиться к данным из клиентского контекста приведёт к ошибке исполнения.
Общие модули настраиваются флагами «Сервер», «Клиент», «Вызов сервера». Модуль с включённым флагом «Вызов сервера» можно вызывать из клиентского кода — платформа сама передаст вызов на сервер. Это стандартный способ получить данные в управляемой форме.
&НаСервере
Функция ПолучитьОстаток(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Остатки.КоличествоОстаток ИЗ РегистрНакопления.Товары.Остатки(, Номенклатура = &Номенклатура) КАК Остатки";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоОстаток;
Иначе
Возврат 0;
КонецЕсли;
КонецФункцииКак выглядит типичный код: пример обработчика
Классическая задача — проверить заполнение документа перед записью. Код размещается в модуле объекта документа в обработчике ПередЗаписью:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Товары.Количество() = 0 Тогда
Отказ = Истина;
Сообщить("Не заполнена табличная часть ""Товары"".");
КонецЕсли;
КонецПроцедуры
Здесь видно несколько характерных приёмов: параметр Отказ управляет дальнейшим выполнением операции (установка в Истина отменяет запись), обращение к табличной части идёт как к коллекции, а сообщение пользователю выводится через встроенный оператор. Аналогичная структура используется в большинстве проверок и валидаций.
- 1Откройте конфигуратор и найдите нужный объект в дереве конфигурации
- 2Откройте модуль объекта или модуль формы через контекстное меню
- 3Выберите событие из списка — платформа создаст заготовку процедуры
- 4Напишите код проверки или расчёта внутри процедуры
- 5Запустите отладку (F5) и проверьте поведение на тестовых данных
Чем встроенный язык отличается от внешних языков
Сравнение помогает понять границы применимости языка и не ждать от него того, для чего он не предназначен.
| Критерий | Встроенный язык 1С | Универсальные языки (C#, Java, Python) |
|---|---|---|
| Среда исполнения | Только внутри платформы 1С | Любая ОС и среда выполнения |
| Предметная область | Учётные и бизнес-задачи | Универсальное применение |
| Типизация | Динамическая | Чаще статическая (у Python — динамическая) |
| Работа с БД | Язык запросов 1С, объектная модель | SQL, ORM по выбору разработчика |
| ООП | Ограничено, объектные типы задаёт платформа | Полноценные классы и наследование |
Если задача выходит за пределы платформы — например, нужен отдельный веб-сервис, сложная интеграция или обработка больших файлов — её решают внешними средствами, а с 1С связываются через HTTP-сервисы, COM-соединение или файловый обмен. Пытаться реализовать всё на встроенном языке — частая ошибка, ведущая к неподдерживаемым решениям.
Когда какой инструмент выбирать
Любая логика внутри конфигурации: проведение, расчёты, проверки, отчёты. Единственный вариант для изменения поведения объектов 1С.
Выборка и агрегация данных из базы. Не изменяет данные, только читает.
Интеграции, веб-приложения, задачи вне платформы. Связь с 1С через HTTP, COM или обмен файлами.
Типичные ошибки начинающих разработчиков
Большинство проблем у новичков связано не с синтаксисом, а с непониманием модели исполнения платформы. Код, который выглядит правильно, падает из-за контекста выполнения или неявных ограничений.
Отдельная группа ошибок — работа с датами и ссылками. Сравнение ссылки с пустым значением нужно выполнять через ЗначениеЗаполнено() или сравнение с пустой ссылкой конкретного типа, а не через проверку на Неопределено. Путаница между Ссылка и Объект (ссылка — идентификатор записи в базе, объект — редактируемое представление данных) приводит к лишним чтениям из базы и блокировкам.
Как проверить, что код работает правильно
Проверка результата в 1С строится на сочетании отладчика и контрольных сценариев. Отладчик конфигуратора позволяет поставить точку останова, пройти код по шагам и посмотреть значения переменных, включая содержимое таблиц значений и результатов запросов.
Как проверить результат
Точка останова срабатывает, код проходит без исключений
Обработчик не вызывается — проверьте, в том ли модуле написан код и не отключён ли режим совместимости
После проведения документа движения в регистрах соответствуют ожидаемым
Движения отсутствуют или суммы расходятся — проверяйте логику заполнения наборов записей
Операция выполняется без заметной задержки на типовом объёме данных
Длительное выполнение — ищите запросы в цикле и обращения к серверу в клиентском цикле
Для регламентных операций полезно тестировать код на копии базы с данными, близкими к реальным по объёму: на пустой базе проблемы производительности и блокировок не проявляются.
Часто задаваемые вопросы
Нужно ли знать другой язык программирования, чтобы освоить встроенный язык 1С?
Нет, это не обязательно. Встроенный язык часто осваивают как первый язык — русскоязычный синтаксис и ориентация на понятные бизнес-объекты упрощают старт. Знание основ любого языка (переменные, условия, циклы) ускорит обучение, но не является предварительным условием.
Можно ли писать код на английском синтаксисе?
Да, платформа поддерживает оба варианта, и их можно смешивать в одном модуле. Однако в типовых конфигурациях и большинстве российских проектов принят русский синтаксис, поэтому для чтения чужого кода его знать необходимо в любом случае.
Где хранится код на встроенном языке?
Код хранится внутри конфигурации, в модулях соответствующих объектов: модуль объекта, модуль формы, общие модули, модуль приложения. Отдельных файлов с исходным кодом в рабочей базе нет — текст модулей является частью метаданных конфигурации.
Можно ли выполнить код 1С вне платформы?
Нет, встроенный язык исполняется только средой 1С:Предприятие. Для задач вне платформы существуют отдельные инструменты, а взаимодействие с внешними системами организуется через HTTP-сервисы, веб-сервисы, COM-соединение или файловый обмен.
Что такое расширение конфигурации и зачем оно нужно?
Расширение — это механизм доработки типовой конфигурации без изменения её модулей. Код пишется в модулях расширения и подключается к обработчикам типовых объектов. При обновлении типовой конфигурации расширения сохраняются, что существенно упрощает сопровождение.
Чем отличаются директивы &НаСервере и &НаСервереБезКонтекста?
Обычная серверная процедура имеет доступ к данным формы, а процедура без контекста — нет: ей нужно явно передавать параметры. Вариант без контекста работает быстрее при вызове с клиента, так как не требует сериализации всей формы, и считается предпочтительным для получения данных.
Что важно запомнить
Встроенный язык 1С:Предприятие — предметно-ориентированный язык внутри платформы, на котором пишется вся бизнес-логика конфигурации. Он исполняется только в среде 1С, поддерживает русский и английский синтаксис, тесно связан с языком запросов и требует понимания разделения клиентского и серверного контекстов. Новый код проверяйте на копии базы, а доработки типовых решений выполняйте через расширения.