Отступы в 1С: в коде, формах, макетах и отчётах
Содержание
Слово «отступ» в 1С означает разные вещи в зависимости от того, где вы его делаете. В коде модуля отступ — это сдвиг строк клавишей Tab и автоформатирование. В макете печатной формы и в табличном документе — свойство ячейки. В управляемой форме прямого «сдвига в пикселях» нет: отступ собирают из групп. А в отчёте на СКД отступ группировок платформа рисует сама, по уровню вложенности.
Ниже разобран каждый из этих случаев: где находится нужная настройка, как её задать мышью и как то же самое сделать из кода. Если не знаете, что именно вам нужно, начните с подсказки.
Tab (сдвиг вправо) или Shift+Tab (влево). Ширину табуляции настраивают в Сервис → Параметры.ОтступСлева у области.Отступ в программном коде модуля
Самый частый вопрос — как ровно оформить код в модуле. В Конфигураторе это делается так:
- Выделите одну или несколько строк.
- Нажмите
Tab— выделенный блок сдвинется на один уровень вправо. Shift+Tabсдвигает блок обратно влево.
Когда вы пишете новую строку внутри Если … Тогда или Для Каждого … Цикл, редактор сам ставит отступ на уровень вложенности — это автоотступ, он включён по умолчанию. Поэтому аккуратный код получается сам собой, если не ломать структуру вставкой из буфера.
Правильно оформленный фрагмент выглядит так — каждый вложенный блок сдвинут на один шаг:
Если ТаблицаЗаказов.Количество() > 0 Тогда
Для Каждого Строка Из ТаблицаЗаказов Цикл
Если Строка.Сумма > 0 Тогда
Итого = Итого + Строка.Сумма;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если код после вставки «съехал», выделите его целиком (Ctrl+A) и несколько раз нажмите Shift+Tab, чтобы прижать к левому краю, а потом заново расставьте отступы блоками. Это быстрее, чем править каждую строку.
Важная оговорка для тех, кто пришёл из других языков: встроенный язык 1С к отступам нечувствителен. В отличие от Python, где сдвиг строки меняет логику, в 1С границы блоков задают ключевые слова (Тогда, Цикл, КонецЕсли), а отступ нужен только для читаемости. Сломанный отступ не вызовет ошибку — он просто затруднит чтение кода.
Отдельно стоит отступ внутри областей. Если модуль разбит директивами #Область … #КонецОбласти, редактор сдвигает содержимое области на один уровень вправо. Это удобно для свёртки: область можно свернуть в одну строку и видеть структуру модуля целиком. Внутри области действует тот же автоотступ.
Переформатировать весь модуль «в один клик» умеет среда разработки 1C:Enterprise Development Tools (EDT) — там за это отвечает сочетание Ctrl+Shift+F. В классическом Конфигураторе готовой команды «выровнять весь модуль» нет: отступы держит автоотступ при наборе и ручной сдвиг блоков.
Как настроить ширину табуляции и автоотступ
Поведение Tab в редакторе модулей настраивается в одном месте: Сервис → Параметры, раздел «Тексты». Там задают:
- ширину табуляции — на сколько позиций сдвигается блок (обычно 4);
- автоотступ — автоматический отступ новой строки по предыдущей;
- пробелы вместо табуляции — заменять символ табуляции на пробелы.
Последний пункт важен, если код правят несколько человек. Если у разработчиков разная ширина табуляции и разная настройка «пробелы/табуляция», один и тот же модуль будет выглядеть «рваным» у каждого по-своему. Договоритесь в команде об одном варианте — чаще берут 4 пробела.
Смешивать табуляцию и пробелы в одном модуле не стоит: глазом это незаметно, но при сравнении версий в хранилище вся строка показывается как изменённая, хотя текст не менялся.
Отступ в макете печатной формы и табличном документе
Макет печатной формы — это табличный документ, а отступ в нём задаётся свойством ячейки. Порядок действий в Конфигураторе:
- Откройте макет и выделите нужную ячейку или именованную область.
- Вызовите палитру свойств (
Alt+Enterили правой кнопкой → «Свойства»). - Найдите свойство отступа слева и задайте значение в символах.
Рядом полезны ещё два свойства: «Горизонтальное положение» (прижать текст влево, вправо или по центру) и «Размещение» (обрезать, переносить по словам или выдвигать за границу ячейки). Отступ и положение решают разные задачи: положение двигает текст внутри ячейки, отступ добавляет пустое поле слева.
Тот же отступ задаётся из кода при формировании печатной формы. Удобно привязать его к уровню иерархии, чтобы вложенные строки автоматически сдвигались:
ОбластьСтроки = Макет.ПолучитьОбласть("Строка");
ОбластьСтроки.Параметры.Наименование = Выборка.Наименование;
ОбластьСтроки.ОтступСлева = Выборка.Уровень() * 2;
ТабДок.Вывести(ОбластьСтроки);
Здесь Выборка.Уровень() возвращает уровень вложенности при обходе результата запроса по группировкам, и каждый следующий уровень сдвигается на два символа. Если иерархии нет, просто поставьте фиксированное число.
Пара практических деталей по макетам:
- 📐 Отступ задаётся отдельно для каждой именованной области. Если в печатной форме есть шапка, строка таблицы и подвал, отступ в каждой из них настраивается независимо — общего «отступа всего макета» нет.
- 🔁 При выводе области в цикле (
ТабДок.Вывести) отступ, заданный в коде, применяется к каждой выводимой копии. Поэтому его и привязывают к уровню или условию, а не прописывают один раз. - 🚫 Если ячейки объединены по горизонтали, отступ считается от левой границы объединённой области. Это частая причина, почему «отступ есть, а визуально не сдвинулось».
Отступы в управляемой форме
В управляемой форме у элементов нет свойства «отступ слева в пикселях» — расположение считает сама платформа. Чтобы получить визуальный сдвиг, пользуются группами.
Рабочие приёмы:
- 📦 Обычная группа без отображения. Добавьте на форму группу (вид — «Обычная группа»), в её свойствах поставьте отображение «Нет», уберите заголовок и вложите в неё элементы. Горизонтальная группировка сдвинет вложенное вправо от соседних элементов.
- ↔️ Пустая декорация-распорка. Положите в горизонтальную группу надпись-декорацию с пустым или пробельным заголовком и фиксированной шириной — она сыграет роль поля слева.
- 🧱 Вложенные группы. Каждый новый уровень вложенности в вертикальной группе визуально воспринимается как ступенька; так оформляют подчинённые настройки под главным флажком.
Чтобы прижать элемент к правому краю формы, положите перед ним в горизонтальной группе растягиваемый по горизонтали пустой элемент — он займёт всё свободное место и вытолкнет нужную кнопку или поле вправо.
Не пытайтесь добиться точного отступа «на пиксель»: управляемый интерфейс перестраивается под разрешение экрана и масштаб, и жёсткие числа ломаются. Логика групп переживает любой экран.
Ещё один типовой случай — сдвинуть подчинённые настройки под главным флажком, как это сделано в типовых конфигурациях (включили флажок — ниже с отступом появились его параметры). Делается это так: главный флажок и группу с зависимыми полями кладут в одну вертикальную группу, а зависимую группу настраивают с отображением без рамки и заголовка. Доступность вложенных полей переключают из кода в обработчике изменения флажка. Отступ при этом даёт сама вложенность группы, отдельное свойство не нужно.
Отступы в отчёте на СКД
В отчёте на системе компоновки данных отступ группировок рисуется автоматически: каждый вложенный уровень платформа сдвигает вправо относительно родителя. Специально задавать его не нужно — достаточно правильно выстроить структуру группировок.
На вид отступа влияют настройки структуры:
- Расположение полей группировки (в свойствах структуры или всего отчёта) — «Вместе», «Отдельно» или «Отдельно и только в итогах». Вариант «Отдельно» выносит заголовок группировки в отдельную строку и меняет то, как читается ступенчатость.
- Макет оформления группировки. Если автоматического отступа мало или наоборот много, создайте в схеме компоновки собственный макет для группировки и задайте отступ в его ячейках так же, как в обычном табличном документе.
Для простого отчёта ничего настраивать не нужно — выведите иерархическую группировку (например, «Номенклатура» с подчинённой «Характеристика»), и ступеньки появятся сами.
Если нужна иерархия внутри одного поля (например, группы и подгруппы номенклатуры из справочника), в настройках группировки выберите тип «Иерархия» или «Только иерархия» вместо «Элементы». Тогда платформа развернёт дерево справочника и нарисует отступ для каждого уровня вложенности группы, а не просто перечислит элементы в одну колонку.
Отступ в тексте и при выгрузке в Word, PDF, HTML
Если работаете с объектом «Текстовый документ» — это простой текст без форматирования, и отступ в нём делается обычными символами: пробелами или табуляцией. В коде символ табуляции доступен как Символы.Таб:
Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку(Символы.Таб + "Строка с отступом");
С выгрузкой в Word, PDF и HTML ситуация другая. Эти форматы 1С получает из табличного документа методом записи в файл:
ТабДок.Записать("C:\Отчёт.pdf", ТипФайлаТабличногоДокумента.PDF);
Отдельных настроек отступа «для PDF» или «для HTML» нет. Отступ в итоговом файле — это тот отступ, который вы задали свойствами ячеек в исходном табличном документе или макете. Хотите поле слева в PDF — поставьте отступ ячейки в макете, и он перенесётся при записи. То же правило работает для HTML и для форматов текстовых редакторов.
У текстового документа есть и обратная задача — прочитать текст с отступами и разобрать его. Отступ в этом случае вы получаете как ведущие пробелы или символы табуляции в начале строки и обрезаете их функцией СокрЛ, если нужно только содержимое без поля слева. Для табличного документа такой проблемы нет: там отступ — это свойство, а не часть текста ячейки, поэтому при копировании значения ячейки отступ в него не попадает.
Перед тем как отдавать печатную форму или модуль коллегам, пройдитесь по короткому списку — он ловит самые частые промахи с отступами:
Частые ошибки с отступами
Разберём случаи, которые не сводятся к «сделайте шаг 1, 2, 3», а именно сбивают с толку.
| Что видите | В чём причина |
|---|---|
| Код «съехал» после вставки из буфера | В исходнике была другая ширина табуляции или смешаны пробелы с табуляцией |
| Отступ ячейки есть в макете, но не виден в PDF | Текст прижат горизонтальным положением «По центру» — отступ слева перекрыт выравниванием |
| В управляемой форме элемент не сдвигается, сколько ни правь свойства | У элемента и нет свойства отступа — нужна группа, а не свойство |
| Группировки в отчёте без ступенек | Выбрано расположение полей «Вместе» при неиерархической структуре — вложенности просто нет |
| При сравнении версий модуля вся строка «изменена» | Поменялся невидимый символ отступа: табуляция против пробелов |
Общее правило: сначала поймите, с каким объектом вы имеете дело — модуль, табличный документ, форма или СКД. Способ отступа у каждого свой, и настройка из одного места в другом не работает .
Частые вопросы
Почему `Tab` в коде сдвигает слишком далеко?
Сервис → Параметры, раздел «Тексты», и поставьте, например, 4. Изменение применится ко всем модулям.