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