На чём пишут в 1С: встроенный язык платформы 8.3 без мифов

· 9 мин

Содержание

В 1С:Предприятии 8.3 программируют на собственном встроенном языке платформы — его часто называют просто «язык 1С». Это не Python, не Java и не диалект Visual Basic: язык создан фирмой «1С» специально для учётных задач, а работает он только внутри платформы.

Новички обычно спотыкаются о три вещи: русские ключевые слова, разделение кода на клиент и сервер и отдельный язык запросов к данным. Разберём каждую по порядку, с примерами кода, которые можно вставить в обработку и запустить.

Какой язык используется в 1С и как он устроен

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

Основные виды модулей:

  • 📦 Общие модули — библиотеки процедур и функций, доступные из любого места конфигурации.
  • 📄 Модуль объекта — код конкретного справочника или документа: обработчики ПередЗаписью, ОбработкаПроведения.
  • 🗂 Модуль менеджера — код, который работает с объектом «в целом», без экземпляра: печатные формы, служебные функции.
  • 🪟 Модуль формы — реакция на кнопки, поля и открытие формы.
  • ⚙️ Модуль управляемого приложения, модуль сеанса, модуль внешнего соединения — обработчики запуска системы и сеанса.

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

Поэтому разработчика 1С правильнее сравнивать не с бэкенд-программистом на Java, а с человеком, который собирает приложение из готовых блоков и дописывает к ним правила.

Синтаксис встроенного языка 1С: с чем столкнётесь в первый день

Ключевые слова — русские. Есть полный английский эквивалент (If … Then … EndIf, Procedure, Function), но в типовых конфигурациях почти весь код написан по-русски. Регистр букв не важен: Сообщить и СООБЩИТЬ — одно и то же.

Пример процедуры с условием и циклом:

Процедура ПроверитьОстатки(МинимальныйОстаток)

	Итого = 0;
	Для Сч = 1 По 10 Цикл
		Итого = Итого + Сч;
	КонецЦикла;

	Если Итого > МинимальныйОстаток Тогда
		Сообщить(СтрШаблон("Сумма %1 больше порога %2", Итого, МинимальныйОстаток));
	ИначеЕсли Итого = МинимальныйОстаток Тогда
		Сообщить("Ровно на пороге");
	Иначе
		Сообщить("Ниже порога");
	КонецЕсли;

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

Что здесь видно:

  1. Блоки закрываются словами КонецЦикла, КонецЕсли, КонецПроцедуры — фигурных скобок нет.
  2. Каждый оператор заканчивается точкой с запятой.
  3. Процедура ничего не возвращает, Функция возвращает значение через Возврат.
  4. Строки — в двойных кавычках, комментарии начинаются с //.
  5. Для подстановки значений в текст удобно СтрШаблон — не нужно склеивать строки вручную.

Основные типы и коллекции:

ТипДля чегоПример
Число, Строка, Дата, Булевопримитивные значенияДата(2026, 1, 1)
Массивупорядоченный списокНовый Массив
Структуранабор «ключ — значение» с ключами-строкамиНовый Структура("Код, Имя")
Соответствиесловарь с ключом любого типаНовый Соответствие
ТаблицаЗначенийтаблица в памяти, с сортировкой и группировкойрезультат Выгрузить()
Ссылки (СправочникСсылка.…)указатель на запись в базеСправочники.Склады.НайтиПоКоду("001")

Ошибки ловят конструкцией Попытка … Исключение … КонецПопытки. Текст ошибки внутри блока Исключение берут через ОписаниеОшибки() или ИнформацияОбОшибке().

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

Чем язык 1С отличается от Python, Java и SQL

Вопрос «на что похож язык 1С» задают все, кто приходит из другой разработки. Короткое сравнение:

ПризнакВстроенный язык 1СPythonJava / C#SQL
Типизациядинамическаядинамическаястатическая—
ООП с наследованиемнет, вместо него объекты метаданныхдаданет
Где выполняетсятолько в платформе 1СвездеJVM / .NETв СУБД
Работа с базойчерез объекты и язык запросовчерез библиотеки и ORMчерез ORM, JDBCнапрямую
Интерфейсплатформа строит формы самаотдельные фреймворкиотдельные фреймворкинет
Ключевые словарусские или английскиеанглийскиеанглийскиеанглийские

По ощущениям синтаксис ближе всего к Pascal и Visual Basic: слова вместо скобок, явные КонецЕсли, процедуры и функции.

С Python язык 1С роднит динамическая типизация и простота старта. Но в Python огромная экосистема пакетов, а в 1С сторонних библиотек почти нет — всё нужное уже есть в платформе: работа с файлами, HTTP, XML, JSON, почтой, табличными документами.

С SQL путают язык запросов 1С. Он действительно похож (ВЫБРАТЬ … ИЗ … ГДЕ), но это надстройка: запрос пишется к объектам конфигурации, а платформа переводит его в SQL конкретной СУБД. Об этом — ниже отдельным разделом.

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

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

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

ДирективаГде выполняетсяДоступ к данным формыОбращение к базе
&НаКлиентена компьютере пользователяданет
&НаСерверена сервереда, форма передаётся на серверда
&НаСервереБезКонтекстана серверенетда
&НаКлиентеНаСервереБезКонтекстатам, откуда вызвалинеттолько если вызвана на сервере

Типичный шаблон — команда на клиенте вызывает серверную процедуру:

&НаКлиенте
Процедура Заполнить(Команда)
	КоличествоСтрок = ЗаполнитьНаСервере();
	Сообщить(СтрШаблон("Загружено строк: %1", КоличествоСтрок));
КонецПроцедуры

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

Почему это важно на практике:

  • 🐢 Каждый вызов сервера — это обмен по сети. Вызов в цикле на 1000 строк превращает форму в «тормоз».
  • 📦 &НаСервере тащит на сервер всю форму со всеми таблицами; &НаСервереБезКонтекста передаёт только параметры и работает быстрее.
  • 🚫 На клиенте нельзя прочитать данные из базы запросом — объект Запрос там недоступен.

Кроме директив есть инструкции препроцессора: #Если Сервер Тогда … #КонецЕсли. Ими ограничивают код в общих модулях и модулях объектов, чтобы он не компилировался там, где не нужен.

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

Язык запросов 1С и работа с данными

Читают данные в 1С в основном запросами. Синтаксис похож на SQL, но обращения идут к объектам конфигурации, а не к таблицам СУБД:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Номенклатура.Ссылка КАК Ссылка,
|	Номенклатура.Наименование КАК Наименование
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	НЕ Номенклатура.ПометкаУдаления
|	И Номенклатура.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "%бумага%");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Выборка.Наименование);
КонецЦикла;

Чем язык запросов 1С отличается от обычного SQL:

  1. Только чтение. Конструкций UPDATE, INSERT, DELETE нет. Изменяют данные через объекты (ПолучитьОбъект(), Записать()) и наборы записей регистров.
  2. Разыменование через точку. Можно написать Документ.Контрагент.ИНН — платформа сама добавит соединения таблиц. Удобно, но при глубоких цепочках запрос становится тяжёлым.
  3. Виртуальные таблицы. У регистров есть готовые таблицы Остатки, Обороты, ОстаткиИОбороты, у периодических регистров сведений — СрезПоследних. Параметры (период, отбор) передают прямо в скобках таблицы — так отбор срабатывает раньше и быстрее.
  4. Временные таблицы. Конструкция ПОМЕСТИТЬ и объект МенеджерВременныхТаблиц заменяют вложенные подзапросы и ускоряют сложные выборки.
  5. Независимость от СУБД. Один и тот же текст запроса работает в файловой базе и на клиент-серверной базе с MS SQL Server или PostgreSQL.

Не пишите запрос внутри цикла по строкам. 500 строк документа — 500 обращений к базе. Соберите нужные ссылки в массив и выполните один запрос с условием В (&Список).

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

Расширения, внешние обработки и инструменты разработчика

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

Расширения конфигурации (появились в 8.3.6). Файл .cfe подключается к базе поверх типовой конфигурации. В расширении можно:

  • ➕ добавить свои реквизиты, документы, отчёты, формы;
  • 🔁 перехватить типовую процедуру аннотациями &Перед, &После, &Вместо;
  • 🧩 с 8.3.16 и новее — точечно изменить код типовой процедуры аннотацией &ИзменениеИКонтроль, с вставками #Вставка … #КонецВставки и #Удаление … #КонецУдаления.

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

Внешние обработки и отчёты — файлы .epf и .erf. Их открывают через меню Файл → Открыть без изменения конфигурации или подключают в типовых через раздел «Дополнительные отчёты и обработки». Подходят для разовых загрузок, печатных форм, сервисных операций.

Внешняя обработка выполняет любой код с правами пользователя, который её открыл. Не запускайте файлы .epf из непроверенных источников в рабочей базе.

Инструменты:

ИнструментДля чего
Конфигураторклассическая среда: метаданные, модули, отладчик, конструкторы
1С:EDT (Enterprise Development Tools)среда на базе Eclipse: работа с Git, рефакторинг, проверка кода
Хранилище конфигурациигрупповая разработка с захватом объектов
Отладчикточки останова, вычисление выражений, замер производительности

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

Проверьте себя
Можно ли в языке запросов 1С изменить данные командой UPDATE?
Какая директива не передаёт форму на сервер?
Что лучше использовать для доработки типовой конфигурации без снятия с поддержки?

Как развивается язык 1С в платформе 8.3 и что дальше

Язык не стоит на месте: почти в каждой крупной версии платформы 8.3 добавляют возможности. Самые заметные для программиста:

  • ⏳ Асинхронность. Модальные окна в веб-клиенте и мобильных приложениях не работают, поэтому сначала появились методы с ОписаниеОповещения, а в 8.3.18 — ключевые слова Асинх и Ждать. Код с ними читается почти как синхронный.
  • 🌐 Интеграция. HTTP-сервисы, веб-сервисы, стандартный интерфейс OData, работа с JSON (ЗаписьJSON, ЧтениеJSON) — 1С легко обменивается данными с сайтами и внешними системами.
  • 📱 Мобильная платформа — тот же язык для приложений под Android и iOS.
  • 🧱 Расширения с каждой версией умеют больше, вплоть до точечной правки чужого кода.

Отдельно фирма развивает новую технологию 1С:Предприятие.Элемент. У неё свой язык с синтаксисом, близким к современным языкам, статической типизацией и английскими ключевыми словами по умолчанию. Это отдельная платформа, а не новая версия 8.3: типовые конфигурации — Бухгалтерия, ЗУП, УТ — по-прежнему работают на 8.3 и встроенном языке.

Для практики вывод простой: учить нужно встроенный язык 8.3, язык запросов и устройство управляемых форм. Именно на этом стеке работает почти весь рынок внедрений и сопровождения.

Частые вопросы

Можно ли писать код 1С на английском языке?
Да. У встроенного языка есть полный английский вариант ключевых слов и методов (If, Procedure, Query). Русский и английский можно смешивать в одном модуле, но в типовых конфигурациях принят русский.
Компилируется ли код 1С в исполняемый файл?
Нет. Модули переводятся во внутренний байт-код и выполняются платформой. Отдельный .exe из конфигурации собрать нельзя: для запуска нужна установленная платформа 1С и лицензия.
Сколько времени нужно, чтобы освоить язык 1С?
Синтаксис программист с опытом осваивает за 1–2 недели. На уверенную работу с регистрами, проведением документов и типовыми конфигурациями обычно уходит от полугода практики.
Можно ли подключить к 1С код на Python или C#?
Напрямую в модуле — нет. Связывают через внешние компоненты, COM-соединение, HTTP-сервисы или обмен файлами. Внешние компоненты пишут на C++ по технологии Native API.
Как называется расширение файлов с кодом 1С?
Отдельных файлов с кодом в Конфигураторе нет: модули хранятся внутри конфигурации. В выгрузке в файлы и в EDT модули сохраняются с расширением .bsl.