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

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

Код 1С: как выглядит и как его читать

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

Код 1С — это текст на встроенном языке платформы «1С:Предприятие», который внешне напоминает смесь классических языков программирования, но с одной особенностью: ключевые слова можно писать по-русски. Вместо If и Then разработчик пишет «Если» и «Тогда», вместо Procedure — «Процедура». Для человека, впервые открывшего конфигуратор, это выглядит необычно, но именно такой подход снижает порог входа для специалистов без классического программистского образования.

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

Ниже разберём, как устроен текст программы 1С, какие конструкции встречаются чаще всего, как выглядят запросы к базе данных внутри кода и на что обратить внимание, чтобы научиться читать чужие модули.

Где физически находится код 1С

В отличие от большинства языков, где программа — это набор файлов с расширениями .py, .js или .cs, код 1С живёт внутри конфигурации. Открыть его можно только через конфигуратор — отдельный режим запуска платформы. В дереве конфигурации каждый объект (справочник, документ, отчёт, обработка) может содержать один или несколько модулей.

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

Базовый синтаксис: процедуры и функции

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

Процедура РассчитатьСкидку(СуммаДокумента)

Если СуммаДокумента > 100000 Тогда

Скидка = 10;

ИначеЕсли СуммаДокумента > 50000 Тогда

Скидка = 5;

Иначе

Скидка = 0;

КонецЕсли;

Сообщить("Размер скидки: " + Скидка + "%");

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

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

Функция выглядит аналогично, но содержит возврат значения:

Функция ПолучитьЦенуТовара(Товар, ДатаЦены)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Цены.Цена

|ИЗ

| РегистрСведений.ЦеныТоваров.СрезПоследних(&ДатаЦены, Товар = &Товар) КАК Цены";

Запрос.УстановитьПараметр("Товар", Товар);

Запрос.УстановитьПараметр("ДатаЦены", ДатаЦены);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Возврат 0;

КонецЕсли;

Выборка = Результат.Выбрать();

Выборка.Следующий();

Возврат Выборка.Цена;

КонецФункции

Как выглядят обработчики событий

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

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

&НаКлиенте

Процедура КнопкаРассчитатьНажатие(Элемент)

РассчитатьИтогиНаСервере();

ПоказатьПредупреждение(, "Расчёт выполнен");

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

&НаСервере

Процедура РассчитатьИтогиНаСервере()

Объект.ИтоговаяСумма = Объект.Товары.Итог("Сумма");

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

Запросы внутри кода

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

Типовой цикл работы с запросом: создать объект «Запрос», задать текст, установить параметры через «УстановитьПараметр», выполнить и обойти результат выборкой. Параметры в тексте запроса начинаются с символа &, что защищает от подстановки небезопасных значений.

Как открыть и прочитать чужой модуль
  1. 1
    Откройте конфигуратор и загрузите конфигурацию через меню «Конфигурация — Открыть конфигурацию»
  2. 2
    Найдите нужный объект в дереве конфигурации и откройте его модуль через контекстное меню
  3. 3
    Используйте Ctrl+F для поиска по тексту модуля или Ctrl+Shift+F для глобального поиска по всей конфигурации
  4. 4
    Поставьте точку останова (F9) и запустите отладку, чтобы увидеть, как код выполняется на реальных данных

Циклы, коллекции и работа с объектами

Для перебора данных используются циклы «Для Каждого ... Из ... Цикл» и классический «Для ... По ... Цикл». Табличные части документов, выборки запросов, массивы и структуры — всё это коллекции, которые обходятся одинаково.

Для Каждого СтрокаТовара Из Объект.Товары Цикл

Если СтрокаТовара.Количество = 0 Тогда

Продолжить;

КонецЕсли;

СтрокаТовара.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена;

КонецЦикла;

Обращение к данным объектов идёт через точку: Документ.Номер, Справочник.Наименование, СтрокаТовара.Цена. Платформа автоматически подставляет свойства объекта, поэтому код читается почти как обычный текст. Для проверки заполненности значений используется функция «ЗначениеЗаполнено()», а пустые ссылки сравниваются через «ПустаяСсылка()».

Типичные ошибки при чтении и написании кода 1С
01
Забытая точка с запятой в конце инструкции — платформа выдаст синтаксическую ошибку при проверке модуля
02
Обращение к базе данных из клиентского контекста — код упадёт с ошибкой о недоступности операции
03
Сравнение ссылок через знак равенства со строкой вместо ПустаяСсылка() — условие никогда не сработает корректно
04
Запрос внутри цикла — обращение к базе на каждой итерации резко замедляет выполнение
05
Смешение русского и английского синтаксиса в одном модуле — код работает, но становится трудным для сопровождения

Инструменты для изучения кода

Конфигуратор предоставляет встроенные средства, которые помогают разобраться в чужом коде. Синтакс-помощник (Ctrl+Shift+F1) содержит описание всех конструкций языка и объектов платформы. Контекстная подсказка по Ctrl+Пробел показывает доступные свойства и методы объекта. Отладчик позволяет пошагово пройти выполнение и посмотреть значения переменных в реальном времени.

Проверка модуля на синтаксические ошибки выполняется через меню «Конфигурация — Проверка конфигурации» или по кнопке в редакторе модуля. Перед сохранением изменений в рабочей базе всегда стоит выполнить такую проверку — она отловит незакрытые блоки «Если» и опечатки в именах процедур.

Как отличить хороший код от проблемного

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

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

Как проверить качество модуля

Структура модуля
Норма

Код разбит на процедуры по 20–50 строк, есть области #Область для группировки

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

Одна процедура на несколько экранов без комментариев

Работа с запросами
Норма

Запросы выполняются один раз, результат обходится выборкой

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

Запрос создаётся и выполняется внутри цикла перебора

Обработка ошибок
Норма

Критичные операции обёрнуты в Попытка/Исключение с записью в журнал регистрации

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

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

Итог

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

Код 1С — это текст на встроенном языке с русскими ключевыми словами, хранящийся в модулях внутри конфигурации. Основные конструкции: процедуры и функции, условия «Если...Тогда», циклы «Для Каждого», обработчики событий с директивами контекста и встроенные запросы. Читать код удобнее всего в конфигураторе с помощью синтакс-помощника, поиска и отладчика.

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

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

Да, платформа поддерживает англоязычный вариант синтаксиса: Procedure, Function, If, Then, For Each и так далее. Вариант выбирается в настройках конфигуратора. На практике в российских проектах почти весь код пишется по-русски, а смешение двух вариантов в одном модуле считается плохим тоном.

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

Главное отличие — язык ориентирован на прикладные задачи учёта: в нём есть встроенные типы документов, справочников и регистров, встроенный язык запросов и автоматическая работа с базой данных. Нет ручного управления памятью, указателей и низкоуровневых операций. По сложности синтаксиса он ближе к BASIC, чем к C++ или Java.

Как посмотреть код типовой конфигурации, например 1С:Бухгалтерии?

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

Что означают значки &НаКлиенте и &НаСервере над процедурами?

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

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

Базовое понимание логики (условия, циклы, переменные) сильно помогает, но глубокая подготовка не обязательна: русскоязычный синтаксис читается почти как обычный текст. Начать стоит с простых модулей обработок, постепенно переходя к обработчикам проведения документов, параллельно сверяясь с синтакс-помощником.

Почему в коде 1С строки запроса начинаются с вертикальной черты?

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