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

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

Как понять написание кода в 1С

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

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

Главный навык — не запоминание операторов, а умение отвечать на три вопроса: где выполняется код (клиент или сервер), когда он запускается (какое событие его вызвало) и над какими данными работает (документ, справочник, регистр). Эта статья даёт рабочий метод разбора чужого и своего кода без углубления в теорию программирования.

Из чего состоит код 1С: модули и их роль

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

Практический приём: откройте конфигуратор, найдите объект в дереве конфигурации, щёлкните правой кнопкой и посмотрите доступные модули. Если вы читаете чужой код и видите обращение ЭтотОбъект.Ссылка, значит, вы в модуле объекта, и код работает с конкретным экземпляром документа или элемента справочника. Если видите ЭтаФорма или Элементы — это модуль формы, и речь об интерфейсе.

Базовый синтаксис: что нужно узнавать на глаз

Встроенный язык 1С использует русские ключевые слова (допустим и английский вариант, но в типовых конфигурациях преобладает русский). Основные конструкции, которые встречаются в любом коде:

  • Процедура ... КонецПроцедуры и Функция ... Возврат ... КонецФункции — блоки кода; функция обязана вернуть значение;
  • Если ... Тогда ... ИначеЕсли ... Иначе ... КонецЕсли; — ветвление по условию;
  • Для Каждого Строка Из ТаблицаЗначений Цикл ... КонецЦикла; — перебор коллекций;
  • Перем — объявление переменной (объявление необязательно, переменная создаётся при первом присваивании);
  • точка с запятой завершает оператор, // начинает комментарий.

Отдельно выучите обращения к данным через точку: Документы.РеализацияТоваровУслуг.НайтиПоНомеру(...) читается как «менеджер документов типа РеализацияТоваровУслуг, метод НайтиПоНомеру». Левая часть до точки — объект или коллекция из дерева конфигурации, правая — его свойство или метод. Это покрывает большую часть «непонятных» строк.

bsl
Функция ПолучитьСуммуДокумента(СсылкаНаДокумент)
	Сумма = 0;
	Для Каждого СтрокаТовара Из СсылкаНаДокумент.Товары Цикл
		Сумма = Сумма + СтрокаТовара.Сумма;
	КонецЦикла;
	Возврат Сумма;
КонецФункции

События и обработчики: почему код «сам запускается»

Частая причина непонимания — код никто явно не вызывает, но он выполняется. Причина в событийной модели: платформа сама вызывает обработчики при определённых действиях пользователя или системы. ПриЗаписи срабатывает при записи объекта, ОбработкаПроведения — при проведении документа, ПриОткрытии — при открытии формы, ПередЗаписью — непосредственно перед сохранением.

Чтобы понять, когда сработает процедура, смотрите на её имя и на директивы компиляции над ней: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Директива показывает, где выполняется код — на компьютере пользователя или на сервере. Это критично: на клиенте недоступны прямые запросы к базе данных, поэтому типовой код постоянно «перепрыгивает» между клиентом и сервером через вызовы серверных процедур.

Пошаговый метод чтения незнакомого кода

Разбирайте любой фрагмент по фиксированной схеме, а не «с первой строки до последней». Сначала контекст, потом детали — так вы не утонете в частностях, не поняв общей цели.

Порядок разбора фрагмента кода
  1. 1
    Определите модуль: форма, объект или общий модуль — это задаёт доступный контекст
  2. 2
    Найдите точку входа: имя процедуры и событие, которое её вызывает
  3. 3
    Выпишите входные данные: параметры процедуры, реквизиты объекта, к которым идёт обращение
  4. 4
    Проследите изменения данных: что записывается, какие документы или регистры затрагиваются
  5. 5
    Проверьте вызовы других процедур: откройте их через Ctrl+клик или поиск по конфигурации
  6. 6
    Сформулируйте одним предложением, что делает фрагмент, и сверьте с комментариями и именами

Инструменты конфигуратора ускоряют разбор: Ctrl+F — поиск по текущему модулю, Ctrl+Shift+F — глобальный поиск по всей конфигурации (так находят, откуда вызывается процедура), F12 или Ctrl+клик — переход к определению процедуры. Если процедура вызывается из пяти мест, глобальный поиск покажет все сценарии её использования.

Отладка: способ увидеть код в действии

Чтение кода «всухую» даёт только гипотезу. Проверяет её отладчик: поставьте точку останова (F9) на интересующей строке, запустите отладку (F5) и выполните в пользовательском режиме действие, которое должно вызвать код. Если остановки не произошло — событие не наступило или вы смотрите не тот модуль.

В остановке используйте табло (Shift+F9) и окно «Вычислить выражение»: введите имя переменной или реквизита и увидите реальное значение в данный момент. Клавиши F10 и F11 выполняют код по шагам — без захода внутрь вызываемых процедур и с заходом соответственно. Проходя код по шагам и наблюдая значения, вы понимаете его быстрее, чем при многократном перечитывании.

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

Как проверить, что вы поняли код правильно

Точка останова срабатывает
Норма

Код выполняется при ожидаемом действии пользователя

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

Остановки нет — событие другое или код в другом модуле

Значения переменных в табло
Норма

Совпадают с ожидаемыми по логике прочитанного кода

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

Значения неожиданные — есть скрытая ветка или другой источник данных

Результат в базе
Норма

Документ проводится, записи появляются там, где предполагалось

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

Движения отсутствуют или в других регистрах — код не до конца понят

Типовые конструкции, которые встречаются постоянно

Большая часть прикладного кода 1С состоит из повторяющихся шаблонов. Запросы с помощью Запрос = Новый Запрос("ВЫБРАТЬ ...") выбирают данные из базы; результат обходят циклом Пока Выборка.Следующий() Цикл. Проведение документа — это заполнение коллекции Движения в обработчике ОбработкаПроведения: для каждого регистра добавляются записи через Движения.ИмяРегистра.Добавить().

Также повсеместны: обращения к предопределённым элементам справочников, вызовы процедур из общих модулей вида ОбщегоНазначения.ЗначениеРеквизитаОбъекта(...) (в типовых конфигурациях), обёртки Попытка ... Исключение ... КонецПопытки для обработки ошибок и Сообщить(...) / ОбщегоНазначения.СообщитьПользователю(...) для вывода сообщений. Узнав эти шаблоны, вы будете читать код как связный текст, а не как набор символов.

В типовых конфигурациях (БП, УТ, ERP) большая часть логики вынесена в общие модули библиотек БСП. Если обработчик документа выглядит пустым и только вызывает одну процедуру — идите по этой цепочке вызовов, настоящая логика обычно на втором-третьем уровне вложенности.
ПЗ
Практическое замечание

Безопасная практика: где учиться и что не трогать

Экспериментируйте только на копии базы или учебной конфигурации. Изменение модуля проведения документа или обработчика записи в рабочей базе способно исказить учётные данные, а откатить такие последствия бывает сложно. Перед любым изменением типового кода снимите копию конфигурации и убедитесь, что понимаете, какие объекты затронет правка.

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

Типичные ошибки начинающих
01
Чтение кода без учёта модуля: один и тот же обработчик в форме и в объекте работает по-разному, выводы оказываются неверными
02
Игнорирование директив &НаКлиенте/&НаСервере: непонятно, почему запрос к базе недоступен или почему код выполняется дважды
03
Попытка запомнить синтаксис вместо использования синтакс-помощника (Ctrl+Shift+F1) — справка по любому методу доступна прямо в конфигураторе
04
Разбор только в голове без отладчика: гипотезы о поведении кода не проверяются, ошибки понимания закрепляются
05
Правка типового кода напрямую вместо расширения — проблемы при следующем обновлении конфигурации

FAQ: частые вопросы о понимании кода 1С

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

Нет. Встроенный язык 1С самодостаточен, и многие разработчики начинают именно с него. Знание любого другого языка ускоряет освоение, потому что концепции (переменные, циклы, функции) совпадают, но не является обязательным условием.

Почему в коде встречаются английские слова, если язык русский?

Встроенный язык имеет два синтаксиса: русский и английский, их можно смешивать. Кроме того, в типовых конфигурациях имена процедур в библиотечных модулях часто пишут по-английски, а запросы к базе всегда используют английские ключевые слова (ВЫБРАТЬ/SELECT допустимы оба).

Как найти, откуда вызывается конкретная процедура?

Установите курсор на имя процедуры и выполните глобальный поиск (Ctrl+Shift+F) по конфигурации — результаты покажут все места вызова. Также полезен отладчик: в момент останова окно стека вызовов показывает цепочку, по которой пришло выполнение.

Что делать, если код выглядит понятно, но система ведёт себя иначе?

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

Сколько времени нужно, чтобы научиться читать код 1С?

Базовое чтение типовых конструкций обычно даётся за несколько недель регулярной практики с конфигуратором и отладчиком. Уверенное понимание больших типовых конфигураций требует дольше — из-за объёма библиотечного кода, а не из-за сложности языка.

Чем синтакс-помощник лучше поиска в интернете?

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

Итог

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

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