Сворачивание процедур, областей и блоков в модулях 1С 8.3
Содержание
Чтобы свернуть код в 1С, поставьте курсор внутрь процедуры и нажмите Ctrl + Num- (минус на цифровой клавиатуре). Свернуть сразу весь модуль до заголовков процедур — Ctrl + Shift + Num-, развернуть всё обратно — Ctrl + Shift + Num+. То же самое делается мышью: щелчок по значку «минус» на левом поле редактора рядом со строкой Процедура или #Область.
Сворачивание работает в редакторе модулей Конфигуратора 1С:Предприятие 8.3 и в 1С:EDT. Оно ничего не меняет в тексте и не влияет на работу программы: это только вид. Свёрнутый блок показывается одной строкой с заголовком, остальное скрыто до разворачивания.
Горячие клавиши для сворачивания и разворачивания кода
Основные сочетания в Конфигураторе удобно держать перед глазами. Все они используют клавиши + и − на цифровом блоке клавиатуры, а не в верхнем ряду.
| Действие | Сочетание | Что происходит |
|---|---|---|
| Свернуть текущий блок | Ctrl + Num- | Сворачивается блок, в котором стоит курсор |
| Развернуть текущий блок | Ctrl + Num+ | Разворачивается блок под курсором |
| Свернуть все блоки модуля | Ctrl + Shift + Num- | Остаются видны только заголовки верхнего уровня |
| Развернуть все блоки | Ctrl + Shift + Num+ | Модуль снова виден целиком |
Как это выглядит на практике:
- Откройте модуль, например модуль формы документа.
- Нажмите
Ctrl + Shift + Num-. Модуль на 3 000 строк превращается в список из пары десятков областей или процедур. - Найдите глазами нужную процедуру и поставьте на неё курсор.
- Нажмите
Ctrl + Num+— откроется только она, остальные блоки останутся свёрнутыми.
Если блок вложенный (условие внутри процедуры, процедура внутри области), Ctrl + Num- сворачивает самый внутренний блок вокруг курсора. Нажмите сочетание ещё раз, предварительно переведя курсор на строку заголовка внешнего блока, чтобы свернуть уровень выше.
Если на клавиатуре нет цифрового блока
На ноутбуках клавиш Num- и Num+ часто нет. Варианты:
- 🖱️ работать мышью через значки на поле редактора — этого хватает в 90% случаев;
- ⌨️ включить встроенный цифровой блок ноутбука (обычно через
Fnи отдельную клавишу, зависит от модели); - 🔧 переназначить команды на удобные клавиши. В свежих версиях платформы 8.3 в Конфигураторе есть
Сервис → Настройка клавиатуры: найдите в списке команды сворачивания по слову «Свернуть» и задайте своё сочетание; - 🧩 подключить внешнюю клавиатуру с цифровым блоком, если сворачиваете постоянно.
Сворачивание мышью: поле редактора и меню
Слева от текста модуля, между номерами строк и самим кодом, идёт узкая полоса. Напротив каждой строки, с которой начинается группируемый блок, там стоит маленький квадрат со знаком «минус».
- ➖ Щелчок по «минусу» сворачивает блок. Значок меняется на «плюс».
- ➕ Щелчок по «плюсу» разворачивает блок обратно.
- 📏 От «минуса» вниз тянется вертикальная линия до конца блока. По ней видно, где процедура или область заканчивается, даже если она не помещается на экран.
Свёрнутый блок выглядит как одна строка заголовка с отметкой о скрытом содержимом. Код внутри никуда не делся: поиск по модулю (Ctrl + F), синтаксический контроль и сохранение работают с полным текстом.
Те же команды продублированы в меню редактора — в главном меню Текст и в контекстном меню, которое открывается правым щелчком по тексту модуля. Ищите пункты со словами «Свернуть» и «Развернуть». Меню удобно тем, что рядом с командой показано назначенное сочетание клавиш: так проще его запомнить.
Если полосы со значками нет совсем, а горячие клавиши ничего не делают, скорее всего группировка выключена в параметрах редактора. Как её включить — в разделе про настройки ниже.
Области #Область: свои сворачиваемые блоки
Процедуры сворачиваются сами, а для крупных кусков модуля используют области. Это инструкция препроцессора, которая объединяет несколько процедур в один именованный блок.
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ...
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// ...
КонецПроцедуры
#КонецОбласти
На поле редактора напротив строки #Область появится свой «минус». Свернули — и обе процедуры спрятаны под одной строкой #Область ОбработчикиСобытийФормы.
Правила для областей
- Имя области пишется одним словом, без пробелов, по правилам идентификатора: буквы, цифры и подчёркивание, начинается не с цифры.
- Каждая
#Областьзакрывается своей#КонецОбласти. Незакрытая область — синтаксическая ошибка, модуль не пройдёт проверку. - Области можно вкладывать друг в друга. Сворачиваются они по уровням, как матрёшка.
- Удобнее всего, когда граница области не разрывает процедуру: процедура целиком лежит внутри одной области.
Какие имена областей приняты
В типовых конфигурациях фирмы 1С модули размечены по единой схеме. Если пишете доработки, придерживайтесь её — коллегам будет проще читать.
| Тип модуля | Типичные области |
|---|---|
| Общий модуль | ПрограммныйИнтерфейс, СлужебныйПрограммныйИнтерфейс, СлужебныеПроцедурыИФункции |
| Модуль формы | ОбработчикиСобытийФормы, ОбработчикиСобытийЭлементовШапкиФормы, ОбработчикиКомандФормы, СлужебныеПроцедурыИФункции |
| Модуль объекта, менеджера | ПрограммныйИнтерфейс, ОбработчикиСобытий, СлужебныеПроцедурыИФункции |
После Ctrl + Shift + Num- такой модуль читается как оглавление: три-четыре строки, и сразу понятно, где искать нужное.
Мини-кейс: разметить старый модуль областями
Допустим, достался модуль формы на 1 500 строк без единой области. Порядок работы:
- Сохраните конфигурацию или сделайте копию модуля во внешний файл, чтобы было с чем сравнить.
- Нажмите
Ctrl + Shift + Num-— видны только заголовки процедур. - Перетащите или вырежьте процедуры так, чтобы обработчики формы, обработчики команд и служебные процедуры шли тремя группами.
- Вставьте строки
#Область …и#КонецОбластина границах групп. - Проверьте синтаксис модуля и сверните всё ещё раз: вместо 60 строк заголовков останется 3.
Порядок процедур в модуле на работу программы не влияет, поэтому такая перестановка безопасна. Исключение — переменные модуля в начале текста: их оставляйте на месте, до первой процедуры.
Директивы компиляции и строки препроцессора
В модулях форм перед каждой процедурой стоит директива: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Директива находится на отдельной строке над словом Процедура, поэтому при сворачивании процедуры она остаётся видимой. Это удобно: даже в свёрнутом виде видно, где выполняется код.
В модулях объектов и менеджеров часто весь код обёрнут в условие препроцессора #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда … #КонецЕсли. Внутри такой обёртки процедуры и области сворачиваются как обычно.
Настройки группировки в Конфигураторе
Какие конструкции сворачиваются, задаётся в параметрах Конфигуратора:
- Откройте
Сервис → Параметры. - Перейдите на вкладку
Модули. - Откройте закладку с настройками группировки.
- Отметьте конструкции, которые нужно группировать.
Помимо процедур, функций и областей, платформа 8.3 умеет группировать управляющие конструкции: условия Если … КонецЕсли, циклы Для/Пока … КонецЦикла, блоки Попытка … КонецПопытки. Набор пунктов в окне зависит от версии платформы.
Не включайте группировку всего подряд. Если сворачиваются ещё и каждое условие и цикл, поле редактора обрастает десятками значков, и смысл сворачивания теряется. Рабочий минимум — процедуры, функции и области. Условия и циклы стоит включать, если часто разбираете длинные процедуры по 200–300 строк.
Там же задаётся начальное состояние: в каком виде блоки показываются при открытии модуля — свёрнутыми или развёрнутыми. Если хотите, чтобы каждый модуль открывался «оглавлением», отметьте сворачивание областей при открытии.
Как сворачивание ведёт себя при навигации по модулю
Свёрнутые блоки не мешают переходам по коду. Редактор сам разворачивает нужное место, когда вы туда прыгаете.
- 🔍 Поиск
Ctrl + Fнаходит текст и внутри свёрнутых блоков. Блок с найденным совпадением разворачивается, чтобы показать строку. - ➡️ Переход к определению по
F12открывает процедуру, даже если она свёрнута, и ставит курсор на её заголовок. - 📋 Список процедур и функций модуля (команда в меню
Текст) переводит на выбранную процедуру и раскрывает её. - 🔢 Переход к строке по номеру (
Ctrl + G) раскрывает блок, в котором эта строка находится. - 🐞 При отладке, если точка останова стоит внутри свёрнутого блока, отладчик показывает строку остановки развёрнутой.
Обратного автоматизма нет: после того как вы ушли из процедуры, она остаётся развёрнутой. Чтобы снова привести модуль к компактному виду, нажмите Ctrl + Shift + Num- ещё раз.
Приём, который экономит больше всего времени на чужом коде: свернуть всё, развернуть одну нужную область, затем внутри неё — одну процедуру. На экране остаётся ровно тот кусок, с которым вы работаете, а структура модуля видна сверху и снизу.
Сворачивание в разных модулях и в 1С:EDT
Принцип одинаковый для всех модулей конфигурации: общих модулей, модулей объектов и менеджеров, модулей форм, команд, модуля сеанса и модуля управляемого приложения. Отличаются только привычки разметки.
| Где | Что обычно сворачивают | На что смотреть |
|---|---|---|
| Модуль формы | Области по типам обработчиков | Директивы &НаКлиенте/&НаСервере остаются видны над свёрнутой процедурой |
| Общий модуль | Область ПрограммныйИнтерфейс — то, что вызывают снаружи | Экспортные процедуры удобнее держать в одной области |
| Модуль объекта | Обработчики ПередЗаписью, ОбработкаПроведения | Код часто внутри обёртки #Если Сервер … |
| Модуль менеджера | Печать, заполнение, обработчики обновления | Области типовой конфигурации лучше не переименовывать |
| Внешняя обработка | Модуль объекта и модуль формы | Работает так же, как в конфигурации |
В 1С:EDT
В EDT сворачивание устроено как в любом редакторе на базе Eclipse:
- значки сворачивания стоят на левом поле, рядом с номерами строк;
Ctrl + Num-иCtrl + Num+сворачивают и разворачивают текущий блок;Ctrl + Shift + Num/сворачивает все блоки,Ctrl + Num*разворачивает все;- настройки сворачивания — в
Window → Preferences: введите в поле фильтра словоFolding, чтобы быстро найти страницу редактора встроенного языка.
Если сочетания в EDT не срабатывают, проверьте Window → Preferences → General → Keys: там можно найти команды Collapse, Expand, Collapse All, Expand All и посмотреть или изменить их клавиши.
Почему код не сворачивается: проблемы и решения
Сервис → Параметры, вкладку Модули, включите группировку процедур, функций и областей. Закройте и снова откройте модуль.#Область/#КонецОбласти: опечатка, лишняя или пропущенная строка ломают блок. Запустите Модуль → Проверить синтаксис и посмотрите, на какой строке ошибка.#КонецОбласти за строку КонецПроцедуры, чтобы процедура целиком попала в одну область.Если правите области в типовой конфигурации на поддержке, помните: переименование или перенос областей — это изменение модуля. При следующем обновлении такие места придётся сравнивать и объединять вручную. Свои доработки удобнее выносить в расширение и размечать областями уже там.
Частые вопросы
Влияет ли свёрнутый код на работу программы?
Можно ли свернуть произвольный кусок кода без процедуры?
#Область ИмяОбласти и #КонецОбласти. Выделить мышью несколько строк и свернуть их без области в Конфигураторе нельзя.Сохраняются ли области при выгрузке конфигурации в файлы или в .cf?
#Область — часть текста модуля, она переносится вместе с ним при выгрузке, сравнении и объединении конфигураций.