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

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

Если вы работаете с конфигурациями типа Управление торговлей (УТ 11), Бухгалтерия предприятия (БП 3.0) или Зарплата и управление персоналом (ЗУП 3.1), большинство описанных методов будут универсальными. Однако некоторые нюансы зависят от конкретной версии платформы и настроек конфигурации.

1. Удаление строки вручную через интерфейс 1С

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

Откройте табличный документ, в котором нужно удалить строку. Это может быть:

  • 📄 Отчет (например, Оборотно-сальдовая ведомость)
  • 📊 Печатная форма (счет, накладная, акт)
  • 📑 Обработка с табличной частью (например, Загрузка данных из Excel)

Чтобы удалить строку:

  1. Выделите нужную строку левой кнопкой мыши (или комбинацией Shift + Стрелки для выделения нескольких строк).
  2. Нажмите правую кнопку мыши и выберите пункт Удалить строку (или Удалить строки, если выделено несколько).
  3. Подтвердите действие в появившемся диалоговом окне.

Выделена нужная строка (не заголовок таблицы)|

Сохранены изменения в документе (если это печатная форма)|

Нет связанных данных, которые могут "поехать" после удаления| -->

⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) ручное удаление строк в отчетах может быть заблокировано на уровне прав доступа. Если пункт Удалить строку неактивен, обратитесь к администратору системы.

2. Удаление строк программно (для разработчиков)

Если вам нужно автоматизировать процесс или удалять строки по определенным условиям, потребуется написать код на встроенном языке . Рассмотрим основные методы работы с табличным документом через объект ТабличныйДокумент.

Базовый синтаксис для удаления строки по номеру:

ТабличныйДокумент.УдалитьСтроку(НомерСтроки);

Где НомерСтроки — это индекс строки, начиная с 1 (не с 0, как в некоторых других языках программирования!).

Пример кода для удаления последней строки:

КоличествоСтрок = ТабличныйДокумент.ВысотаТаблицы();

ТабличныйДокумент.УдалитьСтроку(КоличествоСтрок);

Если нужно удалить несколько строк подряд (например, с 5 по 10):

Для Сч = 10 По 5 Цикл

ТабличныйДокумент.УдалитьСтроку(5); // Удаляем всегда 5-ю строку, так как нумерация сдвигается

КонецЦикла;

💡

Всегда проверяйте количество строк перед удалением, чтобы избежать ошибки "Индекс вне границ массива". Используйте конструкцию Если ТабличныйДокумент.ВысотаТаблицы() > 0 Тогда...

3. Удаление строк по условию (фильтрация)

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

Пример кода для удаления строк, где в первом столбце пустое значение:

НомерСтроки = ТабличныйДокумент.ВысотаТаблицы();

Пока НомерСтроки >= 1 Цикл

Если ПустаяСтрока(ТабличныйДокумент.ПолучитьТекст(НомерСтроки, 1)) Тогда

ТабличныйДокумент.УдалитьСтроку(НомерСтроки);

КонецЕсли;

НомерСтроки = НомерСтроки - 1;

КонецЦикла;

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

Если нужно удалить строки по значению в ячейке:

УдаляемоеЗначение = "Устарело";

Для НомерСтроки = ТабличныйДокумент.ВысотаТаблицы() По 1 Цикл

Если ТабличныйДокумент.ПолучитьТекст(НомерСтроки, 2) = УдаляемоеЗначение Тогда

ТабличныйДокумент.УдалитьСтроку(НомерСтроки);

КонецЕсли;

КонецЦикла;

Ручное удаление через интерфейс|

Программное удаление по номеру строки|

Удаление по условию (фильтрация)|

Не удаляю строки, работаю с данными иначе-->

4. Работа с областями и выделенными строками

В можно удалять не только отдельные строки, но и целые области (диапазоны ячеек). Это удобно, когда нужно очистить часть таблицы перед заполнением новыми данными.

Пример удаления области (строки с 3 по 7, столбцы с 1 по 5):

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

Если нужно удалить выделенную пользователем область, используйте метод ПолучитьОбласть():

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

ТабличныйДокумент.ОчиститьОбласть(Область.СтрокаНачало, Область.КолонкаНачало,

Область.СтрокаКонец, Область.КолонкаКонец);

Важное отличие: УдалитьСтроку() удаляет целую строку, а ОчиститьОбласть() — только содержимое ячеек в указанном диапазоне (строки и столбцы при этом остаются).

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

5. Типичные ошибки и как их избежать

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

Ошибка 1: "Индекс вне границ массива"

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

Если ТабличныйДокумент.ВысотаТаблицы() >= НомерСтроки Тогда

ТабличныйДокумент.УдалитьСтроку(НомерСтроки);

КонецЕсли;

Ошибка 2: Сдвиг нумерации при удалении в цикле

Если удалять строки в прямом порядке (с 1 по N), после удаления первой строки вторая станет первой, и цикл пропустит проверку. Решение — идти с конца:

Для НомерСтроки = ТабличныйДокумент.ВысотаТаблицы() По 1 Цикл

// Проверка и удаление

КонецЦикла;

Ошибка 3: Удаление строк в защищенных документах

Некоторые табличные документы (например, печатные формы) могут быть заблокированы для редактирования. В этом случае попытка удаления строки приведет к ошибке. Проверьте свойство Защита:

Если НЕ ТабличныйДокумент.Защита Тогда

ТабличныйДокумент.УдалитьСтроку(1);

КонецЕсли;

Что делать, если строка не удаляется?

Если строка не удаляется ни вручную, ни программно, проверьте:

1. Права доступа — возможно, у вашей роли нет прав на редактирование этого документа.

2. Защиту документа — некоторые обработки блокируют изменение структуры таблицы.

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

4. Режим работы — в режиме "Просмотр" (не "Редактирование") изменения запрещены.

Если проблема остается, попробуйте создать копию табличного документа и работать с ней: НовыйДокумент = ТабличныйДокумент.Скопировать();

6. Удаление строк в управляемых формах

В управляемых формах (например, в 1С:Предприятие 8.3 с интерфейсом Такси) работа с табличными документами имеет свои особенности. Здесь табличный документ обычно размещается в элементе управления ПолеТабличногоДокумента.

Пример кода для удаления строки в управляемой форме:

ТабличныйДокумент = ЭлементыФормы.ПолеТабличногоДокумента1.Значение;

ТабличныйДокумент.УдалитьСтроку(2); // Удаляем вторую строку

ЭлементыФормы.ПолеТабличногоДокумента1.Значение = ТабличныйДокумент;

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

Если нужно удалить строку по событию (например, по двойному клику):

Процедура ПолеТабличногоДокумента1ДвойноеНажатие(Элемент, ДанныеСобытия, СтандартнаяОбработка)

НомерСтроки = ДанныеСобытия.Строка;

ТабличныйДокумент = ЭлементыФормы.ПолеТабличногоДокумента1.Значение;

ТабличныйДокумент.УдалитьСтроку(НомерСтроки);

ЭлементыФормы.ПолеТабличногоДокумента1.Значение = ТабличныйДокумент;

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

💡

В управляемых формах всегда обновляйте значение поля после изменения табличного документа. Иначе пользователь не увидит изменений!

7. Альтернативные способы: очистка вместо удаления

Иногда вместо удаления строки целесообразнее очистить её содержимое. Это актуально, если:

  • 📌 Структура таблицы должна оставаться неизменной (например, в шаблонах отчетов).
  • 📌 Нужно сохранить форматирование строк (цвет, шрифт, границы).
  • 📌 Данные связаны с другими объектами конфигурации (чтобы не нарушить ссылки).

Пример очистки строки (все ячейки становятся пустыми, но строка остается):

Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы() Цикл

ТабличныйДокумент.УстановитьТекст(НомерСтроки, НомерКолонки, "");

КонецЦикла;

Если нужно очистить только определенные столбцы:

МассивСтолбцов = Новый Массив(1, 3, 5); // Номера столбцов для очистки

Для Каждого НомерСтолбца Из МассивСтолбцов Цикл

ТабличныйДокумент.УстановитьТекст(НомерСтроки, НомерСтолбца, "");

КонецЦикла;

⚠️ Внимание: Очистка строки не уменьшает высоту табличного документа. Если вам важно сократить количество строк (например, для оптимизации печати), используйте УдалитьСтроку().

FAQ: Частые вопросы по удалению строк в 1С

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

В большинстве случаев — нет. Платформа 1С:Предприятие не поддерживает механизм "отмены действий" (Ctrl+Z) для программных изменений табличных документов. Однако:

  • Если вы работаете в конфигураторе, можно закрыть документ без сохранения.
  • Если удаление произошло в пользовательском режиме, попробуйте восстановить данные из резервной копии или журнала изменений (если он ведется).
  • Для критичных операций рекомендуется создавать копию табличного документа перед изменением: КопияДокумента = ТабличныйДокумент.Скопировать();
Почему после удаления строки в отчете данные "съезжают"?

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

  • Объединенные ячейки могут "распадаться", если удаляемая строка была частью объединения.
  • Формулы в ячейках (например, =СУММ(B1:B5)) автоматически не обновляются — их нужно пересчитать вручную.
  • В отчетах с группировкой (например, в СКД) удаление строки может нарушить структуру дерева.

Решение: перед удалением проверьте, нет ли в строке объединенных ячеек (ТабличныйДокумент.Область(НомерСтроки, 1).Объединена) и не используется ли она в формулах.

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

Чтобы полностью очистить табличный документ, используйте метод Очистить():

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

Это удалит все строки и столбцы, оставив пустой документ размером 1x1. Если нужно оставить структуру (например, шапку таблицы), удаляйте строки в цикле:

Пока ТабличныйДокумент.ВысотаТаблицы() > 1 Цикл

ТабличныйДокумент.УдалитьСтроку(1); // Удаляем первую строку, пока не останется 1

КонецЦикла;

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

Нет, в окне предварительного просмотра (которое открывается по кнопке Просмотр или методом Показать()) табличный документ отображается в режиме "только для чтения". Чтобы редактировать документ:

  1. Закройте окно предварительного просмотра.
  2. Внесите изменения в исходный табличный документ программно или через интерфейс.
  3. Повторно откройте просмотр, если нужно увидеть результат.

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

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

Это разные объекты! Табличный документ (ТабличныйДокумент) и табличная часть документа (ДокументОбъект.ТабличнаяЧасть) имеют разные методы работы. Для удаления строки в табличной части используйте:

ДокументОбъект.ТабличнаяЧасть.Удалить(ИндексСтроки);

Где ИндексСтроки — номер строки в коллекции (начинается с 0!). Пример:

// Удаляем вторую строку в табличной части "Товары" документа "РеализацияТоваровУслуг"

Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ-000123");

Док.Товары.Удалить(1); // Индекс 1 — это вторая строка (индексация с 0!)