| 
    
        
     
     | 
    
    
  | 
Вопрос по СКД | ☑ | ||
|---|---|---|---|---|
| 
    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) Правильное решение - снять галку "автозаполнение" в СКД и заполнить закладку "компоновка данных" в запросе или текстом явно описать нужные поля и отборы.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |