Почему в запросе к регистру накопления 1С пропадают записи?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

Разберем причину: свертка данных и нулевые значения

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

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

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

Как проанализировать проблему по шагам

Рассмотрим, что нужно сделать, чтобы разобраться в ситуации:

  1. Выведите все поля: Используйте конструкцию ВЫБРАТЬ *, чтобы увидеть, какие именно записи содержат нулевые значения ресурсов.
  2. Проверьте группировку: Если вы запрашиваете только часть измерений, помните, что все остальные записи будут свернуты. Если нужно видеть каждую строку движений, включайте в запрос все измерения или используйте прямую таблицу движений.
  3. Проверьте активность: Убедитесь, что флаг Активность у записей установлен в значение Истина. Записи с флагом Ложь игнорируются всеми виртуальными таблицами.
  4. Анализ периода: Если документ был проведен в пограничное время, убедитесь, что параметры &НачалоПериода и &КонецПериода захватывают момент времени записи.

Использование прямой таблицы движений

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


ВЫБРАТЬ
    ЗаявкиНаОбеспечениеДвижения.Регистратор,
    ЗаявкиНаОбеспечениеДвижения.Номенклатура,
    ЗаявкиНаОбеспечениеДвижения.СтоимостьВалОборот
ИЗ
    РегистрНакопления.ЗаявкиНаОбеспечение.Движения КАК ЗаявкиНаОбеспечениеДвижения
ГДЕ
    ЗаявкиНаОбеспечениеДвижения.Регистратор = &НужныйДокумент

Подведем итоги

Если вы столкнулись с «исчезновением» строк, пройдемся по чек-листу:

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

← На главную