Как добраться до нужной процедуры в конфигурации 1С 8.3

· 9 мин

Содержание

Код в 1С ищут в Конфигураторе: Правка → Глобальный поиск (Ctrl+Shift+F) находит слово во всех модулях сразу. Но сначала нужно понять, что искать. Частая ошибка — листать дерево конфигурации наугад, открывая модуль за модулем. Быстрее начать с пользовательского режима: ссылка на объект, текст ошибки или отладчик сами скажут, где лежит нужная процедура.

Ниже — способы для платформы 8.3 с интерфейсом «Такси». Они общие для всех типовых конфигураций: Бухгалтерии, ЗУП, УТ, ERP. Разница только в именах объектов.

Что у вас есть на руках?

Как определить объект, в котором сидит код

Прежде чем открывать Конфигуратор, выясните имя объекта метаданных. В пользовательском режиме для этого есть три приёма.

Ссылка на форму или элемент

Откройте документ, справочник или отчёт и нажмите Shift+F11 (команда «Получить ссылку», значок цепочки в заголовке формы). В буфер попадёт строка вида:

e1cib/data/Документ.РеализацияТоваровУслуг?ref=8f2a00155d01e60111ee...

Часть после data/ или app/ — это тип и имя объекта: Документ.РеализацияТоваровУслуг. Его и ищите в дереве конфигурации. Для отчётов и обработок ссылка выглядит как e1cib/app/Отчет.ОборотноСальдоваяВедомость.

Текст ошибки

Окно ошибки 1С почти всегда содержит адрес кода в фигурных скобках:

{Документ.ПоступлениеТоваровУслуг.МодульОбъекта(1245)}: Поле объекта не обнаружено (Склад)

Здесь всё готово: объект, модуль и номер строки — 1245. Откройте этот модуль в Конфигураторе и нажмите Ctrl+G («Перейти к строке»). Если ошибок в цепочке несколько, нажмите «Подробнее» — там стек вызовов, от самой глубокой процедуры к самой верхней.

Имя команды или кнопки

Если нужен код кнопки, запомните её текст дословно. В Конфигураторе этот текст ищется глобальным поиском: он хранится в свойстве «Заголовок» элемента формы или команды. Через заголовок вы выйдете на форму, а через свойство «Действие» — на обработчик.

Дерево конфигурации и глобальный поиск

Откройте базу в режиме Конфигуратора и выполните Конфигурация → Открыть конфигурацию. Слева появится дерево объектов.

Поиск по дереву

Над деревом есть строка поиска. Введите часть имени — Реализация — и дерево отфильтруется до подходящих объектов. Это быстрее, чем раскрывать ветку «Документы» с сотней элементов.

Где лежит код у типичного объекта:

Что ищетеГде открыть
Проведение, проверки при записиМодуль объекта: ОбработкаПроведения, ПередЗаписью, ОбработкаПроверкиЗаполнения
Печать, заполнение, общие методы объектаМодуль менеджера
Реакция на кнопки и поля формыМодуль формы (ветка «Формы» → форма → вкладка «Модуль»)
Код, общий для многих объектовОбщие → Общие модули
Действия при старте программыМодуль сеанса, модуль управляемого приложения
Фоновые операции по расписаниюОбщие → Регламентные задания → свойство «Имя метода»

Модули открываются через контекстное меню объекта: «Открыть модуль объекта», «Открыть модуль менеджера».

Глобальный поиск

Правка → Глобальный поиск (Ctrl+Shift+F) ищет строку во всех текстах конфигурации. Результаты выводятся списком внизу окна, двойной щелчок открывает модуль на нужной строке.

💡 Ищите не фразу из интерфейса, а уникальный фрагмент: имя реквизита, текст сообщения пользователю, имя процедуры. По слову «Склад» найдутся тысячи строк, по «КонтролироватьОстатки» — десяток.

Навигация внутри модуля

  • 🔹 F12 — перейти к определению процедуры или функции под курсором, даже если она в общем модуле.
  • 🔹 Ctrl+Alt+P — список процедур и функций модуля с фильтром по имени.
  • 🔹 Контекстное меню объекта → «Поиск ссылок на объект» — где этот объект используется: в реквизитах, подписках, ролях, других модулях.

Обработчик кнопки или поля формы

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

  1. Найдите элемент в дереве элементов формы. Если элементов много, выделите нужный прямо на макете внизу — дерево само встанет на него.
  2. Откройте палитру свойств (Alt+Enter) и пролистайте до группы «События».
  3. Напротив события, например «ПриИзменении», стоит имя процедуры. Нажмите на значок лупы рядом — откроется модуль формы на этой процедуре.
  4. Для кнопки смотрите свойство «Имя команды», затем на вкладке «Команды» — свойство «Действие» этой команды.

💡 Если у команды нет действия в модуле формы, это стандартная команда платформы или команда объекта из ветки «Команды» в дереве конфигурации. У такой команды код лежит в модуле команды: контекстное меню → «Открыть модуль команды».

Объекты на поддержке

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

Отладчик: поймать код в момент выполнения

Глобальный поиск не поможет, если вы не знаете ни имени, ни текста. Тогда пусть программа сама покажет, какой код она выполняет.

  1. В Конфигураторе выберите Отладка → Начать отладку → 1С:Предприятие (F5).
  2. В открывшемся сеансе дойдите до нужного действия, но не выполняйте его.
  3. Поставьте точку останова (F9) в предполагаемом месте — например, на первой строке ОбработкаПроведения.
  4. Выполните действие в 1С. Выполнение остановится, Конфигуратор откроет модуль на этой строке.
  5. Откройте Отладка → Стек вызовов (Ctrl+Alt+C): там видна вся цепочка — какая форма вызвала какой модуль.

Если места вообще нет

Включите Отладка → Остановка по ошибке, если ищете источник ошибки. Отладчик остановится на той строке, где ошибка возникла, ещё до появления окна.

Для действий, которые выполняются долго, подходит Отладка → Замер производительности. Запустите замер, выполните операцию, остановите замер. Получится список всех строк кода, которые отработали, с числом вызовов и временем. Отсортируйте по времени — и вы увидите, какие модули участвовали.

Клиент-серверный вариант

Чтобы отлаживать серверный код в клиент-серверной базе, сервер 1С должен быть запущен с ключом -debug.

Добавление ключа требует перезапуска службы агента сервера 1С. Все сеансы пользователей при этом оборвутся. Делайте это вне рабочего времени или на тестовой копии базы.

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

Код в СКД, макетах и печатных формах

Часть логики отчётов вообще не лежит в модулях. Глобальный поиск по текстам модулей её пропустит.

Где искать в отчёте на СКД

Откройте отчёт в дереве, затем его макет «ОсновнаяСхемаКомпоновкиДанных» (имя может отличаться — смотрите ветку «Макеты» отчёта). В схеме компоновки:

  • 📄 вкладка «Наборы данных» — текст запроса, именно здесь чаще всего «живёт» логика отбора;
  • 🧮 «Вычисляемые поля» — выражения, иногда с вызовом функций общих модулей;
  • 📊 «Ресурсы» — формулы итогов;
  • ⚙️ «Параметры» — выражения для значений по умолчанию.

Если в выражении СКД вызывается функция вида ОбщийМодуль.Функция(), переходите в этот общий модуль — код там.

Дополнительно проверьте модуль самого отчёта. Обработчик ПриКомпоновкеРезультата может полностью подменить стандартный вывод, и тогда схема — лишь часть картины.

Печатные формы

В типовых конфигурациях на БСП печать устроена так:

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

Ищите по имени макета: глобальный поиск строки "ПФ_MXL_ часто сразу выводит на функцию, которая этот макет заполняет.

Обработчики событий, подписки и связи между объектами

Бывает, что в модуле объекта код есть, а поведение всё равно другое. Значит, обработчик сидит в другом месте.

Подписки на события

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

  • 📌 «Источник» — какие объекты затронуты;
  • 📌 «Событие» — ПередЗаписью, ПриЗаписи, ОбработкаПроведения и т.д.;
  • 📌 «Обработчик» — общий модуль и процедура, куда уходит вызов.

Быстрый приём: «Поиск ссылок на объект» у нужного документа покажет и подписки, в источниках которых он указан.

Переопределяемые модули БСП

В типовых конфигурациях часть поведения настраивается через общие модули с суффиксом Переопределяемый: например, ОбщегоНазначенияПереопределяемый. Если ищете, откуда берётся настройка, проверьте глобальным поиском модули с этим суффиксом.

Расширения конфигурации

Это приём, о котором забывают чаще всего. Код может быть не в основной конфигурации, а в расширении. Откройте Конфигурация → Расширения конфигурации и посмотрите список.

В расширении процедуры помечаются аннотациями:

&После("ОбработкаПроведения")
Процедура РасшОбработкаПроведения(Отказ, РежимПроведения)
    // этот код выполнится после типового
КонецПроцедуры

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

Внешние отчёты и обработки

Внешний файл .epf или .erf в дереве конфигурации не виден. Его код открывается отдельно.

Файл на диске

В Конфигураторе выберите Файл → Открыть и укажите файл. Откроется своё дерево: формы, макеты, модуль объекта. Поиск, F12 и отладка работают так же.

Обработка, загруженная в базу

Дополнительные отчёты и обработки хранятся в базе, а не на диске. В Бухгалтерии 3.0 список находится в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. В ЗУП 3.1 и УТ 11 — в разделе НСИ и администрирование под тем же названием.

Откройте карточку нужной обработки и выгрузите её в файл командой выгрузки на панели карточки. Затем откройте полученный файл в Конфигураторе.

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

Поиск по всей конфигурации: выгрузка в файлы и АПК

Выгрузка конфигурации в файлы

Когда нужно искать по всему сразу — модулям, запросам в СКД, свойствам форм, — выгрузите конфигурацию в XML: Конфигурация → Выгрузить конфигурацию в файлы. То же из командной строки:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"" /DumpConfigToFiles "D:\dump"

Путь к платформе и номер версии подставьте свои. После выгрузки ищите любым текстовым поиском:

findstr /S /I /M "КонтролироватьОстатки" D:\dump\*.*

Ключ /M выведет только имена файлов. По пути файла видно объект: Documents\РеализацияТоваровУслуг\Ext\ObjectModule.bsl — модуль объекта, а файлы Template.xml в каталогах макетов — схемы СКД.

АПК

АПК — «1С:Автоматизированная проверка конфигураций». Это отдельная конфигурация: в неё загружают проверяемую конфигурацию и запускают проверки по стандартам разработки. Результат — список замечаний с указанием объекта, модуля и строки.

Для навигации «где обработчик кнопки» АПК избыточна. Она полезна, когда ищете проблемный код целиком: запросы в цикле, неиспользуемые процедуры, обращения к несуществующим реквизитам после обновления. Каждое замечание ведёт к конкретному месту в коде.

Сравнение способов:

СпособКогда подходитОграничения
Глобальный поискЗнаете имя или текстИщет в текстах, схемы СКД может не охватить
Отладчик и стек вызововНе знаете, где код, но можете повторить действиеНужен доступ к Конфигуратору, на сервере — ключ -debug
Замер производительностиДолгая операция, много модулейБольшой список строк, нужно сортировать
Выгрузка в файлыПоиск по всему: запросы, формы, макетыВыгрузка большой конфигурации занимает время
АПКАудит качества кодаОтдельная установка и загрузка конфигурации

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

Можно ли посмотреть код без Конфигуратора?
Да, если конфигурация выгружена в файлы: модули лежат в обычных текстовых файлах .bsl. Их удобно читать в любом редакторе. В режиме 1С:Предприятия код не виден.
Почему модуль открывается пустым или пишет «Исходный текст недоступен»?
Модуль поставлен без исходного текста — так делают разработчики тиражных решений. Прочитать такой код нельзя, остаётся отладчик в части вызовов и документация разработчика.
Почему глобальный поиск не находит текст сообщения, который я вижу на экране?
Сообщение может собираться из частей, браться из макета или из расширения. Ищите по короткому уникальному куску фразы и проверьте расширения.
Где искать код, если ошибка указывает на «ВнешняяОбработка.…»?
Это внешняя обработка, а не конфигурация. Найдите её в списке дополнительных отчётов и обработок, выгрузите в файл и откройте через Файл → Открыть.
Нужен ли монопольный доступ, чтобы читать и искать код?
Нет. Открыть конфигурацию и искать по ней можно, пока пользователи работают. Монопольный режим нужен для обновления конфигурации базы данных, загрузки .dt, тестирования и исправления.