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

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

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

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

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

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

Ещё одна частая путаница: пользователи иногда называют «табличным документом» табличную часть документа (список товаров в накладной) или таблицу значений. Это разные объекты с разными методами. Ниже разобраны все варианты, но основной фокус — именно объект «Табличный документ».

Что такое табличный документ и чем он отличается от табличной части

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

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

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

Ручное удаление строки при редактировании табличного документа

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

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

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

Программное удаление строки методом УдалитьОбласть

Основной программный способ — метод УдалитьОбласть() объекта ТабличныйДокумент. Он принимает область (строку или диапазон строк) и тип смещения, определяющий, как сдвинутся оставшиеся ячейки. Для удаления строки целиком используется ТипСмещенияТабличногоДокумента.ПоВертикали.

bsl
// Удалить 5-ю строку табличного документа
ОбластьСтроки = ТабДок.Область("R5");
ТабДок.УдалитьОбласть(ОбластьСтроки, ТипСмещенияТабличногоДокумента.ПоВертикали);

// Удалить диапазон строк с 10 по 15
ОбластьДиапазона = ТабДок.Область("R10:R15");
ТабДок.УдалитьОбласть(ОбластьДиапазона, ТипСмещенияТабличногоДокумента.ПоВертикали);

Тип смещения определяет поведение остальных ячеек. ПоВертикали — строки ниже удаляемой области поднимаются вверх, что обычно и требуется. ПоГоризонтали сдвигает ячейки влево (применяется при удалении колонок). БезСмещения очищает содержимое без сдвига — аналог нажатия Delete.

Область можно получить не только по адресу R5, но и по имени именованной области макета, либо через ТабДок.Область(НомерСтроки, , НомерСтроки, ) с числовыми координатами. Именованные области надёжнее: при изменении макета адреса «R5» могут перестать соответствовать нужной строке.

Удаление строк по условию: типовой сценарий

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

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

bsl
// Удалить строки, где ячейка 2-й колонки пустая
ВсегоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = -ВсегоСтрок По -1 Цикл
    Номер = -НомерСтроки;
    ЗначениеЯчейки = ТабДок.Область(Номер, 2).Текст;
    Если ПустаяСтрока(ЗначениеЯчейки) Тогда
        ТабДок.УдалитьОбласть(ТабДок.Область(Номер, , Номер, ),
            ТипСмещенияТабличногоДокумента.ПоВертикали);
    КонецЕсли;
КонецЦикла;

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

Особенности: группировки, объединённые ячейки, итоги

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

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

Типичные ошибки
01
Перебор строк сверху вниз при удалении — после смещения часть строк пропускается. Решение: обход снизу вверх.
02
Удаление строки из печатной формы вместо исправления данных в документе — возникает расхождение учёта и печати.
03
Использование БезСмещения вместо ПоВертикали — остаются пустые строки, «рвущие» таблицу.
04
Попытка редактировать документ в режиме «Только просмотр» — изменения недоступны или не сохраняются.

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

Альтернативы удалению: скрытие и очистка

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

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

УдалитьОбласть с ПоВертикали

Строка исчезает полностью, нижние строки сдвигаются. Подходит для окончательной правки структуры.

Очистка содержимого (Delete / Очистить)

Ячейки пустеют, строка остаётся. Подходит, когда важно сохранить высоту и структуру таблицы.

Фильтрация данных до вывода

Самый надёжный вариант при программном формировании: лишние строки просто не выводятся в документ.

Отбор в настройках СКД

Для отчётов на компоновке: строки исключаются настройкой, результат всегда согласован с итогами.

Проверка результата после удаления

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

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

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

Нумерация и порядок строк
Норма

Строки идут подряд, удалённых позиций нет

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

Пропущены нужные строки или остались лишние

Итоговые суммы
Норма

Итоги соответствуют видимым строкам

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

Итоги посчитаны по старым данным

Объединённые ячейки и шапка
Норма

Шапка и объединения на месте

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

Объединения съехали или исчезли

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

После пересчёта отчёта структура воспроизводима

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

Ручные правки теряются при пересчёте

Итог

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

Строку табличного документа удаляют методом УдалитьОбласть со смещением ПоВертикали или вручную через контекстное меню при снятом режиме «Только просмотр». Перебор при удалении ведите снизу вверх, а по возможности фильтруйте данные до формирования документа, а не правьте готовый результат.

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

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

В форме документа выделите строку табличной части и нажмите Delete или кнопку «Удалить» на командной панели таблицы. Программно используйте метод Удалить() коллекции строк табличной части, передав строку или её индекс. Помните, что изменения сохранятся только после записи документа.

Почему кнопка удаления неактивна в открытом табличном документе?

Скорее всего, документ открыт в режиме «Только просмотр» — так типовые конфигурации защищают печатные формы от случайной правки. Проверьте свойства документа или сохраните копию через «Файл — Сохранить копию» и редактируйте её.

Как удалить сразу несколько несмежных строк программно?

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

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

При ручном редактировании работает стандартная комбинация Ctrl+Z в пределах текущего сеанса редактирования. После закрытия документа без сохранения изменения теряются. При программном удалении отмены нет — сохраняйте копию исходного табличного документа перед обработкой.

Чем отличается УдалитьОбласть от Очистить?

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

Как убрать строки из отчёта на СКД?

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