Навигация по коду конфигуратора: от номера строки до нужной процедуры
Содержание
Чтобы перейти к строке в модуле 1С, откройте модуль в конфигураторе, нажмите Ctrl+G, введите номер строки и нажмите «ОК». Та же команда есть в меню: Правка → Перейти к строке. Курсор встанет в начало нужной строки, а текущий номер вы увидите справа внизу, в строке состояния.
Частое заблуждение — что номер строки надо искать «глазами», прокручивая модуль на тысячи строк. В конфигураторе нет нумерации на полях, и многие так и делают. На деле хватает трёх-четырёх сочетаний клавиш, а в большинстве случаев номер строки и вовсе не нужен: к месту ошибки можно прыгнуть двойным щелчком из окна сообщений или из стека вызовов.
Где брать номер строки и как прочитать его в тексте ошибки
Номер строки почти всегда приходит из сообщения об ошибке. В режиме 1С:Предприятие подробный текст ошибки выглядит примерно так:
{ОбщийМодуль.РаботаСФайлами.Модуль(1287)}: Ошибка при вызове метода контекста (Записать)
Разбираем по частям:
- 📍
ОбщийМодуль.РаботаСФайлами— объект метаданных, где упал код; - 📍
Модуль— вид модуля (бываетМодульОбъекта,МодульМенеджера,Форма.МодульФормы); - 📍
1287— номер строки в этом модуле; - 📍 текст после двоеточия — что именно пошло не так.
Если ошибок в тексте несколько вложенных, читайте их сверху вниз: верхняя строка — место, где исключение возникло, нижние — откуда шёл вызов. Чаще всего исправлять нужно не в самом глубоком месте, а там, где передали неправильные данные.
Полный текст ошибки удобно скопировать из окна «Подробно» и вставить в блокнот. Так вы не перепутаете номер и имя модуля, пока открываете конфигуратор.
Ctrl+G: переход к строке модуля через штатный диалог
Это основной способ. Он работает в любом модуле: общем, объекта, менеджера, формы, команды.
- Откройте конфигуратор и найдите объект в дереве конфигурации. Быстрее всего — встать в дерево и начать печатать имя объекта: курсор переместится к совпадению.
- Откройте нужный модуль. Для формы — вкладка «Модуль» в редакторе формы.
- Щёлкните в любом месте текста, чтобы фокус оказался в редакторе кода.
- Нажмите
Ctrl+Gили выберитеПравка → Перейти к строке. - Введите номер (например,
1287) и нажмитеEnter.
Курсор окажется на нужной строке, а редактор прокрутит текст так, чтобы она была видна. Сверьтесь со строкой состояния внизу окна: там показаны номер строки и позиция в ней.
Если Ctrl+G ничего не делает, проверьте фокус. Команда активна только когда курсор стоит в тексте модуля, а не в дереве конфигурации или в окне свойств.
Номер больше общего числа строк диалог не примет или поставит курсор в конец текста. Это быстрый признак, что вы открыли не тот модуль: например, модуль объекта вместо модуля менеджера.
Строка состояния, прокрутка и клавиши перемещения
Когда точный номер не нужен, а надо просто быстро двигаться по длинному модулю, работают обычные клавиши редактора.
| Клавиши | Что делают |
|---|---|
Ctrl+Home / Ctrl+End | в начало / в конец модуля |
PgUp / PgDn | на экран вверх / вниз |
Home / End | в начало / в конец текущей строки |
Ctrl+← / Ctrl+→ | на слово влево / вправо |
Ctrl+G | к строке с заданным номером |
Полосу прокрутки справа можно тянуть мышью. Для прыжков на глаз этого хватает, но на модуле в 10–15 тысяч строк одна пиксельная позиция ползунка — это десятки строк. Поэтому ползунком удобно «долететь» до нужной трети модуля, а дальше доводить клавишами или Ctrl+G.
Строка состояния — главный ориентир. В конфигураторе нет колонки с номерами строк слева от кода, поэтому номер текущей строки смотрят только внизу окна. Если строки состояния не видно, включите её в меню Вид (там же, где включаются панели инструментов).
Поиск по тексту вместо номера строки
Номер строки быстро устаревает. Достаточно кому-то добавить пять строк выше — и ваш «1287» уже указывает на другое место. Поиск по тексту надёжнее.
Поиск внутри открытого модуля
- 🔎
Ctrl+F— открыть поиск, ввести фрагмент кода или имя переменной; - 🔎
F3— следующее совпадение,Shift+F3— предыдущее; - 🔎 если выделить слово и нажать
Ctrl+F, оно сразу подставится в поле поиска.
Ищите по уникальному куску: тексту сообщения пользователю, имени реквизита в кавычках, необычному имени переменной. Слово Запрос в типовом модуле встретится сотни раз, а строка "Не заполнен склад отгрузки" — один-два.
Поиск по всей конфигурации
Если непонятно, в каком модуле находится код, нужен глобальный поиск: Правка → Глобальный поиск. В нём можно искать сразу по всем модулям, а не только по открытому. Результаты выводятся списком внизу, и двойной щелчок по строке результата открывает модуль ровно на найденном месте.
Это лучший способ найти, откуда взялось сообщение пользователя. Скопируйте текст сообщения из 1С:Предприятия, вставьте в глобальный поиск — и попадёте на строку, где вызывается Сообщить() или ОбщегоНазначения.СообщитьПользователю().
Переход к процедуре по имени
В длинных модулях проще прыгать не по номеру, а по имени процедуры. В конфигураторе есть список процедур и функций модуля: кнопка на панели редактора текста или сочетание Ctrl+Alt+P. Начните печатать имя — список отфильтруется, а Enter переведёт курсор к объявлению.
Ещё один приём — F12 на имени вызываемой процедуры. Курсор перейдёт к её определению, даже если она в другом общем модуле.
Переход к строке в режиме отладки
В отладчике номер строки вообще не нужен вводить вручную: платформа сама показывает место остановки.
Точка останова на нужной строке
- Перейдите к строке через
Ctrl+Gили поиск. - Нажмите
F9— слева появится красная метка точки останова. - Запустите отладку (
F5) и выполните в 1С:Предприятии действие, которое вызывает этот код. - Когда выполнение дойдёт до строки, конфигуратор откроет модуль на ней и подсветит её.
Дальше по шагам: F10 — шаг с обходом (не заходя в вызываемые процедуры), F11 — шаг с заходом внутрь. Shift+F9 открывает окно вычисления выражения, где можно посмотреть значения переменных.
Остановка по ошибке
Если точное место падения неизвестно, включите Отладка → Остановка по ошибке. Отладчик сам остановится на строке, где возникло исключение. Это быстрее, чем расшифровывать текст ошибки и искать номер.
Стек вызовов
Окно стека вызовов (Отладка → Стек вызовов) показывает цепочку процедур, которая привела к текущей строке. Двойной щелчок по любой строке стека открывает соответствующий модуль ровно на месте вызова. Так вы проходите путь «снизу вверх», не вводя ни одного номера.
Отладку на рабочей базе с пользователями лучше не вести: пока выполнение стоит на точке останова, сеанс, в котором вы воспроизводите ошибку, «висит». Для серверной базы отладку на сервере должен разрешить администратор. Безопаснее воспроизводить ошибку на копии базы.
Большие модули: как не потеряться в коде на тысячи строк
В типовых конфигурациях есть общие модули по 10–20 тысяч строк. Здесь помогает не только переход к строке, но и организация кода.
Области и сворачивание
Код в типовых решениях разбит инструкциями препроцессора:
#Область ПрограммныйИнтерфейс
Процедура ЗаполнитьТабличнуюЧасть(Объект) Экспорт
// ...
КонецПроцедуры
#КонецОбласти
Области, процедуры и функции можно сворачивать кнопкой «минус» слева от первой строки блока. Свернув всё ненужное, вы видите структуру модуля на одном экране. При переходе по Ctrl+G к строке внутри свёрнутого блока редактор раскроет его.
Закладки
Если в одном модуле вы постоянно прыгаете между двумя-тремя местами, поставьте закладки:
- 🔖
Ctrl+F2— поставить или снять закладку на текущей строке; - 🔖
F2— к следующей закладке; - 🔖
Shift+F2— к предыдущей.
Закладки помнят место даже после того, как выше добавили строки, — в отличие от записанного на бумажке номера.
Полезные привычки
- ✅ Записывайте не только номер строки, но и имя процедуры. Через неделю номер уже может не совпадать.
- ✅ Перед поиском по номеру из старого лога убедитесь, что конфигурацию с тех пор не обновляли.
- ✅ Для модулей форм сначала откройте форму, затем вкладку «Модуль»: у формы и у объекта модули разные, и нумерация у них своя.
EDT, выгрузка в файлы и сторонние инструменты
Кроме конфигуратора, есть ещё несколько способов работать с кодом с нормальной нумерацией строк.
1C:Enterprise Development Tools
EDT построена на Eclipse и показывает номера строк слева от кода. Переход к строке там — Ctrl+L, а быстрый список процедур открытого модуля — Ctrl+O. Если в тексте ошибки указан модуль и номер, в EDT удобно открыть модуль
через поиск ресурса и сразу перейти к строке.
Выгрузка конфигурации в файлы
В конфигураторе есть команда Конфигурация → Выгрузить конфигурацию в файлы. Каждый модуль сохраняется отдельным файлом .bsl. Его можно открыть в любом редакторе с нумерацией строк, например в VS Code с расширением для языка 1С. Это удобно, когда нужно сравнить модуль с другой версией или найти строку из лога, не открывая базу.
Выгрузка — только для чтения и анализа. Правки, внесённые во внешних файлах, сами в базу не попадут: их нужно загрузить обратно и обновить конфигурацию базы данных. Без понимания этого процесса редактируйте код в конфигураторе.
Внешние обработки и расширения
Код внешней обработки открывается в конфигураторе через Файл → Открыть. Переход к строке работает так же, Ctrl+G. В тексте ошибки внешняя обработка обозначается как ВнешняяОбработка.Имя.МодульОбъекта(номер).
Для расширений конфигурации у каждого модуля своя нумерация. Если ошибка возникла в коде расширения, номер строки относится к модулю расширения, а не к одноимённому модулю основной конфигурации. Откройте нужное расширение через Конфигурация → Расширения конфигурации и ищите строку там.
Существуют и сторонние надстройки над конфигуратором, расширяющие навигацию по коду. Перед установкой в рабочей среде проверьте их совместимость с вашей версией платформы.
Почему переход приводит не туда: частые ошибки
- ❌ Открыт не тот модуль. У справочника есть модуль объекта, модуль менеджера и модули каждой формы. Номер
(245)вМодульМенеджераи вМодульОбъекта— две разные строки. - ❌ Конфигурация изменилась после ошибки. Номер из вчерашнего сообщения после обновления указывает на другой код.
- ❌ Конфигурация базы данных отличается от основной. Если вы правили код, но не обновили конфигурацию базы данных, пользователи работают со старой версией. Номера в их ошибках относятся к ней.
- ❌ Ошибка в расширении. Ищут в основной конфигурации, а код лежит в расширении с тем же именем объекта.
- ❌ Модуль без исходного текста. У некоторых поставляемых решений код закрыт. Модуль открывается пустым или не открывается, перейти к строке нельзя.