Где искать процедуру или функцию 1С: от модуля до всей конфигурации

· 10 мин

Содержание

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

Это два самых быстрых способа. Но бывают случаи сложнее: имя функции неизвестно, код лежит в расширении или внешней обработке, нужно понять, какая процедура срабатывает по кнопке. Для каждого случая есть свой приём — ниже они собраны по порядку, от простого к инструментальному. Всё описанное относится к платформе 8.3 и работает одинаково в любой конфигурации: БП, ЗУП, УТ, ERP.

1. Поиск функции внутри открытого модуля

Начните с модуля, если примерно знаете, где лежит код: модуль формы документа, модуль объекта, общий модуль.

Список процедур и функций модуля

Нажмите Ctrl+Alt+P в открытом модуле. Откроется окно со всеми процедурами и функциями этого модуля в алфавитном порядке.

  • 🔤 Начните набирать имя — список отфильтруется.
  • ↩️ Двойной щелчок переносит курсор на объявление.
  • 📌 Тот же список доступен в выпадающем поле над текстом модуля.

Для модулей на несколько тысяч строк (например, модуль менеджера крупного документа) это быстрее, чем листать или искать по тексту.

Поиск по тексту модуля

Ctrl+F ищет строку только в текущем модуле. F3 переходит к следующему совпадению. Удобно, когда нужно найти не объявление, а конкретный вызов или кусок условия.

Ищите не просто имя, а Функция ИмяФункции или Процедура ИмяФункции. Тогда первое же совпадение будет объявлением, а не одним из двадцати вызовов.

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

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

2. Глобальный поиск и обратный поиск вызовов

Когда непонятно, в каком модуле функция, нужен поиск по всей конфигурации.

Как запустить глобальный поиск

  1. Откройте Правка → Глобальный поиск или нажмите Ctrl+Shift+F.
  2. Введите имя функции.
  3. В области поиска выберите всю конфигурацию, а не текущий модуль.
  4. Отметьте «Учитывать регистр» и поиск целого слова, если имя короткое и часто входит в другие слова.
  5. Нажмите «Искать». Результаты появятся в окне «Результаты поиска» внизу.

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

Обратный поиск: кто вызывает функцию

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

Что в строке результатаЧто это значит
Функция ИмяФункции(...) ЭкспортОбъявление, экспортная функция
ОбщийМодуль.ИмяФункции(...)Вызов из другого модуля
ИмяФункции(...) без префиксаВызов внутри того же модуля или глобального модуля
Строка в кавычках "ИмяФункции"Вызов через оповещение, Выполнить() или подписку

Последняя строка таблицы — частая ловушка. Обработчики подписок на события, регламентных заданий и оповещений (Новый ОписаниеОповещения("ИмяПроцедуры", ЭтотОбъект)) указаны строкой. Поиск их находит, но F12 по такой строке не сработает.

Для подписок на события и регламентных заданий проверьте ещё и дерево метаданных: ветки «Общие → Подписки на события» и «Общие → Регламентные задания». В свойствах там указан обработчик — модуль и имя процедуры.

3. Как найти функцию, если известны только параметры

Иногда имени нет, но понятно, что функция принимает, скажем, Организация и ДатаНачала и возвращает структуру. Тогда ищите по сигнатуре.

Поиск по именам параметров

Запустите глобальный поиск по строке (Организация, ДатаНачала — без закрывающей скобки. Найдутся и объявления, и вызовы с этими параметрами в начале списка. Дальше отберите строки, которые начинаются с Функция.

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

Подсказка по параметрам в редакторе

Нашли кандидата — проверьте, что он принимает. Поставьте курсор внутрь скобок вызова и нажмите Ctrl+Shift+Пробел: всплывёт подсказка с параметрами. Если над функцией есть стандартный комментарий с разделами Параметры: и Возвращаемое значение:, редактор покажет и описание.

Перебор функций общего модуля

Наберите в модуле имя общего модуля с точкой, например ОбщегоНазначения., и нажмите Ctrl+Пробел. Появится список всех экспортных функций этого модуля. Часто так находится готовая функция, которую не нужно писать заново.

4. Отладчик: какая функция выполняется на самом деле

Статический поиск отвечает на вопрос «где написано». Отладчик отвечает на вопрос «что реально выполняется» — по нажатию кнопки, при проведении документа, при ошибке.

Стек вызовов

  1. Запустите отладку из Конфигуратора (F5).
  2. Поставьте точку останова (F9) в известном месте, например в обработчике ПриЗаписи.
  3. Выполните действие в пользовательском режиме.
  4. Когда сработает останов, откройте стек вызовов: 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 с расширением для BSLF12 — к определению, Shift+F12 — все вызовыЧтение выгрузки, быстрый поиск без запуска 1С
grep, findstr, PowerShellРегулярные выражения по файлам .bslМассовый анализ, сравнение баз
Надстройки к КонфигураторуРасширенная навигация и поиск по модулямЕжедневная работа в Конфигураторе

EDT и VS Code работают с конфигурацией как с проектом файлов и строят индекс. Поиск всех вызовов функции там точнее, чем текстовый поиск, потому что учитывается контекст модуля.

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

Пользователь под «функцией» часто понимает не код, а команду: отчёт, обработку, журнал, которого нет в разделах. Для этого в интерфейсе «Такси» есть два пути.

Поиск по командам

В шапке окна программы есть поле поиска. Введите часть названия, например «закрытие месяца » или «загрузка». Помимо данных, поиск предлагает команды интерфейса с подходящими названиями, и по ним можно сразу перейти.

Меню «Все функции»

Если команды нет в разделах, её можно найти в полном списке объектов:

  1. Откройте главное меню (кнопка с тремя полосками в левом верхнем углу).
  2. Перейдите в Сервис → Параметры.
  3. Включите флажок «Отображать команду “Все функции”» и нажмите «Применить».
  4. В главном меню появится пункт «Все функции» — дерево всех справочников, документов, отчётов и обработок.
Перед поиском через «Все функции»
Выполнено: 0 / 3

«Все функции» обходят интерфейс, настроенный под роль. Через них можно открыть служебные обработки. Изменения в данных через такие обработки согласуйте с ответственным за базу и сделайте резервную копию.

9. Почему функция не находится

Большинство «пропавших» функций на месте, просто поиск настроен не туда. Разберите свой симптом:

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

Ещё одна частая причина — поиск в основной конфигурации, когда изменения ещё не применены к базе. Глобальный поиск работает с открытой в Конфигураторе конфигурацией. Если нужно проверить именно то, что выполняется у пользователей, откройте конфигурацию базы данных через Конфигурация → Конфигурация базы данных → Открыть конфигурацию БД.