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

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

Как очистить табличный документ на форме в 1С

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

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

Очистка табличного документа выполняется программно, встроенными средствами языка 1С. Универсальной кнопки «очистить» в интерфейсе нет, поэтому разработчик сам выбирает способ: вызвать метод Очистить(), присвоить реквизиту новый объект, удалить конкретную область или перезаполнить документ заново. Выбор зависит от того, где хранится документ — в реквизите формы, в переменной или в общем макете.

Ниже разобраны рабочие способы очистки с примерами кода, типичные ошибки и способы проверить, что документ действительно пуст.

Что нужно знать перед очисткой

Табличный документ на форме — это обычно реквизит формы с типом ТабличныйДокумент, связанный с элементом формы «Поле табличного документа». Очистка затрагивает только содержимое этого объекта: ячейки, форматирование, объединения, картинки и выделенные области. Сам элемент формы и его свойства (видимость, доступность, режим редактирования) не изменяются.

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

Способ 1. Метод Очистить()

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

&НаКлиенте

Процедура ОчиститьРезультат(Команда)

ТабличныйДокумент.Очистить();

КонецПроцедуры

Здесь ТабличныйДокумент — имя реквизита формы. После выполнения поле на форме станет пустым, и в него можно выводить новые данные. Метод не требует параметров и не возвращает значения.

Если очистка происходит на сервере перед повторным формированием отчёта, код аналогичен:

&НаСервере

Процедура СформироватьНаСервере()

Результат.Очистить();

// далее вывод новых областей макета

Результат.Вывести(МакетШапка);

КонецПроцедуры

Порядок действий
  1. 1
    Убедитесь, что на форме есть реквизит типа ТабличныйДокумент и связанный с ним элемент формы
  2. 2
    В нужной процедуре вызовите ИмяРеквизита.Очистить()
  3. 3
    Выведите новое содержимое через Вывести() или Присоединить()
  4. 4
    Откройте форму и проверьте, что старые данные не отображаются

Способ 2. Создание нового объекта вместо очистки

Альтернатива — присвоить реквизиту новый пустой объект. Этот приём полезен, когда нужно гарантированно сбросить не только содержимое, но и все накопленные свойства документа: параметры страницы, защиту, фиксацию областей, настройки печати.

&НаСервере

Процедура СброситьДокумент()

Результат = Новый ТабличныйДокумент;

КонецПроцедуры

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

Сравнение вариантов

Очистить()

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

Новый ТабличныйДокумент

Полный сброс объекта со всеми свойствами. Ограничение: только на сервере, требует повторной привязки к элементу формы

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

Точечное удаление строк или колонок. Ограничение: нужно знать координаты области, не подходит для полной очистки

Перевывод макета

Документ формируется заново из макета. Ограничение: требует готового макета и кода формирования

Способ 3. Удаление отдельной области

Иногда очищать нужно не весь документ, а часть — например, удалить строки с данными, оставив шапку. Для этого служит метод УдалитьОбласть(), принимающий описание области.

// Удалить строки с 3 по 100

Область = Результат.Область(3, 1, 100, Результат.ШиринаТаблицы);

Результат.УдалитьОбласть(Область, ТипСмещенияТабличногоДокумента.ПоВертикали);

Также можно удалить именованную область по имени: Результат.УдалитьОбласть(Результат.Области.Найти("Данные"), ...). Перед удалением проверяйте, что область существует, иначе получите ошибку обращения к Неопределено.

Очистка при повторном формировании отчёта

Типовой сценарий — пользователь меняет параметры и нажимает «Сформировать» повторно. Без очистки новый результат добавится к старому. Правильная последовательность: очистить документ, затем вывести области макета заново.

&НаСервере

Процедура СформироватьОтчет()

Результат.Очистить();

Макет = ПолучитьМакетОтчета();

Результат.Вывести(Макет.ПолучитьОбласть("Шапка"));

Для Каждого Строка Из ДанныеОтчета Цикл

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

ОбластьСтрока.Параметры.Заполнить(Строка);

Результат.Вывести(ОбластьСтрока);

КонецЦикла;

КонецПроцедуры

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

Если после повторного формирования документ выглядит «удвоенным», почти наверняка перед выводом областей пропущен вызов Очистить(). Добавьте его первой строкой процедуры формирования.
ПЗ
Практическое замечание

Как проверить, что документ пуст

Для проверки результата используются свойства ВысотаТаблицы и ШиринаТаблицы. У пустого документа оба значения равны нулю. Это удобно, например, чтобы не выводить на печать пустую форму:

Если Результат.ВысотаТаблицы = 0 Тогда

Сообщить("Нет данных для вывода");

Возврат;

КонецЕсли;

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

Контрольные точки

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

Свойство ВысотаТаблицы после очистки
Норма

Равно 0

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

Больше 0 — документ не очищен или очищался другой объект

Вид поля на форме
Норма

Пустое поле без ячеек и данных

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

Видны старые строки или наложенные данные

Повторное формирование
Норма

Новый результат выводится с первой строки

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

Данные добавляются ниже предыдущих

Типичные ошибки и ограничения

Частая ошибка — очистка локальной переменной вместо реквизита формы. Код ТабДок = Результат; ТабДок.Очистить(); на клиенте не изменит реквизит формы, потому что при присваивании создаётся копия или работа идёт не с тем объектом. Очищайте реквизит напрямую.

Вторая ошибка — вызов Новый ТабличныйДокумент на тонком или веб-клиенте: платформа выдаст ошибку о недоступности конструктора. Также помните, что Очистить() необратим: восстановить содержимое нельзя, если оно не сохранено в отдельную переменную или файл.

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

FAQ

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

Создайте команду формы и в её клиентском обработчике вызовите ИмяРеквизита.Очистить(). Обращения к серверу не требуется — метод доступен на клиенте.

Чем Очистить() отличается от присваивания Новый ТабличныйДокумент?

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

Можно ли очистить только часть документа?

Да. Используйте УдалитьОбласть() с указанием координат или имени области и направления смещения оставшихся ячеек. Для точечного удаления текста в отдельных ячейках присвойте свойству Текст пустую строку.

Почему после Очистить() на форме всё равно видны данные?

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

Нужно ли очищать документ при использовании СКД?

Нет. При выводе результата компоновки данных типовыми средствами платформа очищает табличный документ автоматически. Ручная очистка нужна только при самостоятельном программном выводе областей.

Как сохранить содержимое перед очисткой?

Метод Записать() сохраняет документ в файл формата MXL, который потом можно открыть через Прочитать(). Альтернатива — присвоить документ другой переменной на сервере до вызова Очистить().

Итог

Что важно запомнить

Для полной очистки табличного документа на форме вызывайте Очистить() у реквизита формы — это работает и на клиенте, и на сервере. Для полного сброса свойств присвойте Новый ТабличныйДокумент на сервере, для частичного удаления используйте УдалитьОбласть(). Проверяйте результат через ВысотаТаблицы = 0 и помните: очистка необратима, важные данные сохраняйте заранее.