Имя: Пароль:
1C
 
Пустой результат запроса СКД
,
0 Valadis
 
27.05.16
16:20
Здравствуйте!
Подскажите, пож-та, как проверить результат запроса СКД на пустоту. Есть код:
СтандартнаяОбработка = ЛОЖЬ;
Настройки          = КомпоновщикНастроек.Настройки;
КомпановщикМакета      = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпановки      = КомпановщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,, );

Есть ли возможность в макете компановки проверять, вернул ли запрос какие-либо записи?
1 Valadis
 
27.05.16
16:25
Результат отчета высылается по почте сотруднику, указанному в отборе отчета (отбор также формируется программно). Если отчет пустой, то высылать его не надо.
2 ДенисЧ
 
27.05.16
16:29
проверь результирующий ТД на высоту. Если больше заголовка (который ты определил раньше), то не пустой
3 тарам пам пам
 
27.05.16
17:29
В типовых так проверяют:

    ОтчетПустой = Истина;
    Пока Истина Цикл
        
        #Если ТолстыйКлиентОбычноеПриложение тогда
            ОбработкаПрерыванияПользователя();
        #КонецЕсли
        //Получим следующий элемент результата компоновки
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        
        Если ЭлементРезультата = Неопределено Тогда
            //Следующий элемент не получен - заканчиваем цикл вывода
            Прервать;
            
        Иначе
            
            // Зафиксируем шапку
            Если Не ОтчетОбъект.РасширеннаяНастройка
               И Не ТаблицаЗафиксирована
                  И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
                  И ТипЗнч(ОтчетОбъект.КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
                ТаблицаЗафиксирована = Истина;
                Результат.ФиксацияСверху = Результат.ВысотаТаблицы;
                Если ВыводитьШапкуОтчетаНаВсехСтраницах тогда
                    ОбластьШапки = Результат.Область(3, ,Результат.ВысотаТаблицы, );
                    Результат.ПовторятьПриПечатиСтроки = ОбластьШапки;
                КонецЕсли;
            КонецЕсли;
            
            //Элемент получен - выведем его при помощи процессора вывода
            ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
            
            // Определить не пустой результат.
            Если ОтчетПустой Тогда
                Для Каждого ЗначениеПараметраМакетаКД Из ЭлементРезультата.ЗначенияПараметров Цикл
                    Попытка
                        ЗначениеЗаполнено = ЗначениеЗаполнено(ЗначениеПараметраМакетаКД.Значение);
                    Исключение
                        ЗначениеЗаполнено = Ложь; // Линия, Рамка, Цвет и другие объекты КД, которые могут фигурировать при выводе.
                    КонецПопытки;
                    Если ЗначениеЗаполнено Тогда
                        ОтчетПустой = Ложь;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЦикла;
    
    //Обозначем завершение вывода
    ПроцессорВывода.ЗакончитьВывод();