Часто при разработке или доработке конфигураций 1С возникает необходимость найти «точку входа» — место в программном коде, откуда вызывается открытие конкретной экранной формы (например, списка сотрудников). Проанализируем ситуацию, разберем по шагам доступные методы поиска и выясним причину частой сопутствующей ошибки «Поле не найдено», которая может возникать при открытии таких форм.
Рассмотрим подробнее несколько эффективных способов найти место вызова формы или определить, какой код выполняется при ее открытии:
ФормаСписка справочника.ПриОткрытии и ПриСозданииНаСервере. Именно они являются точками входа для логики, выполняемой при инициализации.Представим, что мы нашли форму, но при ее открытии выводится сообщение: Ошибка при выполнении запроса. по причине: Поле не найдено "ТекущаяДолжностьПоШтатномуРасписанию". При этом отладчик не останавливается на строке с ошибкой, а запуск в режиме толстого клиента не предлагает открыть конфигуратор.
Выясним причину. Ошибки, связанные с фразой «Поле не найдено», в 90% случаев относятся не к строкам программного кода (модулям), а к запросам динамических списков. Платформа 1С выполняет эти запросы «под капотом» для отображения данных на форме. Если в запросе динамического списка (или в его настройках) есть ссылка на удаленный реквизит, 1С выдаст ошибку конфигурации, но не покажет строку кода, так как падает сам механизм компоновки данных.
Разберем по шагам, как локализовать и устранить такую ошибку:
ФормаСписка справочника Сотрудники) в конфигураторе.ДинамическийСписок (обычно он называется Список).ТекущаяДолжностьПоШтатномуРасписанию).Часто в текстах запросов динамических списков можно встретить фигурные скобки. Посмотрим на пример:
ВЫБРАТЬ
СправочникСотрудники.Ссылка,
СправочникСотрудники.Наименование,
РегистрСведенийКадры.ТекущаяДолжностьПоШтатномуРасписанию
ИЗ
Справочник.Сотрудники КАК СправочникСотрудники
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК РегистрСведенийКадры
ПО СправочникСотрудники.Ссылка = РегистрСведенийКадры.Сотрудник}
Что означают фигурные скобки { } в запросе?
Это синтаксис расширения языка запросов для Системы Компоновки Данных (СКД). Внутри них описываются необязательные конструкции (поля, отборы, параметры). Если пользователь не вывел колонку на форму и не задал по ней отбор, платформа динамически вырежет этот кусок кода для оптимизации.
Проанализируем ситуацию: вы нашли устаревшее поле в запросе (например, после обновления ERP с версии 2.2 на 2.4 разработчики 1С изменили структуру регистров), удалили его из текста, но ошибка все равно появляется. На это есть несколько скрытых причин:
ПриСозданииНаСервере). Запрос мог быть переопределен кодом Список.ТекстЗапроса = ....Если визуальный поиск не дает результатов, воспользуемся мощным инструментом конфигуратора. Включите режим Остановка по ошибке (в меню Отладка -> Остановка по ошибке...). Поставьте галочку на остановку при любых исключениях.
В этом режиме платформа остановит выполнение программы ровно за долю секунды до того, как сгенерируется ошибка «Поле не найдено», даже если это происходит глубоко в платформенных вызовах или при программной модификации отборов динамического списка (например, в типовых процедурах вроде УдалитьЭлементыГруппыОтбораДинамическогоСписка). Это позволит вам проанализировать стек вызовов и понять, какой именно код пытается обратиться к несуществующему ресурсу.