Работа с табличными документами в 1С:Предприятие 8.3 — одна из самых востребованных задач среди пользователей и разработчиков. Удаление строк может понадобиться при формировании отчетов, обработке данных или очистке формы перед заполнением. Однако не все знают, что в зависимости от контекста существуют разные способы удаления: от простого клика мышкой до сложных программных конструкций.
Эта статья поможет разобраться, как правильно удалить строку из табличного документа в различных ситуациях. Мы рассмотрим методы для пользователей без навыков программирования (через интерфейс платформы) и для разработчиков (с использованием встроенного языка 1С). Особое внимание уделим типичным ошибкам, которые могут привести к потере данных или сбоям в работе системы.
Если вы работаете с конфигурациями типа Управление торговлей (УТ 11), Бухгалтерия предприятия (БП 3.0) или Зарплата и управление персоналом (ЗУП 3.1), большинство описанных методов будут универсальными. Однако некоторые нюансы зависят от конкретной версии платформы и настроек конфигурации.
1. Удаление строки вручную через интерфейс 1С
Самый простой способ — использовать стандартные инструменты платформы. Он подходит для пользователей, которые не хотят (или не могут) писать код. Рассмотрим пошаговую инструкцию на примере типового отчета.
Откройте табличный документ, в котором нужно удалить строку. Это может быть:
- 📄 Отчет (например,
Оборотно-сальдовая ведомость) - 📊 Печатная форма (счет, накладная, акт)
- 📑 Обработка с табличной частью (например,
Загрузка данных из Excel)
Чтобы удалить строку:
- Выделите нужную строку левой кнопкой мыши (или комбинацией
Shift + Стрелкидля выделения нескольких строк). - Нажмите правую кнопку мыши и выберите пункт
Удалить строку(илиУдалить строки, если выделено несколько). - Подтвердите действие в появившемся диалоговом окне.
Выделена нужная строка (не заголовок таблицы)|
Сохранены изменения в документе (если это печатная форма)|
Нет связанных данных, которые могут "поехать" после удаления| -->
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) ручное удаление строк в отчетах может быть заблокировано на уровне прав доступа. Если пункт Удалить строку неактивен, обратитесь к администратору системы.
2. Удаление строк программно (для разработчиков)
Если вам нужно автоматизировать процесс или удалять строки по определенным условиям, потребуется написать код на встроенном языке 1С. Рассмотрим основные методы работы с табличным документом через объект ТабличныйДокумент.
Базовый синтаксис для удаления строки по номеру:
ТабличныйДокумент.УдалитьСтроку(НомерСтроки);
Где НомерСтроки — это индекс строки, начиная с 1 (не с 0, как в некоторых других языках программирования!).
Пример кода для удаления последней строки:
КоличествоСтрок = ТабличныйДокумент.ВысотаТаблицы();
ТабличныйДокумент.УдалитьСтроку(КоличествоСтрок);
Если нужно удалить несколько строк подряд (например, с 5 по 10):
Для Сч = 10 По 5 Цикл
ТабличныйДокумент.УдалитьСтроку(5); // Удаляем всегда 5-ю строку, так как нумерация сдвигается
КонецЦикла;
Всегда проверяйте количество строк перед удалением, чтобы избежать ошибки "Индекс вне границ массива". Используйте конструкцию Если ТабличныйДокумент.ВысотаТаблицы() > 0 Тогда...
3. Удаление строк по условию (фильтрация)
Часто требуется удалить строки, которые соответствуют определенному критерию. Например, убрать все пустые строки или строки с нулевыми значениями. Для этого нужно пройтись по строкам в цикле и проверить каждое условие.
Пример кода для удаления строк, где в первом столбце пустое значение:
НомерСтроки = ТабличныйДокумент.ВысотаТаблицы();
Пока НомерСтроки >= 1 Цикл
Если ПустаяСтрока(ТабличныйДокумент.ПолучитьТекст(НомерСтроки, 1)) Тогда
ТабличныйДокумент.УдалитьСтроку(НомерСтроки);
КонецЕсли;
НомерСтроки = НомерСтроки - 1;
КонецЦикла;
Обратный порядок (от последней строки к первой) важен, чтобы не сбилась нумерация при удалении.
Если нужно удалить строки по значению в ячейке:
УдаляемоеЗначение = "Устарело";
Для НомерСтроки = ТабличныйДокумент.ВысотаТаблицы() По 1 Цикл
Если ТабличныйДокумент.ПолучитьТекст(НомерСтроки, 2) = УдаляемоеЗначение Тогда
ТабличныйДокумент.УдалитьСтроку(НомерСтроки);
КонецЕсли;
КонецЦикла;
Ручное удаление через интерфейс|
Программное удаление по номеру строки|
Удаление по условию (фильтрация)|
Не удаляю строки, работаю с данными иначе-->
4. Работа с областями и выделенными строками
В 1С можно удалять не только отдельные строки, но и целые области (диапазоны ячеек). Это удобно, когда нужно очистить часть таблицы перед заполнением новыми данными.
Пример удаления области (строки с 3 по 7, столбцы с 1 по 5):
ТабличныйДокумент.ОчиститьОбласть(3, 1, 7, 5);
Если нужно удалить выделенную пользователем область, используйте метод ПолучитьОбласть():
Область = ТабличныйДокумент.ПолучитьОбласть();
ТабличныйДокумент.ОчиститьОбласть(Область.СтрокаНачало, Область.КолонкаНачало,
Область.СтрокаКонец, Область.КолонкаКонец);
Важное отличие: УдалитьСтроку() удаляет целую строку, а ОчиститьОбласть() — только содержимое ячеек в указанном диапазоне (строки и столбцы при этом остаются).
| Метод | Действие | Пример использования |
|---|---|---|
УдалитьСтроку() |
Удаляет всю строку целиком | Удаление пустых строк в отчете |
ОчиститьОбласть() |
Очищает содержимое ячеек, но оставляет строки/столбцы | Очистка шапки таблицы перед новым заполнением |
ПолучитьОбласть() |
Возвращает координаты выделенной пользователем области | Обработка пользовательского выделения |
5. Типичные ошибки и как их избежать
При работе с удалением строк в 1С часто возникают ошибки, связанные с неверной нумерацией, отсутствием проверок или особенностями конфигурации. Рассмотрим самые распространенные проблемы.
Ошибка 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
КонецЦикла;
Можно ли удалить строку в модальном окне предварительного просмотра?
Нет, в окне предварительного просмотра (которое открывается по кнопке Просмотр или методом Показать()) табличный документ отображается в режиме "только для чтения". Чтобы редактировать документ:
- Закройте окно предварительного просмотра.
- Внесите изменения в исходный табличный документ программно или через интерфейс.
- Повторно откройте просмотр, если нужно увидеть результат.
Исключение: если предварительный просмотр реализован через управляемую форму с элементом ПолеТабличногоДокумента, редактирование возможно прямо в окне.
Как удалить строку в табличной части документа (не в табличном документе)?
Это разные объекты! Табличный документ (ТабличныйДокумент) и табличная часть документа (ДокументОбъект.ТабличнаяЧасть) имеют разные методы работы. Для удаления строки в табличной части используйте:
ДокументОбъект.ТабличнаяЧасть.Удалить(ИндексСтроки);
Где ИндексСтроки — номер строки в коллекции (начинается с 0!). Пример:
// Удаляем вторую строку в табличной части "Товары" документа "РеализацияТоваровУслуг"
Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ-000123");
Док.Товары.Удалить(1); // Индекс 1 — это вторая строка (индексация с 0!)