Разработка и Конфигурация · 10 мин
Код 1С: как выглядит и как его читать
Как выглядит код 1С: синтаксис встроенного языка, примеры процедур, запросов и циклов. Разбираем структуру модулей, типичные конструкции и ошибки новичков.
Код 1С — это текст на встроенном языке платформы «1С:Предприятие», который внешне напоминает смесь классических языков программирования, но с одной особенностью: ключевые слова можно писать по-русски. Вместо If и Then разработчик пишет «Если» и «Тогда», вместо Procedure — «Процедура». Для человека, впервые открывшего конфигуратор, это выглядит необычно, но именно такой подход снижает порог входа для специалистов без классического программистского образования.
Платформа допускает и англоязычный синтаксис, причём оба варианта можно смешивать в одном модуле, хотя на практике так делать не принято. Код хранится не в отдельных файлах, а внутри конфигурации — в модулях объектов, форм, общих модулях и модуле приложения. Поэтому «посмотреть код 1С» означает открыть конфигуратор, найти нужный объект в дереве конфигурации и открыть его модуль.
Ниже разберём, как устроен текст программы 1С, какие конструкции встречаются чаще всего, как выглядят запросы к базе данных внутри кода и на что обратить внимание, чтобы научиться читать чужие модули.
Где физически находится код 1С
В отличие от большинства языков, где программа — это набор файлов с расширениями .py, .js или .cs, код 1С живёт внутри конфигурации. Открыть его можно только через конфигуратор — отдельный режим запуска платформы. В дереве конфигурации каждый объект (справочник, документ, отчёт, обработка) может содержать один или несколько модулей.
Основные места хранения кода: модуль объекта (логика документа или справочника), модуль формы (поведение интерфейса), модуль менеджера (серверные операции с объектами), общие модули (переиспользуемый код) и модуль приложения (события запуска системы). Чтобы увидеть код, нужно щёлкнуть правой кнопкой по объекту и выбрать «Открыть модуль» или открыть форму и перейти на вкладку модуля.
Базовый синтаксис: процедуры и функции
Минимальная единица кода — процедура или функция. Процедура просто выполняет действия, функция дополнительно возвращает значение через ключевое слово «Возврат». Объявление начинается с ключевого слова, содержит имя и параметры в скобках, а заканчивается словами «КонецПроцедуры» или «КонецФункции».
Процедура РассчитатьСкидку(СуммаДокумента)
Если СуммаДокумента > 100000 Тогда
Скидка = 10;
ИначеЕсли СуммаДокумента > 50000 Тогда
Скидка = 5;
Иначе
Скидка = 0;
КонецЕсли;
Сообщить("Размер скидки: " + Скидка + "%");
КонецПроцедуры
Обратите внимание на характерные черты: каждая инструкция завершается точкой с запятой, строки обозначаются двойными кавычками, комментарии начинаются с двойного слэша. Переменные объявляются неявно — достаточно присвоить значение, хотя в начале модуля можно описать переменные явно через «Перем».
Функция выглядит аналогично, но содержит возврат значения:
Функция ПолучитьЦенуТовара(Товар, ДатаЦены)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Цена
|ИЗ
| РегистрСведений.ЦеныТоваров.СрезПоследних(&ДатаЦены, Товар = &Товар) КАК Цены";
Запрос.УстановитьПараметр("Товар", Товар);
Запрос.УстановитьПараметр("ДатаЦены", ДатаЦены);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Цена;
КонецФункции
Как выглядят обработчики событий
Значительная часть кода в типовых конфигурациях — это обработчики событий. Они выглядят как обычные процедуры, но вызываются платформой автоматически при определённых действиях: записи документа, открытии формы, нажатии кнопки. Имена таких процедур стандартизированы: «ПриЗаписи», «ОбработкаПроведения», «ПриОткрытии».
Над обработчиком часто стоит директива компиляции — она указывает, где выполняется код: на клиенте или на сервере. Это одна из первых вещей, на которые стоит смотреть при чтении модуля формы.
&НаКлиенте
Процедура КнопкаРассчитатьНажатие(Элемент)
РассчитатьИтогиНаСервере();
ПоказатьПредупреждение(, "Расчёт выполнен");
КонецПроцедуры
&НаСервере
Процедура РассчитатьИтогиНаСервере()
Объект.ИтоговаяСумма = Объект.Товары.Итог("Сумма");
КонецПроцедуры
Запросы внутри кода
Характерная особенность 1С — язык запросов, встроенный прямо в код как многострочный текст. Он похож на SQL, но тоже с русскими ключевыми словами: ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО. Текст запроса оформляется как строковый литерал, где каждая строка начинается с вертикальной черты.
Типовой цикл работы с запросом: создать объект «Запрос», задать текст, установить параметры через «УстановитьПараметр», выполнить и обойти результат выборкой. Параметры в тексте запроса начинаются с символа &, что защищает от подстановки небезопасных значений.
- 1Откройте конфигуратор и загрузите конфигурацию через меню «Конфигурация — Открыть конфигурацию»
- 2Найдите нужный объект в дереве конфигурации и откройте его модуль через контекстное меню
- 3Используйте Ctrl+F для поиска по тексту модуля или Ctrl+Shift+F для глобального поиска по всей конфигурации
- 4Поставьте точку останова (F9) и запустите отладку, чтобы увидеть, как код выполняется на реальных данных
Циклы, коллекции и работа с объектами
Для перебора данных используются циклы «Для Каждого ... Из ... Цикл» и классический «Для ... По ... Цикл». Табличные части документов, выборки запросов, массивы и структуры — всё это коллекции, которые обходятся одинаково.
Для Каждого СтрокаТовара Из Объект.Товары Цикл
Если СтрокаТовара.Количество = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТовара.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена;
КонецЦикла;
Обращение к данным объектов идёт через точку: Документ.Номер, Справочник.Наименование, СтрокаТовара.Цена. Платформа автоматически подставляет свойства объекта, поэтому код читается почти как обычный текст. Для проверки заполненности значений используется функция «ЗначениеЗаполнено()», а пустые ссылки сравниваются через «ПустаяСсылка()».
Инструменты для изучения кода
Конфигуратор предоставляет встроенные средства, которые помогают разобраться в чужом коде. Синтакс-помощник (Ctrl+Shift+F1) содержит описание всех конструкций языка и объектов платформы. Контекстная подсказка по Ctrl+Пробел показывает доступные свойства и методы объекта. Отладчик позволяет пошагово пройти выполнение и посмотреть значения переменных в реальном времени.
Проверка модуля на синтаксические ошибки выполняется через меню «Конфигурация — Проверка конфигурации» или по кнопке в редакторе модуля. Перед сохранением изменений в рабочей базе всегда стоит выполнить такую проверку — она отловит незакрытые блоки «Если» и опечатки в именах процедур.
Как отличить хороший код от проблемного
Читабельный код 1С имеет несколько признаков: осмысленные имена процедур и переменных на русском языке, отступы, отражающие вложенность блоков, комментарии к неочевидной логике и отсутствие запросов внутри циклов. Проблемный код обычно выдают процедуры на сотни строк без разбиения, однобуквенные переменные и закомментированные куски старой логики.
Как проверить качество модуля
Код разбит на процедуры по 20–50 строк, есть области #Область для группировки
Одна процедура на несколько экранов без комментариев
Запросы выполняются один раз, результат обходится выборкой
Запрос создаётся и выполняется внутри цикла перебора
Критичные операции обёрнуты в Попытка/Исключение с записью в журнал регистрации
Ошибки глушатся пустым блоком Исключение или не обрабатываются вовсе
Что важно запомнить
Код 1С — это текст на встроенном языке с русскими ключевыми словами, хранящийся в модулях внутри конфигурации. Основные конструкции: процедуры и функции, условия «Если...Тогда», циклы «Для Каждого», обработчики событий с директивами контекста и встроенные запросы. Читать код удобнее всего в конфигураторе с помощью синтакс-помощника, поиска и отладчика.
Частые вопросы
Можно ли писать код 1С на английском языке?
Да, платформа поддерживает англоязычный вариант синтаксиса: Procedure, Function, If, Then, For Each и так далее. Вариант выбирается в настройках конфигуратора. На практике в российских проектах почти весь код пишется по-русски, а смешение двух вариантов в одном модуле считается плохим тоном.
Чем язык 1С отличается от обычных языков программирования?
Главное отличие — язык ориентирован на прикладные задачи учёта: в нём есть встроенные типы документов, справочников и регистров, встроенный язык запросов и автоматическая работа с базой данных. Нет ручного управления памятью, указателей и низкоуровневых операций. По сложности синтаксиса он ближе к BASIC, чем к C++ или Java.
Как посмотреть код типовой конфигурации, например 1С:Бухгалтерии?
Запустите базу в режиме конфигуратора, откройте конфигурацию через меню «Конфигурация — Открыть конфигурацию» и найдите нужный объект в дереве. Если конфигурация закрыта паролем поставщика или поставляется без исходных текстов отдельных модулей, такие модули будут недоступны для просмотра.
Что означают значки &НаКлиенте и &НаСервере над процедурами?
Это директивы компиляции, определяющие, где выполняется код. &НаКлиенте — на компьютере пользователя, где доступен интерфейс, но нет прямого доступа к базе. &НаСервере — на сервере, где доступны данные, но нельзя показывать диалоги. Вариант &НаСервереБезКонтекста используется для процедур, которым не нужны данные формы.
Нужно ли знать программирование, чтобы читать код 1С?
Базовое понимание логики (условия, циклы, переменные) сильно помогает, но глубокая подготовка не обязательна: русскоязычный синтаксис читается почти как обычный текст. Начать стоит с простых модулей обработок, постепенно переходя к обработчикам проведения документов, параллельно сверяясь с синтакс-помощником.
Почему в коде 1С строки запроса начинаются с вертикальной черты?
Вертикальная черта — это символ продолжения многострочного строкового литерала. Она указывает компилятору, что строка текста запроса продолжается на следующей строке исходного кода. Без черты в начале каждой строки многострочный текст вызовет синтаксическую ошибку.