Имя: Пароль:
1C
 
СКД: как передать параметры в запрос из настроек отчета?
0 DSSS
 
14.01.10
08:41
Всем доброго дня!
Пишу отчет на СКД, запрос выполняю в модуле формы, потом передаю таблицу значений полученную этим запросом в СКД через набор данных. Вот текст запроса:
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.Регистратор,
   ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) КАК Количество,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОбщая,
   ПродажиОбороты.Проект,
   ПродажиОбороты.Регистратор.Ответственный КАК Ответственный,
   ПродажиОбороты.Подразделение,
   ПродажиОбороты.ПериодМесяц КАК Месяц
ИЗ
   РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто,) КАК ПродажиОбороты

Чтобы отчет сформировался с нужными отборами, я устанавливаю их в настройках отчета и отчет формируется правильно. Вопрос в следующем: получается, что сначала у меня исполняется запрос без параметров и на это уходит намного больше времени, чем если бы в текст запроса были переданы эти параметры. Подскажите, как параметры отборов отчета передать в запрос, учитывая, что заранее неизвестно, какие отборы установит пользователь?
Пока только приходит в голову писать модуле перед исполнеем запроса примерно следующее:

ПараметрДанных=КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
ПараметрЗапроса = ПараметрДанных.Значение;
Запрос.УстановитьПараметр("КонецПериода",ПараметрЗапроса);
Запрос.Текст = Запрос.Текст + какой-то текст для запроса.
Однако при этом нужно учитывать каждое поле запроса, тип сравнения, тип значений и пр. Так я запарюсь все возможные варианты перебирать..
Может существует более простой способ решения такой проблемы, подскажите, кто в курсе?
1 Defender aka LINN
 
14.01.10
08:48
А что мешает отчет на основании запроса делать?
2 DSSS
 
14.01.10
08:54
(1) Не понял малость вопроса. Я и делаю отчет на основании запроса, только он долго исполняется, потомучто без отборов. мне нужно эти отборы в запрос передать, чтобы быстрее работало.
3 Stim
 
14.01.10
08:55
(2) он тебя правильно спросил. Зачем вот это:
"Пишу отчет на СКД, запрос выполняю в модуле формы" ?
Почему нельзя запрос выполнять в самой СКД?
4 DSSS
 
14.01.10
08:58
(3) Мешает ряд особенностей ведения учета. Я сначала получаю таблицу значений, потом работаю с ней, в этой таблице пересчитывается себестоимость.
Это окончательный вариант, по другому не получается. Конечно намного логичней все в скд сделать, но в этом отчете мне приходится работать именно с набором данных.
5 Defender aka LINN
 
14.01.10
09:00
(4) Тогда жии с этим.
Или для запроса сделай отдельную схему, копируй туда отбор и получай таблицу отфильтрованную.
6 Guk
 
14.01.10
09:00
а что мешает прочитать значения отбора и запихнуть их в первоначальный запрос?...
7 Defender aka LINN
 
14.01.10
09:03
(6) Заколебешься.
8 mikeA
 
14.01.10
09:05
(14) Первый запрос делай на компоновке, у второго запроса в компоновке устанавливай параметры как у первого.
9 Stim
 
14.01.10
09:05
тогда проще создать отчет вручную. СКД для того и предназначен, чтобы брать всю рутинную работу на себя.. а автор хочет скрестить ноги с автомобилем..
10 Guk
 
14.01.10
09:06
(7) да ладно...
11 Defender aka LINN
 
14.01.10
09:11
(10) http://s004.radikal.ru/i207/1001/83/73930e1ffc07.jpg такой вот, например. Устанешь :)
12 Guk
 
14.01.10
09:13
(11) вдруг у него отбор попроще ;)...
13 Defender aka LINN
 
14.01.10
09:14
(12) Ну, мы ж частные случаи не решаем :)
14 DSSS
 
14.01.10
09:15
(12) Сложней намного. привел только часть запроса..
15 mikeA
 
14.01.10
09:15
(11) И что оно автоматом не обходится? Ну типа

Для каждого ЭлементНастройки из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл...
16 Defender aka LINN
 
14.01.10
09:17
(15) Обходится. Только что ты с ним делать будешь?
17 mikeA
 
14.01.10
09:18
(16) Скопировать в настройки компоновки второго запроса.
18 Defender aka LINN
 
14.01.10
09:20
(17) И давно у ЗАПРОСА появились настройки компоновки?
19 mikeA
 
14.01.10
09:21
(18) Я же говорю (8), тот запрос тоже на компоновке делать, только результат не выводить, а использовать его данные для обработки.
20 Defender aka LINN
 
14.01.10
09:25
(19) См. (5) :)
21 mikeA
 
14.01.10
09:28
(20) опаньки... ну, чукча - не читатель :)
22 Freddy
 
14.01.10
09:42
1. Юзай запрос в компоновщике, с которым связаны визуальные элементы.
2. Но в запрос добавь поля, которые расчитываешь.
3. Закрой по ним отбор.
4. Получи результат запроса и расчитай таблицу.
5. используй еще один компоновщик, который настрой на таблицу.
6. перекопируй настройки из первого компоновщика во второй...
7. сформируй и выведи результат вторым компоновщиком...

Единственный минус нет отборов по расчитываемым полям...
23 detec
 
14.01.10
09:54
Весь топик подробно не осилил.

Варианта 2.

1) Сделать в СКД тип набор данных - объект, и в него запихнуть объект - таблицу значений. Минусы тут уже описали плюс некоторые СУБД, в частности, Постргрес, ужасно тормозят на этой операции.

2) Написать сложный, поэтапный пакетный запрос. Не самый простой путь, но реальный. Я так примитивную обработку данных в коде 1С после прежних разработчиков почти полностью переложил на запрос в СКД.