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

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

Как удалить строку в табличной части 1С: способы для пользователя и разработчика

Как удалить строку в табличной части (ТЗ) 1С: клавиши Delete и Shift+Delete, контекстное меню, код 1С для удаления строк таблицы значений и табличной части документа.

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

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

Ниже разобраны оба сценария — интерактивный и программный — с проверками результата и типичными ошибками, из-за которых строка «не удаляется» или удаляется не та.

Удаление строки в пользовательском режиме

Откройте документ или элемент справочника с табличной частью (например, «Реализация товаров и услуг», «Поступление товаров», «Счёт на оплату»). Установите курсор на нужную строку — она подсветится. Нажмите клавишу Delete на клавиатуре: строка будет удалена немедленно, без окна подтверждения.

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

После удаления строки итоговые суммы документа (количество, сумма, НДС) пересчитываются автоматически. Чтобы изменение сохранилось в базе, документ нужно записать или провести — до записи удаление существует только в открытой форме.

Порядок действий в интерфейсе
  1. 1
    Откройте документ и перейдите на вкладку с табличной частью
  2. 2
    Выделите нужную строку щелчком мыши
  3. 3
    Нажмите Delete или выберите «Удалить» в контекстном меню
  4. 4
    Проверьте пересчёт итогов документа
  5. 5
    Запишите или проведите документ

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

Если клавиша Delete не срабатывает, чаще всего курсор находится не в табличной части, а в поле ввода внутри ячейки: в этом случае Delete стирает символы в тексте ячейки, а не строку целиком. Нажмите Esc, чтобы выйти из режима редактирования ячейки, затем выделите строку и повторите удаление.

Вторая частая причина — ограничения, заданные разработчиком: у табличного поля может быть отключено свойство «Изменять состав строк», либо документ открыт только на просмотр (например, у пользователя нет прав на изменение). В этом случае кнопка удаления неактивна, и вопрос решается настройкой прав или доработкой формы.

Третья ситуация — документ проведён, и конфигурация запрещает редактирование без отмены проведения. Тогда сначала отмените проведение (кнопка «Проведение» → «Отменить проведение» или команда «Сделать непроведённым»), удалите строку и проведите документ заново.

Удаление нескольких строк сразу

Чтобы удалить несколько подряд идущих строк, выделите первую, затем, удерживая Shift, щёлкните последнюю — диапазон подсветится. Произвольный набор строк выделяется с зажатой клавишей Ctrl. После выделения нажмите Delete или команду «Удалить» — удалятся все выделенные строки.

Для полной очистки табличной части в интерфейсе удобнее выделить все строки комбинацией Ctrl+A (фокус должен быть в таблице) и нажать Delete. В некоторых конфигурациях на панели таблицы есть отдельная команда «Очистить» — она делает то же самое одним действием.

Учтите, что массовое удаление в интерфейсе также не запрашивает подтверждение. Если удалили лишнее, до записи документа можно отменить действие стандартной комбинацией Ctrl+Z в форме либо просто закрыть документ без сохранения.

Программное удаление строки табличной части

В коде на встроенном языке 1С строка табличной части удаляется методом Удалить(). Метод принимает либо саму строку (объект строки табличной части), либо её индекс — номер, начинающийся с нуля. Примеры:

// Удаление по объекту строки

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

// Удаление по индексу (первой строки)

ДокументОбъект.Товары.Удалить(0);

// Удаление всех строк

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

Если нужно удалить строки по условию — например, все строки с нулевым количеством, — корректный приём: сначала найти строки методом НайтиСтроки(), затем удалить каждую найденную. Удалять строки внутри цикла Для Каждого по той же коллекции нельзя: индексы смещаются, и часть строк будет пропущена.

НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(

Новый Структура("Количество", 0));

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

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

КонецЦикла;

Программное удаление строки таблицы значений

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

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Номенклатура");

// ... заполнение таблицы ...

// Удаление последней строки

Если ТЗ.Количество() > 0 Тогда

ТЗ.Удалить(ТЗ.Количество() - 1);

КонецЕсли;

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

Типичные ошибки в коде
01
Удаление строк в цикле «Для Каждого» по той же коллекции — индексы смещаются, строки пропускаются
02
Удаление по номеру строки вместо индекса: номер начинается с 1, индекс — с 0, удаляется не та строка
03
Удаление строки на клиенте, когда данные изменяются на сервере — форма показывает устаревшие данные
04
Вызов Удалить() без проверки, что строка существует, — ошибка обращения к неопределённому значению

Проверка результата и границы безопасной работы

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

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

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

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

Количество строк после удаления
Норма

Уменьшилось ровно на число удалённых строк

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

Не изменилось — удаление не выполнено или не записано

Итоги документа
Норма

Сумма и НДС пересчитались без удалённой строки

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

Итоги прежние — документ не записан или пересчёт отключён

Проведение документа
Норма

Проводится без сообщений об ошибках

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

Ошибки движений по регистрам — нужна проверка связанных данных

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

Итог

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

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

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

Можно ли восстановить удалённую строку табличной части?

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

Почему кнопка «Удалить» в табличной части неактивна?

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

Чем отличается Удалить() от Очистить() в коде 1С?

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

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

Обратитесь к текущим данным таблицы формы и передайте их в метод Удалить коллекции: Объект.Товары.Удалить(Элементы.Товары.ТекущиеДанные). Предварительно проверьте, что ТекущиеДанные не равны Неопределено, иначе получите ошибку.

Удалится ли строка из базы, если просто закрыть документ?

Нет. Удаление строки происходит только в открытой форме. Чтобы изменение попало в базу данных, документ нужно записать кнопкой «Записать» или «Провести». Без записи при закрытии форма предложит сохранить изменения.

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

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