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

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

Как очистить макет в 1С: пошаговая инструкция

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

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

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

Ниже разобраны оба сценария: программная очистка табличного документа встроенными методами платформы и ручная очистка макета в конфигураторе. Отдельно рассмотрены очистка параметров, работа с внешними печатными формами и типичные ошибки, из-за которых очистка «не срабатывает» или ломает документ.

Что именно требуется очистить: три разные задачи

Прежде чем применять какие-либо действия, определите объект очистки. Путаница между ними — главная причина того, что метод «не работает».

Первая задача — очистка табличного документа в памяти. Когда вы выполняете ПолучитьМакет() и выводите области, результат попадает в объект типа «ТабличныйДокумент». Его очистка не затрагивает макет в конфигурации — макет остаётся нетронутым шаблоном.

Вторая задача — очистка самого макета в конфигураторе. Это нужно, когда макет содержит устаревшие надписи, лишние области, «мусорное» форматирование после копирования из Excel или Word. Здесь работа идёт вручную в редакторе табличного документа.

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

Программная очистка табличного документа

Для полной очистки табличного документа в памяти используется метод Очистить(). Он удаляет все ячейки, области, рисунки, настройки печати и возвращает документ в пустое состояние.

bsl
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);

// Полная очистка документа
ТабДок.Очистить();

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

Ещё один распространённый приём — вместо очистки создавать новый экземпляр табличного документа в каждой итерации цикла: ТабДок = Новый ТабличныйДокумент. По смыслу это эквивалентно очистке, но исключает риск забыть вызвать метод и нагляднее читается в коде.

Порядок программной очистки
  1. 1
    Определите, где находится документ: переменная, реквизит формы, поле табличного документа
  2. 2
    Для полной очистки вызовите ТабДок.Очистить()
  3. 3
    Для частичной — используйте ТабДок.УдалитьОбласть() с нужным диапазоном строк
  4. 4
    Если документ отображается на форме, убедитесь, что очищаете именно реквизит формы, а не локальную копию
  5. 5
    Проверьте результат: ТабДок.ВысотаТаблицы должна быть равна 0

Очистка параметров области макета

Параметры макета (значения в фигурных скобках вида {НомерДокумента}) заполняются через коллекцию Параметры области. Платформа не очищает их автоматически между вызовами, поэтому в цикле по строкам табличной части несброшенные параметры «протекают» в следующую строку.

Для сброса используется метод Очистить() коллекции параметров области: ОбластьСтрока.Параметры.Очистить(). Альтернатива — заново получать область из макета в каждой итерации через Макет.ПолучитьОбласть(): свежеполученная область всегда содержит пустые параметры.

bsl
Для Каждого СтрокаТовара Из Товары Цикл
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
	ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

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

Ручная очистка макета в конфигураторе

Чтобы очистить содержимое макета, откройте конфигуратор, найдите нужный макет в дереве конфигурации (например, «Документы — РеализацияТоваровУслуг — Макеты») и откройте его двойным щелчком. Макет откроется в редакторе табличного документа.

Для удаления содержимого ячеек выделите нужный диапазон мышью или через Ctrl+A для всего макета и нажмите Delete. Это удалит текст и значения, но сохранит форматирование ячеек (границы, шрифты, цвета). Если нужно убрать и форматирование, используйте меню «Таблица — Вид — Очистить» либо сбросьте свойства ячеек через палитру свойств.

Удаление именованных областей выполняется отдельно: меню «Таблица — Имена — Удалить» (или «Именованные области» в новых версиях платформы). Простое удаление строк с ячейками не удаляет имена областей — «висячие» имена остаются в макете и могут сбивать при поиске.

Очистка макета типа «Текстовый документ» и HTML

Не все макеты табличные. Макеты типа «Текстовый документ», «HTML-документ» или «Схема компоновки данных» очищаются иначе: текстовые — обычным выделением и удалением текста, макеты СКД — через редактор настроек, где очищаются наборы данных и поля. Метод Очистить() табличного документа к ним неприменим.

Очистка макета во внешней печатной форме

Внешние печатные формы (файлы .epf) хранят макеты внутри обработки. Откройте файл в конфигураторе через «Файл — Открыть», найдите макет в структуре обработки и очистите его теми же способами, что и макет конфигурации. После сохранения файл нужно повторно зарегистрировать в справочнике дополнительных печатных форм, если он подключён через механизм БСП.

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

Способы очистки

ТабДок.Очистить()

Полная очистка документа в памяти. Подходит перед повторным формированием печатной формы. Макет в конфигурации не затрагивается.

Создание нового ТабличныйДокумент

Альтернатива очистке в циклах. Нагляднее, исключает забытый вызов Очистить(), но требует заново задавать параметры страницы.

УдалитьОбласть()

Частичное удаление строк документа. Подходит для отката последней выведенной области, требует точного указания диапазона.

Ручная очистка в конфигураторе

Единственный способ изменить сам макет-шаблон. Требует прав на изменение конфигурации и резервной копии.

Проверка результата и типичные ошибки

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

После ручной очистки макета откройте список именованных областей и убедитесь, что не осталось имён, указывающих на удалённые строки. Попытка получить такую область кодом Макет.ПолучитьОбласть("Имя") вызовет ошибку выполнения.

Типичные ошибки
01
Очистка локальной переменной вместо реквизита формы — на экране документ остаётся заполненным
02
Не сброшены параметры области в цикле — в строки таблицы попадают данные предыдущих итераций
03
Удалены строки макета, но не удалены имена областей — код ПолучитьОбласть() падает с ошибкой
04
Очистка макета в рабочей базе без копии — утраченный шаблон нельзя восстановить
05
Ожидание, что Очистить() удалит макет из конфигурации — метод работает только с документом в памяти
Контрольные точки

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

ВысотаТаблицы документа после Очистить()
Норма

Равна 0

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

Больше 0 — очищен не тот объект

Повторный вывод области в цикле
Норма

Каждая строка содержит свои данные

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

Дублируются значения предыдущей строки

Список именованных областей макета
Норма

Нет имён, ссылающихся на удалённые строки

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

Есть «висячие» имена — код упадёт при обращении

Печатная форма после правки макета
Норма

Выводится без ошибок, данные на месте

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

Ошибка «Область не найдена» или пустые поля

FAQ

Удалит ли метод Очистить() макет из конфигурации?

Нет. Метод Очистить() применяется к объекту «ТабличныйДокумент» в памяти и удаляет только его содержимое. Макет в конфигурации остаётся нетронутым и может использоваться повторно для формирования новых документов.

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

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

Почему после Очистить() табличный документ на форме не изменился?

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

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

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

Можно ли очистить макет программно, изменив саму конфигурацию?

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

Что делать, если в макете остались скрытые объекты после копирования из Excel?

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