Открываем модуль объекта в конфигураторе 1С 8.3
Содержание
Модуль объекта открывают в конфигураторе. Самый короткий путь: правый клик по справочнику или документу в дереве конфигурации → команда Открыть модуль объекта. Второй способ — двойным кликом открыть окно редактирования объекта и в списке разделов слева выбрать Прочее → Модуль объекта.
Модуль объекта — это текст программы, который привязан к конкретному прикладному объекту (справочнику, документу, обработке) и срабатывает в его событиях: при записи, при проведении, при заполнении. Пустой он по умолчанию — код в нём появляется только тогда, когда вы его пишете. Ниже разберём все способы открыть этот модуль, чем он отличается от модуля формы и менеджера, и почему иногда нужного пункта в меню нет.
Сначала — вход в конфигуратор
Модули правятся не в режиме 1С:Предприятие, а в конфигураторе. При запуске 1С в окне выбора информационной базы нажмите кнопку Конфигуратор (а не 1С:Предприятие).
Когда конфигуратор открылся, нужно вывести дерево конфигурации: меню Конфигурация → Открыть конфигурацию. Слева появится окно Конфигурация с деревом объектов — справочники, документы, регистры и прочее.
Если дерево уже открыто, но вы его случайно закрыли, повторное нажатие Конфигурация → Открыть конфигурацию вернёт окно на место.
== Для правки модулей конфигурация не должна быть закрыта от изменений. == Если рядом с объектами стоит жёлтый замок — база на поддержке без возможности изменения, об этом отдельный раздел ниже.
Открытие через дерево конфигурации
Это основной способ, работает для любого объекта, у которого модуль объекта вообще есть.
- В дереве конфигурации раскройте нужную ветку — например,
СправочникиилиДокументы. - Найдите свой объект (
Контрагенты,РеализацияТоваровУслуги т. п.). - Щёлкните по нему правой кнопкой мыши.
- В контекстном меню выберите
Открыть модуль объекта.
Откроется окно редактора кода с заголовком вида СправочникОбъект.Контрагенты. Это и есть модуль объекта.
Рядом в том же контекстном меню обычно есть команда Открыть модуль менеджера — это другой модуль, не перепутайте (разница ниже).
У регистров пункта Открыть модуль объекта не будет. У них данные хранятся наборами записей, поэтому в меню стоит Открыть модуль набора записей. Это нормально, а не ошибка.
Через окно редактирования объекта
Если вам удобнее работать в карточке объекта — где настраиваются реквизиты, формы и права, — модуль открывается прямо оттуда.
- Дважды щёлкните по объекту в дереве (или нажмите
Enter, когда он выделен). Откроется окно редактирования объекта. - Слева идёт вертикальный список разделов:
Основные,Данные,Нумерация,Формы,Команды,Макеты,Права,Прочееи другие. - Щёлкните раздел
Прочее. - В нём есть ссылки
Модуль объектаиМодуль менеджера. Щёлкните нужную.
Этот путь удобен, когда вы и так настраиваете объект: не нужно возвращаться в дерево, всё под рукой в одном окне.
Набор ссылок в разделе Прочее зависит от типа объекта: у константы здесь будет Модуль менеджера значения, у регистра — ссылка на модуль набора записей, у перечисления — только Модуль менеджера.
После того как модуль открыт, в нём обычно добавляют обработчики событий объекта. Например, контроль заполнения реквизита перед записью справочника выглядит так:
Процедура ПередЗаписью(Отказ)
Если НЕ ЗначениеЗаполнено(ИНН) Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Заполните ИНН контрагента";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
Процедуру ПередЗаписью вызывать вручную не нужно — платформа сама выполняет её перед сохранением объекта. Установка Отказ = Истина отменяет запись.
Быстрые команды и работа с клавиатуры
Отдельной горячей клавиши «открыть модуль объекта» в платформе нет, но ускорить навигацию можно.
- Двойной клик или
Enterпо объекту в дереве — открывает окно редактирования, дальше разделПрочее. - Поле поиска над деревом конфигурации — начните печатать имя объекта, дерево отфильтруется, и вы быстро доберётесь до нужной ветки, не прокручивая весь список.
- Переключение между открытыми окнами модулей — через меню
Окна, где перечислены все открытые редакторы.
Внутри самого редактора кода работают клавиши, которые экономят время:
F12— перейти к определению процедуры или функции под курсором.Ctrl+-иCtrl+Shift+-— вернуться назад и вперёд по истории переходов.Ctrl+F— поиск текста в модуле,F3— найти следующее совпадение.Ctrl+G— перейти к строке по номеру.
В верхней части окна модуля есть выпадающий список процедур и функций. Выбор строки в нём сразу прокручивает код к нужной процедуре — удобно в больших модулях на сотни строк.
Какие бывают модули и у каких объектов их нет
«Модуль объекта» — не единственный модуль. Платформа 1С 8.3 различает несколько видов, и путать их — главная причина, почему «не могу найти модуль».
| Тип объекта | Какой модуль хранит код строки/экземпляра |
|---|---|
| Справочники, документы, планы видов характеристик, планы счетов, бизнес-процессы, задачи | Модуль объекта |
| Обработки, отчёты | Модуль объекта |
| Регистры сведений, накопления, бухгалтерии, расчёта | Модуль набора записей (модуля объекта нет) |
| Константы | Модуль менеджера значения |
| Перечисления | Только модуль менеджера |
У всех перечисленных объектов есть ещё и модуль менеджера — в нём пишут методы, которые относятся ко всему объекту в целом, а не к конкретной строке данных. Такие процедуры удобно вызывать через менеджер: например, экспортную функцию из модуля менеджера справочника Контрагенты вызывают как Справочники.Контрагенты.ИмяФункции(). Поэтому код, общий для всех элементов, логично держать именно здесь, а не дублировать в модуле объекта.
Отдельно стоят модули уровня всей конфигурации. Чтобы открыть их, щёлкните правой кнопкой по корню дерева (верхний узел с именем конфигурации):
Открыть модуль управляемого приложения— запускается при старте в веб- и тонком клиенте;Открыть модуль обычного приложения— для толстого клиента в обычном режиме;Открыть модуль сеанса— выполняется раньше всех, при установке сеанса;Открыть модуль внешнего соединения— при работе через COM-соединение.
Общие модули лежат в ветке Общие → Общие модули. Двойной клик по общему модулю сразу открывает его код — промежуточного окна редактирования у него нет.
Модуль формы открывается иначе, через редактор формы. Раскройте у объекта ветку Формы, двойным кликом откройте нужную форму — запустится редактор формы. Внизу окна редактора есть закладки: Форма, Модуль, Командный интерфейс. Переключитесь на закладку Модуль — это и есть модуль формы. Модуль команды открывается так же: найдите команду в ветке Команды объекта и откройте её модуль из окна редактирования команды.
Модуль объекта и модуль формы — разные вещи. Код в модуле формы работает только на этой форме. Если событие должно срабатывать всегда, независимо от формы (например, контроль при записи), его пишут в модуле объекта.
Как быстро найти нужный модуль в большой конфигурации
В типовой конфигурации тысячи объектов, и прокручивать дерево вручную долго. Есть два приёма.
Фильтр над деревом. Над окном Конфигурация есть строка поиска. Введите часть имени объекта — дерево покажет только совпадения. Дальше открываете модуль привычным способом.
Глобальный поиск по текстам модулей. Если вы ищете не объект, а строчку кода (имя процедуры, текст сообщения, вызов метода), используйте меню Правка → Глобальный поиск. Платформа пройдёт по всем модулям конфигурации и покажет список совпадений; двойной клик по строке результата открывает нужный модуль на нужной строке.
Ещё полезна команда Поиск ссылок на объект в контекстном меню объекта — она показывает, где объект используется, и помогает понять, какой модуль нужно открыть. Это выручает, когда вы знаете, что некий справочник где-то обрабатывается, но не помните, в каком именно модуле.
В клиент-серверной базе всё это делается так же, как в файловой: место хранения базы на способ открытия модулей не влияет — разница только в том, что при изменении структуры конфигуратору на сервере нужен монопольный доступ к базе.
Глобальный поиск удобно сужать флажком поиска с учётом регистра и по целым словам — так в выдачу не попадают случайные вхождения подстроки.
Почему пункта «Модуль объекта» нет или он не открывается
Разберём ситуации, когда модуль не открывается так, как ожидалось.
Отдельно про поддержку: если у объектов в дереве жёлтый замок, конфигурация принадлежит поставщику и закрыта от изменений. Открыть и прочитать модуль можно, а вот редактировать — только после включения возможности изменения в настройке поддержки. Если правка типовой конфигурации вам не нужна, а хочется добавить свой код, корректнее делать это через расширение конфигурации , не снимая объект с поддержки.
Как дополнить модуль через расширение конфигурации
Если база типовая и снимать её с поддержки вы не хотите, свой код к модулю объекта добавляют через расширение. Так доработка живёт отдельным файлом и не мешает обновлениям типовой конфигурации. Расширения доступны на платформе 8.3.6 и новее.
- Откройте
Конфигурация→Расширения конфигурации. В списке создайте новое расширение (кнопка добавления) или выберите существующее. - Нажмите кнопку открытия конфигурации расширения — откроется его собственное дерево, поначалу пустое.
- В дереве основной конфигурации найдите нужный объект, через контекстное меню добавьте его в расширение (команда добавления объекта в расширение).
- В расширении у заимствованного объекта откройте модуль объекта тем же способом — через
Прочееили контекстное меню.
В модуле расширения вы пишете собственные обработчики. Чтобы изменения заработали, после правки нужно обновить конфигурацию
базы данных (Конфигурация → Обновить конфигурацию базы данных, клавиша F7), иначе код останется только в метаданных и не выполнится.
Готовое расширение можно выгрузить в файл .cfe и перенести в другую базу — исходную конфигурацию при этом трогать не нужно.
Частые вопросы
Чем модуль объекта отличается от модуля менеджера?
Где модуль объекта у регистра сведений?
Можно ли открыть модуль объекта в режиме 1С:Предприятие?
1С:Предприятие исходный код объектов недоступен для редактирования.Почему модуль серый и не даёт печатать?
Конфигурация → Поддержка → Настройка поддержки, либо вносите доработки через расширение конфигурации.Как найти нужный модуль, если не помню, в каком объекте писал код?
Правка → Глобальный поиск). Введите фрагмент кода или имя процедуры — платформа покажет все модули, где он встречается, и откроет нужный на точной строке.