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

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

Как убрать пустые строки в 1С: рабочие способы с примерами кода

Как убрать пустые строки в 1С в табличной части документа, таблице значений, запросе и динамическом списке. Код, условия выбора метода, типичные ошибки и FAQ.

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

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

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

Определите, какие строки считать пустыми

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

Более строгий критерий — пусты все реквизиты строки. Он нужен, когда данные приходят из внешних источников (загрузка из Excel, обмен), и строка может содержать частичный «мусор». Третий вариант — строка с нулевыми количеством и суммой: формально она заполнена, но фактически бесполезна и часто искажает итоги и отчёты.

Строка без номенклатурыНе заполнен ключевой реквизит

Удалять смело — смысловой нагрузки нет

Нулевые количество и суммаСтрока заполнена, но пуста по сути

Проверить, не нужна ли она для истории изменений

Строка из загрузки ExcelМусор при импорте

Проверить все колонки, часто пуста только часть

Пустая строка в отчётеОсобенность группировки или итогов

Не удалять данные — настроить отбор в отчёте

Удаление пустых строк в форме документа вручную

Если пустых строк немного, проще всего удалить их вручную прямо в форме документа. Установите курсор на строку табличной части и нажмите кнопку «Удалить» на командной панели таблицы либо сочетание клавиш Shift+Del. В управляемых формах также работает пункт контекстного меню «Удалить» по правой кнопке мыши.

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

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

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

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

ТабличнаяЧасть = Объект.Товары;

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

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

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

ТабличнаяЧасть.Удалить(СтрокаТаблицы);

КонецЕсли;

КонецЦикла;

Если критерий пустоты шире — например, не заполнены номенклатура, количество и сумма одновременно — объедините условия через «И»:

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

И СтрокаТаблицы.Количество = 0

И СтрокаТаблицы.Сумма = 0 Тогда

ТабличнаяЧасть.Удалить(СтрокаТаблицы);

КонецЕсли;

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

Порядок действий при программной очистке
  1. 1
    Определите критерий пустой строки: незаполненный реквизит или нулевые значения
  2. 2
    Напишите цикл с конца коллекции по индексу
  3. 3
    Добавьте проверку условия и вызов метода Удалить()
  4. 4
    Протестируйте на копии документа с реальными данными
  5. 5
    Проверьте итоги документа и проведение после очистки

Очистка таблицы значений в обработке

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

// Вариант 1: удаление через НайтиСтроки

Отбор = Новый Структура("Номенклатура", Неопределено);

ПустыеСтроки = ТаблицаДанных.НайтиСтроки(Отбор);

Для Каждого СтрокаТаблицы Из ПустыеСтроки Цикл

ТаблицаДанных.Удалить(СтрокаТаблицы);

КонецЦикла;

// Вариант 2: проверка всех колонок строки

Функция СтрокаПустая(СтрокаТаблицы, ТаблицаДанных)

Для Каждого Колонка Из ТаблицаДанных.Колонки Цикл

Если ЗначениеЗаполнено(СтрокаТаблицы[Колонка.Имя]) Тогда

Возврат Ложь;

КонецЕсли;

КонецЦикла;

Возврат Истина;

КонецФункции

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

Отбор пустых строк в запросе и динамическом списке

Когда пустые строки нужно не удалить, а исключить из выборки, правильнее использовать запрос. Условие добавляется в секцию «ГДЕ»:

ВЫБРАТЬ

Товары.Номенклатура,

Товары.Количество,

Товары.Сумма

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

ГДЕ

Товары.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

И Товары.Количество > 0

В динамическом списке аналогичный эффект достигается настройкой отбора: откройте «Ещё — Настроить список», добавьте условие «Номенклатура не равно пустое значение» или «Количество больше 0». Это не удаляет данные, а только скрывает их из отображения, что безопасно и обратимо.

В отчётах на СКД пустые строки часто возникают из-за группировок с пустыми значениями измерений. Здесь решение — отбор по ресурсам (например, «Сумма оборот не равно 0») или проверка настроек группировки, а не чистка данных.

Сравнение вариантов

Ручное удаление в форме

Подходит для разовой чистки нескольких строк. Не масштабируется и требует внимательности

Цикл с удалением по индексу

Универсальный программный способ для табличной части и таблицы значений. Требует обхода с конца

НайтиСтроки + удаление

Быстрее читается, но работает только с точным равенством значений

Отбор в запросе или динамическом списке

Не меняет данные, только скрывает строки. Оптимально для отчётов и списков

Типичные ошибки и проверка результата

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

Вторая ошибка — неверный критерий пустоты. Сравнение строки с пустой строкой «""» не сработает для реквизита ссылочного типа, а сравнение с «Неопределено» пропустит пустую ссылку. Используйте функцию «ЗначениеЗаполнено» — она учитывает все типы данных платформы.

Типичные ошибки
01
Удаление строк в прямом цикле — часть строк пропускается из-за смещения индексов
02
Сравнение с Неопределено вместо ЗначениеЗаполнено — пустые ссылки не отлавливаются
03
Удаление строк с нулевым количеством без анализа — теряются строки, нужные для истории или возвратов
04
Очистка данных вместо настройки отбора в отчёте — искажаются учётные данные ради внешнего вида
05
Запуск обработки без тестового режима — необратимая потеря данных при ошибке в условии

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

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

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

Количество строк после очистки
Норма

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

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

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

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

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

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

Итоги обнулились или изменились непредсказуемо

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

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

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

Ошибки проведения из-за потерянных строк

Тестовый прогон обработки
Норма

Список «к удалению» содержит только действительно пустые строки

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

В список попали заполненные строки

FAQ

Как удалить пустые строки в табличной части, если документов много?

Напишите внешнюю обработку: запросом выберите документы, у которых в табличной части есть строки с незаполненной номенклатурой, затем в цикле откройте каждый объект, очистите табличную часть обходом с конца и запишите. Обязательно предусмотрите тестовый режим без записи и выполняйте обработку на копии базы.

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

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

Как убрать пустые строки в отчёте, не трогая данные?

В отчёте на СКД добавьте отбор по ресурсу — например, «Сумма оборот не равно 0», либо отбор по измерению «не равно пустое значение». Если пустые строки возникают из-за группировки, проверьте, не включена ли группировка по полю, которое не заполнено у части данных.

Чем ЗначениеЗаполнено лучше сравнения с пустой строкой?

Функция «ЗначениеЗаполнено» универсальна: она корректно определяет пустоту для строк, чисел, дат, ссылок и значения «Неопределено». Прямое сравнение работает только для одного типа и даёт ложные результаты для ссылочных реквизитов, где пустое значение — это пустая ссылка конкретного вида.

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

Да. В процедуре «ОбработкаПроверкиЗаполнения» модуля объекта проверьте каждую строку табличной части и вызовите отказ с сообщением, если ключевой реквизит не заполнен. В типовых конфигурациях такая проверка часто уже есть — тогда пустая строка просто не даст провести документ.

Как удалить строки с нулевым количеством, но оставить строки с нулевой ценой?

Разделите условия: удаляйте только строки, где количество равно нулю, независимо от цены. Строки с нулевой ценой могут быть легитимными (бонусы, образцы, безвозмездная передача), поэтому включать их в критерий пустоты без анализа учётной политики нельзя.

Итог

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

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