К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как узнать и найти модуль в 1С

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

Модуль в 1С — это контейнер программного кода на встроенном языке, привязанный к конкретному объекту конфигурации: форме, документу, справочнику, отчёту или самому приложению. Вопрос «как узнать модуль» обычно возникает в трёх ситуациях: нужно понять, в каком модуле находится конкретная процедура или функция; определить, какой модуль отвечает за поведение объекта; либо найти, откуда вызывается ошибка, указанная в сообщении программы.

Все работы с модулями выполняются в конфигураторе — инструменте разработчика, который запускается через ярлык «1С:Предприятие» с выбором режима «Конфигуратор» или через файл 1cv8.exe с параметром DESIGNER. В пользовательском режиме «Предприятие» модули недоступны: там виден только результат их работы.

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

Виды модулей в 1С и как понять, какой нужен

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

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

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

Как открыть модуль объекта через дерево конфигурации

Самый прямой способ узнать и открыть модуль — через дерево конфигурации. Запустите конфигуратор, откройте конфигурацию (меню «Конфигурация» → «Открыть конфигурацию»), если она ещё не открыта. В левой части окна появится дерево объектов: «Справочники», «Документы», «Отчёты» и другие ветки.

Найдите нужный объект, например документ «РеализацияТоваровУслуг». Нажмите на него правой кнопкой мыши — в контекстном меню будут пункты «Открыть модуль объекта» и «Открыть модуль менеджера». Двойной щелчок по объекту открывает палитру свойств, а не модуль, поэтому используйте именно контекстное меню.

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

Порядок действий
  1. 1
    Запустите конфигуратор и откройте конфигурацию через меню «Конфигурация» → «Открыть конфигурацию».
  2. 2
    В дереве конфигурации найдите нужный объект (справочник, документ, отчёт).
  3. 3
    Щёлкните правой кнопкой мыши и выберите «Открыть модуль объекта» или «Открыть модуль менеджера».
  4. 4
    Для модуля формы откройте форму и перейдите на вкладку «Модуль».
  5. 5
    Проверьте, что открылся именно нужный модуль: в заголовке окна указан полный путь вида «Документ.РеализацияТоваровУслуг.МодульОбъекта».

Как найти модуль по имени процедуры или функции

Часто известно не место кода, а его «симптом»: текст сообщения об ошибке, имя процедуры или фрагмент строки. В этом случае используйте глобальный поиск: меню «Правка» → «Глобальный поиск по текстам» или сочетание Ctrl+Shift+F.

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

Если известно только имя процедуры, но неизвестно, где она объявлена, есть более точный приём: поставьте курсор на имя процедуры в любом месте вызова и нажмите F12 («Перейти к определению»). Конфигуратор откроет модуль, где процедура объявлена. Это работает и для функций из общих модулей — самый быстрый способ узнать, в каком модуле живёт вызываемый код.

При поиске по тексту сообщения об ошибке ищите не всю фразу целиком, а уникальный фрагмент из 3–5 слов. Текст часто собирается из переменных, и полная строка в коде не встречается.
ПЗ
Практическое замечание

Как узнать модуль из сообщения об ошибке

Когда 1С выводит ошибку выполнения, в сообщении почти всегда указан источник: полное имя модуля и номер строки, например «{Документ.ПоступлениеТоваровУслуг.МодульОбъекта(245)}: Ошибка при вызове метода контекста». Это и есть прямой ответ на вопрос, где искать код.

Расшифровка проста: до точки — тип объекта, затем имя объекта, затем тип модуля, в скобках — номер строки. Откройте указанный объект в конфигураторе, откройте соответствующий модуль и перейдите к строке через Ctrl+G или Ctrl+L (переход к строке по номеру).

Если сообщение об ошибке обрезано или недоступно, используйте технологический журнал или журнал регистрации (меню «Администрирование» → «Журнал регистрации» в режиме «Предприятие») — там ошибки фиксируются с полным контекстом. Для глубокой диагностики запустите отладку (F5 в конфигураторе) и поставьте точку останова: исполнение остановится в конкретном модуле, и его имя будет видно в заголовке окна редактора.

{ОбщийМодуль.РаботаСФайлами.Модуль(120)}Общий модуль

Ищите в ветке «Общие» → «Общие модули» → «РаботаСФайлами», строка 120

{Справочник.Номенклатура.МодульОбъекта(45)}Модуль объекта справочника

Правый клик по справочнику «Номенклатура» → «Открыть модуль объекта»

{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(310)}Модуль формы

Откройте форму документа и перейдите на вкладку «Модуль»

Как определить, какой модуль выполняется: отладчик и трассировка

Когда поведение программы непонятно и неизвестно, какой код вообще участвует, помогает отладчик. Запустите отладку в конфигураторе (F5), воспроизведите проблемное действие в режиме «Предприятие» и используйте пошаговое выполнение: F11 — шаг с заходом в процедуры, F10 — шаг через вызов. Каждый заход покажет, в какой модуль попало исполнение.

Полезный инструмент — окно «Стек вызовов» (меню «Отладка» → «Стек вызовов»). Оно показывает цепочку: из какого модуля и строки была вызвана текущая процедура, и откуда вызвана она сама. Это самый надёжный способ узнать полный путь исполнения кода.

Если точка входа неизвестна, включите «Остановку по ошибке» (меню «Отладка» → «Остановка по ошибке»): исполнение прервётся автоматически в момент исключения, и вы сразу увидите модуль, строку и стек вызовов, приведший к сбою.

Ограничения и типичные ошибки при поиске модулей

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

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

Ещё одна ловушка — внешние обработки и отчёты (файлы .epf и .erf). Их модули не входят в конфигурацию и не находятся глобальным поиском. Чтобы увидеть код внешней обработки, откройте её файл через меню «Файл» → «Открыть» в конфигураторе.

Типичные ошибки
01
Искать код формы в модуле объекта: обработчики кнопок и событий формы находятся только в модуле формы, поэтому поиск в модуле объекта ничего не даст.
02
Игнорировать расширения: часть логики типовых конфигураций внедрена расширениями, и глобальный поиск по основной конфигурации её не показывает.
03
Путать модуль объекта и модуль менеджера: первый работает с конкретным экземпляром объекта, второй — с коллекцией объектов в целом, и код в них не взаимозаменяем.
04
Редактировать модуль без снятия копии: одна синтаксическая ошибка в модуле приложения может сделать невозможным запуск базы до исправления.

Как проверить, что найден нужный модуль

Признак правильного модуля — совпадение контекста. Заголовок окна редактора содержит полный путь, например «Документ.РеализацияТоваровУслуг.МодульОбъекта». Сверьте его с тем, что указано в сообщении об ошибке или в стеке вызовов отладчика.

Дополнительная проверка — поставить точку останова на предполагаемой строке и воспроизвести действие. Если исполнение остановилось именно там — модуль найден верно. Если точка не сработала, код либо не выполняется в этом сценарии, либо находится в другом месте (расширение, внешняя обработка, другой общий модуль).

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

Контрольные точки

Как проверить результат

Заголовок окна редактора модуля
Норма

Путь совпадает с указанным в ошибке или стеке вызовов

Тревожный признак

Открыт другой объект или другой тип модуля

Точка останова на строке
Норма

Исполнение останавливается при воспроизведении действия

Тревожный признак

Точка не срабатывает — код в другом месте

Глобальный поиск по имени процедуры
Норма

Найдено объявление и все вызовы

Тревожный признак

Ничего не найдено — проверьте расширения и внешние обработки

Итог

Что важно запомнить

Модуль открывается через контекстное меню объекта в дереве конфигурации или через вкладку «Модуль» в редакторе формы. Быстрее всего код находится глобальным поиском (Ctrl+Shift+F) и переходом к определению (F12). Сообщение об ошибке и стек вызовов отладчика прямо указывают модуль и строку. Перед любыми правками делайте резервную копию.

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

Можно ли посмотреть модуль без конфигуратора?

Нет, штатного способа просмотреть код модуля в режиме «Предприятие» не существует. Косвенно о том, какой модуль работает, можно узнать из текста ошибки или журнала регистрации, но сам текст кода доступен только в конфигураторе или через выгрузку конфигурации в файлы.

Почему глобальный поиск не находит процедуру, которая точно есть?

Чаще всего причины три: процедура находится в расширении конфигурации, которое не включено в область поиска; код находится во внешней обработке; либо в настройках поиска ограничена область (только текущий модуль или выбранные объекты). Проверьте параметры поиска и подключённые расширения.

Чем модуль объекта отличается от модуля менеджера?

Модуль объекта исполняется в контексте конкретного экземпляра — записываемого документа, элемента справочника — и имеет доступ к его данным напрямую. Модуль менеджера работает с видом объектов в целом: там размещают функции получения данных, печати, создания объектов без открытия конкретного экземпляра.

Как узнать, какие общие модули есть в конфигурации?

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

Ошибка указывает строку, но в модуле такой строки нет. Почему?

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

Можно ли найти модуль по кнопке на форме в пользовательском режиме?

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