|
v7: Условие в обычном (не прямом) запросе - Регистр..ТекущийДокумент в СписокЗначений не работ | ☑ | ||
---|---|---|---|---|
0
AMKahm
17.04.19
✎
11:57
|
Добрый день.
Есть запрос: ... ТекущийДокумент = Регистр.Продажи.ТекущийДокумент; ... Условие ((ТекущийДокумент в СписокФильтрТекущийДокумент)); ... Если в СписокФильтрТекущийДокумент один документ то все ок работает - профайлером ловлю запрос: exec sp_cursoropen @p1 ... from ... join #RGTEMP0 WITH (NOLOCK) on RA2351.SP2344 =#RGTEMP0.VAL where ... and ((RA2351.IDDOC ='' 2CYME ''))) group by ... проверка на ТекущийДокумент в where - RA2351.IDDOC ='' 2CYME '' Если в СписокФильтрТекущийДокумент более одного документа то не работает!!! из профайлера получаю: exec sp_cursoropen @p1 ... from ... join #RGTEMP0 WITH (NOLOCK) on RA2351.SP2344 =#RGTEMP0.VAL join #RGTEMP1 WITH (NOLOCK) on RA2351.IDDOC =#RGTEMP1.VAL where ... group by ... проверка на ТекущийДокумент join #RGTEMP1, ок, только вот в #RGTEMP1.VAL записывается вот это: exec sp_executesql N'IF NOT EXISTS( SELECT * FROM #RGTEMP1 WHERE VAL=@P1 ) INSERT #RGTEMP1 VALUES( @P2, 2 ) ',N'@P1 varchar(13),@P2 varchar(13)',' 745 2CYME ',' 745 2CYME ' exec sp_executesql N'IF NOT EXISTS( SELECT * FROM #RGTEMP1 WHERE VAL=@P1 ) INSERT #RGTEMP1 VALUES( @P2, 2 ) ',N'@P1 varchar(13),@P2 varchar(13)',' 745 2COZ9 ',' 745 2COZ9 ' тоесть вместо ' 2CYME ' там ' 745 2CYME ', 745 = 9221, типизация? ну ок, только вот RA2351.IDDOC это Char(9) никак не могу понять что надо сделать чтоб заработало... |
|||
1
Ёпрст
17.04.19
✎
12:11
|
ну аоказывай, чего ты в СписокФильтрТекущийДокумент пихаешь и как.
|
|||
2
AMKahm
17.04.19
✎
12:15
|
...
СписокФильтрТекущийДокумент = СоздатьОбъект("СписокЗначений"); ... СписокФильтрТекущийДокумент.ДобавитьЗначение(тДок); СписокФильтрТекущийДокумент.ДобавитьЗначение(тДок1); ... тДок и тДок1 - это реквизит диалога на форме типа Документ.9221 |
|||
3
AMKahm
17.04.19
✎
12:28
|
создал конструктором отчет:
ВыбТекущийДокумент и ВыбТекущийДокумент1 на форме ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент); //ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент1); работает как и //ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент); ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент1); а вот //ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент); ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент1); уже нет Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; ВыбТекущийДокументСписок = СоздатьОбъект("СписокЗначений"); ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент); ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент1); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |ТекущийДокумент = Регистр.Продажи.ТекущийДокумент; |Номенклатура = Регистр.Продажи.Номенклатура; |Себестоимость = Регистр.Продажи.Себестоимость; |Функция СебестоимостьСумма = Сумма(Себестоимость); |Группировка Номенклатура без групп; |Условие(ТекущийДокумент в ВыбТекущийДокументСписок); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Номенклатура Таб.ВывестиСекцию("Номенклатура"); КонецЦикла; // Заполнение полей "Итого" Таб.ВывестиСекцию("Итого"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
4
AMKahm
17.04.19
✎
12:28
|
копипастил, правильно так:
а вот ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент); ВыбТекущийДокументСписок.ДобавитьЗначение(ВыбТекущийДокумент1); уже нет |
|||
5
azernot
17.04.19
✎
12:35
|
Попробуй
СписокФильтрТекущийДокумент.ДобавитьЗначение(тДок.ТекущийДокумент()); СписокФильтрТекущийДокумент.ДобавитьЗначение(тДок1.ТекущийДокумент()); |
|||
6
MadDAD
17.04.19
✎
12:37
|
(2) А если так?
СписокФильтрТекущийДокумент.ДобавитьЗначение(тДок.ТекущийДокумент(); |
|||
7
AMKahm
17.04.19
✎
12:38
|
пробую...
... не, не работает |
|||
8
MadDAD
17.04.19
✎
12:41
|
Регистр.Продажи.ТекущийДокумент не типизирован?
|
|||
9
Euguln
17.04.19
✎
12:43
|
Переделай на номера.
|
|||
10
AMKahm
17.04.19
✎
12:45
|
(8) ну да, он Char(9), это ж платформа контролирует http://www.script-coding.com/v77tables.html#3.4.2.1.
"IDDOC - ID документа, тип «строка», по этому полю осуществляется связь с таблицей документов («1SJOURN» или «_1SJOURN» для SQL). Тип - Char(9)." (9) думал, но номера могут совпасть с другими типами документов, не прокатит |
|||
11
Ёпрст
17.04.19
✎
12:57
|
Запрос.ВключитьSQL(0) воткни, забудь о скорости, но работать будет
|
|||
12
AMKahm
17.04.19
✎
13:06
|
(11) работает....!? спасибо
тот простенький запрос тестовый без этой опции отрабатывал менее секунды... с ней минуты 3!!! боюсь что там где это нужно изначально на пол дня повиснет, ну и ладно |
|||
13
AMKahm
17.04.19
✎
13:23
|
да, тестил все это на 25 и 27 релизах. может на других глюка этого нет?
падение скорости оказалось не таким большим на основном запросе... всегото минуты 4 отрабатывал, что ок вполне. (раньше секунд 40) |
|||
14
AMKahm
17.04.19
✎
13:26
|
думаю что с vk_hook можно поменять на свою временную таблицу, заполненную верными значениями
но vk_hook работает только в режиме совместимости 80 (2000) нет ли где версии vk_hook для 90+ |
|||
15
AMKahm
17.04.19
✎
13:32
|
все, нашел версию 2.0.0.31
|
|||
16
Ёпрст
17.04.19
✎
14:42
|
Проще переписать на прямой запрос
|
|||
17
Ёпрст
17.04.19
✎
14:43
|
Можешь еще попробовать так, через Список.Принадлежит = 1 в тесте запроса (не помню синтаксис какой там у списка значения)
|
|||
18
AMKahm
17.04.19
✎
15:02
|
(16) ну да, в этом отчете все остальное уже на прямых
(17) (СписокФильтрТекущийДокумент.Принадлежит(ТекущийДокумент) = 1) работает отлично... в профайлере это конечно выглядит так себе... но работает много быстрей ВключитьSQL(0) |
|||
19
Ёпрст
17.04.19
✎
15:11
|
(18) попробуй еще массив использовать, заместо списка значения..Единственное, размерность нужно задавать :(
|
|||
20
Злопчинский
17.04.19
✎
16:11
|
(18) через СЗ.НайтиЗначение(ТвойДокумент)<>0
,eltn tot ,scnhtt |
|||
21
AMKahm
17.04.19
✎
16:40
|
(20) спасиб
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |