Часто при разработке отчетов или обработок на платформе 1С:Предприятие возникает ситуация, когда в базе данных физически присутствуют движения документа, но при выполнении запроса к виртуальной таблице часть строк «исчезает». Давайте подробно разберем, почему так происходит и как заставить 1С увидеть все данные.
Основная причина того, что вы видите меньше строк, чем ожидаете, заключается в механизме работы виртуальных таблиц. Виртуальные таблицы ОстаткиИОбороты или Обороты по своей сути являются агрегирующими. Когда вы выбираете данные, платформа автоматически выполняет группировку по тем измерениям, которые вы указали в списке выбора.
Если в вашем запросе не указаны все измерения регистра (например, не выведена Номенклатура), платформа сворачивает все записи, у которых совпадают ключевые поля (в данном случае — Регистратор). В процессе этой свертки происходит сложение ресурсов. И здесь вступает в силу главное правило 1С: записи, у которых все ресурсы равны нулю, исключаются из результата выборки автоматически.
Если во второй «пропавшей» записи ресурс, например СтоимостьВалОборот, равен нулю, то платформа просто не включит эту строку в итоговый результат, посчитав ее неинформативной. Именно поэтому при выборе всех полей вы видите строки, а при попытке сгруппировать их по регистратору — получаете «обрезанный» результат.
Рассмотрим, что нужно сделать, чтобы разобраться в ситуации:
ВЫБРАТЬ *, чтобы увидеть, какие именно записи содержат нулевые значения ресурсов.Активность у записей установлен в значение Истина. Записи с флагом Ложь игнорируются всеми виртуальными таблицами.&НачалоПериода и &КонецПериода захватывают момент времени записи.Если виртуальная таблица ОстаткиИОбороты слишком агрессивно фильтрует данные, попробуйте обратиться к физической таблице движений регистра. Это позволит вам увидеть абсолютно все записи без автоматической свертки:
ВЫБРАТЬ
ЗаявкиНаОбеспечениеДвижения.Регистратор,
ЗаявкиНаОбеспечениеДвижения.Номенклатура,
ЗаявкиНаОбеспечениеДвижения.СтоимостьВалОборот
ИЗ
РегистрНакопления.ЗаявкиНаОбеспечение.Движения КАК ЗаявкиНаОбеспечениеДвижения
ГДЕ
ЗаявкиНаОбеспечениеДвижения.Регистратор = &НужныйДокумент
Если вы столкнулись с «исчезновением» строк, пройдемся по чек-листу:
ВЫБРАТЬ часто «возвращает» потерянные строки.Тестирование и исправление в Конфигураторе с установленной галочкой Пересчет итогов. Иногда итоги регистра могут быть нарушены, что приводит к некорректным результатам запросов.Работая с регистрами 1С, всегда помните: виртуальные таблицы — это мощный инструмент оптимизации, но они скрывают «нулевые» и пустые данные, что иногда может сбить с толку при отладке кода.