Поиск текста, кода и объектов в конфигураторе 1С 8.3

· 9 мин

Содержание

Строку в открытом модуле ищут через Ctrl+F, следующее вхождение — F3, предыдущее — Shift+F3. Чтобы найти строку по всей конфигурации 1С в конфигураторе сразу, нужен глобальный поиск: Правка → Глобальный поиск или Ctrl+Shift+F. Результаты падают в отдельное окно, двойной щелчок открывает нужный модуль на найденной строке.

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

Поиск строки в открытом модуле

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

  1. Поставьте курсор в окно модуля.
  2. Нажмите Ctrl+F — откроется окно поиска.
  3. Введите искомый текст. Если перед этим выделить слово в коде, оно подставится в поле само.
  4. Настройте флажки: учёт регистра, поиск слова целиком, направление (вверх или вниз от курсора).
  5. Нажмите «Найти следующее» или закройте окно и листайте вхождения клавишей F3.
КлавишиЧто делает
Ctrl+FОкно поиска в текущем модуле
F3 / Shift+F3Следующее / предыдущее вхождение
Ctrl+HПоиск и замена в текущем модуле
Ctrl+GПереход к строке по номеру
F12Переход к определению процедуры или функции под курсором
Ctrl+Shift+FГлобальный поиск по конфигурации

Ctrl+G выручает, когда номер строки известен заранее: его показывает окно служебных сообщений после синтаксической проверки или текст ошибки вида {ОбщийМодуль.ИмяМодуля.Модуль(245)}. Число в скобках — номер строки. Открыли модуль, нажали Ctrl+G, ввели 245 — и вы на месте.

F12 нужен, когда в коде встретился вызов ЗаполнитьТабличнуюЧасть(...) и неясно, где лежит сама процедура. Курсор на имя, F12 — конфигуратор откроет модуль с её определением, даже если это другой общий модуль.

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

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

Глобальный поиск отвечает на вопрос «где в этой конфигурации встречается вот этот текст». Типовая задача: пользователь прислал скриншот сообщения, и нужно найти, какой код его выводит.

Как запустить

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

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

Как искать текст сообщения пользователю

Сообщения в типовых конфигурациях часто собирают из частей или оборачивают в НСтр("ru = '...'"). Поэтому полная фраза со скриншота может не найтись: в коде между словами стоит подстановка параметра.

Ищите самый «редкий» кусок фразы из 3–4 слов без чисел, дат и названий контрагентов. Например, из сообщения Не заполнено поле "Склад" в строке 3 ищите Не заполнено поле, а не всю строку целиком.

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

Имя объекта и синоним — это разные строки

Пользователь видит в интерфейсе синоним: «Реализация (акт, накладная, УПД)». В метаданных у объекта имя без пробелов, например РеализацияТоваровУслуг. Код обращается к объекту по имени.

Поэтому ищите так:

  • 🔎 чтобы найти объект в дереве — по синониму или имени, как удобнее;
  • 🔎 чтобы найти код, который работает с объектом, — по имени: Документы.РеализацияТоваровУслуг;
  • 🔎 чтобы найти подпись на форме — по тексту заголовка, включив в поиск формы.

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

Настройки поиска: регистр, слово целиком, области

От флажков зависит, найдёте вы три вхождения или триста.

НастройкаКогда включатьЧто даёт
Учитывать регистрПочти никогдаЯзык 1С не различает регистр в именах; флажок нужен, только если ищете текст строки как есть
Слово целикомИщете короткое имя переменной: Сумма, СкладОтсекает СуммаНДС, СкладОтправитель и другие длинные имена
Только выделенные объектыЗнаете подсистему или объектПоиск быстрее, результатов меньше
Области поиска (модули, формы, макеты)Ищете подпись или текст в макете печатной формыБез нужной области вхождение не попадёт в выдачу

Шаблонов вида * и регулярных выражений поиск конфигуратора не понимает. Ищется ровно введённая строка, с учётом выбранных флажков.

Особенности строк в коде 1С

Две вещи, на которых чаще всего спотыкаются:

  • 📌 Кавычки удваиваются. В коде фраза Поле "Склад" записана как "Поле ""Склад""". Если ищете с кавычками — удваивайте их или ищите без кавычек: Поле и Склад по отдельности.
  • 📌 Многострочные строки. Текст запроса или длинное сообщение разбивают на строки с символом | в начале. Фраза, разорванная переносом, одним куском не найдётся — ищите фрагмент, который целиком лежит в одной строке кода.

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

Замена текста: в модуле и по всей конфигурации

Замена в одном модуле

  1. Откройте модуль и нажмите Ctrl+H.
  2. Введите, что искать и на что заменить.
  3. Включите «Слово целиком», если меняете имя переменной.
  4. Пройдите вхождения по одному кнопкой замены или замените все разом.

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

Замена по всей конфигурации

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

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

Порядок, при котором замена не ломает код:

  1. Сначала выполните глобальный поиск с теми же настройками и просмотрите все вхождения.
  2. Убедитесь, что под замену не попали комментарии, строки запросов и чужие имена с той же основой.
  3. Выполните замену.
  4. Запустите синтаксическую проверку (раздел ниже).
  5. Сохраните конфигурацию и только потом обновляйте конфигурацию базы данных.

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

Поиск в расширениях и внешних обработках

Глобальный поиск работает по открытой конфигурации. Расширение открывают отдельно: Конфигурация → Расширения конфигурации, затем выбрать расширение и открыть его конфигурацию. Внешнюю обработку или отчёт открывают через Файл → Открыть и ищут в её модулях обычным Ctrl+F.

Где используется объект: поиск ссылок и проверка модулей

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

Поиск ссылок на объект

  1. В дереве метаданных выделите объект или реквизит.
  2. Правой кнопкой откройте контекстное меню.
  3. Выберите Поиск ссылок на объект.

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

Поиск ссылок и глобальный поиск дополняют друг друга:

ЗадачаЧем пользоваться
Где в коде встречается Справочники.НоменклатураГлобальный поиск по тексту
В каких реквизитах тип «СправочникСсылка.Номенклатура»Поиск ссылок на объект
Входит ли объект в роль или подсистемуПоиск ссылок на объект
Где вызывается процедура общего модуляГлобальный поиск по имени процедуры со «Слово целиком»

Синтаксическая проверка как поиск проблем

После правок и замен проверьте код:

  • 🧪 Ctrl+F7 в открытом модуле — синтаксический контроль только этого модуля;
  • 🧪 Конфигурация → Проверка конфигурации — проверка всей конфигурации с выбором режимов.

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

Ошибки выводятся в окно служебных сообщений с указанием модуля и строки. Двойной щелчок по сообщению открывает модуль на ошибке. Так проверка заодно работает как поиск: она находит обращения к удалённому реквизиту или переменной, которой больше нет.

После массовой замены в коде
Выполнено: 0 / 5

Поиск по выгрузке конфигурации в файлы

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

  1. Откройте конфигурацию в конфигураторе.
  2. Выберите Конфигурация → Выгрузить конфигурацию в файлы.
  3. Укажите пустую папку и формат выгрузки.
  4. Модули окажутся в файлах с расширением .bsl, формы и метаданные — в XML.

Дальше ищите любым инструментом. В Windows подойдёт стандартный findstr:

cd /d D:\Export\Buh
rem Поиск без учёта регистра по всем модулям, с номерами строк
findstr /s /i /n /c:"Не заполнено поле" *.bsl

Если установлен Git, в его консоли есть grep с регулярными выражениями:

# Все вызовы процедуры с любым префиксом общего модуля
grep -rniE "\.ЗаполнитьТабличнуюЧасть\(" --include=*.bsl .

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

Если ваша команда ведёт разработку в 1С:EDT, там поиск по проекту умеет регулярные выражения и поиск ссылок по коду. Для разовых задач в конфигураторе выгрузки в файлы обычно хватает.

Почему поиск не находит строку

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

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

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

Можно ли найти строку в данных базы, а не в коде?
Конфигуратор ищет только по конфигурации. Значения в справочниках и документах ищут в режиме 1С:Предприятие: Ctrl+F в списке или поле поиска над ним.
Ищет ли глобальный поиск в макетах печатных форм?
Да, если в настройках поиска отмечены макеты. Без этой области тексты табличных документов в выдачу не попадут.
Как найти, какая форма выводит конкретную надпись?
Включите в глобальный поиск формы и ищите по тексту надписи. Если не нашлось — заголовок могут задавать программно, тогда ищите тот же текст в модулях форм.
Чем поиск ссылок отличается от глобального поиска?
Глобальный поиск сравнивает текст. Поиск ссылок смотрит структуру метаданных: типы реквизитов, роли, подсистемы, подписки. Объект в типе реквизита текстовым поиском не найти.
Почему F12 не переходит к процедуре?
Если вызов идёт через переменную или Выполнить(), конфигуратор не знает, какой модуль подразумевается. Найдите имя процедуры глобальным поиском со «Слово целиком».