|   |   | 
| 
 | v7: Условие в запросе через 2 точки | ☑ | ||
|---|---|---|---|---|
| 0
    
        Franchiser 08.05.18✎ 10:06 | 
        Есть универсальный отчёт по регистру (доработанный), заметил странное поведение запроса. В случае когда ставится условие, например, на реквизит измерения регистра, то если это измерение идёт в группировке первым по счету то результат корректный, если же последним то результат пустой. Профайлер показывает, что условие через 2 точки вообще не идёт в SQL, т.е. видимо обрабатывается bkend.dll. установлен sql2008.     | |||
| 1
    
        Ёпрст гуру 08.05.18✎ 10:09 | 
        За 2 точки в условии, нужно пиз..ить металлической линейкой по пальчикам     | |||
| 2
    
        Ёпрст гуру 08.05.18✎ 10:10 | 
        Ну и в профайлере, наглядно видно, во что ЭТО превращается и почему этого не надо делать, никогда.     | |||
| 3
    
        Franchiser 08.05.18✎ 10:55 | 
        Да я бы сделал без 2 точек, но тогда теряется вся универсальность : запрос динамический с итогами, иначе нужно делать свою функцию.     | |||
| 4
    
        Franchiser 08.05.18✎ 11:00 | 
        Можно ли сделать динамическую функцию: то есть например в условии я генерирую название функции в зависимости от выбранного реквизита с передачей в нее родительского элемента в условии и далее эту функцию как-то создать в коде с применением выполнить().     | |||
| 5
    
        Ёпрст гуру 08.05.18✎ 11:17 | 
        (3) какая разница, как формируется текст запроса ?
 Создавай отдельную переменную, её и пихай в условие. Всё. | |||
| 6
    
        Franchiser 08.05.18✎ 11:51 | 
        (5) не понял идею, какую переменную? Я думал сделать функцию туда передавать параметры: имя реквизита условия, родительский объект, тип условия, значения условия.
 Сейчас пример динамического запроса выглядит так: КК = Регистр.Отгрузка.КК ; ЮридическоеЛицо = Регистр.Отгрузка.ЮридическоеЛицо; Контрагент = Регистр.Отгрузка.Контрагент; пзНДС = Регистр.Отгрузка.НДС; пзВсего = Регистр.Отгрузка.Всего; КонтрагентКодСистемы = Регистр.Отгрузка.Контрагент.КодСистемы; Группировка КК Без Групп; Группировка ЮридическоеЛицо Без Групп; Группировка Контрагент Без Групп; Функция СуммаНДС = Сумма(пзНДС); Функция СуммаВсего = Сумма(пзВсего); Условие (КК = гУсл1); Условие (ЮридическоеЛицо = гУсл2); Условие (СокрЛП(КонтрагентКодСистемы) >= СокрЛП(гУсл3)); Условие (СокрЛП(КонтрагентКодСистемы) < СокрЛП(гУсл4)); | |||
| 7
    
        Ёпрст гуру 08.05.18✎ 12:59 | 
        (6) 
 такую: |Переменная = Регистр.Отгрузка.Измерение.Реквизит.Реквизит.Реквизит....Реквизит; |Условие Переменная = Вася; | |||
| 8
    
        serpentt 08.05.18✎ 13:11 | 
        (4) Это?
 |Функция СчетчикСумм = Сумма(СчитаемЦену(Номенклатура,Количество,ДатаДокум)); | |||
| 9
    
        Franchiser 08.05.18✎ 16:05 | 
        (7) у меня такая переменная и прописана. Проблема в том что в регистре 3 измерения с типом справочника контрагенты и похоже из-за этого запрос глючит: реквизиты берутся из первой группировки с типом справочника Контрагенты.     | |||
| 10
    
        Franchiser 09.05.18✎ 00:33 | 
        Убрал из условия СокрЛП(), теперь все условия попадают в профайлер.
 Но проблема осталась: условие упорно ставится на реквизит из первой группировки типа Справочник Контрагенты вместо нужной. Кто нибудь встречался с такой проблемой: в регистре 3 измерения одинакового типа, но при интерпретации запроса 1с 7.7 в sql условие не устанавливается на реквизиты нужной группировки? | |||
| 11
    
        Злопчинский 09.05.18✎ 05:52 | 
        Я как-то в меру своей няшности думаю что условие ставится не на группировку, а на переменную запроса. А то что получилось в результате - уже группируется (суммируется).     | |||
| 12
    
        Злопчинский 09.05.18✎ 05:55 | 
        ..а вот от порядка Условий - стопудово результат будет зависеть имхо.
 это как применение двух условий даст разный результат 1. Условие(ПокраситьЗаборБелым) Условие(ПокраситьЗаборЧерным) Результат -> Черный забор 2. Условие(ПокраситьЗаборЧерным) Условие(ПокраситьЗаборБелым) Результат -> Белый забор | |||
| 13
    
        Злопчинский 09.05.18✎ 05:57 | 
        .. и посмотреть - при изменении порядка условий - в профайлере код запроса как меняется?     | |||
| 14
    
        Злопчинский 09.05.18✎ 05:57 | 
        ..а может я и не прав со своими измышлениями...
 ждем Епрста | |||
| 15
    
        Chameleon1980 09.05.18✎ 06:49 | 
        (14) ИМХО - не прав.
 забор - неудачный пример. может поесть и попить, например и наелся и напился оба условия выполнены :) С праздником всех !!! | |||
| 16
    
        Адинэснег 09.05.18✎ 07:03 | 
        (0) а в сырой восьмерке посаны не парятся
 1. пакет + ВНУТРЕННЕЕ 2. В() 3. ИМЕЮЩИЕ | |||
| 17
    
        Franchiser 09.05.18✎ 10:20 | 
        Запрос 1с 7.7:
 Период с ФормДатаНач по ФормДатаКон; ЮридическоеЛицо = Регистр.Отгрузка.ЮридическоеЛицо; Контрагент = Регистр.Отгрузка.Контрагент; пзКоличество = Регистр.Отгрузка.Количество; пзНДС = Регистр.Отгрузка.НДС; пзВсего = Регистр.Отгрузка.Всего; Комитент = Регистр.Отгрузка.Комитент; КомитентСимвольныйКод = Регистр.Отгрузка.Комитент.СимвольныйКод; КонтрагентКодСистемы = Регистр.Отгрузка.Контрагент.КодСистемы; Группировка ЮридическоеЛицо Без Групп; Группировка Контрагент Без Групп; Функция СуммаКоличество = Сумма(пзКоличество); Функция СуммаНДС = Сумма(пзНДС); Функция СуммаВсего = Сумма(пзВсего); Условие (Комитент = гУсл1); Условие (ЮридическоеЛицо = гУсл2); Условие (КомитентСимвольныйКод = гУсл3); Условие (КонтрагентКодСистемы > гУсл4); Профайлер (обрабатывает вместо кода системы контрагента код системы из Юр. Лица): select max(SC74.DESCR), max(SC74.PARENTID),RA1159.SP1162, max(SC74.DESCR), max(SC74.PARENTID),RA1159.SP1274, sum(RA1159.SP1166 ),sum(RA1159.SP1168 ),sum(RA1159.SP1167 ), min(RA1159.SP1166 ), min(RA1159.SP1168 ), min(RA1159.SP1167 ), min(RA1159.SP1161 ), min(SC74_1.SP103 ) from _1SJOURN(NOLOCK) left outer join RA1159(NOLOCK) on _1SJOURN.IDDOC=RA1159.IDDOC left outer join SC74(NOLOCK) on RA1159.SP1162=SC74.ID left outer join SC74 SC74_1(NOLOCK) on RA1159.SP1274=SC74_1.ID left outer join SC74 SC74_2(NOLOCK) on RA1159.SP1274=SC74_2.ID where _1SJOURN.RF1159 = 1 and _1SJOURN.DATE_TIME_IDDOC >= '20170130 0 0 ' and _1SJOURN.DATE_TIME_IDDOC < '20170131 0 0 ' and _1SJOURN.CLOSED&1 = 1 and (((RA1159.SP1161 =' B ')) and ((RA1159.SP1162 =' V ')) and ((SC74.SP103 >'1 '))) group by RA1159.SP1162,RA1159.SP1274 | |||
| 18
    
        Franchiser 09.05.18✎ 10:25 | 
        Запрос 1с 7.7
 Период с ФормДатаНач по ФормДатаКон; Контрагент = Регистр.Отгрузка.Контрагент; ЮридическоеЛицо = Регистр.Отгрузка.ЮридическоеЛицо; пзКоличество = Регистр.Отгрузка.Количество; пзНДС = Регистр.Отгрузка.НДС; пзВсего = Регистр.Отгрузка.Всего; Комитент = Регистр.Отгрузка.Комитент; КонтрагентКодСистемы = Регистр.Отгрузка.Контрагент.КодСистемы; Группировка Контрагент Без Групп; Группировка ЮридическоеЛицо Без Групп; Функция СуммаКоличество = Сумма(пзКоличество); Функция СуммаНДС = Сумма(пзНДС); Функция СуммаВсего = Сумма(пзВсего); Условие (Комитент = гУсл1); Условие (ЮридическоеЛицо = гУсл2); Условие (КонтрагентКодСистемы > гУсл3); Профайлер (тут условие отрабатывает корректно): select max(SC74.DESCR), max(SC74.PARENTID),RA1159.SP1274, max(SC74.DESCR), max(SC74.PARENTID),RA1159.SP1162,sum(RA1159.SP1166 ), sum(RA1159.SP1168 ),sum(RA1159.SP1167 ), min(RA1159.SP1166 ), min(RA1159.SP1168 ), min(RA1159.SP1167 ), min(RA1159.SP1161 ), min(SC74_3.SP103 ) from _1SJOURN(NOLOCK) left outer join RA1159(NOLOCK) on _1SJOURN.IDDOC=RA1159.IDDOC left outer join SC74(NOLOCK) on RA1159.SP1274=SC74.ID left outer join SC74 SC74_3(NOLOCK) on RA1159.SP1274=SC74_3.ID left outer join SC74 SC74_4(NOLOCK) on RA1159.SP1274=SC74_4.ID where _1SJOURN.RF1159 = 1 and _1SJOURN.DATE_TIME_IDDOC >= '20170130 0 0 ' and _1SJOURN.DATE_TIME_IDDOC < '20170131 0 0 ' and _1SJOURN.CLOSED&1 = 1 and (((RA1159.SP1161 =' B ')) and ((RA1159.SP1162 =' V ')) and ((SC74.SP103 >'1 '))) group by RA1159.SP1274,RA1159.SP1162 | |||
| 19
    
        Franchiser 09.05.18✎ 10:30 | 
        вообще реквизиты неправильно берутся для измерений: например, наименование берется также из первой группировки, хотя в отчете оно и не используется.     | |||
| 20
    
        Franchiser 09.05.18✎ 10:35 | 
        обратите внимание на связь RA1159.SP1274=SC74...
 Она во многих местах одинаковая | |||
| 21
    
        Franchiser 09.05.18✎ 10:45 | 
        Неправильно запросы указал:
 Запрос 1 Период с ФормДатаНач по ФормДатаКон; ЮридическоеЛицо = Регистр.Отгрузка.ЮридическоеЛицо; Контрагент = Регистр.Отгрузка.Контрагент; пзКоличество = Регистр.Отгрузка.Количество; пзНДС = Регистр.Отгрузка.НДС; пзВсего = Регистр.Отгрузка.Всего; КонтрагентКодСистемы = Регистр.Отгрузка.Контрагент.КодСистемы; Группировка ЮридическоеЛицо Без Групп; Группировка Контрагент Без Групп; Функция СуммаКоличество = Сумма(пзКоличество); Функция СуммаНДС = Сумма(пзНДС); Функция СуммаВсего = Сумма(пзВсего); Условие (ЮридическоеЛицо = гусл1); Условие (КонтрагентКодСистемы > гусли); | |||
| 22
    
        Franchiser 09.05.18✎ 10:47 | 
        хотя нет, все верно...     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |