Где искать процедуру или функцию 1С: от модуля до всей конфигурации
Содержание
Чтобы найти функцию в 1С, откройте Конфигуратор и нажмите Ctrl+Shift+F (Правка → Глобальный поиск): введите имя функции, в области поиска выберите всю конфигурацию, и внизу появится список всех мест, где она объявлена и вызывается. Если вы уже стоите в модуле на вызове функции, достаточно нажать F12 — Конфигуратор откроет её определение.
Это два самых быстрых способа. Но бывают случаи сложнее: имя функции неизвестно, код лежит в расширении или внешней обработке, нужно понять, какая процедура срабатывает по кнопке. Для каждого случая есть свой приём — ниже они собраны по порядку, от простого к инструментальному. Всё описанное относится к платформе 8.3 и работает одинаково в любой конфигурации: БП, ЗУП, УТ, ERP.
1. Поиск функции внутри открытого модуля
Начните с модуля, если примерно знаете, где лежит код: модуль формы документа, модуль объекта, общий модуль.
Список процедур и функций модуля
Нажмите Ctrl+Alt+P в открытом модуле. Откроется окно со всеми процедурами и функциями этого модуля в алфавитном порядке.
- 🔤 Начните набирать имя — список отфильтруется.
- ↩️ Двойной щелчок переносит курсор на объявление.
- 📌 Тот же список доступен в выпадающем поле над текстом модуля.
Для модулей на несколько тысяч строк (например, модуль менеджера крупного документа) это быстрее, чем листать или искать по тексту.
Поиск по тексту модуля
Ctrl+F ищет строку только в текущем модуле. F3 переходит к следующему совпадению. Удобно, когда нужно найти не объявление, а конкретный вызов или кусок условия.
Ищите не просто имя, а Функция ИмяФункции или Процедура ИмяФункции. Тогда первое же совпадение будет объявлением, а не одним из двадцати вызовов.
Переход к определению
Поставьте курсор на имя функции в строке вызова и нажмите F12. Конфигуратор откроет модуль, где функция объявлена, даже если это другой общий модуль. Это главный инструмент при чтении чужого кода: идёте по цепочке вызовов вглубь, не открывая дерево метаданных.
2. Глобальный поиск и обратный поиск вызовов
Когда непонятно, в каком модуле функция, нужен поиск по всей конфигурации.
Как запустить глобальный поиск
- Откройте
Правка → Глобальный поискили нажмитеCtrl+Shift+F. - Введите имя функции.
- В области поиска выберите всю конфигурацию, а не текущий модуль.
- Отметьте «Учитывать регистр» и поиск целого слова, если имя короткое и часто входит в другие слова.
- Нажмите «Искать». Результаты появятся в окне «Результаты поиска» внизу.
Двойной щелчок по строке результата открывает модуль на нужной строке. Поиск идёт по текстам модулей, а при соответствующих настройках — и по макетам, и по свойствам объектов.
Обратный поиск: кто вызывает функцию
Обратный поиск — та же операция, только цель другая. Вы знаете функцию и хотите понять, откуда она вызывается. Введите имя в глобальный поиск и разберите результаты:
| Что в строке результата | Что это значит |
|---|---|
Функция ИмяФункции(...) Экспорт | Объявление, экспортная функция |
ОбщийМодуль.ИмяФункции(...) | Вызов из другого модуля |
ИмяФункции(...) без префикса | Вызов внутри того же модуля или глобального модуля |
Строка в кавычках "ИмяФункции" | Вызов через оповещение, Выполнить() или подписку |
Последняя строка таблицы — частая ловушка. Обработчики подписок на события, регламентных заданий и оповещений (Новый ОписаниеОповещения("ИмяПроцедуры", ЭтотОбъект)) указаны строкой. Поиск их находит, но F12 по такой строке не сработает.
Для подписок на события и регламентных заданий проверьте ещё и дерево метаданных: ветки «Общие → Подписки на события» и «Общие → Регламентные задания». В свойствах там указан обработчик — модуль и имя процедуры.
3. Как найти функцию, если известны только параметры
Иногда имени нет, но понятно, что функция принимает, скажем, Организация и ДатаНачала и возвращает структуру. Тогда ищите по сигнатуре.
Поиск по именам параметров
Запустите глобальный поиск по строке (Организация, ДатаНачала — без закрывающей скобки. Найдутся и объявления, и вызовы с этими параметрами в начале списка. Дальше отберите строки, которые начинаются с Функция.
Если параметры стоят не первыми, ищите по одному характерному параметру, например ДатаНачала, ДатаОкончания. Совпадений будет больше, но имя функции обычно говорит само за себя.
Подсказка по параметрам в редакторе
Нашли кандидата — проверьте, что он принимает. Поставьте курсор внутрь скобок вызова и нажмите Ctrl+Shift+Пробел: всплывёт подсказка с параметрами. Если над функцией есть стандартный комментарий с разделами Параметры: и Возвращаемое значение:, редактор покажет и описание.
Перебор функций общего модуля
Наберите в модуле имя общего модуля с точкой, например ОбщегоНазначения., и нажмите Ctrl+Пробел. Появится список всех экспортных функций этого модуля. Часто так находится готовая функция, которую не нужно писать заново.
4. Отладчик: какая функция выполняется на самом деле
Статический поиск отвечает на вопрос «где написано». Отладчик отвечает на вопрос «что реально выполняется» — по нажатию кнопки, при проведении документа, при ошибке.
Стек вызовов
- Запустите отладку из Конфигуратора (
F5). - Поставьте точку останова (
F9) в известном месте, например в обработчикеПриЗаписи. - Выполните действие в пользовательском режиме.
- Когда сработает останов, откройте стек вызовов:
Ctrl+Alt+C.
Стек покажет цепочку: какая процедура вызвала текущую, кто вызвал ту, и так до обработчика формы. Двойной щелчок по строке стека открывает соответствующее место в коде.
Остановка по ошибке
Если нужно найти функцию, в которой падает ошибка, включите в меню Отладка пункт «Остановка по ошибке». Отладчик встанет ровно на строке, где возникло исключение, а стек покажет путь к ней. Это быстрее, чем искать текст ошибки глобальным поиском.
Замер производительности
Когда неизвестно даже, куда ставить точку останова, помогает замер. В режиме отладки включите Отладка → Замер производительности, выполните действие в программе и выключите замер. Откроется таблица всех выполнившихся строк с модулями, количеством вызовов и временем.
По этому списку видно, какие модули и функции задействованы, например, при нажатии кнопки «Заполнить». Дальше двойной щелчок — и вы в коде.
Отладку и замер проводите на копии базы. В рабочей базе остановка на точке останова блокирует пользователю работу, а сеанс с отладкой может удерживать данные дольше обычного.
Обработчик конкретной кнопки
Для кнопки формы можно обойтись без отладчика. Откройте форму в Конфигураторе, выделите кнопку, в её свойствах посмотрите связанную команду. У команды в свойстве «Действие» указан обработчик — щелчок по лупе рядом откроет процедуру в модуле формы.
5. Функции в расширениях и внешних обработках
Расширения конфигурации
Код расширения не виден в дереве основной конфигурации. Откройте Конфигурация → Расширения конфигурации, выберите нужное расширение и откройте его конфигурацию. Внутри работают те же Ctrl+F, Ctrl+Alt+P и F12.
Главная особенность расширений — перехват типовых методов аннотациями:
&Вместо("ЗаполнитьТабличнуюЧасть")
Процедура Расш1_ЗаполнитьТабличнуюЧасть()
// свой код вместо типового
КонецПроцедуры
Если типовая функция ведёт себя не так, как написано в её коде, ищите в расширениях строку с её именем в кавычках: &Вместо("ИмяФункции"), &Перед(...), &После(...), &ИзменениеИКонтроль(...). Имя метода в расширении при этом может быть любым, поэтому искать нужно именно по аннотации.
Внешние обработки и отчёты
Файлы .epf и .erf открываются через Файл → Открыть. Обработка откроется отдельным деревом. Поиск выполняйте внутри неё: модуль объекта и модули форм проверяйте по отдельности.
Если внешняя обработка подключена через справочник дополнительных отчётов и обработок, сначала сохраните её из карточки в файл, затем откройте в Конфигураторе.
6. Поиск функций в выгрузке конфигурации скриптами
Глобальный поиск Конфигуратора не умеет регулярные выражения в привычном виде и не сравнивает две конфигурации. Когда нужно найти, например, все функции с определённым параметром или все вызовы в нескольких базах, выгрузите конфигурацию в файлы.
Выгрузка
Вручную: Конфигурация → Выгрузить конфигурацию в файлы. Из командной строки:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"" /DumpConfigToFiles "D:\dump\buh"
Путь к платформе и номер версии подставьте свои. Модули выгружаются текстовыми файлами .bsl.
Поиск в Windows
Найти объявление функции по всей выгрузке:
findstr /S /I /N /C:"Функция РассчитатьСуммуДокумента" D:\dump\buh\*.bsl
В PowerShell с регулярным выражением — все объявления, где первым параметром идёт Организация:
Get-ChildItem D:\dump\buh -Recurse -Filter *.bsl |
Select-String -Pattern '^\s*(Функция|Процедура)\s+\w+\(\s*Организация' -Encoding UTF8
Поиск в Linux и Git Bash
grep -rnE '^\s*(Функция|Процедура)\s+РассчитатьСуммуДокумента\s*\(' /srv/dump/buh --include=*.bsl
💡 Выгрузку удобно положить в Git. Тогда после обновления конфигурации git diff покажет, какие функции изменились, а поиск по истории подскажет, когда функция появилась.
7. Документация, БСП и внешние инструменты
Синтакс-помощник для встроенных функций
Если функция платформенная (СтрНайти, НачалоМесяца, ЗначениеЗаполнено), её нет в коде конфигурации. Откройте Справка → Синтакс-помощник и найдите её через вкладку поиска. Быстрее — поставить курсор на слово в модуле и нажать Ctrl+F1.
Где искать в типовых конфигурациях
Типовые решения построены на БСП — Библиотеке стандартных подсистем. Её функции лежат в общих модулях с говорящими суффиксами:
- 🖥
Клиент— выполняется на клиенте; - 🗄
Серверили без суффикса — на сервере; - 🔁
КлиентСервер— в обоих контекстах; - ⚡
ПовтИсп— с повторным использованием возвращаемых значений; - 🔧
Переопределяемый— точки для доработок без снятия с поддержки.
Публичные функции модуля собраны в области #Область ПрограммныйИнтерфейс. Служебные из СлужебныйПрограммныйИнтерфейс и СлужебныеПроцедурыИФункции в своих доработках лучше не вызывать: при обновлении их меняют без предупреждения.
Внешние инструменты
| Инструмент | Как ищет функцию | Когда удобен |
|---|---|---|
| 1C:Enterprise Development Tools (EDT) | Переход к объявлению, поиск ссылок, поиск по проекту | Разработка в команде, Git |
| VS Code с расширением для BSL | F12 — к определению, Shift+F12 — все вызовы | Чтение выгрузки, быстрый поиск без запуска 1С |
grep, findstr, PowerShell | Регулярные выражения по файлам .bsl | Массовый анализ, сравнение баз |
| Надстройки к Конфигуратору | Расширенная навигация и поиск по модулям | Ежедневная работа в Конфигураторе |
EDT и VS Code работают с конфигурацией как с проектом файлов и строят индекс. Поиск всех вызовов функции там точнее, чем текстовый поиск, потому что учитывается контекст модуля.
8. Как найти функцию программы в пользовательском режиме
Пользователь под «функцией» часто понимает не код, а команду: отчёт, обработку, журнал, которого нет в разделах. Для этого в интерфейсе «Такси» есть два пути.
Поиск по командам
В шапке окна программы есть поле поиска. Введите часть названия, например «закрытие месяца » или «загрузка». Помимо данных, поиск предлагает команды интерфейса с подходящими названиями, и по ним можно сразу перейти.
Меню «Все функции»
Если команды нет в разделах, её можно найти в полном списке объектов:
- Откройте главное меню (кнопка с тремя полосками в левом верхнем углу).
- Перейдите в
Сервис → Параметры. - Включите флажок «Отображать команду “Все функции”» и нажмите «Применить».
- В главном меню появится пункт «Все функции» — дерево всех справочников, документов, отчётов и обработок.
«Все функции» обходят интерфейс, настроенный под роль. Через них можно открыть служебные обработки. Изменения в данных через такие обработки согласуйте с ответственным за базу и сделайте резервную копию.
9. Почему функция не находится
Большинство «пропавших» функций на месте, просто поиск настроен не туда. Разберите свой симптом:
Ещё одна частая причина — поиск в основной конфигурации, когда изменения ещё не применены к базе. Глобальный поиск работает с открытой в Конфигураторе конфигурацией. Если нужно проверить именно то, что выполняется у пользователей, откройте конфигурацию базы данных через Конфигурация → Конфигурация базы данных → Открыть конфигурацию БД.