Поиск встроенных и пользовательских функций в 1С

· 9 мин

Содержание

Встроенные функции платформы ищут в синтакс-помощнике (Справка → Синтакс-помощник), а функции и процедуры конкретной конфигурации — глобальным поиском по текстам в конфигураторе (Правка → Глобальный поиск, Ctrl+Shift+F). Если нужно прогнать поиск по всему коду разом, конфигурацию выгружают в текстовые файлы и ищут обычным grep или findstr.

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

Где в 1С живут функции и процедуры

Прежде чем искать, полезно понимать, что в 1С два разных слоя кода, и ищут их разными инструментами.

  • 🧩 Встроенные функции платформы — СтрНайти, ТекущаяДата, НСтр, Формат и сотни других. Это методы встроенного языка, их список фиксирован и зашит в платформу.
  • 🛠 Пользовательские функции конфигурации — то, что написали разработчики: процедуры в общих модулях, модулях объектов, формах, командах. Их имена придумывает автор, поэтому «список» существует только в виде самого кода.

Отсюда правило: платформенные функции смотрят в справочнике синтаксиса, а свои — поиском по текстам модулей. Ниже — оба маршрута.

Чтобы было проще выбрать инструмент под конкретную задачу, вот сводка способов — к каждому вернёмся подробно.

ЗадачаИнструмент
Узнать параметры встроенного методаСинтакс-помощник (Ctrl+F1 на слове)
Найти свою функцию во всей базеГлобальный поиск (Ctrl+Shift+F)
Понять, откуда вызывается функцияГлобальный поиск по имени без ключевого слова
Найти функции во внешней обработкеФайл → Открыть, затем модуль
Поиск по всему коду средствами ОСВыгрузка в файлы + grep/findstr
Переходы и поиск использованийEDT, Снегопат

Синтакс-помощник: встроенные функции платформы

Синтакс-помощник — это встроенный справочник по языку 1С. В нём перечислены все методы, свойства и объекты платформы с описанием параметров и примерами.

Открыть его можно двумя способами:

  1. Меню Справка → Синтакс-помощник в конфигураторе.
  2. Поставить курсор на имя метода прямо в модуле и нажать Ctrl+F1 — откроется статья именно по этой функции.

Второй способ удобнее всего: не помните, что возвращает НачалоДня или какие параметры у СтрРазделить, — курсор на слово, Ctrl+F1, и перед вами описание с примером.

В дереве синтакс-помощника функции сгруппированы по разделам: «Работа со значениями типа Строка», «Универсальные коллекции значений», «Системные перечисления» и так далее. Через поле поиска вверху находят метод по части имени — например, введите Формат, чтобы увидеть все функции форматирования.

Синтакс-помощник открывается и в пользовательском режиме, если в конфигурации включена отладка, но полнее он в конфигураторе.

Глобальный поиск по текстам конфигурации

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

В конфигураторе откройте Правка → Глобальный поиск (горячая клавиша Ctrl+Shift+F). В окне поиска:

  1. В поле «Что искать» введите имя функции или часть строки — например, ПересчитатьСебестоимость.
  2. Отметьте область поиска: по всей конфигурации, по выбранным объектам или по модулям определённого типа.
  3. Нажмите «Искать».

Результаты появятся в окне сообщений списком: имя объекта, модуль и строка. Двойной клик по строке открывает модуль прямо на нужном месте.

Несколько приёмов, которые ускоряют работу:

  • 🔎 Чтобы найти объявление функции, а не её вызовы, ищите с ключевым словом: Функция ПересчитатьСебестоимость или Процедура ПровестиДокумент.
  • 🔎 Чтобы найти все вызовы, ищите просто имя без ключевого слова.
  • 🔎 Включите «Учитывать регистр», если имя короткое и даёт много ложных совпадений.

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

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

Внутри одного модуля быстрее искать локальным поиском Ctrl+F, а перейти к списку всех процедур модуля помогает выпадающий список процедур над текстом модуля. В нём имена идут по порядку объявления, и достаточно начать набирать имя, чтобы отфильтровать список.

Поиск по общим модулям и модулю приложения

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

Разверните ветку Общие → Общие модули. Каждый модуль открывается двойным кликом, а его процедуры и функции видны в выпадающем списке над текстом.

Обратите внимание на свойства модуля (флажки в палитре свойств) — они говорят, где функция доступна:

Флаг модуляЧто означает
СерверФункции выполняются на сервере
Клиент (управляемое приложение)Доступны на клиенте
Вызов сервераКлиент может вызвать серверные функции модуля
ГлобальныйЭкспортные функции вызываются без указания имени модуля

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

Не забудьте про модули, которые не лежат в «Общих модулях»:

  • Модуль управляемого приложения и Модуль сеанса — ветка Общие в самом верху дерева, через контекстное меню корня конфигурации («Открыть модуль управляемого приложения»).
  • Модули объектов (документов, справочников) — обработчики проведения, заполнения, записи.
  • Модули форм — обработчики событий формы и команд.

Функции во внешних обработках и отчётах

Внешние обработки (.epf) и внешние отчёты (.erf) — отдельные файлы, их код не входит в конфигурацию базы, поэтому глобальный поиск их не охватывает.

Чтобы посмотреть функции внешней обработки:

  1. В конфигураторе выберите Файл → Открыть и укажите файл .epf или .erf.
  2. Откроется окно внешней обработки. Разверните её дерево и откройте модуль объекта или модули форм.
  3. Список процедур и функций — в выпадающем списке над текстом модуля, как и в обычном модуле.

Если обработка защищена от изменения (поставлена «на замок»/скомпилирована в защищённом виде), её исходный код посмотреть нельзя — это штатная защита поставщика.

Когда обработок много и нужно найти, в какой из них есть нужная функция, удобнее выгрузить каждую в файл (Файл → Сохранить как из открытой обработки умеет выгружать и в XML) или прогнать пакетный поиск по папке — об этом в следующем разделе.

Функции в расширениях конфигурации

Отдельно стоит помнить про расширения (.cfe), появившиеся в платформе начиная с 8.3.6. Они добавляют свои модули и переопределяют функции основной конфигурации, но лежат рядом с ней, а не внутри.

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

Автоматический поиск: выгрузка конфигурации в файлы

Когда нужно найти функцию сразу во всей конфигурации средствами ОС (или собрать статистику по коду), конфигурацию выгружают в набор текстовых файлов и ищут привычными утилитами.

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

Дальше поиск обычными средствами. В Linux/macOS:

grep -rn "Функция ПересчитатьСебестоимость" ./src

В Windows через findstr:

findstr /s /n /i "Функция ПересчитатьСебестоимость" *.*

Ту же выгрузку запускают из командной строки — удобно для скриптов и CI:

"C:\Program Files\1cv8\common\1cv8.exe" DESIGNER /F "C:\base" /DumpConfigToFiles "C:\src"

Текстовая выгрузка хороша тем, что в неё попадает весь код разом. По ней считают, сколько раз вызывается функция, где объявлены одноимённые процедуры и какие модули её используют — обычным grep -c.

Несколько задач, которые решаются только по выгрузке:

  • 📊 Сколько раз вызывается функция — grep -rn "ПересчитатьСебестоимость(" ./src | wc -l. Полезно перед тем, как менять или удалять процедуру.
  • 📄 Список всех объявлений — grep -rnE "^(Функция|Процедура) " ./src соберёт все процедуры и функции с указанием файла. Это и есть тот самый «общий список функций», которого нет готовым в конфигураторе.
  • 👯 Одноимённые функции — когда одно имя объявлено в нескольких модулях, выгрузка сразу показывает все места; в интерактивном поиске их пришлось бы отлавливать вручную.

Для обратной операции (собрать конфигурацию из файлов) есть парный параметр /LoadConfigFromFiles. Если не уверены в точном написании ключа — посмотрите список параметров командной строки в документации по пакетному режиму конфигуратора.

Поиск функции по событию, обработчику и ссылкам

Иногда известна не функция, а место, откуда она вызывается: событие формы, проведение документа, подписка. Тогда ищут с другого конца.

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

Обработчики событий формы. Откройте форму, перейдите на вкладку «События» в палитре свойств элемента или самой формы — там видно, какая процедура назначена на каждое событие (ПриСозданииНаСервере, ПриИзменении и т. д.).

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

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

Сторонние инструменты для навигации по коду

Штатных средств конфигуратора хватает в большинстве случаев, но для крупных проектов разработчики используют и внешние инструменты.

  • 🧰 1C:Enterprise Development Tools (EDT) — среда на базе Eclipse. Даёт переход к объявлению функции по F3, поиск всех использований (Find References), подсветку и рефакторинг — то, чего нет в классическом конфигураторе.
  • 🧰 Снегопат — надстройка над конфигуратором с дополнительной навигацией по коду, быстрым переходом между процедурами и расширенным поиском.
  • 🧰 Поиск по выгруженным файлам в любом редакторе кода (VS Code, Notepad++) — после выгрузки конфигурации в файлы это самый быстрый способ сложного поиска по регулярным выражениям.

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

Быстрый маршрут: как найти функцию
Выполнено: 0 / 6

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

Чем функция отличается от процедуры в 1С?
Функция возвращает значение (Возврат …) и описывается блоком Функция … КонецФункции, процедура значения не возвращает (Процедура … КонецПроцедуры). При поиске объявлений это удобно: ищите Функция Имя или Процедура Имя отдельно.
Почему глобальный поиск не находит функцию, которая точно вызывается?
Три частые причины: функция лежит во внешней обработке или расширении, не подключённом к базе; имя собирается в строку динамически (Выполнить()); либо задан слишком узкий регион поиска. Снимите ограничения области и проверьте внешние файлы отдельно.
Как узнать, в каком модуле объявлена функция, вызванная без префикса?
Такие вызовы идут в глобальные общие модули (с установленным флагом «Глобальный»). Найдите объявление глобальным поиском по Функция ИмяФункции Экспорт — экспортные функции видны из любого кода.
Можно ли получить список всех функций конфигурации одним файлом?
Напрямую — нет, но после выгрузки конфигурации в файлы несложно собрать такой список скриптом: grep по шаблону ^(Функция|Процедура) выдаст все объявления с указанием файла.
Виден ли код встроенных функций платформы?
Нет. Методы платформы (СтрНайти, Формат и прочие) реализованы в ядре и исходного кода не имеют — по ним доступно только описание в синтакс-помощнике.