Часто при разработке или отладке отчетов мы сталкиваемся с ситуацией, когда запрос, который по всем логическим признакам должен возвращать данные, выдает пустой результат. Давайте разберем эту ситуацию по шагам и выясним, в чем кроется подвох.
В первом сообщении автор столкнулся с тем, что запрос к РегистрБухгалтерии.Хозрасчетный.Остатки не возвращает данные. При анализе выяснилось, что при проверке в консоли запросов параметр Организация был задан как строковое значение "000000001". Это фундаментальная ошибка.
В системе 1С:Предприятие поля, ссылающиеся на справочники (в данном случае Организация), имеют тип СправочникСсылка.Организации. Попытка сравнить этот ссылочный тип со строкой "000000001" всегда будет давать Ложь, так как система ожидает именно объектную ссылку, а не строковое представление кода.
Чтобы запрос заработал корректно, нам нужно передать значение именно того типа, которое ожидает платформа. Рассмотрим два основных способа решения этой задачи:
ОрганизацияСсылка = Справочники.Организации.НайтиПоКоду("000000001");
Запрос.УстановитьПараметр("Организация", ОрганизацияСсылка);
// В тексте запроса
ГДЕ ХозрасчетныйОстатки.Организация.Код = &КодОрганизации
// В коде установки параметра
Запрос.УстановитьПараметр("КодОрганизации", "000000001");
Для того чтобы не допускать ошибок при ручном вводе параметров в консоли запросов, воспользуемся встроенными механизмами платформы:
&).Организация выберите организацию через стандартный диалог выбора справочника. Это гарантирует, что в запрос попадет корректная ссылка, а не строка.Помимо типов данных, обратите внимание на момент времени, на который вы получаете остатки. Если вы используете функцию ДАТАВРЕМЯ(2022, 12, 1, 0, 0, 0), вы получаете остатки на начало дня (00:00:00). Если документы, формирующие остатки, были проведены в течение этого же дня, они не попадут в ваш отчет.
Для получения данных на конец дня рекомендуется использовать:
23:59:59.Граница с видом ВидГраницы.Включая.Помните: Использование временных таблиц через ПОМЕСТИТЬ — это мощный инструмент для разбиения сложных запросов на этапы. Однако сама по себе временная таблица не выводит результат в консоль. Чтобы увидеть данные, убедитесь, что в конце пакета запросов у вас стоит финальный ВЫБРАТЬ, который обращается к этой временной таблице.
Разбирая подобные ошибки вместе, мы не только исправляем текущую задачу, но и учимся глубже понимать архитектуру 1С, что помогает избегать проблем с производительностью и логикой данных в будущем.