Где лежит нужный код: поиск модулей в Конфигураторе 1С 8.3, от дерева метаданных до отладчика

· 10 мин

Содержание

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

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

Какие бывают модули и где они в дереве конфигурации

Прежде чем искать, полезно понимать, в каком месте код вообще может жить. В 8.3 модуль привязан либо к конфигурации целиком, либо к конкретному объекту, либо к форме.

Вид модуляГде найти в деревеЧто там обычно
Модуль управляемого приложенияКонтекстное меню корня конфигурации → Открыть модуль управляемого приложенияДействия при запуске клиента
Модуль сеансаКорень конфигурации → Открыть модуль сеансаУстановка параметров сеанса
Модуль внешнего соединенияКорень конфигурацииКод для COM-подключений
Общий модульОбщие → Общие модулиБиблиотечные процедуры, вызываются отовсюду
Модуль объектаОбъект (документ, справочник) → контекстное меню → Открыть модуль объектаПроведение, запись, проверка заполнения
Модуль менеджераОбъект → Открыть модуль менеджераПечать, запросы по объекту, обработчики обновления
Модуль набора записейРегистр → Открыть модуль набора записейОбработка записи движений
Модуль формыОбъект → ветка Формы → форма → вкладка Модуль в редакторе формыРеакции на кнопки и поля
Модуль командыВетка Команды объекта или Общие → Общие командыОбработчик нажатия команды

Ошибка при проведении почти всегда сидит в модуле объекта или менеджера документа, а также в общих модулях, которые они вызывают. Ошибка при нажатии кнопки — в модуле формы или команды.

Поиск модуля по дереву метаданных

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

Быстрый поиск в окне конфигурации

  1. Откройте Конфигурация → Открыть конфигурацию.
  2. Встаньте в дерево и начните печатать имя объекта, например РеализацияТоваровУслуг. Либо воспользуйтесь полем поиска в верхней части окна дерева.
  3. Дерево отфильтруется или курсор перейдёт к найденному объекту.
  4. Правой кнопкой по объекту → Открыть модуль объекта или Открыть модуль менеджера.

Ищется по имени метаданных (без пробелов), а не по синониму. Документ «Реализация (акты, накладные, УПД)» в дереве называется РеализацияТоваровУслуг.

Как узнать имя объекта из пользовательского режима

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

  1. В 1С:Предприятии откройте нужный документ или форму списка.
  2. Нажмите Shift+F11 — команда получения навигационной ссылки.
  3. Ссылка вида e1cib/data/Документ.ПоступлениеТоваровУслуг?ref=… сразу показывает тип и имя объекта.

Для отчётов и обработок ссылка выглядит как e1cib/app/Отчет.ОборотноСальдоваяВедомость или e1cib/app/Обработка.… — по ней видно и имя, и вид объекта.

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

Модуль крупного документа легко превышает 5–10 тысяч строк. Полезные клавиши Конфигуратора:

  • 🔍 Ctrl+F — поиск в текущем модуле, F3 — следующее вхождение;
  • 📑 Ctrl+Alt+P — список процедур и функций модуля с фильтром по имени;
  • ➡️ Ctrl+G — переход к строке по номеру (удобно, когда номер строки есть в тексте ошибки);
  • 🔖 Ctrl+F2 — поставить закладку, F2 — перейти к следующей.

Глобальный поиск по тексту всех модулей

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

Как запустить

  1. В Конфигураторе: Правка → Глобальный поиск или Ctrl+Shift+F.
  2. В поле «Что искать» введите фрагмент текста.
  3. Отметьте флажки «Целое слово» и «Учитывать регистр», если искомое слово короткое и даёт сотни совпадений.
  4. Ограничьте область поиска: можно искать по всей конфигурации или только по выбранным объектам.
  5. Результаты появятся в отдельном окне. Двойной клик открывает модуль на нужной строке.

Что вводить в строку поиска

От качества запроса зависит, получите вы 3 совпадения или 300.

  • 💬 Текст сообщения пользователю. Ищите не всю фразу, а её уникальную часть из 2–3 слов. В типовых конфигурациях текст часто собран через НСтр() и СтрШаблон(), поэтому фраза Не заполнен склад получатель может быть разбита параметром: ищите «склад получатель» отдельно.
  • ⚙️ Имя процедуры. Если в тексте ошибки есть {ОбщийМодуль.ПроведениеСервер.Модуль(1234)} — у вас уже есть и модуль, и номер строки. Поиск не нужен, откройте модуль и нажмите Ctrl+G.
  • 🏷️ Имя реквизита. Чтобы найти все места, где заполняется реквизит, ищите .ИмяРеквизита = — с точкой и знаком равенства.
  • 📋 Имя макета или команды. Печатные формы в БСП ищите по идентификатору команды печати в модуле менеджера.

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

Переход к определению и поиск ссылок

Нашли вызов ЗаполнитьТабличнуюЧасть() и хотите увидеть сам код — не ищите его вручную.

Перейти к определению

  1. Поставьте курсор на имя процедуры или функции.
  2. Нажмите F12 или в контекстном меню выберите Перейти к определению.
  3. Конфигуратор откроет модуль, где процедура объявлена, даже если это общий модуль.

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

Поиск ссылок на объект

Обратная задача — понять, кто использует объект метаданных:

  1. Правой кнопкой по объекту в дереве → Поиск ссылок на объект.
  2. В результатах будут реквизиты других объектов, формы, роли, подсистемы, где он упомянут.

Этот поиск работает по метаданным. Упоминания в тексте кода вроде Документы.ПоступлениеТоваровУслуг.СоздатьДокумент() он может не показать — для них используйте глобальный поиск по имени объекта.

Где используется процедура

Чтобы увидеть все вызовы своей процедуры, запустите глобальный поиск по её имени с флажком «Целое слово». Для экспортной процедуры общего модуля ищите сразу с префиксом: ИмяМодуля.ИмяПроцедуры.

Поиск через отладчик: где на самом деле выполняется код

Когда текстом не найти — сообщение собирается динамически или вызов идёт через переменную — запускайте код и смотрите, куда он попадёт. Это главный приём практика.

Подготовка

  1. В Конфигураторе: Отладка → Начать отладку (F5). Запустится 1С:Предприятие под отладкой.
  2. Для клиент-серверной базы отладку на сервере нужно разрешить в настройках сервера 1С; без этого серверные точки останова не сработают.
  3. Если база уже открыта у пользователя, подключиться можно через Отладка → Подключение.

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

Три способа поймать место выполнения

  • 🛑 Остановка по ошибке. Отладка → Остановка по ошибке → включите флажок. Воспроизведите ошибку — отладчик встанет ровно на той строке, где она возникла.
  • ⏸️ Прервать выполнение. Если операция долго выполняется или зависает, нажмите Отладка → Прервать (Ctrl+Break). Отладчик остановится в той строке, которая выполняется прямо сейчас.
  • 🔴 Точка останова. F9 на строке. Подходит, когда вы уже подозреваете процедуру и хотите проверить, вызывается ли она.

Стек вызовов

После остановки откройте Отладка → Стек вызовов (Ctrl+Alt+C). Это цепочка от нажатой кнопки до текущей строки: модуль формы → общий модуль → модуль менеджера. Двойной клик по строке стека открывает соответствующий модуль.

Пример: пользователь жмёт «Заполнить», появляется ошибка. Через «Остановку по ошибке» и стек видно, что команда формы вызвала ЗаполнениеДокументов.ЗаполнитьПоОстаткам(), а ошибка — в запросе внутри этой функции.

Замер производительности

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

Общие, внешние модули и расширения: где искать по-другому

Общие модули

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

Суффикс или признакГде выполняется
…Сервер, флажок «Сервер»На сервере
…Клиент, флажок «Клиент (управляемое приложение)»На клиенте
…КлиентСерверИ там, и там
…ВызовСервера, флажок «Вызов сервера»Вызывается с клиента, выполняется на сервере
…ПереопределяемыйТочка для доработок без изменения библиотеки
…ПовтИспКешируемые значения (повторное использование)

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

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

Код внешней обработки в конфигурации нет, глобальный поиск по базе его не увидит.

  1. В Конфигураторе: Файл → Открыть, выберите файл .epf или .erf.
  2. Откроется дерево обработки: модуль объекта — через контекстное меню корня, модули форм — в ветке Формы.
  3. Если обработка хранится в базе (Дополнительные отчеты и обработки), сначала выгрузите её из карточки в файл.

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

Доработка может быть не в основной конфигурации, а в расширении. Откройте Конфигурация → Расширения конфигурации, выберите расширение и откройте его дерево. Заимствованные объекты отмечены отдельно, а процедуры с аннотациями &Перед, &После, &Вместо перехватывают типовой код.

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

Как перенести найденный модуль в другую конфигурацию

Модуль найден, и его нужно перенести в другую базу. Выбор способа зависит от того, на поддержке ли конфигурация-приёмник.

СпособКогда подходитРиски
Скопировать текст процедурыОдна-две процедуры, общий модуль уже естьЗабыть зависимые процедуры и реквизиты
Конфигурация → Сравнить, объединить с конфигурацией из файла с отметкой только нужных объектовПеренос общего модуля или объекта целикомСлучайно затянуть лишние объекты, если не снять флажки
Перенос в расширениеКонфигурация на поддержке, не хотите снимать её с поддержкиНужно заимствовать объекты и следить за совместимостью при обновлении

Порядок для объединения из файла:

  1. В исходной базе сохраните конфигурацию в файл .cf (Конфигурация → Сохранить конфигурацию в файл).
  2. В приёмнике выберите Конфигурация → Сравнить, объединить с конфигурацией из файла.
  3. В окне сравнения снимите все флажки, затем отметьте только нужный общий модуль или объект.
  4. Нажмите «Выполнить», затем Конфигурация → Обновить конфигурацию базы данных (F7).

Перед объединением сделайте резервную копию базы (Администрирование → Выгрузить информационную базу). Обновление структуры требует монопольного доступа: пользователи должны выйти из базы.

Выгрузка в файлы, шаблоны и внешние инструменты

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

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

Вручную: Конфигурация → Выгрузить конфигурацию в файлы. Из командной строки (путь к платформе подставьте свой):

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

Модули выгрузятся в файлы .bsl в кодировке UTF-8. Поиск по ним в PowerShell:

Get-ChildItem -Path "D:\Dump\Buh" -Recurse -Filter *.bsl |
  Select-String -Pattern "склад получатель" |
  Select-Object Path, LineNumber

Путь к файлу сразу говорит, какой это модуль: Documents\ПеремещениеТоваров\Ext\ObjectModule.bsl — модуль объекта, Forms\ФормаДокумента\Ext\Form\Module.bsl — модуль формы.

Ещё удобнее открыть папку выгрузки в VS Code с расширением для языка 1С: появляется подсветка, поиск по всем файлам за секунды и переход к определению.

Шаблоны текста

В Конфигураторе есть шаблоны текста (Сервис → Шаблоны текста). Они не ищут код, но ускоряют вставку типовых конструкций, которые вы потом будете искать: например, единый комментарий доработки // ++ Фамилия ГГГГММДД. Если все доработки помечены одинаково, глобальный поиск по метке находит их за один запрос.

1С:EDT

В EDT поиск устроен как в Eclipse: Ctrl+H — поиск по тексту проекта, F3 — переход к определению, контекстное меню «Найти ссылки» — все вызовы. Плюс постоянный индекс: искать быстро даже в ERP.

Диагностика: выберите симптом

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

Можно ли найти модуль, не заходя в Конфигуратор?
Частично. Навигационная ссылка (Shift+F11) покажет имя объекта, но сам код виден только в Конфигураторе, EDT или в выгрузке конфигурации в файлы.
Почему модуль открывается только для чтения?
Конфигурация на поддержке поставщика с запретом изменений. Включите возможность изменения в настройках поддержки или вносите доработку через расширение.
Как найти, в какой строке модуля ошибка, если в тексте есть номер?
Строка вида {Документ.Имя.МодульОбъекта(512)} содержит модуль и номер строки. Откройте модуль и нажмите Ctrl+G, введите 512.
Ищет ли глобальный поиск по внешним обработкам?
Нет, только по открытой конфигурации. Внешнюю обработку откройте отдельно через Файл → Открыть и ищите в ней.
Модуль формы пустой, а кнопка работает. Где код?
Форма может вызывать общую команду или обработчик из расширения. Найдите команду кнопки в свойствах элемента формы и перейдите к её действию.