К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как в 1С автоматически перейти к определению функции

Как в 1С автоматически перейти к определению функции: клавиша F12, поиск по модулю, контекстное меню, навигация по процедурам в Конфигураторе и EDT.

При чтении и доработке кода 1С разработчик постоянно сталкивается с вызовами процедур и функций, тела которых находятся в других модулях — общих, объектных, модулей менеджеров. Вручную искать нужную функцию через глобальный поиск долго, особенно в крупных конфигурациях, где одноимённые процедуры встречаются десятки раз. Платформа 1С:Предприятие и среда 1C:EDT предоставляют встроенные механизмы мгновенного перехода к определению функции прямо из места её вызова.

Основной инструмент — команда «Перейти к определению», которая работает в конфигураторе и в EDT. Она анализирует синтаксис модуля, определяет, где объявлена вызываемая процедура или функция, и открывает соответствующий модуль на нужной строке. Для экспортных функций общих модулей переход выполняется даже между разными объектами конфигурации.

Ниже разобраны все рабочие способы: горячие клавиши, контекстное меню, поиск по модулю, особенности работы в тонком клиенте конфигуратора и в EDT, а также ограничения и типичные ошибки, из-за которых переход не срабатывает.

Переход к определению клавишей F12 в конфигураторе

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

Команда доступна и через главное меню: Текст → Перейти к определению, а также через контекстное меню по правой кнопке мыши в окне модуля. Это один и тот же механизм, поэтому результат идентичен независимо от способа вызова.

Если имя под курсором — локальная процедура текущего модуля, переход выполняется внутри того же окна: курсор перемещается на строку с ключевым словом «Процедура» или «Функция». Возврат к месту вызова выполняется стандартной комбинацией навигации назад — Ctrl + минус (Ctrl + «-»).

Порядок действий для перехода к функции
  1. 1
    Откройте модуль с вызовом функции в конфигураторе
  2. 2
    Установите курсор на имя функции (кликнуть внутри слова достаточно)
  3. 3
    Нажмите F12 или выберите «Перейти к определению» в контекстном меню
  4. 4
    Проверьте, что открылся нужный модуль и курсор стоит на объявлении
  5. 5
    Для возврата к месту вызова нажмите Ctrl + минус

Переход через контекстное меню и поиск по модулю

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

Альтернативный вариант — список процедур и функций модуля. В окне модуля нажмите Ctrl + Alt + P или воспользуйтесь кнопкой «Процедуры и функции» на панели инструментов: откроется дерево всех методов текущего модуля с возможностью быстрого перехода двойным щелчком. Это удобно, когда нужно изучить структуру модуля целиком, а не один конкретный вызов.

Для поиска функции по всей конфигурации используйте глобальный поиск (Ctrl + Shift + F) с шаблоном «Функция ИмяФункции». Результаты покажут все модули, где встречается объявление, что полезно при наличии одноимённых методов в разных объектах.

Переход к определению в 1C:EDT

В среде разработки 1C:EDT переход к определению работает аналогично: курсор на имя функции, затем F12 или пункт контекстного меню Open Declaration. EDT использует более глубокий анализ проекта, поэтому корректно разрешает вызовы через общие модули, менеджеры объектов и цепочки экспортных методов.

Дополнительное удобство EDT — навигация мышью: при зажатой клавише Ctrl имена вызываемых методов подсвечиваются как гиперссылки, и переход выполняется одинарным кликом. Обратный переход — Alt + стрелка влево.

EDT также поддерживает представление «Иерархия вызовов» (Call Hierarchy), которое показывает, откуда вызывается функция и какие методы вызывает она сама. Это полезно при рефакторинге, когда нужно оценить последствия изменения сигнатуры процедуры.

Конфигуратор и EDT: сравнение навигации

Конфигуратор (F12)

Быстрый переход внутри модуля и к экспортным функциям общих модулей. Ограничение: не всегда разрешает вызовы, построенные динамически.

1C:EDT (F12 / Ctrl+клик)

Глубокий анализ проекта, гиперссылки, иерархия вызовов. Ограничение: требует полной загрузки проекта и корректной сборки.

Глобальный поиск (Ctrl+Shift+F)

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

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

Самая частая причина — курсор установлен не на имени функции, а на пробеле, скобке или параметре вызова. Команда F12 анализирует слово под курсором, поэтому кликать нужно точно внутрь идентификатора.

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

Третья группа причин — синтаксические ошибки в модуле. Если модуль не проходит проверку, механизм навигации может работать некорректно или отказываться переходить. Перед использованием F12 полезно выполнить проверку модуля (Ctrl + F7) и устранить ошибки.

Типичные ошибки при переходе к функции
01
Курсор стоит на параметре или скобке, а не на имени функции — команда F12 ничего не находит
02
Попытка перейти к методу, вызванному через Выполнить() или по строковому имени — статический переход невозможен, нужен глобальный поиск
03
Неучтённые одноимённые функции в разных общих модулях — при ручном поиске легко открыть не тот модуль
04
Игнорирование синтаксических ошибок модуля — навигация работает нестабильно до их исправления

Навигация по цепочке вызовов и возврат назад

Реальная задача редко ограничивается одним переходом: функция А вызывает функцию Б, та — функцию В, и разобраться в логике можно, только пройдя всю цепочку. Работает тот же приём: в открывшемся определении снова ставите курсор на следующий вызов и нажимаете F12. Глубина цепочки не ограничена.

Чтобы не потерять исходную точку, используйте стек навигации. Каждое нажатие F12 запоминается, и комбинация Ctrl + минус возвращает на шаг назад, а Ctrl + Shift + минус — вперёд по истории переходов. Это позволяет свободно «ходить» по коду без закладок.

Для сложных исследований удобно ставить закладки на ключевые строки (Ctrl + F2 в ряде версий или через меню «Текст → Закладки») — тогда к важным местам можно вернуться даже после закрытия и повторного открытия модуля в рамках сессии.

При изучении чужого кода удобно сочетать F12 для движения «вглубь» и Ctrl + минус для возврата. Это быстрее, чем держать открытыми десятки окон модулей, и снижает риск случайно отредактировать не тот объект.
ПЗ
Практическое замечание

Безопасность при работе с чужими модулями

Переход к определению сам по себе безопасен — это операция чтения. Риск появляется на следующем шаге, когда разработчик начинает править найденную функцию. Изменение экспортной процедуры общего модуля влияет на все места её вызова, которых в типовой конфигурации могут быть сотни.

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

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

Проверка результата и контрольные точки

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

Для вызовов вида ОбщийМодуль.ИмяФункции() проверка проста: открытый модуль должен называться так, как указано до точки. Для неявных вызовов из того же модуля достаточно убедиться, что курсор встал на строку «Функция Имя(...)» или «Процедура Имя(...)».

Контрольные точки

Как проверить результат перехода

Имя функции в объявлении
Норма

Полностью совпадает с именем в месте вызова

Тревожный признак

Открылась одноимённая функция из другого модуля

Состав параметров
Норма

Количество и порядок параметров соответствуют вызову

Тревожный признак

Сигнатура другая — это не тот метод

Имя модуля в заголовке окна
Норма

Совпадает с модулем, указанным в вызове до точки

Тревожный признак

Открыт другой общий модуль

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

Часто задаваемые вопросы

Работает ли F12 для функций, объявленных ниже по тексту модуля?

Да. Механизм анализирует весь модуль целиком, поэтому неважно, где расположено объявление — выше или ниже места вызова. Курсор переместится на нужную строку в пределах того же окна.

Можно ли перейти к определению функции из модуля формы в общий модуль?

Можно, если функция объявлена с ключевым словом «Экспорт». Неэкспортные методы общего модуля недоступны извне, и вызов такого метода из формы сам по себе является ошибкой, которую покажет синтаксическая проверка.

Что делать, если F12 открывает не ту одноимённую функцию?

Используйте глобальный поиск (Ctrl + Shift + F) по шаблону «Функция ИмяФункции» и вручную выберите модуль, указанный в вызове до точки. Для надёжности вызывайте методы с явным префиксом общего модуля.

Почему пункт «Перейти к определению» неактивен в контекстном меню?

Обычно это означает, что слово под курсором не распознано как вызов метода: курсор стоит на ключевом слове, литерале или комментарии. Переставьте курсор точно на имя функции и повторите попытку.

Есть ли переход к определению в тонком или веб-клиенте?

Нет. Навигация по коду доступна только в инструментах разработчика — конфигураторе и 1C:EDT. Прикладные клиенты предназначены для работы пользователей и не содержат редактора модулей.

Как быстро вернуться к месту вызова после нескольких переходов F12?

Нажимайте Ctrl + минус нужное число раз — каждое нажатие откатывает один шаг навигации назад по стеку переходов, включая переходы между разными модулями.

Итог

Что важно запомнить

Переход к определению функции в 1С выполняется клавишей F12 или через контекстное меню — курсор должен стоять на имени метода. Для возврата используйте Ctrl + минус, для структуры модуля — Ctrl + Alt + P, а когда автоматика не срабатывает — глобальный поиск. Правку найденных функций в типовых общих модулях выполняйте только после анализа всех мест вызова.