Где лежит нужный код: поиск модулей в Конфигураторе 1С 8.3, от дерева метаданных до отладчика
Содержание
Найти модуль 1С быстрее всего так: откройте Конфигуратор, нажмите Ctrl+Shift+F (Правка → Глобальный поиск) и введите имя процедуры, текст сообщения или кусок кода. Если имя объекта известно, его модуль открывается из дерева конфигурации через контекстное меню. Если неизвестно даже это — поможет навигационная ссылка из пользовательского режима или отладчик.
Типичная ситуация: бухгалтер присылает скриншот «При проведении выскакивает сообщение Не заполнен склад получатель, откуда оно?». У 1С-ника есть только текст. Ниже — приёмы поиска по нарастающей: от простого клика по дереву до остановки кода в отладчике. Всё описано для платформы 8.3 и Конфигуратора; в конце — пара слов про EDT.
Какие бывают модули и где они в дереве конфигурации
Прежде чем искать, полезно понимать, в каком месте код вообще может жить. В 8.3 модуль привязан либо к конфигурации целиком, либо к конкретному объекту, либо к форме.
| Вид модуля | Где найти в дереве | Что там обычно |
|---|---|---|
| Модуль управляемого приложения | Контекстное меню корня конфигурации → Открыть модуль управляемого приложения | Действия при запуске клиента |
| Модуль сеанса | Корень конфигурации → Открыть модуль сеанса | Установка параметров сеанса |
| Модуль внешнего соединения | Корень конфигурации | Код для COM-подключений |
| Общий модуль | Общие → Общие модули | Библиотечные процедуры, вызываются отовсюду |
| Модуль объекта | Объект (документ, справочник) → контекстное меню → Открыть модуль объекта | Проведение, запись, проверка заполнения |
| Модуль менеджера | Объект → Открыть модуль менеджера | Печать, запросы по объекту, обработчики обновления |
| Модуль набора записей | Регистр → Открыть модуль набора записей | Обработка записи движений |
| Модуль формы | Объект → ветка Формы → форма → вкладка Модуль в редакторе формы | Реакции на кнопки и поля |
| Модуль команды | Ветка Команды объекта или Общие → Общие команды | Обработчик нажатия команды |
Ошибка при проведении почти всегда сидит в модуле объекта или менеджера документа, а также в общих модулях, которые они вызывают. Ошибка при нажатии кнопки — в модуле формы или команды.
Поиск модуля по дереву метаданных
Когда вы знаете, к какому объекту относится код, глобальный поиск не нужен.
Быстрый поиск в окне конфигурации
- Откройте
Конфигурация → Открыть конфигурацию. - Встаньте в дерево и начните печатать имя объекта, например
РеализацияТоваровУслуг. Либо воспользуйтесь полем поиска в верхней части окна дерева. - Дерево отфильтруется или курсор перейдёт к найденному объекту.
- Правой кнопкой по объекту →
Открыть модуль объектаилиОткрыть модуль менеджера.
Ищется по имени метаданных (без пробелов), а не по синониму. Документ «Реализация (акты, накладные, УПД)» в дереве называется РеализацияТоваровУслуг.
Как узнать имя объекта из пользовательского режима
Пользователь видит синоним, а вам нужно техническое имя. Самый надёжный приём — навигационная ссылка:
- В 1С:Предприятии откройте нужный документ или форму списка.
- Нажмите
Shift+F11— команда получения навигационной ссылки. - Ссылка вида
e1cib/data/Документ.ПоступлениеТоваровУслуг?ref=…сразу показывает тип и имя объекта.
Для отчётов и обработок ссылка выглядит как e1cib/app/Отчет.ОборотноСальдоваяВедомость или e1cib/app/Обработка.… — по ней видно и имя, и вид объекта.
Навигация внутри открытого модуля
Модуль крупного документа легко превышает 5–10 тысяч строк. Полезные клавиши Конфигуратора:
- 🔍
Ctrl+F— поиск в текущем модуле,F3— следующее вхождение; - 📑
Ctrl+Alt+P— список процедур и функций модуля с фильтром по имени; - ➡️
Ctrl+G— переход к строке по номеру (удобно, когда номер строки есть в тексте ошибки); - 🔖
Ctrl+F2— поставить закладку,F2— перейти к следующей.
Глобальный поиск по тексту всех модулей
Это основной инструмент, когда известно только сообщение, имя процедуры или реквизита.
Как запустить
- В Конфигураторе:
Правка → Глобальный поискилиCtrl+Shift+F. - В поле «Что искать» введите фрагмент текста.
- Отметьте флажки «Целое слово» и «Учитывать регистр», если искомое слово короткое и даёт сотни совпадений.
- Ограничьте область поиска: можно искать по всей конфигурации или только по выбранным объектам.
- Результаты появятся в отдельном окне. Двойной клик открывает модуль на нужной строке.
Что вводить в строку поиска
От качества запроса зависит, получите вы 3 совпадения или 300.
- 💬 Текст сообщения пользователю. Ищите не всю фразу, а её уникальную часть из 2–3 слов. В типовых конфигурациях текст часто собран через
НСтр()иСтрШаблон(), поэтому фразаНе заполнен склад получательможет быть разбита параметром: ищите «склад получатель» отдельно. - ⚙️ Имя процедуры. Если в тексте ошибки есть
{ОбщийМодуль.ПроведениеСервер.Модуль(1234)}— у вас уже есть и модуль, и номер строки. Поиск не нужен, откройте модуль и нажмитеCtrl+G. - 🏷️ Имя реквизита. Чтобы найти все места, где заполняется реквизит, ищите
.ИмяРеквизита =— с точкой и знаком равенства. - 📋 Имя макета или команды. Печатные формы в БСП ищите по идентификатору команды печати в модуле менеджера.
Глобальный поиск по большой конфигурации (БП 3.0, ERP) занимает от десятков секунд до нескольких минут. Если ищете часто, выгрузите конфигурацию в файлы — об этом ниже.
Переход к определению и поиск ссылок
Нашли вызов ЗаполнитьТабличнуюЧасть() и хотите увидеть сам код — не ищите его вручную.
Перейти к определению
- Поставьте курсор на имя процедуры или функции.
- Нажмите
F12или в контекстном меню выберитеПерейти к определению. - Конфигуратор откроет модуль, где процедура объявлена, даже если это общий модуль.
Для вызовов через точку (ОбщегоНазначения.ЗначениеРеквизитаОбъекта) переход работает надёжно. Для вызовов через переменную, тип которой неизвестен до выполнения, Конфигуратор определение не найдёт: здесь выручает отладчик.
Поиск ссылок на объект
Обратная задача — понять, кто использует объект метаданных:
- Правой кнопкой по объекту в дереве →
Поиск ссылок на объект. - В результатах будут реквизиты других объектов, формы, роли, подсистемы, где он упомянут.
Этот поиск работает по метаданным. Упоминания в тексте кода вроде Документы.ПоступлениеТоваровУслуг.СоздатьДокумент() он может не показать — для них используйте глобальный поиск по имени объекта.
Где используется процедура
Чтобы увидеть все вызовы своей процедуры, запустите глобальный поиск по её имени с флажком «Целое слово». Для экспортной процедуры общего модуля ищите сразу с префиксом: ИмяМодуля.ИмяПроцедуры.
Поиск через отладчик: где на самом деле выполняется код
Когда текстом не найти — сообщение собирается динамически или вызов идёт через переменную — запускайте код и смотрите, куда он попадёт. Это главный приём практика.
Подготовка
- В Конфигураторе:
Отладка → Начать отладку(F5). Запустится 1С:Предприятие под отладкой. - Для клиент-серверной базы отладку на сервере нужно разрешить в настройках сервера 1С; без этого серверные точки останова не сработают.
- Если база уже открыта у пользователя, подключиться можно через
Отладка → Подключение.
Не отлаживайте рабочую базу в рабочее время. Остановка на точке останова держит транзакцию и блокировки: у остальных пользователей может зависнуть проведение. Работайте в копии базы.
Три способа поймать место выполнения
- 🛑 Остановка по ошибке.
Отладка → Остановка по ошибке→ включите флажок. Воспроизведите ошибку — отладчик встанет ровно на той строке, где она возникла. - ⏸️ Прервать выполнение. Если операция долго выполняется или зависает, нажмите
Отладка → Прервать(Ctrl+Break). Отладчик остановится в той строке, которая выполняется прямо сейчас. - 🔴 Точка останова.
F9на строке. Подходит, когда вы уже подозреваете процедуру и хотите проверить, вызывается ли она.
Стек вызовов
После остановки откройте Отладка → Стек вызовов (Ctrl+Alt+C). Это цепочка от нажатой кнопки до текущей строки: модуль формы → общий модуль → модуль менеджера. Двойной клик по строке стека открывает соответствующий модуль.
Пример: пользователь жмёт «Заполнить», появляется ошибка. Через «Остановку по ошибке» и стек видно, что команда формы вызвала ЗаполнениеДокументов.ЗаполнитьПоОстаткам(), а ошибка — в запросе внутри этой функции.
Замер производительности
Отладка → Замер производительности включается до операции и выключается после. В результате — список всех выполнившихся строк с модулями и временем. Если нужно понять, какие модули вообще участвуют в проведении документа, это самый полный способ: ничего не пропустите.
Общие, внешние модули и расширения: где искать по-другому
Общие модули
Общий модуль не открывается из объекта — он лежит в Общие → Общие модули. Ориентируйтесь по свойствам и суффиксам имён, принятым в типовых конфигурациях на БСП:
| Суффикс или признак | Где выполняется |
|---|---|
…Сервер, флажок «Сервер» | На сервере |
…Клиент, флажок «Клиент (управляемое приложение)» | На клиенте |
…КлиентСервер | И там, и там |
…ВызовСервера, флажок «Вызов сервера» | Вызывается с клиента, выполняется на сервере |
…Переопределяемый | Точка для доработок без изменения библиотеки |
…ПовтИсп | Кешируемые значения (повторное использование) |
Если ищете, куда «вклиниться» с доработкой, начните с модулей …Переопределяемый: это места, предусмотренные разработчиками конфигурации.
Внешние обработки и отчёты
Код внешней обработки в конфигурации нет, глобальный поиск по базе его не увидит.
- В Конфигураторе:
Файл → Открыть, выберите файл.epfили.erf. - Откроется дерево обработки: модуль объекта — через контекстное меню корня, модули форм — в ветке
Формы. - Если обработка хранится в базе (
Дополнительные отчеты и обработки), сначала выгрузите её из карточки в файл.
Расширения конфигурации
Доработка может быть не в основной конфигурации, а в расширении. Откройте Конфигурация → Расширения конфигурации, выберите расширение и откройте его дерево. Заимствованные объекты отмечены отдельно, а процедуры с аннотациями &Перед, &После, &Вместо перехватывают типовой код.
Если код в основной конфигурации выглядит правильно, а программа ведёт себя иначе — первым делом проверьте расширения. В отладчике это видно сразу: в стеке вызовов появится модуль расширения.
Как перенести найденный модуль в другую конфигурацию
Модуль найден, и его нужно перенести в другую базу. Выбор способа зависит от того, на поддержке ли конфигурация-приёмник.
| Способ | Когда подходит | Риски |
|---|---|---|
| Скопировать текст процедуры | Одна-две процедуры, общий модуль уже есть | Забыть зависимые процедуры и реквизиты |
Конфигурация → Сравнить, объединить с конфигурацией из файла с отметкой только нужных объектов | Перенос общего модуля или объекта целиком | Случайно затянуть лишние объекты, если не снять флажки |
| Перенос в расширение | Конфигурация на поддержке, не хотите снимать её с поддержки | Нужно заимствовать объекты и следить за совместимостью при обновлении |
Порядок для объединения из файла:
- В исходной базе сохраните конфигурацию в файл
.cf(Конфигурация → Сохранить конфигурацию в файл). - В приёмнике выберите
Конфигурация → Сравнить, объединить с конфигурацией из файла. - В окне сравнения снимите все флажки, затем отметьте только нужный общий модуль или объект.
- Нажмите «Выполнить», затем
Конфигурация → Обновить конфигурацию базы данных(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.Ищет ли глобальный поиск по внешним обработкам?
Файл → Открыть и ищите в ней.