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

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

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

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

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

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

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

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

Альтернативный путь — щёлкнуть по строке правой кнопкой мыши и выбрать в контекстном меню пункт «Удалить». В некоторых конфигурациях доступна команда «Ещё → Удалить» на панели табличного поля.

Если пустых строк несколько, выделите их с зажатой клавишей Ctrl или Shift и удалите одним действием. После удаления проверьте итоговые суммы документа: они должны пересчитаться автоматически. Затем запишите документ кнопкой «Записать» или «Провести».

Ручное удаление за 4 шага
  1. 1
    Откройте документ и перейдите на вкладку с табличной частью
  2. 2
    Выделите пустую строку (или несколько через Ctrl/Shift)
  3. 3
    Нажмите Delete или выберите «Удалить» в контекстном меню
  4. 4
    Запишите документ и проверьте итоговые суммы

Как программно удалить пустые строки: общий принцип

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

Критерий «пустоты» определяется по смыслу документа. Обычно строка считается пустой, если не заполнена номенклатура (или другое основное поле). Проверять только количество или сумму недостаточно: строка с заполненным товаром и нулевым количеством — это не пустая строка, а отдельная ошибка данных.

Готовый код для удаления пустых строк

Вариант 1: обратный цикл по индексам

Классический способ — цикл от последней строки к первой с удалением по индексу. Подходит для любых табличных частей документов и справочников.

Для Индекс = 1 По Объект.Товары.Количество() Цикл

ТекСтрока = Объект.Товары[Объект.Товары.Количество() - Индекс];

Если НЕ ЗначениеЗаполнено(ТекСтрока.Номенклатура) Тогда

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

КонецЕсли;

КонецЦикла;

Вариант 2: сбор строк в массив и удаление

Более читаемый вариант — сначала собрать пустые строки в массив, затем удалить их отдельным циклом. Здесь порядок обхода не важен, потому что удаление идёт по ссылке на строку, а не по индексу.

МассивПустыхСтрок = Новый Массив;

Для Каждого СтрокаТовары Из Объект.Товары Цикл

Если НЕ ЗначениеЗаполнено(СтрокаТовары.Номенклатура) Тогда

МассивПустыхСтрок.Добавить(СтрокаТовары);

КонецЕсли;

КонецЦикла;

Для Каждого СтрокаКУдалению Из МассивПустыхСтрок Цикл

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

КонецЦикла;

bsl
Для Каждого СтрокаТовары Из Объект.Товары Цикл
    Если НЕ ЗначениеЗаполнено(СтрокаТовары.Номенклатура) Тогда
        МассивПустыхСтрок.Добавить(СтрокаТовары);
    КонецЕсли;
КонецЦикла;

Где разместить код: форма, модуль объекта или внешняя обработка

Если задача — не давать пользователю записать документ с пустыми строками, разместите проверку в обработчике ПередЗаписью или ОбработкаПроверкиЗаполнения модуля объекта. В первом случае строки удаляются автоматически, во втором — пользователю выдаётся сообщение об ошибке с указанием номера строки.

Для разовой чистки уже существующих документов удобнее внешняя обработка: она перебирает документы за период, открывает каждый объект, чистит табличную часть и записывает. Работайте с объектами через ПолучитьОбъект(), а не через запрос — запрос не позволяет изменять данные.

На форме документа (управляемое приложение) табличная часть доступна как Объект.Товары, и код удаления работает так же. Учтите, что удаление на клиенте без перезаписи не сохранится в базе — объект нужно записать.

Проверка результата и контрольные точки

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

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

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

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

Заполненные строки
Норма

Все строки с номенклатурой на месте, суммы не изменились

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

Пропали строки с заполненным товаром — критерий пустоты задан неверно

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

Документ проводится без сообщений об ошибках

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

Ошибки проведения или сбой движений по регистрам

Количество удалённых строк
Норма

Совпадает с числом пустых строк, видимых до обработки

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

Удалено больше или меньше, чем ожидалось

Типичные ошибки при удалении строк

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

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

Третья ошибка — забыть записать объект после программной чистки. Изменения в памяти без вызова Записать() теряются, и при следующем открытии пустые строки снова на месте.

Типичные ошибки
01
Прямой обход коллекции при удалении — часть строк пропускается из-за смещения индексов
02
Проверка пустоты по количеству или сумме вместо номенклатуры — удаляются заполненные строки
03
Отсутствие Записать() после чистки — изменения не сохраняются в базе
04
Запуск массовой обработки без резервной копии — откатить удаление невозможно

FAQ

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

Да, через внешнюю обработку: выборка документов за период, для каждого — ПолучитьОбъект(), чистка табличной части обратным циклом и Записать(). Предварительно сделайте копию базы и протестируйте обработку на одном документе.

Почему после удаления в цикле остаются пустые строки?

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

Как запретить сохранение документа с пустыми строками?

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

Чем отличается удаление строки от её очистки?

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

Работает ли этот код в обычных формах 1С 8.2/8.3?

Да, методы Количество(), Удалить() и обход коллекции одинаковы для обычных и управляемых форм. Различия касаются только контекста выполнения (клиент/сервер) и директив компиляции в управляемых формах.

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

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

Итог

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

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