Разработка и Конфигурация · 10 мин
Как понять написание кода в 1С
Как научиться читать и понимать код на встроенном языке 1С: структура модулей, синтаксис, отладка, типовые конструкции и частые ошибки начинающих.
Код в 1С пугает новичков не сложностью синтаксиса, а непривычной средой: русскоязычные операторы, десятки видов модулей, скрытые обработчики событий. На деле встроенный язык 1С проще большинства «классических» языков — у него одинаковая структура во всех конфигурациях, а значит, научившись читать один фрагмент, вы поймёте логику и остальных.
Главный навык — не запоминание операторов, а умение отвечать на три вопроса: где выполняется код (клиент или сервер), когда он запускается (какое событие его вызвало) и над какими данными работает (документ, справочник, регистр). Эта статья даёт рабочий метод разбора чужого и своего кода без углубления в теорию программирования.
Из чего состоит код 1С: модули и их роль
Весь код в 1С живёт в модулях, привязанных к объектам конфигурации. Модуль объекта документа описывает поведение самого документа (проведение, заполнение), модуль формы — поведение экранной формы, общие модули — переиспользуемые процедуры и функции, модуль приложения — логику запуска системы. Понять назначение фрагмента кода невозможно, не зная, в каком модуле он находится.
Практический приём: откройте конфигуратор, найдите объект в дереве конфигурации, щёлкните правой кнопкой и посмотрите доступные модули. Если вы читаете чужой код и видите обращение ЭтотОбъект.Ссылка, значит, вы в модуле объекта, и код работает с конкретным экземпляром документа или элемента справочника. Если видите ЭтаФорма или Элементы — это модуль формы, и речь об интерфейсе.
Базовый синтаксис: что нужно узнавать на глаз
Встроенный язык 1С использует русские ключевые слова (допустим и английский вариант, но в типовых конфигурациях преобладает русский). Основные конструкции, которые встречаются в любом коде:
Процедура ... КонецПроцедурыиФункция ... Возврат ... КонецФункции— блоки кода; функция обязана вернуть значение;Если ... Тогда ... ИначеЕсли ... Иначе ... КонецЕсли;— ветвление по условию;Для Каждого Строка Из ТаблицаЗначений Цикл ... КонецЦикла;— перебор коллекций;Перем— объявление переменной (объявление необязательно, переменная создаётся при первом присваивании);- точка с запятой завершает оператор,
//начинает комментарий.
Отдельно выучите обращения к данным через точку: Документы.РеализацияТоваровУслуг.НайтиПоНомеру(...) читается как «менеджер документов типа РеализацияТоваровУслуг, метод НайтиПоНомеру». Левая часть до точки — объект или коллекция из дерева конфигурации, правая — его свойство или метод. Это покрывает большую часть «непонятных» строк.
Функция ПолучитьСуммуДокумента(СсылкаНаДокумент)
Сумма = 0;
Для Каждого СтрокаТовара Из СсылкаНаДокумент.Товары Цикл
Сумма = Сумма + СтрокаТовара.Сумма;
КонецЦикла;
Возврат Сумма;
КонецФункцииСобытия и обработчики: почему код «сам запускается»
Частая причина непонимания — код никто явно не вызывает, но он выполняется. Причина в событийной модели: платформа сама вызывает обработчики при определённых действиях пользователя или системы. ПриЗаписи срабатывает при записи объекта, ОбработкаПроведения — при проведении документа, ПриОткрытии — при открытии формы, ПередЗаписью — непосредственно перед сохранением.
Чтобы понять, когда сработает процедура, смотрите на её имя и на директивы компиляции над ней: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Директива показывает, где выполняется код — на компьютере пользователя или на сервере. Это критично: на клиенте недоступны прямые запросы к базе данных, поэтому типовой код постоянно «перепрыгивает» между клиентом и сервером через вызовы серверных процедур.
Пошаговый метод чтения незнакомого кода
Разбирайте любой фрагмент по фиксированной схеме, а не «с первой строки до последней». Сначала контекст, потом детали — так вы не утонете в частностях, не поняв общей цели.
- 1Определите модуль: форма, объект или общий модуль — это задаёт доступный контекст
- 2Найдите точку входа: имя процедуры и событие, которое её вызывает
- 3Выпишите входные данные: параметры процедуры, реквизиты объекта, к которым идёт обращение
- 4Проследите изменения данных: что записывается, какие документы или регистры затрагиваются
- 5Проверьте вызовы других процедур: откройте их через Ctrl+клик или поиск по конфигурации
- 6Сформулируйте одним предложением, что делает фрагмент, и сверьте с комментариями и именами
Инструменты конфигуратора ускоряют разбор: Ctrl+F — поиск по текущему модулю, Ctrl+Shift+F — глобальный поиск по всей конфигурации (так находят, откуда вызывается процедура), F12 или Ctrl+клик — переход к определению процедуры. Если процедура вызывается из пяти мест, глобальный поиск покажет все сценарии её использования.
Отладка: способ увидеть код в действии
Чтение кода «всухую» даёт только гипотезу. Проверяет её отладчик: поставьте точку останова (F9) на интересующей строке, запустите отладку (F5) и выполните в пользовательском режиме действие, которое должно вызвать код. Если остановки не произошло — событие не наступило или вы смотрите не тот модуль.
В остановке используйте табло (Shift+F9) и окно «Вычислить выражение»: введите имя переменной или реквизита и увидите реальное значение в данный момент. Клавиши F10 и F11 выполняют код по шагам — без захода внутрь вызываемых процедур и с заходом соответственно. Проходя код по шагам и наблюдая значения, вы понимаете его быстрее, чем при многократном перечитывании.
Как проверить, что вы поняли код правильно
Код выполняется при ожидаемом действии пользователя
Остановки нет — событие другое или код в другом модуле
Совпадают с ожидаемыми по логике прочитанного кода
Значения неожиданные — есть скрытая ветка или другой источник данных
Документ проводится, записи появляются там, где предполагалось
Движения отсутствуют или в других регистрах — код не до конца понят
Типовые конструкции, которые встречаются постоянно
Большая часть прикладного кода 1С состоит из повторяющихся шаблонов. Запросы с помощью Запрос = Новый Запрос("ВЫБРАТЬ ...") выбирают данные из базы; результат обходят циклом Пока Выборка.Следующий() Цикл. Проведение документа — это заполнение коллекции Движения в обработчике ОбработкаПроведения: для каждого регистра добавляются записи через Движения.ИмяРегистра.Добавить().
Также повсеместны: обращения к предопределённым элементам справочников, вызовы процедур из общих модулей вида ОбщегоНазначения.ЗначениеРеквизитаОбъекта(...) (в типовых конфигурациях), обёртки Попытка ... Исключение ... КонецПопытки для обработки ошибок и Сообщить(...) / ОбщегоНазначения.СообщитьПользователю(...) для вывода сообщений. Узнав эти шаблоны, вы будете читать код как связный текст, а не как набор символов.
В типовых конфигурациях (БП, УТ, ERP) большая часть логики вынесена в общие модули библиотек БСП. Если обработчик документа выглядит пустым и только вызывает одну процедуру — идите по этой цепочке вызовов, настоящая логика обычно на втором-третьем уровне вложенности.
Безопасная практика: где учиться и что не трогать
Экспериментируйте только на копии базы или учебной конфигурации. Изменение модуля проведения документа или обработчика записи в рабочей базе способно исказить учётные данные, а откатить такие последствия бывает сложно. Перед любым изменением типового кода снимите копию конфигурации и убедитесь, что понимаете, какие объекты затронет правка.
В типовых конфигурациях предпочитайте расширения и переопределяемые обработчики прямой правке модулей: прямые изменения усложняют обновление и могут быть потеряны при нём. Если задача — только чтение и понимание кода, рисков нет: конфигуратор без записи изменений ничего не меняет в базе.
FAQ: частые вопросы о понимании кода 1С
Нужно ли знать другой язык программирования, чтобы понять код 1С?
Нет. Встроенный язык 1С самодостаточен, и многие разработчики начинают именно с него. Знание любого другого языка ускоряет освоение, потому что концепции (переменные, циклы, функции) совпадают, но не является обязательным условием.
Почему в коде встречаются английские слова, если язык русский?
Встроенный язык имеет два синтаксиса: русский и английский, их можно смешивать. Кроме того, в типовых конфигурациях имена процедур в библиотечных модулях часто пишут по-английски, а запросы к базе всегда используют английские ключевые слова (ВЫБРАТЬ/SELECT допустимы оба).
Как найти, откуда вызывается конкретная процедура?
Установите курсор на имя процедуры и выполните глобальный поиск (Ctrl+Shift+F) по конфигурации — результаты покажут все места вызова. Также полезен отладчик: в момент останова окно стека вызовов показывает цепочку, по которой пришло выполнение.
Что делать, если код выглядит понятно, но система ведёт себя иначе?
Значит, часть логики находится elsewhere: в подписках на события, в переопределяемых модулях библиотек или в расширениях конфигурации. Проверьте ветку «Общие — Подписки на события» в дереве конфигурации и список подключённых расширений, а затем пройдите сценарий отладчиком.
Сколько времени нужно, чтобы научиться читать код 1С?
Базовое чтение типовых конструкций обычно даётся за несколько недель регулярной практики с конфигуратором и отладчиком. Уверенное понимание больших типовых конфигураций требует дольше — из-за объёма библиотечного кода, а не из-за сложности языка.
Чем синтакс-помощник лучше поиска в интернете?
Синтакс-помощник (Ctrl+Shift+F1) описывает методы именно той версии платформы, на которой работает ваша конфигурация, и учитывает контекст — например, показывает свойства конкретного объекта. Материалы в интернете могут относиться к другой версии платформы или другой конфигурации.
Что важно запомнить
Понимание кода 1С строится на трёх опорах: знание того, в каком модуле и по какому событию выполняется код, узнавание типовых конструкций работы с данными и проверка гипотез отладчиком. Читайте код от контекста к деталям, экспериментируйте только на копиях базы и не правьте типовые модули напрямую.