Разработка и Конфигурация · 11 мин
Как узнать и найти модуль в 1С
Как узнать и найти модуль в 1С: поиск в конфигураторе, виды модулей, навигация по коду, отладчик и типичные ошибки при работе с модулями.
Модуль в 1С — это контейнер программного кода на встроенном языке, привязанный к конкретному объекту конфигурации: форме, документу, справочнику, отчёту или самому приложению. Вопрос «как узнать модуль» обычно возникает в трёх ситуациях: нужно понять, в каком модуле находится конкретная процедура или функция; определить, какой модуль отвечает за поведение объекта; либо найти, откуда вызывается ошибка, указанная в сообщении программы.
Все работы с модулями выполняются в конфигураторе — инструменте разработчика, который запускается через ярлык «1С:Предприятие» с выбором режима «Конфигуратор» или через файл 1cv8.exe с параметром DESIGNER. В пользовательском режиме «Предприятие» модули недоступны: там виден только результат их работы.
Ниже разобраны виды модулей, способы их поиска и открытия, навигация по коду и приёмы, которые помогают быстро определить, где именно находится нужный код. Материал ориентирован на типовые конфигурации на платформе 8.3, но подходит и для самописных решений.
Виды модулей в 1С и как понять, какой нужен
Прежде чем искать модуль, полезно понять, что именно вы ищете. В конфигурации существует несколько типов модулей, и у одного объекта их может быть несколько. Например, у документа есть модуль объекта (обработчики проведения, заполнения), модуль менеджера (общие функции работы с документами этого вида) и модули форм.
Основные виды: модуль приложения (или модуль управляемого/обычного приложения) — код, работающий при запуске; общие модули — библиотеки процедур и функций, доступные отовсюду; модуль объекта — логика самого объекта; модуль формы — обработчики событий и команды формы; модуль команды — действие при выполнении команды интерфейса.
Если ошибка связана с записью или проведением документа — почти наверняка код в модуле объекта. Если проблема проявляется при нажатии кнопки на форме — смотрите модуль формы. Если функция вызывается из разных мест конфигурации — вероятнее всего она в общем модуле.
Как открыть модуль объекта через дерево конфигурации
Самый прямой способ узнать и открыть модуль — через дерево конфигурации. Запустите конфигуратор, откройте конфигурацию (меню «Конфигурация» → «Открыть конфигурацию»), если она ещё не открыта. В левой части окна появится дерево объектов: «Справочники», «Документы», «Отчёты» и другие ветки.
Найдите нужный объект, например документ «РеализацияТоваровУслуг». Нажмите на него правой кнопкой мыши — в контекстном меню будут пункты «Открыть модуль объекта» и «Открыть модуль менеджера». Двойной щелчок по объекту открывает палитру свойств, а не модуль, поэтому используйте именно контекстное меню.
Для формы путь другой: раскройте объект, перейдите в подветку «Формы», откройте нужную форму двойным щелчком, затем в окне редактора формы перейдите на вкладку «Модуль» в нижней части окна. Там находятся все обработчики событий формы и её команд.
- 1Запустите конфигуратор и откройте конфигурацию через меню «Конфигурация» → «Открыть конфигурацию».
- 2В дереве конфигурации найдите нужный объект (справочник, документ, отчёт).
- 3Щёлкните правой кнопкой мыши и выберите «Открыть модуль объекта» или «Открыть модуль менеджера».
- 4Для модуля формы откройте форму и перейдите на вкладку «Модуль».
- 5Проверьте, что открылся именно нужный модуль: в заголовке окна указан полный путь вида «Документ.РеализацияТоваровУслуг.МодульОбъекта».
Как найти модуль по имени процедуры или функции
Часто известно не место кода, а его «симптом»: текст сообщения об ошибке, имя процедуры или фрагмент строки. В этом случае используйте глобальный поиск: меню «Правка» → «Глобальный поиск по текстам» или сочетание Ctrl+Shift+F.
Введите искомый текст, убедитесь, что область поиска охватывает всю конфигурацию, и включите поиск в модулях. Результат покажет список совпадений с указанием объекта, типа модуля и номера строки. Двойной щелчок по строке результата открывает модуль на нужном месте.
Если известно только имя процедуры, но неизвестно, где она объявлена, есть более точный приём: поставьте курсор на имя процедуры в любом месте вызова и нажмите F12 («Перейти к определению»). Конфигуратор откроет модуль, где процедура объявлена. Это работает и для функций из общих модулей — самый быстрый способ узнать, в каком модуле живёт вызываемый код.
При поиске по тексту сообщения об ошибке ищите не всю фразу целиком, а уникальный фрагмент из 3–5 слов. Текст часто собирается из переменных, и полная строка в коде не встречается.
Как узнать модуль из сообщения об ошибке
Когда 1С выводит ошибку выполнения, в сообщении почти всегда указан источник: полное имя модуля и номер строки, например «{Документ.ПоступлениеТоваровУслуг.МодульОбъекта(245)}: Ошибка при вызове метода контекста». Это и есть прямой ответ на вопрос, где искать код.
Расшифровка проста: до точки — тип объекта, затем имя объекта, затем тип модуля, в скобках — номер строки. Откройте указанный объект в конфигураторе, откройте соответствующий модуль и перейдите к строке через Ctrl+G или Ctrl+L (переход к строке по номеру).
Если сообщение об ошибке обрезано или недоступно, используйте технологический журнал или журнал регистрации (меню «Администрирование» → «Журнал регистрации» в режиме «Предприятие») — там ошибки фиксируются с полным контекстом. Для глубокой диагностики запустите отладку (F5 в конфигураторе) и поставьте точку останова: исполнение остановится в конкретном модуле, и его имя будет видно в заголовке окна редактора.
Ищите в ветке «Общие» → «Общие модули» → «РаботаСФайлами», строка 120
Правый клик по справочнику «Номенклатура» → «Открыть модуль объекта»
Откройте форму документа и перейдите на вкладку «Модуль»
Как определить, какой модуль выполняется: отладчик и трассировка
Когда поведение программы непонятно и неизвестно, какой код вообще участвует, помогает отладчик. Запустите отладку в конфигураторе (F5), воспроизведите проблемное действие в режиме «Предприятие» и используйте пошаговое выполнение: F11 — шаг с заходом в процедуры, F10 — шаг через вызов. Каждый заход покажет, в какой модуль попало исполнение.
Полезный инструмент — окно «Стек вызовов» (меню «Отладка» → «Стек вызовов»). Оно показывает цепочку: из какого модуля и строки была вызвана текущая процедура, и откуда вызвана она сама. Это самый надёжный способ узнать полный путь исполнения кода.
Если точка входа неизвестна, включите «Остановку по ошибке» (меню «Отладка» → «Остановка по ошибке»): исполнение прервётся автоматически в момент исключения, и вы сразу увидите модуль, строку и стек вызовов, приведший к сбою.
Ограничения и типичные ошибки при поиске модулей
Не у всех объектов есть все виды модулей. Например, у констант нет модуля менеджера в привычном смысле, а у некоторых объектов формы не созданы — тогда и модуля формы нет. Если пункт «Открыть модуль» неактивен или форма отсутствует в дереве — это норма, а не сбой.
Отдельный нюанс — расширения конфигурации. Если нужная логика добавлена расширением, в основной конфигурации вы её не найдёте. Откройте меню «Конфигурация» → «Расширения конфигурации», подключитесь к нужному расширению и ищите модули там. Глобальный поиск по умолчанию может не охватывать расширения — проверьте область поиска.
Ещё одна ловушка — внешние обработки и отчёты (файлы .epf и .erf). Их модули не входят в конфигурацию и не находятся глобальным поиском. Чтобы увидеть код внешней обработки, откройте её файл через меню «Файл» → «Открыть» в конфигураторе.
Как проверить, что найден нужный модуль
Признак правильного модуля — совпадение контекста. Заголовок окна редактора содержит полный путь, например «Документ.РеализацияТоваровУслуг.МодульОбъекта». Сверьте его с тем, что указано в сообщении об ошибке или в стеке вызовов отладчика.
Дополнительная проверка — поставить точку останова на предполагаемой строке и воспроизвести действие. Если исполнение остановилось именно там — модуль найден верно. Если точка не сработала, код либо не выполняется в этом сценарии, либо находится в другом месте (расширение, внешняя обработка, другой общий модуль).
Для общих модулей проверьте ещё свойства: флажки «Сервер», «Клиент (управляемое приложение)», «Вызов сервера» определяют, где модуль исполняется. Если функция «не видна» из клиентского кода — возможно, общий модуль помечен только как серверный, и это и есть ответ на вопрос, почему вызов не работает.
Как проверить результат
Путь совпадает с указанным в ошибке или стеке вызовов
Открыт другой объект или другой тип модуля
Исполнение останавливается при воспроизведении действия
Точка не срабатывает — код в другом месте
Найдено объявление и все вызовы
Ничего не найдено — проверьте расширения и внешние обработки
Что важно запомнить
Модуль открывается через контекстное меню объекта в дереве конфигурации или через вкладку «Модуль» в редакторе формы. Быстрее всего код находится глобальным поиском (Ctrl+Shift+F) и переходом к определению (F12). Сообщение об ошибке и стек вызовов отладчика прямо указывают модуль и строку. Перед любыми правками делайте резервную копию.
Частые вопросы
Можно ли посмотреть модуль без конфигуратора?
Нет, штатного способа просмотреть код модуля в режиме «Предприятие» не существует. Косвенно о том, какой модуль работает, можно узнать из текста ошибки или журнала регистрации, но сам текст кода доступен только в конфигураторе или через выгрузку конфигурации в файлы.
Почему глобальный поиск не находит процедуру, которая точно есть?
Чаще всего причины три: процедура находится в расширении конфигурации, которое не включено в область поиска; код находится во внешней обработке; либо в настройках поиска ограничена область (только текущий модуль или выбранные объекты). Проверьте параметры поиска и подключённые расширения.
Чем модуль объекта отличается от модуля менеджера?
Модуль объекта исполняется в контексте конкретного экземпляра — записываемого документа, элемента справочника — и имеет доступ к его данным напрямую. Модуль менеджера работает с видом объектов в целом: там размещают функции получения данных, печати, создания объектов без открытия конкретного экземпляра.
Как узнать, какие общие модули есть в конфигурации?
Откройте в дереве конфигурации ветку «Общие» → «Общие модули» — там перечислены все общие модули. Альтернатива — окно поиска по метаданным или синтакс-помощник, где в разделе «Общие модули» видны их экспортные процедуры и функции с описанием.
Ошибка указывает строку, но в модуле такой строки нет. Почему?
Номер строки в ошибке соответствует версии кода, которая фактически исполнялась. Если после ошибки конфигурация обновлялась, код мог сместиться. Также в типовых конфигурациях код может формироваться динамически или подключаться из расширения — тогда нумерация в основной конфигурации не совпадёт.
Можно ли найти модуль по кнопке на форме в пользовательском режиме?
Напрямую — нет. Практический приём: запустите отладку, поставьте остановку по ошибке или воспроизведите нажатие кнопки с включённой трассировкой. Либо найдите форму в конфигураторе, откройте её модуль и поищите обработчик команды с именем, совпадающим с заголовком кнопки.