Отступы в 1С: в коде, формах, макетах и отчётах

· 9 мин

Содержание

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

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

Где вам нужен отступ?

Отступ в программном коде модуля

Самый частый вопрос — как ровно оформить код в модуле. В Конфигураторе это делается так:

  1. Выделите одну или несколько строк.
  2. Нажмите Tab — выделенный блок сдвинется на один уровень вправо.
  3. Shift+Tab сдвигает блок обратно влево.

Когда вы пишете новую строку внутри Если … Тогда или Для Каждого … Цикл, редактор сам ставит отступ на уровень вложенности — это автоотступ, он включён по умолчанию. Поэтому аккуратный код получается сам собой, если не ломать структуру вставкой из буфера.

Правильно оформленный фрагмент выглядит так — каждый вложенный блок сдвинут на один шаг:

Если ТаблицаЗаказов.Количество() > 0 Тогда
    Для Каждого Строка Из ТаблицаЗаказов Цикл
        Если Строка.Сумма > 0 Тогда
            Итого = Итого + Строка.Сумма;
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Если код после вставки «съехал», выделите его целиком (Ctrl+A) и несколько раз нажмите Shift+Tab, чтобы прижать к левому краю, а потом заново расставьте отступы блоками. Это быстрее, чем править каждую строку.

Важная оговорка для тех, кто пришёл из других языков: встроенный язык 1С к отступам нечувствителен. В отличие от Python, где сдвиг строки меняет логику, в 1С границы блоков задают ключевые слова (Тогда, Цикл, КонецЕсли), а отступ нужен только для читаемости. Сломанный отступ не вызовет ошибку — он просто затруднит чтение кода.

Отдельно стоит отступ внутри областей. Если модуль разбит директивами #Область … #КонецОбласти, редактор сдвигает содержимое области на один уровень вправо. Это удобно для свёртки: область можно свернуть в одну строку и видеть структуру модуля целиком. Внутри области действует тот же автоотступ.

Переформатировать весь модуль «в один клик» умеет среда разработки 1C:Enterprise Development Tools (EDT) — там за это отвечает сочетание Ctrl+Shift+F. В классическом Конфигураторе готовой команды «выровнять весь модуль» нет: отступы держит автоотступ при наборе и ручной сдвиг блоков.

Как настроить ширину табуляции и автоотступ

Поведение Tab в редакторе модулей настраивается в одном месте: Сервис → Параметры, раздел «Тексты». Там задают:

  • ширину табуляции — на сколько позиций сдвигается блок (обычно 4);
  • автоотступ — автоматический отступ новой строки по предыдущей;
  • пробелы вместо табуляции — заменять символ табуляции на пробелы.

Последний пункт важен, если код правят несколько человек. Если у разработчиков разная ширина табуляции и разная настройка «пробелы/табуляция», один и тот же модуль будет выглядеть «рваным» у каждого по-своему. Договоритесь в команде об одном варианте — чаще берут 4 пробела.

Смешивать табуляцию и пробелы в одном модуле не стоит: глазом это незаметно, но при сравнении версий в хранилище вся строка показывается как изменённая, хотя текст не менялся.

Отступ в макете печатной формы и табличном документе

Макет печатной формы — это табличный документ, а отступ в нём задаётся свойством ячейки. Порядок действий в Конфигураторе:

  1. Откройте макет и выделите нужную ячейку или именованную область.
  2. Вызовите палитру свойств (Alt+Enter или правой кнопкой → «Свойства»).
  3. Найдите свойство отступа слева и задайте значение в символах.

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

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

ОбластьСтроки = Макет.ПолучитьОбласть("Строка");
ОбластьСтроки.Параметры.Наименование = Выборка.Наименование;
ОбластьСтроки.ОтступСлева = Выборка.Уровень() * 2;
ТабДок.Вывести(ОбластьСтроки);

Здесь Выборка.Уровень() возвращает уровень вложенности при обходе результата запроса по группировкам, и каждый следующий уровень сдвигается на два символа. Если иерархии нет, просто поставьте фиксированное число.

Пара практических деталей по макетам:

  • 📐 Отступ задаётся отдельно для каждой именованной области. Если в печатной форме есть шапка, строка таблицы и подвал, отступ в каждой из них настраивается независимо — общего «отступа всего макета» нет.
  • 🔁 При выводе области в цикле (ТабДок.Вывести) отступ, заданный в коде, применяется к каждой выводимой копии. Поэтому его и привязывают к уровню или условию, а не прописывают один раз.
  • 🚫 Если ячейки объединены по горизонтали, отступ считается от левой границы объединённой области. Это частая причина, почему «отступ есть, а визуально не сдвинулось».

Отступы в управляемой форме

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

Рабочие приёмы:

  • 📦 Обычная группа без отображения. Добавьте на форму группу (вид — «Обычная группа»), в её свойствах поставьте отображение «Нет», уберите заголовок и вложите в неё элементы. Горизонтальная группировка сдвинет вложенное вправо от соседних элементов.
  • ↔️ Пустая декорация-распорка. Положите в горизонтальную группу надпись-декорацию с пустым или пробельным заголовком и фиксированной шириной — она сыграет роль поля слева.
  • 🧱 Вложенные группы. Каждый новый уровень вложенности в вертикальной группе визуально воспринимается как ступенька; так оформляют подчинённые настройки под главным флажком.

Чтобы прижать элемент к правому краю формы, положите перед ним в горизонтальной группе растягиваемый по горизонтали пустой элемент — он займёт всё свободное место и вытолкнет нужную кнопку или поле вправо.

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

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

Отступы в отчёте на СКД

В отчёте на системе компоновки данных отступ группировок рисуется автоматически: каждый вложенный уровень платформа сдвигает вправо относительно родителя. Специально задавать его не нужно — достаточно правильно выстроить структуру группировок.

На вид отступа влияют настройки структуры:

  • Расположение полей группировки (в свойствах структуры или всего отчёта) — «Вместе», «Отдельно» или «Отдельно и только в итогах». Вариант «Отдельно» выносит заголовок группировки в отдельную строку и меняет то, как читается ступенчатость.
  • Макет оформления группировки. Если автоматического отступа мало или наоборот много, создайте в схеме компоновки собственный макет для группировки и задайте отступ в его ячейках так же, как в обычном табличном документе.

Для простого отчёта ничего настраивать не нужно — выведите иерархическую группировку (например, «Номенклатура» с подчинённой «Характеристика»), и ступеньки появятся сами.

Если нужна иерархия внутри одного поля (например, группы и подгруппы номенклатуры из справочника), в настройках группировки выберите тип «Иерархия» или «Только иерархия» вместо «Элементы». Тогда платформа развернёт дерево справочника и нарисует отступ для каждого уровня вложенности группы, а не просто перечислит элементы в одну колонку.

Отступ в тексте и при выгрузке в Word, PDF, HTML

Если работаете с объектом «Текстовый документ» — это простой текст без форматирования, и отступ в нём делается обычными символами: пробелами или табуляцией. В коде символ табуляции доступен как Символы.Таб:

Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку(Символы.Таб + "Строка с отступом");

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

ТабДок.Записать("C:\Отчёт.pdf", ТипФайлаТабличногоДокумента.PDF);

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

У текстового документа есть и обратная задача — прочитать текст с отступами и разобрать его. Отступ в этом случае вы получаете как ведущие пробелы или символы табуляции в начале строки и обрезаете их функцией СокрЛ, если нужно только содержимое без поля слева. Для табличного документа такой проблемы нет: там отступ — это свойство, а не часть текста ячейки, поэтому при копировании значения ячейки отступ в него не попадает.

Перед тем как отдавать печатную форму или модуль коллегам, пройдитесь по короткому списку — он ловит самые частые промахи с отступами:

Проверка отступов перед сдачей
Выполнено: 0 / 5

Частые ошибки с отступами

Разберём случаи, которые не сводятся к «сделайте шаг 1, 2, 3», а именно сбивают с толку.

Что видитеВ чём причина
Код «съехал» после вставки из буфераВ исходнике была другая ширина табуляции или смешаны пробелы с табуляцией
Отступ ячейки есть в макете, но не виден в PDFТекст прижат горизонтальным положением «По центру» — отступ слева перекрыт выравниванием
В управляемой форме элемент не сдвигается, сколько ни правь свойстваУ элемента и нет свойства отступа — нужна группа, а не свойство
Группировки в отчёте без ступенекВыбрано расположение полей «Вместе» при неиерархической структуре — вложенности просто нет
При сравнении версий модуля вся строка «изменена»Поменялся невидимый символ отступа: табуляция против пробелов

Общее правило: сначала поймите, с каким объектом вы имеете дело — модуль, табличный документ, форма или СКД. Способ отступа у каждого свой, и настройка из одного места в другом не работает .

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

Почему `Tab` в коде сдвигает слишком далеко?
Ширина табуляции задана большим числом. Откройте Сервис → Параметры, раздел «Тексты», и поставьте, например, 4. Изменение применится ко всем модулям.
Как сделать так, чтобы весь отдел писал код с одинаковыми отступами?
Договоритесь об одной ширине табуляции и об одном варианте — табуляция или пробелы — и выставьте их в параметрах Конфигуратора у всех. Иначе один модуль будет выглядеть по-разному на разных рабочих местах.
Можно ли задать отступ ячейки в миллиметрах, а не в символах?
Нет, отступ в табличном документе считается в символах (условных знакоместах). Для точной геометрии меняйте ширину самих колонок и границы ячеек, а отступом добавляйте поле слева.
Отступ в управляемой форме задаётся кодом?
Напрямую — нет. Сдвиг в форме создаётся структурой групп, а её вы задаёте в редакторе формы. Из кода можно управлять видимостью и доступностью групп, но не «отступом в пикселях».
Почему отступ группировки в отчёте пропал при выгрузке в Excel?
Проверьте исходный табличный документ: если ступеньки рисовались автоотступом СКД, они сохранятся. Если же отступ был только в макете оформления, а при выгрузке макет не применился, задайте отступ ячеек в самом макете группировки.