|
Вопрос по СКД | ☑ | ||
---|---|---|---|---|
0
alexmobile
22.04.15
✎
07:58
|
Помогите разобраться
Вот текст запроса ВЫБРАТЬ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.Ответственный КАК Менеджер, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.Организация КАК Организация, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.Номер КАК Номер, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.Дата КАК Дата, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.Контрагент КАК Клиент, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.СуммаДокумента КАК СуммаЗаказ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка.Комментарий КАК Комментарий, ЕСТЬNULL(Оплаты.СуммаВзаиморасчетовОборот, 0) КАК Оплата, Оплаты.СуммаРеглОборот, Оплаты.СуммаВзаиморасчетовОборот ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, Движения, ВидРасчетовСКонтрагентом = ЗНАЧЕНИЕ(Перечисление.ВидыРасчетовСКонтрагентами.ПоРеализации)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ -1 * ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовОборот КАК СуммаВзаиморасчетовОборот, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка КАК Сделка, -1 * ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаРеглОборот КАК СуммаРеглОборот ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(, , Регистратор, ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты ГДЕ (ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер ИЛИ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее)) КАК Оплаты ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Сделка = Оплаты.Сделка Во вложенном запросе собираются записи со всего регистра, так и есть если запустить запрос не через СКД. Через СКД на вложенный запрос накладываются ограничения по периоду, как и в выборке по остаткам и оборотам. |
|||
1
alexmobile
22.04.15
✎
07:59
|
конфа УТ 10
|
|||
2
Вася Чез
22.04.15
✎
08:00
|
а в чем помочь разобраться?
|
|||
3
alexmobile
22.04.15
✎
08:01
|
почему в режиме СКД накладываются ограничения по периоду на вложенный запрос, если я явно этого не указываю.
|
|||
4
Вася Чез
22.04.15
✎
08:06
|
(3) может в настройках на вкладке "Параметры" задан период?
|
|||
5
alexmobile
22.04.15
✎
08:09
|
(4) да задан. во вложенном запросе параметры не используются
|
|||
6
alexmobile
22.04.15
✎
08:14
|
ВЫБРАТЬ
ОстаткиИОбороты.Сделка, ОстаткиИОбороты.Сделка.СуммаДокумента КАК СуммаЗаказ, ЕСТЬNULL(Оплаты.СуммаВзаиморасчетовОборот, 0) КАК Оплата ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, Движения, ) КАК ОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ -1 * Обороты.СуммаВзаиморасчетовОборот КАК СуммаВзаиморасчетовОборот, Обороты.Сделка КАК Сделка ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(, , Регистратор, ) КАК Обороты ГДЕ (Обороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер ИЛИ Обороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее)) КАК Оплаты ПО ОстаткиИОбороты.Сделка = Оплаты.Сделка Убрал лишнее чтобы читалось проще |
|||
7
Вася Чез
22.04.15
✎
08:17
|
(6) ну судя по коду вложенный запрос выполняется для каждой строки внешнего запроса, поэтому и есть период
|
|||
8
LordCMEPTb
22.04.15
✎
08:20
|
СКД сама добавляет в параметры виртуальной таблицы оборотов параметры "НачалоПериода" и "КонецПериода", а потому для таких ситуаций можно использовать костыль: добавить параметры виртуальной таблицы и заполнить их такими значениями, чтобы охватывался весь период (1980-3999 гг).
Добавить параметры можно либо в кострукторе запроса на закладке "Построитель" для виртуальной таблицы, либо в самом тексте "РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты((&ОченьНачалоПериода),(&ОченьКонецПериода) , Регистратор, )" |
|||
9
anaed
22.04.15
✎
08:20
|
датавремя(1,1,1) попробуй использовать в датах вложенных запросов
|
|||
10
alexmobile
22.04.15
✎
08:21
|
(7)Нет. Пробовал вложенный формировать во временную таблицу. Результат тот-же
|
|||
11
LordCMEPTb
22.04.15
✎
08:24
|
(8) ну всмысле через фигурные скобки
РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(({&ОченьНачалоПериода}),({&ОченьКонецПериода}) , Регистратор, ) |
|||
12
alexmobile
22.04.15
✎
08:24
|
(9) помогло
|
|||
13
Вася Чез
22.04.15
✎
08:27
|
(12) (11) а что нет другого решения, кроме этого жуткого костыля?
|
|||
14
alexmobile
22.04.15
✎
08:29
|
(11) да, я понял. поставил
Обороты({(ДАТАВРЕМЯ(1, 1, 1)) КАК Поле2}, {(ДАТАВРЕМЯ(1, 1, 1)) КАК Поле2}, Регистратор, ) все записи стали попадать. но есть еще другая проблема, если запись из вложенного запроса попадает в период верхнего запроса, то она создает дублирующую строку. |
|||
15
LordCMEPTb
22.04.15
✎
08:29
|
СКД - система для быстрого проектирования отчета, она как МТС, на шаг впереди.. вот только она не учитывает, что впереди может быть пропасть..
|
|||
16
alexmobile
22.04.15
✎
08:29
|
(13) я 2 часа убил, не нашел.
|
|||
17
alexmobile
22.04.15
✎
08:30
|
+(14) хотя явно указано левое соединение
|
|||
18
LordCMEPTb
22.04.15
✎
08:32
|
(14) а детальные записи по сделке уникальные или возможны дубли?
Судя по соединению такое возможно, если какая-то запись разбита на несколько |
|||
19
alexmobile
22.04.15
✎
08:34
|
(18) да, косяк. детальные записи неуникальны.
спасибо всем. |
|||
20
GenAcid
22.04.15
✎
08:44
|
(13) Правильное решение - снять галку "автозаполнение" в СКД и заполнить закладку "компоновка данных" в запросе или текстом явно описать нужные поля и отборы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |