Имя: Пароль:
1C
1С v8
СКД. Программный вывод отчета с фиксированным макетом.
0 guitar_player
 
21.03.12
15:10
Добрый день!
Формирую табличный документ при помощи СКД программно. Есть фиксированный макет и в нем, например, есть 2 области - заголовок, строка.

Подскажите пожалуйста, как програмно можно определить был результат итогового запроса пустым?

Сейчас если под условия ничего не попадает, то выводится только заголовок.

Делаю авторассылку отчетов, мне нужно определить - если данных не было, то отправлять этот отчет не нужно, либо делать какие то другие действия.
Есть какие нибудь решения?
1 Лодырь
 
21.03.12
15:11
проверить количество строк?
2 Aprobator
 
21.03.12
15:11
высота таблицы?
3 guitar_player
 
21.03.12
15:12
если ты про высоту таблицы, то это не совсем подходящий вариант, так как она может быть разная для разного отчета, есть еще варианты?
4 Лодырь
 
21.03.12
15:16
Ну добавь в конце заголовка невидимый маркер. Проверь его позицию после вывода отчета. Если в конце отчета стоит маркер - отчет пустой.
5 guitar_player
 
21.03.12
15:19
(4) в принципе вариант, спасибо. Может кто нибудь предложет другие идеи?
6 Лодырь
 
21.03.12
15:31
(5) Хочешь вариантов, ок держи (не проверял):
Вызови внешнюю функцию при расчете ресурса отчета - измени внешний флаг внутри этой функции.
7 Лодырь
 
21.03.12
15:33
(5) В порядке дежурного бреда. Продублируй предварительно запрос. Пустое значение - идем лесом, непустое - запускаем СКД. )
8 guitar_player
 
21.03.12
16:28
(7) ну это не вариант... вариант (6) попробую, спасибо)
9 guitar_player
 
22.03.12
04:23
(6) выкрутился так:
В отчет добавил параметр, в вычисляемых полях добавил поле, в нем вызываю внешнюю функцию, передаю туда параметр, там его меню.
Соответственно если были данные - параметр изменился, если нет - нет. Работает, йа доволен! Всем спасибо!
10 badboychik
 
22.03.12
05:30
ты бы еще в реестре параметр завел...
или в файлик на диске цифру 1 писал
11 Escander
 
22.03.12
05:40
а разве ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент не позволяет выводить в табличный документ программно? что-бы при выводе "ручками" не отслеживать?
12 badboychik
 
22.03.12
05:52
позволяет выводить, только после вывода получается готовый результат, его пустоту можно только по высоте таблицы определить
13 badboychik
 
22.03.12
05:53
а почему высота может быть разная если макет фиксированный?
14 Escander
 
22.03.12
05:59
(12) а зачем? первый элемент вывода - шапка, если элементов больше 1 - значит основная часть не есть пустая!
15 Лодырь
 
22.03.12
06:02
Если предположить что отчет сложной структуры, например состоящий из двух частей:
1. Описательно пояснительная, назыаемая заголовком )
2. Данные

то тогда определить вывелись ли данные из пункта 2 действительно сложно
16 badboychik
 
22.03.12
06:03
(14) ты отладчиком хоть раз пробегал процесс вывода? Там всегда элементов больше 1 и даже больше 5 :) и первый элемент не шапка.

Там можно по имени макета определить что выводится - если имя макета = "Макет3", это значит детальная строка. Если там есть значение и таких строк больше одной, значит результат не пустой
17 badboychik
 
22.03.12
06:10
смотри урок №82 по СКД )
18 Escander
 
22.03.12
06:13
(16)ну это в первом приближении, если шапка есть то вот такой код поможет, в крайнем случае допиливаемо:
.................
Процессор = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 Процессор.УстановитьДокумент(ДокументРезультат);

 Процессор.НачатьВывод();
 ЭлементРез = ПроцессорКомпоновки.Следующий();
  ДанныеЕсть = Ложь;

  Пока Не ЭлементРез = Неопределено Цикл
     Если Не ДанныеЕсть И ЭлементРез.ЗначенияПараметров.Количество()>0 Тогда
       ДанныеЕсть = Истина;
     КонецЕсли;

    Процессор.ВывестиЭлемент(Элемент);
     ЭлементРез = ПроцессорКомпоноки.Следующий();
  КонецЦикла;

Ответ на вопрос ТС в переменной ДанныеЕсть, не?
19 Escander
 
22.03.12
06:14
(17) чей?
20 Escander
 
22.03.12
06:15
(15) у ТС структура:заголовок, строка.
21 badboychik
 
22.03.12
06:32
(18) не пойдет, там даже в пустом отчете есть одна строка с количеством параметров больше нуля, проверено. Надо еще значения проверять, там они равны NULL если пустой результат
(19) Фарита конечно же ) Тут вроде бы баннер висел
22 guitar_player
 
22.03.12
06:38
(20) я написал, что у меня произвольная структура. СКД хранится в элементе справочника, продвинутый пользователь настраивает его как хочет. К высоте таблицы, количеству областей привязываться нельзя
23 guitar_player
 
22.03.12
06:38
(10) что не нравится?
24 Escander
 
22.03.12
06:42
(21)ну тогда наверное не Фарит а Евгений.
>Надо еще значения проверять, там они равны NULL если пустой результат
ну тык вот, мелкий допил и опа, вуаля!
25 guitar_player
 
22.03.12
07:59
Сделал вот так:

   Пока Истина Цикл
               
               ЭлементРезультата = ПроцессорКомпоновки.Следующий();
               
               Если ЭлементРезультата = Неопределено Тогда
                   Прервать;
               Иначе
                   
                   Если Не ДанныеЕсть
                       И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
                       И ЕстьЗаполненныеЗначенияПараметровМакетаКомпоновкиДанных(ЭлементРезультата.ЗначенияПараметров) Тогда
                       ДанныеЕсть = Истина;
                   КонецЕсли;
                   
                   ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
                   
               КонецЕсли;
               
           КонецЦикла;


Функция ЕстьЗаполненныеЗначенияПараметровМакетаКомпоновкиДанных(ЗначенияПараметровМакетаКомпоновкиДанных)
                                       
   Для Каждого Элемент Из ЗначенияПараметровМакетаКомпоновкиДанных Цикл
       Если Элемент.Значение <> NULL Тогда
           Возврат Истина;
       КонецЕсли;
   КонецЦикла;
   
   Возврат Ложь;
   
КонецФункции //ЕстьЗаполненныеЗначенияВМассиве


Все правильно понял?
26 Escander
 
22.03.12
09:01
вроде так, проверку заполнения никогда не делал, но похоже.
всё-же перед циклом стоит сделать ДанныеЕсть = Ложь;;
27 guitar_player
 
22.03.12
09:06
(26) конечно стоит, только не зацепил эту строчку при копировании
28 Escander
 
22.03.12
09:48
(27) искомое получилось?
29 guitar_player
 
22.03.12
09:48
(28) да, все работает! Спасибо!