|   |   | 
| 
 | Непонятки с запросом | ☑ | ||
|---|---|---|---|---|
| 0
    
        Nikoss 07.12.17✎ 12:19 | 
        "
 ВЫБРАТЬ РАЗРЕШЕННЫЕ ВзаиморасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент, ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента, ВзаиморасчетыСКонтрагентамиОстатки.Сделка КАК Сделка, ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр , ВЫБОР КОГДА &ПереключательЗадолженность = 1 ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 ИНАЧЕ Истина КОНЕЦ КАК ПОЛЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки() КАК ВзаиморасчетыСКонтрагентамиОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки() КАК ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.ДоговорКонтрагента И ВзаиморасчетыСКонтрагентамиОстатки.Сделка = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.Сделка И Истина " Вот такой запрос. Это кусок типового запроса по задолженности контрагентов, с некоторыми упрощениями. Так вот, если выполнять его как есть он выдает один результат, если убрать строки по выводу ПОЛЕЕЕЕЕЕ (ниже привожу их), другой результат. Как так может получаться? " //,ВЫБОР // КОГДА &ПереключательЗадолженность = 1 // ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 // ИНАЧЕ Истина //КОНЕЦ КАК ПОЛЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ " | |||
| 1
    
        Ёпрст гуру 07.12.17✎ 12:21 | 
        (0) И Истина, заменяется на условие в зависимости от &ПереключательЗадолженность ниже в коде.     | |||
| 2
    
        Nikoss 07.12.17✎ 12:35 | 
        (1) в оригинале да, но я уже оттуда убрал это условие (думал может параметр как-то не так обрабатывается во внутреннем соединение)
 Просто если в выбранные поля запроса добавить или убрать поле: ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 КАК ПОЛЕЕЕЕЕ меняется результат запроса | |||
| 3
    
        Nikoss 07.12.17✎ 12:37 | 
        Еще раз...
 Вот так: ВЫБРАТЬ РАЗРЕШЕННЫЕ ВзаиморасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент, ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента, ВзаиморасчетыСКонтрагентамиОстатки.Сделка КАК Сделка, ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр ,ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 КАК ПОЛЕЕЕЕЕЕЕЕЕ ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки() КАК ВзаиморасчетыСКонтрагентамиОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки() КАК ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.ДоговорКонтрагента И ВзаиморасчетыСКонтрагентамиОстатки.Сделка = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.Сделка И вот так: ВЫБРАТЬ РАЗРЕШЕННЫЕ ВзаиморасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент, ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента, ВзаиморасчетыСКонтрагентамиОстатки.Сделка КАК Сделка, ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр //,ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 КАК ПОЛЕЕЕЕЕЕЕЕЕ ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки() КАК ВзаиморасчетыСКонтрагентамиОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки() КАК ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.ДоговорКонтрагента И ВзаиморасчетыСКонтрагентамиОстатки.Сделка = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.Сделка Разные результаты запроса! О_о | |||
| 4
    
        DrShad 07.12.17✎ 12:40 | 
        естественно разные ибо в выборке нет одного из полей     | |||
| 5
    
        1Сергей 07.12.17✎ 12:43 | 
        (4) +1     | |||
| 6
    
        Nikoss 07.12.17✎ 12:44 | 
        (4)(5) разные по количеству строк     | |||
| 7
    
        DrShad 07.12.17✎ 12:47 | 
        (6) естественно     | |||
| 8
    
        mehfk 07.12.17✎ 12:47 | ||||
| 9
    
        dezss 07.12.17✎ 12:49 | 
        (6) естественно разные, так как появляется дробление по этому полю...
 вот таблица Имя Количество Вася 2 Петя 1 Если обращаться к ВТ остатков без имени, то будет одна строка с 3, если взять еще и имя, то будет 2 строки с 2 и 1. | |||
| 10
    
        dezss 07.12.17✎ 12:49 | 
        (9) + то, что это поле у тебя хранится в другой таблице, не имеет значения, дробление все равно будет.
 Почитай внимательней про ВТ остатков. | |||
| 11
    
        1Сергей 07.12.17✎ 13:02 | 
        Объясните мне смысл внуетреннего соединения двух одиннаковых таблиц?     | |||
| 12
    
        Nikoss 07.12.17✎ 13:08 | 
        (10) хорошо. Тогда по вашему, сумма должна быть одинаковая в любом случае, правильно? (если брать ваш пример, сумма и там и тут 3).
 Так вот у меня сумма отличается. (11) Это я уже упростил до максимума, чтобы отловить поле которое влияет. В типовом отчете так реализован отбор деб./кред.задолженности. В соединение стоит условие на параметр. Вот так: ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон,{Контрагент.* КАК Контрагент, Сделка.* КАК Сделка, ДоговорКонтрагента.* КАК ДоговорКонтрагента, Организация.* КАК Организация}) КАК ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.ДоговорКонтрагента И ВзаиморасчетыСКонтрагентамиОстатки.Сделка = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.Сделка И ВЫБОР КОГДА &ПереключательЗадолженность = 1 ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток>0 КОГДА &ПереключательЗадолженность = 2 ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток<0 ИНАЧЕ Истина КОНЕЦ | |||
| 13
    
        Nikoss 07.12.17✎ 13:11 | 
        Еще проще...
 " ВЫБРАТЬ РАЗРЕШЕННЫЕ СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток) КАК СуммаУпр ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.ДоговорКонтрагента И ВзаиморасчетыСКонтрагентамиОстатки.Сделка = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.Сделка И (ВЫБОР КОГДА &ПереключательЗадолженность = 1 ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 ИНАЧЕ ИСТИНА КОНЕЦ) " И " ВЫБРАТЬ РАЗРЕШЕННЫЕ СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток) КАК СуммаУпр ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(, ) КАК ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.ДоговорКонтрагента И ВзаиморасчетыСКонтрагентамиОстатки.Сделка = ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.Сделка //И (ВЫБОР // КОГДА &ПереключательЗадолженность = 1 // ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаВзаиморасчетовОстаток > 0 // ИНАЧЕ ИСТИНА //КОНЕЦ) " Разные суммы. Параметр &ПереключательЗадолженность = 0. | |||
| 14
    
        Nikoss 07.12.17✎ 13:19 | 
        + (13) У многих же есть этот регистр. Попробуйте у себя в консольке этот запрос сформировать и так и с комментариям. Результат одинаковый?     | |||
| 15
    
        GenAcid 07.12.17✎ 13:25 | 
        Так и должно быть. Причина - разный состав строк и соединение таблиц.     | |||
| 16
    
        hhhh 07.12.17✎ 13:34 | 
        (14) ведь у вас 2 строчки при соединении получается. Поэтому естественно будет СуммаУпр+СуммаУпр = СуммаУпр*2. Должна задвоиться у вас СуммаУпр в первом запросе.     | |||
| 17
    
        catena 07.12.17✎ 13:42 | 
        Потому что вылетают контрагенты, у которых СуммаВзаиморасчетовОстаток=0, а СуммаУпрОстаток<>0     | |||
| 18
    
        catena 07.12.17✎ 13:48 | 
        ДОбавь в запросе поле                     ВзаиморасчетыСКонтрагентамиОстаткиНужногоТипа.СуммаУпрОстаток
 и будет все совпадать и там и там. | |||
| 19
    
        Nikoss 07.12.17✎ 14:06 | 
        (16) не, тут внутренне соединение
 (17) именно! у меня вылетает одна сделка, именно так как вы написали, СуммаВзаиморасчетовОстаток=0, а СуммаУпрОстаток<>0. Только я не могу врубиться, почему так?? | |||
| 20
    
        catena 08.12.17✎ 06:53 | 
        (19)Видимо интерпретатор берет остатки только по используемому ресурсу, а по нему остатков и нет. Внутреннее соединение и режет эту строчку.     | |||
| 21
    
        DrZombi гуру 08.12.17✎ 07:12 | 
        (0) Оптимизатор от 1С оптимизирует, как бы :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |