Документы и Печать · 9 мин
Как удалить строку из табличной части документа в 1С
Как удалить строку из табличной части документа в 1С: клавиши Del и Shift+Del, контекстное меню, удаление программно в 1С 8.3, типичные ошибки.
Табличная часть — это список строк внутри документа 1С: товары в накладной, сотрудники в ведомости, услуги в акте. Удалить лишнюю строку можно несколькими способами: клавишей Delete, через контекстное меню, кнопкой на панели таблицы или программно из встроенного языка. Выбор зависит от того, работаете вы в интерфейсе или пишете код, и от того, проведён документ или нет.
Важно понимать разницу между «обычным» удалением и пометкой на удаление. Строка табличной части удаляется сразу и безвозвратно — она не помечается, а исчезает из документа. Поэтому перед очисткой большой табличной части стоит убедиться, что документ не проведён и его данные не участвуют в движениях по регистрам.
Ниже разобраны все рабочие способы: от простого нажатия Delete в форме документа до программного удаления строк по условию в 1С 8.3, а также ограничения, с которыми сталкиваются пользователи на практике.
Удаление строки в интерфейсе документа
Самый частый сценарий — пользователь открыл документ и хочет убрать одну или несколько строк из табличной части «Товары», «Услуги» или аналогичной. Для этого нужно установить курсор на нужную строку (кликнуть по любой её ячейке) и нажать клавишу Delete. Строка исчезнет сразу, без дополнительных вопросов.
Альтернатива — контекстное меню: клик правой кнопкой мыши по строке и выбор пункта «Удалить». В тонком клиенте и веб-клиенте тот же пункт доступен через кнопку с изображением крестика на командной панели табличной части (меню «Ещё» → «Удалить», если кнопка скрыта).
После удаления строки документ нужно записать кнопкой «Записать» или «Провести». Пока документ не записан, удаление существует только в открытой форме: если закрыть окно без записи, строка останется в базе.
- 1Откройте документ и перейдите на вкладку с нужной табличной частью
- 2Кликните по строке, которую требуется удалить
- 3Нажмите Delete или выберите «Удалить» в контекстном меню
- 4Нажмите «Записать» или «Провести», чтобы зафиксировать изменение
- 5Проверьте, что итоговые суммы документа пересчитались корректно
Удаление нескольких строк сразу
Если нужно убрать несколько строк, выделите их группой: зажмите Ctrl и кликайте по строкам, либо выделите диапазон с зажатой клавишей Shift. Затем нажмите Delete — удалятся все выделенные строки.
Некоторые типовые конфигурации предлагают штатные механизмы массовой очистки: кнопка «Очистить» на командной панели табличной части удаляет все строки разом. Перед такой операцией убедитесь, что документ не проведён, а данные табличной части действительно больше не нужны — отменить очистку после записи документа нельзя.
Если строк много и удалять нужно по условию (например, все позиции с нулевым количеством), удобнее воспользоваться обработкой группового изменения реквизитов или написать небольшую процедуру — об этом ниже.
Почему строка не удаляется: типичные причины
Клавиша Delete нажата, а строка на месте — ситуация встречается часто. Причины обычно одни и те же, и все они решаются без привлечения программиста.
Первая причина — документ проведён, а конфигурация запрещает редактирование проведённых документов. Форма открывается в режиме просмотра, и табличная часть недоступна для изменений. Решение: отменить проведение кнопкой «Отмена проведения».
Вторая причина — недостаток прав. Если у пользователя нет права на интерактивное изменение документа, кнопки удаления будут неактивны. Проверить это просто: если недоступны также кнопки «Добавить» и «Записать», проблема в ролях, и вопрос решается с администратором.
Третья причина — табличная часть заполняется автоматически (например, по данным другого документа или механизма распределения). В таких конфигурациях ручное удаление может быть заблокировано осознанно: строки перезаполнятся при следующем пересчёте.
Проверить, проведён ли документ и есть ли права на изменение
Найти механизм перезаполнения и отключить его или менять данные-источник
Кликнуть именно по ячейке строки, затем повторить удаление
Программное удаление строки в 1С 8.3
Разработчику или администратору, работающему во внешней обработке, строки удаляют методами объекта табличной части. Основной метод — Удалить(), который принимает либо саму строку, либо её индекс (нумерация с нуля).
Док = СсылкаНаДокумент.ПолучитьОбъект();
Строка = Док.Товары[0]; // первая строка
Док.Товары.Удалить(Строка);
Док.Записать();Для удаления по условию удобно сначала собрать строки методом НайтиСтроки(), а затем удалить их в цикле. Удалять строки внутри прямого обхода «Для Каждого» нельзя — коллекция изменяется во время итерации, и часть строк будет пропущена.
Док = СсылкаНаДокумент.ПолучитьОбъект();
Отбор = Новый Структура("Количество", 0);
Строки = Док.Товары.НайтиСтроки(Отбор);
Для Каждого Стр Из Строки Цикл
Док.Товары.Удалить(Стр);
КонецЦикла;
Док.Записать();Для полной очистки табличной части используется метод Очистить(): Док.Товары.Очистить();. Это быстрее, чем удалять строки по одной, и безопаснее с точки зрения логики обхода.
Особенности при записи и проведении
Если объект получен через ПолучитьОбъект() и записывается методом Записать() без режима проведения, движения по регистрам не пересчитаются. Чтобы удаление строк отразилось в учёте, записывайте документ в режиме проведения: Док.Записать(РежимЗаписиДокумента.Проведение).
Учитывайте подписки на события и обработчики «ПриЗаписи» и «ОбработкаПроведения»: в типовых конфигурациях они могут выполнять проверки заполнения и отклонять запись, если табличная часть пуста. В этом случае запись завершится ошибкой с текстом причины — её нужно читать, а не пытаться обойти отключением проверок.
Типичные ошибки при удалении строк
Отдельная ошибка — удаление по индексу в цикле с возрастанием. После удаления строки с индексом 0 следующая строка получает индекс 0, и при шаге к индексу 1 вы пропускаете её. Если по какой-то причине обход идёт по индексам, двигайтесь с конца коллекции к началу.
Перед массовой обработкой документов полезно сделать копию базы или хотя бы выгрузку данных. Программное удаление строк не спрашивает подтверждения, и вернуть очищенные табличные части можно только из резервной копии.
Проверка результата
После удаления строки в интерфейсе контролируйте три вещи: исчезла ли строка из табличной части, пересчитались ли итоговые суммы документа (количество, сумма, НДС) и записался ли документ без ошибок. Если документ проводится — проверьте движения по регистрам через кнопку «Дт/Кт» или отчёт по проводкам.
После программного удаления убедитесь, что метод Записать() выполнился без исключения, а количество строк в табличной части соответствует ожиданию: Док.Товары.Количество().
Как проверить результат
Строки нет после записи и повторного открытия документа
Строка вернулась — документ не был записан или сработало автозаполнение
Суммы пересчитаны с учётом удалённой строки
Итоги старые — документ не проведён повторно
Проводки соответствуют новому составу табличной части
Движения содержат удалённую позицию — требуется перепроведение
Частые вопросы
Можно ли восстановить удалённую строку табличной части?
Если документ ещё не записан после удаления — закройте форму без сохранения, строка останется. Если документ записан, восстановить строку штатными средствами нельзя: только ввести её заново вручную или восстановить данные из резервной копии базы.
Почему после удаления строки не изменилась сумма документа?
Итоговые суммы в шапке пересчитываются при проведении или по кнопке пересчёта, если она предусмотрено конфигурацией. Отмените проведение, удалите строку и проведите документ заново — суммы обновятся.
Как удалить все строки табличной части одной командой в коде?
Используйте метод Очистить(): Док.Товары.Очистить(); — затем запишите объект. Это корректнее, чем удалять строки в цикле, и исключает ошибки со смещением индексов.
Чем удаление строки отличается от пометки удаления?
Пометка на удаление применяется к целым объектам (документам, элементам справочников) и обратима. Строка табличной части — не самостоятельный объект, она удаляется физически из документа сразу и без возможности отмены после записи.
Можно ли удалить строку в проведённом документе, не отменяя проведение?
Зависит от настроек конфигурации. В большинстве типовых решений редактирование проведённого документа либо заблокировано, либо после записи потребуется перепроведение. Надёжная практика — всегда отменять проведение перед изменением табличной части.
Как удалить строки по условию во всех документах за период?
Напишите обработку: выборка документов запросом за период, для каждого — ПолучитьОбъект(), НайтиСтроки() по отбору, удаление найденных строк и Записать(). Перед запуском на рабочей базе протестируйте обработку на копии.
Что важно запомнить
В форме документа строка удаляется клавишей Delete или через контекстное меню, изменение фиксируется записью. Программно используются методы Удалить() и Очистить() у объекта документа. Проведённый документ перед правкой отменяют, а после изменения — проводят заново, чтобы движения по регистрам совпадали с табличной частью.