Разработка и Конфигурация · 11 мин
Язык программирования 1С: как выглядит код
Как выглядит встроенный язык 1С: структура модуля, синтаксис, примеры кода, процедуры, функции и запросы. Разбираем типичные конструкции с пояснениями.
Встроенный язык 1С — это высокоуровневый язык, который разработчик пишет прямо в конфигураторе, внутри модулей объектов, форм, общих модулей и модулей приложения. Внешне он напоминает смесь Паскаля и Бейсика: есть процедуры и функции, условия «Если…Тогда…КонецЕсли», циклы «Для…Цикл…КонецЦикла» и строгое завершение каждого оператора точкой с запятой. Главная особенность — ключевые слова можно писать как на русском, так и на английском языке, причём оба варианта работают одинаково.
Код в 1С не существует отдельными файлами, как в Python или JavaScript. Он привязан к объектам конфигурации: у каждого документа, справочника или отчёта есть свой модуль объекта, модуль менеджера, модули форм. Поэтому, открывая чужую конфигурацию, вы видите не дерево файлов, а дерево метаданных, и код прячется внутри конкретных объектов и обработчиков событий.
Типичный фрагмент кода 1С сразу узнаваем: русские ключевые слова, обращения к реквизитам через точку (Например, Документ.Номенклатура), вызовы методов платформы вроде Сообщить() или НайтиПоКоду(). Ниже разберём, из каких конструкций состоит язык, как выглядят реальные примеры и где новички чаще всего ошибаются при чтении и написании кода.
Из чего состоит модуль: общая структура кода
Модуль в 1С — это текстовый документ с кодом, разбитый на области. Вверху обычно располагается раздел описания переменных, затем идут процедуры и функции, а в конце — раздел инициализации, который выполняется при загрузке модуля. В модулях форм и объектов основной код размещается внутри обработчиков событий: ПриСозданииНаСервере, ПередЗаписью, ОбработкаПроведения и других.
Области кода оформляются директивами #Область ИмяОбласти и #КонецОбласти — они позволяют сворачивать фрагменты в редакторе и визуально группируют логику. Комментарии начинаются с двойного слэша // и действуют до конца строки; многострочных комментариев в языке нет, каждую строку приходится помечать отдельно.
Директивы компиляции — ещё один характерный визуальный признак. Перед процедурой в общем модуле вы увидите &НаСервере, &НаКлиенте, &НаСервереБезКонтекста или &НаКлиентеНаСервереБезКонтекста. Они определяют, где будет выполняться код, и сразу бросаются в глаза при чтении модуля формы.
Как выглядят процедуры и функции
Процедура объявляется ключевым словом Процедура, затем идёт имя, в скобках — параметры, и завершается блок словом КонецПроцедуры. Функция отличается тем, что возвращает значение через оператор Возврат и закрывается словом КонецФункции. Параметры могут иметь значение по умолчанию и модификатор Знач, который принудительно передаёт параметр по значению.
&НаСервере
Функция ПолучитьЦенуТовара(Номенклатура, ДатаЦены = Неопределено)
Если ДатаЦены = Неопределено Тогда
ДатаЦены = ТекущаяДатаСеанса();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура) КАК Цены";
Запрос.УстановитьПараметр("Дата", ДатаЦены);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Обратите внимание на типичные визуальные элементы: отступы внутри блоков, операторные скобки на отдельных строках, точка с запятой в конце каждого оператора и отсутствие скобок вокруг условия в Если. Экспортные процедуры и функции, доступные из других модулей, помечаются словом Экспорт после списка параметров.
Условия, циклы и работа с коллекциями
Условный оператор выглядит так: Если Условие Тогда … ИначеЕсли … Иначе … КонецЕсли;. Логические операции записываются словами И, ИЛИ, НЕ, сравнение — знаками =, <>, >, <. Оператора switch в классическом виде нет; множественные ветвления делаются через цепочку ИначеЕсли.
Циклов три вида. Счётный цикл: Для Сч = 1 По 10 Цикл … КонецЦикла;. Цикл обхода коллекции: Для Каждого Строка Из ТаблицаЗначений Цикл … КонецЦикла; — самый частый вариант при работе с табличными частями и выборками. Условный цикл: Пока Условие Цикл … КонецЦикла;. Для досрочного выхода используется Прервать, для перехода к следующей итерации — Продолжить.
Для Каждого СтрокаТовара Из Объект.Товары Цикл
Если СтрокаТовара.Количество <= 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТовара.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена;
КонецЦикла;
Типичные коллекции, с которыми работает код: массив (Новый Массив), структура (Новый Структура — аналог словаря с доступом через точку), соответствие (пары ключ-значение с доступом по ключу) и таблица значений. Добавление элементов выглядит как Массив.Добавить(Значение) или Структура.Вставить("Ключ", Значение).
Структура = Новый Структура;
Структура.Вставить("Номенклатура", ТекущийТовар);
Структура.Вставить("Количество", 5);
Сообщить(Структура.Номенклатура); // доступ через точкуЯзык запросов внутри кода
Отдельный визуальный пласт — язык запросов 1С, который встраивается в код как многострочная строка. Он похож на SQL, но ключевые слова тоже русские: ВЫБРАТЬ, ИЗ, ГДЕ, СОЕДИНЕНИЕ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО. Вертикальная черта | в начале каждой строки — это признак продолжения многострочного строкового литерала.
Результат запроса обрабатывается через выборку: Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл … КонецЦикла;. Параметры передаются через Запрос.УстановитьПараметр("Имя", Значение), а в тексте запроса обозначаются амперсандом — &Имя. Виртуальные таблицы вроде СрезПоследних и Остатки — характерная особенность 1С, которой нет в классическом SQL.
Русский или английский синтаксис: что выбрать
Платформа поддерживает оба варианта ключевых слов, и конфигуратор сам подсвечивает их одинаково. В типовых российских конфигурациях код написан на русском синтаксисе; английский вариант (If…Then…EndIf, Procedure…EndProcedure) встречается в международных разработках и у команды, пришедшей из других языков. Смешивать варианты в одном модуле технически можно, но делать этого не стоит — читаемость резко падает.
Встроенные методы платформы также имеют двойные имена: Сообщить() и Message(), НайтиПоКоду() и FindByCode(). При этом имена переменных, процедур и реквизитов разработчик выбирает сам — в типовых конфигурациях они русские, а вот имена в стиле транслита (Nomenklatura, Kolichestvo) считаются плохой практикой.
Сравнение вариантов
Стандарт для российских конфигураций и типовых решений; совпадает с документацией и большинством примеров. Ограничение — непривычен разработчикам из других экосистем.
Подходит для международных команд и совместной разработки с зарубежными коллегами. Ограничение — меньше готовых примеров и фрагментов в русскоязычных источниках.
Технически работает, но затрудняет чтение и ревью. Допустим только при доработке унаследованного кода, который уже написан смешанно.
Как читать чужой код и где искать нужный фрагмент
Чтобы понять, как выглядит код конкретного прикладного решения, откройте конфигуратор и используйте глобальный поиск (Ctrl+Shift+F) по имени процедуры, реквизита или фрагменту текста сообщения об ошибке. Поиск покажет все модули, где встречается строка, — это быстрее, чем вручную открывать объекты. Контекстная подсказка по F1 на любом методе открывает синтакс-помощник с описанием параметров.
Полезный приём — поставить точку останова (F9) в обработчике события и запустить отладку (F5). Когда выполнение остановится, вы увидите реальные значения переменных в табло (Shift+F9) и поймёте, какие данные реально приходят в код. Это самый надёжный способ разобраться в незнакомой логике, особенно в цепочках вызовов между общими модулями.
- 1Откройте конфигуратор и включите отладку (Сервис → Параметры → разрешить отладку)
- 2Через глобальный поиск (Ctrl+Shift+F) найдите текст сообщения или имя процедуры
- 3Откройте найденный модуль и поставьте точку останова (F9) на интересующей строке
- 4Запустите отладку (F5), выполните действие в режиме предприятия
- 5Проверьте значения переменных через табло (Shift+F9) и пройдите код по шагам (F10/F11)
Частые вопросы
Можно ли писать код 1С полностью на английском?
Да, платформа поддерживает английский вариант всех ключевых слов и встроенных методов. Код компилируется и выполняется идентично. Однако в российских типовых конфигурациях принят русский синтаксис, поэтому при доработке готовых решений разумнее придерживаться стиля основного кода.
Чем язык 1С отличается от обычных языков программирования?
Он тесно интегрирован с платформой: типы данных привязаны к объектам конфигурации (документам, справочникам, регистрам), запросы выполняются встроенным движком, а код распределён по модулям объектов. Нет классов и наследования в привычном ООП-смысле — вместо них объектная модель метаданных и событийная модель обработчиков.
Где именно хранится написанный код?
Код хранится внутри конфигурации базы данных, в модулях объектов, форм и общих модулях — не в отдельных файлах. При выгрузке конфигурации в файлы (например, для системы контроля версий) модули выгружаются как текстовые файлы, но рабочим форматом остаётся хранение в базе.
Нужно ли знать SQL, чтобы писать запросы в 1С?
Строго говоря, нет: язык запросов 1С самодостаточен, и его можно изучить отдельно. Но знание SQL заметно помогает — концепции соединений, группировок и вложенных запросов совпадают, отличается в основном синтаксис и наличие виртуальных таблиц регистров.
Как проверить код на ошибки без запуска программы?
В конфигураторе есть проверка модуля (кнопка с галочкой или через меню Текст): она выполняет синтаксический контроль без выполнения кода. Дополнительно доступна расширенная проверка конфигурации (Конфигурация → Проверка конфигурации), которая находит обращения к несуществующим объектам и логические несоответствия.
Почему в коде встречаются обращения через точку к объектам, которых нет в модуле?
Это контекст модуля: в модуле документа доступны его реквизиты напрямую или через ЭтотОбъект, в модуле формы — реквизиты формы и данные объекта. Компилятор знает контекст, поэтому явное объявление переменных не требуется. При переносе кода в другой модуль контекст теряется, и обращения нужно переписывать.
Что важно запомнить
Код 1С — это процедуры и функции внутри модулей объектов, русские или английские ключевые слова, точка с запятой в конце операторов и встроенный язык запросов, похожий на SQL. Чтобы разобраться в чужом коде, используйте глобальный поиск, синтакс-помощник и отладку с точками останова.