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