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

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

Как проверить на заполненность таблицу в 1С

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

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

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

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

Определяем, какая именно таблица проверяется

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

Частая ситуация: разработчик пытается вызвать Пустой() у табличной части и получает ошибку «Метод объекта не обнаружен». Это значит, что выбран неправильный метод для данного типа. Сверьтесь с синтакс-помощником по конкретному объекту.

Табличная часть документаКоллекция строк объекта

Метод Количество() возвращает число строк

Таблица значенийОбъект в памяти

Количество() или Количество() > 0 после загрузки данных

Результат запросаРезультатЗапроса

Метод Пустой() возвращает Истина, если записей нет

Табличный документПечатная форма

Сравнить ВысотаТаблицы и ШиринаТаблицы с нулём

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

Табличная часть — это коллекция строк, поэтому базовый способ проверки — метод Количество(). Если он возвращает 0, строк нет:

Если Объект.Товары.Количество() = 0 Тогда

Сообщить("Табличная часть ""Товары"" не заполнена");

КонецЕсли;

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

ЕстьЗаполненныеСтроки = Ложь;

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

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

И СтрокаТЧ.Количество > 0 Тогда

ЕстьЗаполненныеСтроки = Истина;

Прервать;

КонецЕсли;

КонецЦикла;

Проверка на стороне запроса

Если документ ещё не открыт, а нужно узнать, есть ли у него строки в табличной части, эффективнее выполнить запрос к базе:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Товары.Ссылка

|ИЗ

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

|ГДЕ

| Товары.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);

Если Запрос.Выполнить().Пустой() Тогда

Сообщить("У документа нет строк в табличной части");

КонецЕсли;

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

Таблица значений — объект в памяти, который создаётся программно или заполняется из запроса методом Выгрузить(). Проверка аналогична табличной части: Если ТаблицаЗначений.Количество() = 0 Тогда ....

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

Если ТаблицаЗначений = Неопределено Тогда

Сообщить("Таблица не создана");

ИначеЕсли ТаблицаЗначений.Количество() = 0 Тогда

Сообщить("Таблица не содержит строк");

КонецЕсли;

Если таблица загружается из внешнего файла (Excel, CSV), проверяйте заполненность после загрузки и до начала обработки строк. Иначе цикл «Для Каждого» просто не выполнится, и обработка завершится «успешно», не сделав ничего — такие сбои сложнее всего отлавливать.

Проверка результата запроса

У объекта «РезультатЗапроса» есть специальный метод Пустой(), который возвращает Истина, если запрос не вернул ни одной записи. Это правильный способ проверки:

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Возврат; // данных нет, дальнейшая обработка бессмысленна

КонецЕсли;

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

// обработка записей

КонецЦикла;

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

Что выбрать: Пустой() или выгрузку в таблицу

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

Результат.Пустой()

Быстро и наглядно. Подходит, когда нужно только узнать, есть ли данные, без их обработки.

Выборка + Следующий()

Один проход по данным. Подходит, когда после проверки данные всё равно обходятся в цикле.

Выгрузить() + Количество()

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

Проверка таблицы на форме и динамического списка

На управляемой форме табличная часть и таблица значений отображаются через реквизиты формы. Проверка выполняется так же — по количеству строк коллекции: Объект.Товары.Количество() или ЭтаФорма.ТаблицаДанных.Количество(). Для динамического списка прямого метода «количество записей» нет — при необходимости выполните тот же запрос, что заложен в список, с конструкцией ПЕРВЫЕ 1.

Для табличного документа (печатной формы) проверка на пустоту выполняется через размеры: если ВысотаТаблицы = 0 и ШиринаТаблицы = 0, документ не содержит данных. Это полезно перед отправкой на печать, чтобы не выводить пустой бланк.

Порядок действий
  1. 1
    Определите тип таблицы: табличная часть, таблица значений, результат запроса или табличный документ
  2. 2
    Выберите метод: Количество() для коллекций, Пустой() для результата запроса, размеры для табличного документа
  3. 3
    Проверьте, что сам объект существует и не равен Неопределено
  4. 4
    При необходимости добавьте проверку содержимого строк, а не только их количества
  5. 5
    Протестируйте на записи с нулём строк, одной строкой и несколькими строками

Типичные ошибки и как их избежать

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

Типичные ошибки
01
Вызов Пустой() у табличной части вместо результата запроса — ошибка «Метод объекта не обнаружен»
02
Проверка только количества строк без анализа содержимого — документ с пустыми строками проходит контроль
03
Обращение к таблице значений, которая не инициализирована, — исключение в момент обращения к Количество()
04
Использование КОЛИЧЕСТВО(*) в запросе вместо ПЕРВЫЕ 1 — лишняя нагрузка на больших таблицах
05
Отсутствие проверки после загрузки из файла — обработка молча завершается без результата

Ещё одна ошибка — проверка заполненности «на глаз» в пользовательском режиме без закрепления логики в коде. Если бизнес-процесс требует, чтобы табличная часть была заполнена, добавьте контроль в обработку проверки заполнения объекта (процедура ОбработкаПроверкиЗаполнения в модуле объекта), а не полагайтесь на внимательность пользователя.

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

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

Документ без строк
Норма

Проверка возвращает «пусто», документ не проводится

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

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

Документ со строками
Норма

Проверка пропускает документ дальше

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

Ложное сообщение о пустой таблице

Запрос без данных
Норма

Пустой() возвращает Истина, обработка завершается корректно

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

Исключение или пустой отчёт без пояснений

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

Чем отличается Пустой() от Количество() = 0?

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

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

Напишите запрос с левым соединением к табличной части и группировкой: документы, у которых по табличной части нет записей, будут иметь NULL в полях соединения. Отфильтруйте их условием «ГДЕ ТабличнаяЧасть.Ссылка ЕСТЬ NULL».

Можно ли проверить заполненность без программирования?

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

Почему Количество() возвращает строки, хотя таблица выглядит пустой?

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

Как проверить таблицу значений на форме при нажатии кнопки?

В обработчике команды обратитесь к реквизиту формы, содержащему таблицу, и вызовите Количество(). Если результат равен нулю, выведите предупреждение через ПоказатьПредупреждение() и прервите выполнение команды.

Итог

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

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