Каждый разработчик 1С рано или поздно сталкивается с ситуацией, когда в пользовательском режиме в документах или справочниках появляется странный текст (например, в комментариях), но глобальный поиск в конфигураторе по этой фразе не выдает никаких результатов. Это создает иллюзию «магии» или скрытого кода. Разберем подробно, почему так происходит, и проанализируем последовательность действий для обнаружения источника «невидимого» текста.
Одной из самых частых причин неудачи глобального поиска является то, что искомая фраза не хранится в коде в виде статической строки. В типовых конфигурациях, таких как Управление торговлей (УТ 11) или ERP, активно используется шаблонизация. Проанализируем, как это может выглядеть в коде:
// Пример динамической сборки строки
ИмяОбработки = "Помощник закупок";
Объект.Комментарий = "Создан обработкой " + ИмяОбработки;
Если вы ищете целиком фразу «Создан обработкой Помощник закупок», поиск не даст результатов, так как в конфигурации есть только отдельные фрагменты. Рассмотрим правильную стратегию поиска в этом случае: необходимо искать максимально короткую, но уникальную часть фразы. Попробуем найти "Создан обработкой" или даже просто "обработкой".
Также часто используется функция НСтр() для многоязычной поддержки или подстановки параметров. Разберем пример с использованием параметров:
// Поиск по такой строке также будет затруднен
ТекстШаблона = НСтр("ru = 'Создан обработкой %1'");
Объект.Комментарий = СтрШаблон(ТекстШаблона, "Помощник закупок");
В этом случае глобальный поиск по полной фразе бесполезен. Рекомендуется искать фрагмент "Создан обработкой %1".
Если конфигурация использует механизм «Дополнительные отчеты и обработки», то код этих объектов физически не находится в основной конфигурации. Он хранится в базе данных в виде бинарных данных (в справочнике ДополнительныеОтчетыИОбработки). Глобальный поиск в конфигураторе никогда не заглядывает внутрь этих файлов.
Чтобы проверить этот вариант, выполним следующие шаги:
.epf в конфигураторе и выполним поиск уже внутри него.Если обработок много, проанализируем возможность программного поиска. Можно написать небольшую внешнюю обработку, которая будет перебирать все элементы справочника ДополнительныеОтчетыИОбработки, извлекать двоичные данные и искать в них текст, но проще воспользоваться поиском по файлам в операционной системе, предварительно сохранив все обработки в одну папку.
В современной разработке на платформе 1С:Предприятие 8.3 функционал часто выносится в расширения. При выполнении глобального поиска важно убедиться, что область поиска настроена правильно. Рассмотрим настройки окна «Глобальный поиск»:
В поле «Искать в:» должно быть выбрано значение «Везде» или явно указаны «Конфигурация и все расширения». Если поиск ограничен только «Основной конфигурацией», программный код в процедурах-обработчиках (с аннотациями &После, &Вместо, &Перед), находящихся в расширениях, будет проигнорирован.
В конфигурациях на базе БСП (Библиотеки стандартных подсистем) текст может формироваться в общих модулях, отвечающих за логирование или регламентные операции. Выясним причину появления текста через анализ фоновых заданий:
Метаданные.Обработки.ПомощникЗакупок.Синоним.Иногда решение проблемы лежит не в области программирования, а в области действий пользователей. Проанализируем ситуацию: если поиск по всему коду (включая расширения и внешние обработки) не дал результатов, велика вероятность, что текст не создается программой в данный момент.
Как это проверить? Выясним у пользователя, как именно создавался документ. Если документ был создан копированием другого документа, который когда-то давно был сформирован внешней обработкой, то комментарий просто перешел «по наследству». В платформе 1С при копировании реквизит Комментарий обычно заполняется из оригинала, если в модуле объекта в процедуре ПриКопировании не прописана его очистка.
// Как избежать переноса старых комментариев
Процедура ПриКопировании(ОбъектКопирования)
ЭтотОбъект.Комментарий = ""; // Очищаем старый текст
КонецПроцедуры
В редких случаях причиной может быть некорректная работа полнотекстового поиска самого конфигуратора. Если вы абсолютно уверены, что текст должен быть в коде, но он не находится, попробуем выполнить следующие действия:
%AppData%\1C\1cv8).Для эффективного поиска «скрытого» текста в 1С рекомендуем придерживаться следующего алгоритма:
Помните, что чудес в коде не бывает: если текст появляется в реквизите, значит, есть инструкция Объект.НаименованиеРеквизита = ..., либо срабатывает стандартный механизм платформы по копированию данных.