|
СКД Глюк платформы ? Параметры виртуальных таблиц в СКД и ОТБОР | ☑ | ||||||
---|---|---|---|---|---|---|---|---|
0
ProDeveloper
29.05.12
✎
17:02
|
Уважаемые ответьте на такой вопрос. Везде утверждается что если при написании запроса в СКД использовать конструкцию {} в параметрах виртуальных таблиц, то СКД сгенерирует запрос таким образом, что сделанный мною отбор в интерфейсе отчета, обязательно попадет в качестве условия в параметры виртуальной таблицы. Ну чтож я проверил, и такое ощущение что этого не происходит, сперва я написал отчет, где в запросе в параметрах виртуальных таблиц жестко задано условие через &Параметр, потом переписал запрос с использованием конструкции {}, разница по производительности просто небо и земля! Такое ощущение что конструкция {} не работает так как должна, потому что по производительности это тоже самое, что сперва получить все записи таблицы, а уж потом на неё наложить условие ГДЕ.
Примеры: Производительность: 1 Вариант время формирования отчета = 3 сек 2 Вариант время формирования отчета > 20 сек 1 Вариант - В параметрах виртуальных таблиц в качестве условий используется обычные параметры -------------------------------------------------------------------------------------------------------------------------------------------------- ВЫБРАТЬ РАЗРЕШЕННЫЕ ПродажиОбороты.Период, ПродажиОбороты.Регистратор КАК Регистратор, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента, ПродажиОбороты.ДокументПродажи КАК ДокументПродажи, ПродажиОбороты.Подразделение КАК Подразделение, ПродажиОбороты.Организация КАК Организация, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.ДопАналитикаОстатков КАК ДопАналитикаОстатков, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.СтоимостьОборот, ПродажиОбороты.СтоимостьБезСкидокОборот, ПродажиОбороты.НДСОборот, 0 КАК Затрата ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.Продажи.Обороты( &НачалоПериода, &КонецПериода, Регистратор, Организация В (&Организация) И Подразделение В ИЕРАРХИИ (&Подразделение) И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КРАТАтхЗатратыНаПродажуОбороты.Период, КРАТАтхЗатратыНаПродажуОбороты.Регистратор, КРАТАтхЗатратыНаПродажуОбороты.Номенклатура, КРАТАтхЗатратыНаПродажуОбороты.ХарактеристикаНоменклатуры, КРАТАтхЗатратыНаПродажуОбороты.ЗаказПокупателя, КРАТАтхЗатратыНаПродажуОбороты.ДоговорКонтрагента, КРАТАтхЗатратыНаПродажуОбороты.ДокументПродажи, КРАТАтхЗатратыНаПродажуОбороты.Подразделение, КРАТАтхЗатратыНаПродажуОбороты.Организация, КРАТАтхЗатратыНаПродажуОбороты.Контрагент, КРАТАтхЗатратыНаПродажуОбороты.ДопАналитикаОстатков, 0, 0, 0, 0, КРАТАтхЗатратыНаПродажуОбороты.СуммаОборот ИЗ РегистрНакопления.КРАТАтхЗатратыНаПродажу.Обороты( &НачалоПериода, &КонецПериода, Регистратор, ДоговорКонтрагента.ВидВзаиморасчетов = &ПремииКлиентам И Организация В (&Организация) И Подразделение В ИЕРАРХИИ (&Подразделение) И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК КРАТАтхЗатратыНаПродажуОбороты ИНДЕКСИРОВАТЬ ПО Регистратор, Номенклатура, ХарактеристикаНоменклатуры, ДопАналитикаОстатков ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.Период, Продажи.Регистратор, Продажи.Номенклатура, Продажи.ХарактеристикаНоменклатуры, КРАТАДопАналитикаОстатков.Тара, КРАТАДопАналитикаОстатков.Фасовка, КРАТАДопАналитикаОстатков.Концентрация, Продажи.ЗаказПокупателя, Продажи.ДоговорКонтрагента, Продажи.ДокументПродажи, Продажи.Подразделение, Продажи.Организация, Продажи.Контрагент, Продажи.ДопАналитикаОстатков, ЕСТЬNULL(Продажи.КоличествоОборот, 0) КАК КоличествоПродажи, ЕСТЬNULL(Продажи.СтоимостьОборот, 0) КАК СуммаПродажи, ВЫБОР КОГДА ПродажиСебестоимостьОбороты.КоличествоОборот > 0 ТОГДА ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) / ПродажиСебестоимостьОбороты.КоличествоОборот * ЕСТЬNULL(Продажи.КоличествоОборот, 0) ИНАЧЕ ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) КОНЕЦ КАК Себестоимость, ЕСТЬNULL(Продажи.Затрата, 0) КАК Затрата, ЕСТЬNULL(Продажи.СтоимостьБезСкидокОборот, 0) КАК СуммаПродажиБезСкидок, ЕСТЬNULL(Продажи.НДСОборот, 0) КАК НДССПродажи ИЗ Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КРАТАДопАналитикаОстатков КАК КРАТАДопАналитикаОстатков ПО Продажи.ДопАналитикаОстатков = КРАТАДопАналитикаОстатков.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты( &НачалоПериода, &КонецПериода, Регистратор, (Номенклатура, ХарактеристикаНоменклатуры) В (ВЫБРАТЬ РАЗЛИЧНЫЕ Продажи.Номенклатура, Продажи.ХарактеристикаНоменклатуры ИЗ Продажи КАК Продажи)) КАК ПродажиСебестоимостьОбороты ПО Продажи.Номенклатура = ПродажиСебестоимостьОбороты.Номенклатура И Продажи.ХарактеристикаНоменклатуры = ПродажиСебестоимостьОбороты.ХарактеристикаНоменклатуры И Продажи.Регистратор = ПродажиСебестоимостьОбороты.Регистратор И Продажи.ДопАналитикаОстатков = ПродажиСебестоимостьОбороты.ДопАналитикаОстатков 2 Вариант - В параметрах виртуальных таблиц в качестве условий используется конструкция {}, АВТОЗАПОЛНЕНИЕ = ЛОЖЬ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ВЫБРАТЬ РАЗРЕШЕННЫЕ ПродажиОбороты.Период КАК Период, ПродажиОбороты.Регистратор КАК Регистратор, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента, ПродажиОбороты.ДокументПродажи КАК ДокументПродажи, ПродажиОбороты.Подразделение КАК Подразделение, ПродажиОбороты.Организация КАК Организация, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.ДопАналитикаОстатков КАК ДопАналитикаОстатков, ПродажиОбороты.КоличествоОборот КАК КоличествоОборот, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот, ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот, ПродажиОбороты.НДСОборот КАК НДСОборот, 0 КАК Затрата ПОМЕСТИТЬ Продажи {ВЫБРАТЬ Период, Регистратор.*, Номенклатура.*, ХарактеристикаНоменклатуры.*, ЗаказПокупателя.*, ДоговорКонтрагента.*, ДокументПродажи.*, Подразделение.*, Организация.*, Контрагент.*, ДопАналитикаОстатков.*, КоличествоОборот, СтоимостьОборот, СтоимостьБезСкидокОборот, НДСОборот, Затрата} ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, {(Организация).*, (Подразделение).*, (Номенклатура).*}) КАК ПродажиОбороты {ГДЕ ПродажиОбороты.Период, ПродажиОбороты.Регистратор.*, ПродажиОбороты.Номенклатура.*, ПродажиОбороты.ХарактеристикаНоменклатуры.*, ПродажиОбороты.ЗаказПокупателя.*, ПродажиОбороты.ДоговорКонтрагента.*, ПродажиОбороты.ДокументПродажи.*, ПродажиОбороты.Подразделение.*, ПродажиОбороты.Организация.*, ПродажиОбороты.Контрагент.*, ПродажиОбороты.ДопАналитикаОстатков.*, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.СтоимостьОборот, ПродажиОбороты.СтоимостьБезСкидокОборот, ПродажиОбороты.НДСОборот, (0) КАК Затрата} ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КРАТАтхЗатратыНаПродажуОбороты.Период, КРАТАтхЗатратыНаПродажуОбороты.Регистратор, КРАТАтхЗатратыНаПродажуОбороты.Номенклатура, КРАТАтхЗатратыНаПродажуОбороты.ХарактеристикаНоменклатуры, КРАТАтхЗатратыНаПродажуОбороты.ЗаказПокупателя, КРАТАтхЗатратыНаПродажуОбороты.ДоговорКонтрагента, КРАТАтхЗатратыНаПродажуОбороты.ДокументПродажи, КРАТАтхЗатратыНаПродажуОбороты.Подразделение, КРАТАтхЗатратыНаПродажуОбороты.Организация, КРАТАтхЗатратыНаПродажуОбороты.Контрагент, КРАТАтхЗатратыНаПродажуОбороты.ДопАналитикаОстатков, 0, 0, 0, 0, КРАТАтхЗатратыНаПродажуОбороты.СуммаОборот ИЗ РегистрНакопления.КРАТАтхЗатратыНаПродажу.Обороты(&НачалоПериода, &КонецПериода, Регистратор, {(Организация).*, (Подразделение).*, (Номенклатура).*}) КАК КРАТАтхЗатратыНаПродажуОбороты {ГДЕ КРАТАтхЗатратыНаПродажуОбороты.Период, КРАТАтхЗатратыНаПродажуОбороты.Регистратор.*, КРАТАтхЗатратыНаПродажуОбороты.Номенклатура.*, КРАТАтхЗатратыНаПродажуОбороты.ХарактеристикаНоменклатуры.*, КРАТАтхЗатратыНаПродажуОбороты.ЗаказПокупателя.*, КРАТАтхЗатратыНаПродажуОбороты.ДоговорКонтрагента.*, КРАТАтхЗатратыНаПродажуОбороты.ДокументПродажи.*, КРАТАтхЗатратыНаПродажуОбороты.Подразделение.*, КРАТАтхЗатратыНаПродажуОбороты.Организация.*, КРАТАтхЗатратыНаПродажуОбороты.Контрагент.*, КРАТАтхЗатратыНаПродажуОбороты.ДопАналитикаОстатков.*, (0) КАК Затрата, КРАТАтхЗатратыНаПродажуОбороты.СуммаОборот} ИНДЕКСИРОВАТЬ ПО Регистратор, Номенклатура, ХарактеристикаНоменклатуры, ДопАналитикаОстатков ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.Период КАК Период, Продажи.Регистратор КАК Регистратор, Продажи.Номенклатура КАК Номенклатура, Продажи.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, КРАТАДопАналитикаОстатков.Тара КАК Тара, КРАТАДопАналитикаОстатков.Фасовка КАК Фасовка, КРАТАДопАналитикаОстатков.Концентрация КАК Концентрация, Продажи.ЗаказПокупателя КАК ЗаказПокупателя, Продажи.ДоговорКонтрагента КАК ДоговорКонтрагента, Продажи.ДокументПродажи КАК ДокументПродажи, Продажи.Подразделение КАК Подразделение, Продажи.Организация КАК Организация, Продажи.Контрагент КАК Контрагент, Продажи.ДопАналитикаОстатков КАК ДопАналитикаОстатков, ЕСТЬNULL(Продажи.КоличествоОборот, 0) КАК КоличествоПродажи, ЕСТЬNULL(Продажи.СтоимостьОборот, 0) КАК СуммаПродажи, ВЫБОР КОГДА ПродажиСебестоимостьОбороты.КоличествоОборот > 0 ТОГДА ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) / ПродажиСебестоимостьОбороты.КоличествоОборот * ЕСТЬNULL(Продажи.КоличествоОборот, 0) ИНАЧЕ ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) КОНЕЦ КАК Себестоимость, ЕСТЬNULL(Продажи.Затрата, 0) КАК Затрата, ЕСТЬNULL(Продажи.СтоимостьБезСкидокОборот, 0) КАК СуммаПродажиБезСкидок, ЕСТЬNULL(Продажи.НДСОборот, 0) КАК НДССПродажи {ВЫБРАТЬ Период, Регистратор.*, Номенклатура.*, ХарактеристикаНоменклатуры.*, Тара.*, Фасовка, Концентрация, ЗаказПокупателя.*, ДоговорКонтрагента.*, ДокументПродажи.*, Подразделение.*, Организация.*, Контрагент.*, ДопАналитикаОстатков.*, КоличествоПродажи, СуммаПродажи, Себестоимость, Затрата, СуммаПродажиБезСкидок, НДССПродажи} ИЗ Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КРАТАДопАналитикаОстатков КАК КРАТАДопАналитикаОстатков ПО Продажи.ДопАналитикаОстатков = КРАТАДопАналитикаОстатков.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты( &НачалоПериода, &КонецПериода, Регистратор, (Номенклатура, ХарактеристикаНоменклатуры) В (ВЫБРАТЬ РАЗЛИЧНЫЕ Продажи.Номенклатура, Продажи.ХарактеристикаНоменклатуры ИЗ Продажи КАК Продажи) {(Организация).*, (Подразделение).*, (Номенклатура).*}) КАК ПродажиСебестоимостьОбороты ПО Продажи.Номенклатура = ПродажиСебестоимостьОбороты.Номенклатура И Продажи.ХарактеристикаНоменклатуры = ПродажиСебестоимостьОбороты.ХарактеристикаНоменклатуры И Продажи.Регистратор = ПродажиСебестоимостьОбороты.Регистратор И Продажи.ДопАналитикаОстатков = ПродажиСебестоимостьОбороты.ДопАналитикаОстатков {ГДЕ Продажи.Период, Продажи.Регистратор.*, Продажи.Номенклатура.*, Продажи.ХарактеристикаНоменклатуры.*, КРАТАДопАналитикаОстатков.Тара.*, КРАТАДопАналитикаОстатков.Фасовка, КРАТАДопАналитикаОстатков.Концентрация, Продажи.ЗаказПокупателя.*, Продажи.ДоговорКонтрагента.*, Продажи.ДокументПродажи.*, Продажи.Подразделение.*, Продажи.Организация.*, Продажи.Контрагент.*, Продажи.ДопАналитикаОстатков.*, (ЕСТЬNULL(Продажи.КоличествоОборот, 0)) КАК КоличествоПродажи, (ЕСТЬNULL(Продажи.СтоимостьОборот, 0)) КАК СуммаПродажи, (ВЫБОР КОГДА ПродажиСебестоимостьОбороты.КоличествоОборот > 0 ТОГДА ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) / ПродажиСебестоимостьОбороты.КоличествоОборот * ЕСТЬNULL(Продажи.КоличествоОборот, 0) ИНАЧЕ ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) КОНЕЦ) КАК Себестоимость, (ЕСТЬNULL(Продажи.Затрата, 0)) КАК Затрата, (ЕСТЬNULL(Продажи.СтоимостьБезСкидокОборот, 0)) КАК СуммаПродажиБезСкидок, (ЕСТЬNULL(Продажи.НДСОборот, 0)) КАК НДССПродажи} |
|||||||
1
ProDeveloper
29.05.12
✎
17:26
|
UP :)
|
|||||||
2
Fragster
гуру
29.05.12
✎
17:28
|
конструкция {} убирает автозаполнение на участке кода
СКД работает шикарно, конструкция {} не для этого |
|||||||
3
Fragster
гуру
29.05.12
✎
17:28
|
(2)+ вместо этого заполнение ручное
|
|||||||
5
Fragster
гуру
29.05.12
✎
17:31
|
покури реальный текст запросав СКД
|
|||||||
6
ProDeveloper
29.05.12
✎
20:48
|
UP
|
|||||||
7
ProDeveloper
30.05.12
✎
12:03
|
Итак нашел с другого форума следующее:
Вопрос: ---------------------------------------------------------------------- Привет всем. Платформа 8.2. Отчет на СКД. Набор данных запрос: ВЫБРАТЬ БухгалтерскийОборотыДтКт.Регистратор, БухгалтерскийОборотыДтКт.СчетДт, БухгалтерскийОборотыДтКт.СчетКт, БухгалтерскийОборотыДтКт.СуммаОборот ИЗ РегистрБухгалтерии.Бухгалтерский.ОборотыДтКт(&ДатаНачала, &ДатаОкончания, Авто, , , , , {(Организация В (&Организация) И Филиал В (&Филиал))}) КАК БухгалтерскийОборотыДтКт В параметрах виртуальной таблицы условие по Организации и Филиалу указано в фигурных скобках {}, для того, чтобы если параметры не заданы, условие чтобы не работало. Если не заданы оба параметра (флажок использование снят для обоих), то все работает. Если заданы оба параметра (флажок использование установлен для обоих), то работает. Если для Органзации установлен флажок использования, а для Филиала - нет, то ошибка: Ошибка исполнения отчета по причине: Ошибка получения данных по причине: Ошибка создания набора данных "НаборДанных1" по причине: Ошибка при исполнении запроса набора данных по причине: {(19, 20)}: Не задано значение параметра "Филиал" И Филиал В ( ---------------------------------------------------------------------- Ответы: 1) Пример но так: {(Организация.*) КАК Организация, (Филиал.*) КАК Филиал} 2) Но это, как я понимаю, не относится к параметрам виртуальной таблицы, а просто используется, если снят флажок Автозаполнение? Следовательно, это вроде бы не то, что нужно... 3) Ты не мог бы подробнее здесь? Если написать в параметрах виртуальной таблицы {(Организация.*) КАК Организация, (Филиал.*) КАК Филиал} то тогда параметра, ведь нет, параметр задается с символом &, следовательно, пользователь при необходимости не сможет выбрать этот параметр в настройках. 4) сможет выбрать в отборе быстром 5) Вроде бы начинает проясняться. Почитал еще на эту тему в руководстве разработчика. Получается, что указанные таким образом параметры появляются на вкладке Отбор, а не на вкладке Параметры, где я их ждал. Всем огромное спасибо! |
|||||||
8
ProDeveloper
30.05.12
✎
12:08
|
В итоге применимо для моего случая конструкция {(Организация).* КАК Организация, (Подразделение).* КАК Подразделение, (Номенклатура).* КАК Номенклатура} , должна была отработать при установленном типовом Отборе, точно так же как установка обычных параметров в условиях виртуальных таблиц, но замеры производительности это опровергают ! Господа есть мысли по этому поводу ?
|
|||||||
9
zzhiraf
30.05.12
✎
12:09
|
(2) Нет, не убирает
СКД работает шикарно, конструкция {} не для этого |
|||||||
10
ProDeveloper
30.05.12
✎
12:57
|
Господа проверил с помощью внешний обработки (КонсольОтчетовСКД+) которая показывает реальный текст запроса который уходит от СКД на сервер, все работает отлично конструкция {(Организация).* КАК Организация, (Подразделение).* КАК Подразделение, (Номенклатура).* КАК Номенклатура} преобразуется в условие в параметрах виртуальной таблицы, но данная тема работает на простом примере взял одну таблицу РН.ПродажиОбороты, видимо в моем случае при сложном запросе который состоит из пакетов да ещё с объеденением эта тема не проходит.
|
|||||||
11
ProDeveloper
30.05.12
✎
12:59
|
Конструкция для этого и работает шикарррно, просто у меня нетривиальный запрос, где эта тема не проходит.
СКД работает шикарно, конструкция {} не для этого |
|||||||
12
ProDeveloper
30.05.12
✎
13:24
|
Причем мой большой нетривиальный запрос в (КонсолиОтчетовСКД+) с такой конструкцией {(Организация).* КАК Организация, (Подразделение).* КАК Подразделение, (Номенклатура).* КАК Номенклатура} преобразуется везде как надо в РегистрНакопления.Продажи.Обороты(&П, &П2, Регистратор, ((Организация = &П3) И Подразделение В ИЕРАРХИИ(&П4)) И Номенклатура = &П5) КАК ПродажиОбороты. Но видимо СУБД его "оптимизирует" не лучшим образом поэтому строится он значительно дольше чем запрос через обычные параметры, хотя внешне все тоже самое, довольно странно.
|
|||||||
13
Defender aka LINN
30.05.12
✎
13:28
|
(11) Учите матчасть, все там работает как положено.
Ну и за неимением правильного варианта: 3. СКД работает шикарно, а про {} иди читай мануал! |
|||||||
14
ProDeveloper
30.05.12
✎
13:30
|
(13) В том то и дело что матчасть читал, работает все правильно, объясните тогда разницу в производительности ?
|
|||||||
15
hhhh
30.05.12
✎
13:36
|
(14) наверно в дручих частях запроса ты навоял чего-то. Блок {ГДЕ ... } точно выбросил или вместе с ним фигачишь?
|
|||||||
16
ProDeveloper
30.05.12
✎
13:48
|
Для скептиков ниже выкладываю два запроса для сравнения производительности:
1 Вариант через конструкцию {} Продажи Параметры данных: "НачалоПериода = 01.01.2012 0:00:00 КонецПериода = 31.12.2012 0:00:00" Отбор: Организация Равно "Кое какая Организация" Время выполнения (с): 18.299 НаборДанных1 "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПродажиОбороты.Период КАК Период, ПродажиОбороты.Регистратор КАК Регистратор, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента, ПродажиОбороты.ДокументПродажи КАК ДокументПродажи, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.ДопАналитикаОстатков КАК ДопАналитикаОстатков, ПродажиОбороты.КоличествоОборот КАК КоличествоОборот, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот, 0 КАК Затрата ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.Продажи.Обороты(&П, &П2, Регистратор, Организация = &П3) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КРАТАтхЗатратыНаПродажуОбороты.Период, КРАТАтхЗатратыНаПродажуОбороты.Регистратор, КРАТАтхЗатратыНаПродажуОбороты.Номенклатура, КРАТАтхЗатратыНаПродажуОбороты.ХарактеристикаНоменклатуры, КРАТАтхЗатратыНаПродажуОбороты.ДоговорКонтрагента, КРАТАтхЗатратыНаПродажуОбороты.ДокументПродажи, КРАТАтхЗатратыНаПродажуОбороты.Контрагент, КРАТАтхЗатратыНаПродажуОбороты.ДопАналитикаОстатков, 0, 0, КРАТАтхЗатратыНаПродажуОбороты.СуммаОборот ИЗ РегистрНакопления.КРАТАтхЗатратыНаПродажу.Обороты(&П, &П2, Регистратор, (ДоговорКонтрагента.ВидВзаиморасчетов = &ПремииКлиентам) И Организация = &П3) КАК КРАТАтхЗатратыНаПродажуОбороты ИНДЕКСИРОВАТЬ ПО Регистратор, Номенклатура, ХарактеристикаНоменклатуры, ДопАналитикаОстатков ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.Период КАК Период, Продажи.Регистратор КАК Регистратор, Продажи.Номенклатура КАК Номенклатура, КРАТАДопАналитикаОстатков.Тара КАК Тара, КРАТАДопАналитикаОстатков.Фасовка КАК Фасовка, КРАТАДопАналитикаОстатков.Концентрация КАК Концентрация, Продажи.Контрагент КАК Контрагент, ЕСТЬNULL(Продажи.КоличествоОборот, 0) КАК КоличествоПродажи, ЕСТЬNULL(Продажи.СтоимостьОборот, 0) КАК СуммаПродажи, ВЫБОР КОГДА ПродажиСебестоимостьОбороты.КоличествоОборот > 0 ТОГДА ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) / ПродажиСебестоимостьОбороты.КоличествоОборот * ЕСТЬNULL(Продажи.КоличествоОборот, 0) ИНАЧЕ ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) КОНЕЦ КАК Себестоимость, ЕСТЬNULL(Продажи.Затрата, 0) КАК Затрата, Продажи.ДоговорКонтрагента.ВидВзаиморасчетов КАК ДоговорКонтрагентаВидВзаиморасчетов, Продажи.ДокументПродажи.Комментарий КАК ДокументПродажиКомментарий, Продажи.ДокументПродажи.Ответственный.ФизЛицо КАК ДокументПродажиОтветственныйФизЛицо, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.ДокументПродажи.Ответственный.ФизЛицо) КАК ДокументПродажиОтветственныйФизЛицоПредставление, Продажи.ДокументПродажи.ПодразделениеОрганизации КАК ДокументПродажиПодразделениеОрганизации, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.ДокументПродажи.ПодразделениеОрганизации) КАК ДокументПродажиПодразделениеОрганизацииПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Контрагент) КАК КонтрагентПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Номенклатура) КАК НоменклатураПредставление, Продажи.Номенклатура.КРАТАТрейдМарка КАК НоменклатураКРАТАТрейдМарка, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Номенклатура.КРАТАТрейдМарка) КАК НоменклатураКРАТАТрейдМаркаПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Регистратор) КАК РегистраторПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(КРАТАДопАналитикаОстатков.Тара) КАК ТараПредставление ИЗ Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КРАТАДопАналитикаОстатков КАК КРАТАДопАналитикаОстатков ПО Продажи.ДопАналитикаОстатков = КРАТАДопАналитикаОстатков.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты( &П, &П2, Регистратор, ((Номенклатура, ХарактеристикаНоменклатуры) В (ВЫБРАТЬ РАЗЛИЧНЫЕ Продажи.Номенклатура, Продажи.ХарактеристикаНоменклатуры ИЗ Продажи КАК Продажи)) И Организация = &П3) КАК ПродажиСебестоимостьОбороты ПО Продажи.Номенклатура = ПродажиСебестоимостьОбороты.Номенклатура И Продажи.ХарактеристикаНоменклатуры = ПродажиСебестоимостьОбороты.ХарактеристикаНоменклатуры И Продажи.Регистратор = ПродажиСебестоимостьОбороты.Регистратор И Продажи.ДопАналитикаОстатков = ПродажиСебестоимостьОбороты.ДопАналитикаОстатков" 2 Вариант через обычные параметры в условиях параметров виртуальных таблиц ПродажиБыстро Параметры данных: "НачалоПериода = 01.01.2012 0:00:00 КонецПериода = 31.12.2012 0:00:00 Организация = "Кое какая организация" Подразделение = Номенклатура =" Отбор: Время выполнения (с): 6.94 НаборДанных1 "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПродажиОбороты.Период КАК Период, ПродажиОбороты.Регистратор КАК Регистратор, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента, ПродажиОбороты.ДокументПродажи КАК ДокументПродажи, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.ДопАналитикаОстатков КАК ДопАналитикаОстатков, ПродажиОбороты.КоличествоОборот КАК КоличествоОборот, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот, 0 КАК Затрата ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.Продажи.Обороты( &П, &П2, Регистратор, Организация В (&Организация) И Подразделение В ИЕРАРХИИ (&Подразделение) И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КРАТАтхЗатратыНаПродажуОбороты.Период, КРАТАтхЗатратыНаПродажуОбороты.Регистратор, КРАТАтхЗатратыНаПродажуОбороты.Номенклатура, КРАТАтхЗатратыНаПродажуОбороты.ХарактеристикаНоменклатуры, КРАТАтхЗатратыНаПродажуОбороты.ЗаказПокупателя, КРАТАтхЗатратыНаПродажуОбороты.ДоговорКонтрагента, КРАТАтхЗатратыНаПродажуОбороты.ДокументПродажи, КРАТАтхЗатратыНаПродажуОбороты.Контрагент, КРАТАтхЗатратыНаПродажуОбороты.ДопАналитикаОстатков, 0, 0, КРАТАтхЗатратыНаПродажуОбороты.СуммаОборот ИЗ РегистрНакопления.КРАТАтхЗатратыНаПродажу.Обороты( &П, &П2, Регистратор, ДоговорКонтрагента.ВидВзаиморасчетов = &ПремииКлиентам И Организация В (&Организация) И Подразделение В ИЕРАРХИИ (&Подразделение) И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК КРАТАтхЗатратыНаПродажуОбороты ИНДЕКСИРОВАТЬ ПО Регистратор, Номенклатура, ХарактеристикаНоменклатуры, ДопАналитикаОстатков ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.Период КАК Период, Продажи.Регистратор КАК Регистратор, Продажи.Номенклатура КАК Номенклатура, КРАТАДопАналитикаОстатков.Тара КАК Тара, КРАТАДопАналитикаОстатков.Фасовка КАК Фасовка, КРАТАДопАналитикаОстатков.Концентрация КАК Концентрация, Продажи.Контрагент КАК Контрагент, ЕСТЬNULL(Продажи.КоличествоОборот, 0) КАК КоличествоПродажи, ЕСТЬNULL(Продажи.СтоимостьОборот, 0) КАК СуммаПродажи, ВЫБОР КОГДА ПродажиСебестоимостьОбороты.КоличествоОборот > 0 ТОГДА ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) / ПродажиСебестоимостьОбороты.КоличествоОборот * ЕСТЬNULL(Продажи.КоличествоОборот, 0) ИНАЧЕ ЕСТЬNULL(ПродажиСебестоимостьОбороты.СтоимостьОборот, 0) КОНЕЦ КАК Себестоимость, ЕСТЬNULL(Продажи.Затрата, 0) КАК Затрата, Продажи.ДоговорКонтрагента.ВидВзаиморасчетов КАК ДоговорКонтрагентаВидВзаиморасчетов, Продажи.ДокументПродажи.Комментарий КАК ДокументПродажиКомментарий, Продажи.ДокументПродажи.Ответственный.ФизЛицо КАК ДокументПродажиОтветственныйФизЛицо, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.ДокументПродажи.Ответственный.ФизЛицо) КАК ДокументПродажиОтветственныйФизЛицоПредставление, Продажи.ДокументПродажи.ПодразделениеОрганизации КАК ДокументПродажиПодразделениеОрганизации, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.ДокументПродажи.ПодразделениеОрганизации) КАК ДокументПродажиПодразделениеОрганизацииПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Контрагент) КАК КонтрагентПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Номенклатура) КАК НоменклатураПредставление, Продажи.Номенклатура.КРАТАТрейдМарка КАК НоменклатураКРАТАТрейдМарка, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Номенклатура.КРАТАТрейдМарка) КАК НоменклатураКРАТАТрейдМаркаПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(Продажи.Регистратор) КАК РегистраторПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(КРАТАДопАналитикаОстатков.Тара) КАК ТараПредставление ИЗ Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КРАТАДопАналитикаОстатков КАК КРАТАДопАналитикаОстатков ПО Продажи.ДопАналитикаОстатков = КРАТАДопАналитикаОстатков.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты( &П, &П2, Регистратор, (Номенклатура, ХарактеристикаНоменклатуры) В (ВЫБРАТЬ РАЗЛИЧНЫЕ Продажи.Номенклатура, Продажи.ХарактеристикаНоменклатуры ИЗ Продажи КАК Продажи)) КАК ПродажиСебестоимостьОбороты ПО Продажи.Номенклатура = ПродажиСебестоимостьОбороты.Номенклатура И Продажи.ХарактеристикаНоменклатуры = ПродажиСебестоимостьОбороты.ХарактеристикаНоменклатуры И Продажи.Регистратор = ПродажиСебестоимостьОбороты.Регистратор И Продажи.ДопАналитикаОстатков = ПродажиСебестоимостьОбороты.ДопАналитикаОстатков И (ПродажиСебестоимостьОбороты.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка) ИЛИ ПродажиСебестоимостьОбороты.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) ИЛИ Продажи.ЗаказПокупателя = ПродажиСебестоимостьОбороты.ЗаказПокупателя)" |
|||||||
17
ProDeveloper
30.05.12
✎
13:54
|
Второй запрос не полностью влез, но тем не менее разница по производительности в 3 раза !!!
|
|||||||
18
ProDeveloper
30.05.12
✎
13:57
|
И разница между запросами в СКД только лишь одна, в первом случае в параметрах виртуальных таблиц условия прописаны через конструкцию {(Организация).* КАК Организация, (Подразделение).* КАК Подразделение, (Номенклатура).* КАК Номенклатура} , во втором случае в параметрах виртуальных таблиц условия прописаны обычным способом через обычные параметры "Организация В (&Организация) И Подразделение В ИЕРАРХИИ (&Подразделение) И Номенклатура В ИЕРАРХИИ (&Номенклатура)"... В ЧЕМ ПОДВОХ ?
|
|||||||
19
ProDeveloper
30.05.12
✎
13:57
|
И разница между запросами в СКД только лишь одна, в первом случае в параметрах виртуальных таблиц условия прописаны через конструкцию {(Организация).* КАК Организация, (Подразделение).* КАК Подразделение, (Номенклатура).* КАК Номенклатура} , во втором случае в параметрах виртуальных таблиц условия прописаны обычным способом через обычные параметры "Организация В (&Организация) И Подразделение В ИЕРАРХИИ (&Подразделение) И Номенклатура В ИЕРАРХИИ (&Номенклатура)"... В чем подвох?
|
|||||||
20
ProDeveloper
30.05.12
✎
13:58
|
Sorry браузер тупанул, 2 раза отправил одно и тоже
|
|||||||
21
hhhh
30.05.12
✎
14:02
|
(19) может разные параметры еще? Результаты обоих запросов проверь.
|
|||||||
22
ProDeveloper
30.05.12
✎
14:06
|
(21) Все один в один, перепроверенно на стопицццот раз
|
|||||||
23
Fragster
гуру
30.05.12
✎
15:00
|
(18)(19) в первом случае отбор накладывается через отбор, во втором - через параметры
|
|||||||
24
ProDeveloper
30.05.12
✎
15:14
|
(23) Иди покури матчасть, привел специально два текста запроса уже из КонсолиОтчетовСКД+, который выдает реальный текст запроса после всех преобразований СКД над запросом, из чего следует что конструкция {} работает как надо, и то что ты налепишь в Отборах СКД, попадет в параметры виртуальных таблиц как условие
|
|||||||
25
Fragster
гуру
30.05.12
✎
15:39
|
(24) прочитай то, что я написал, еще раз, Про!
|
|||||||
26
ProDeveloper
30.05.12
✎
15:43
|
Остается понять почему такая разница в производительности. Для скептиков и "экспертов" могу порекоммендовать качнуть КонсольОтчетовСКД+ , нарисовать пошурику один отчет по РН.ПродажиОбороты с использованием конструкции {} и использовать отборы, и тут же нарисовать отчет по РН.ПродажиОбороты с использованием обычных параметров и убедится в том что разница по производительности есть, а реальные запросы на выходе от СКД один в один
|
|||||||
27
acsent
30.05.12
✎
15:55
|
(0) ты неудачник, такая твоя карма
|
|||||||
28
ProDeveloper
30.05.12
✎
16:05
|
Давайте по делу, без флуда
|
|||||||
29
Фауст
30.05.12
✎
16:13
|
Представь себя на месте компановки. У тебя два поля "Организация" одно в качестве параметра виртуальной таблицы, а второе в предложении "ГДЕ" какой отбор применять ? Дай разные имена этим отборам. Например пусть в полях вирт. таблицы параметр будет называться "ПараметрОрганизация"
|
|||||||
30
hhhh
30.05.12
✎
16:18
|
(28) а что, всё-таки не убрали {ГДЕ}. Ну вы приколист.
|
|||||||
31
ProDeveloper
30.05.12
✎
16:19
|
(30) Да убирал я {ГДЕ} ситуация не поменялась, уже все возможные варианты попробовал, на скорость полета не влияет, так и не взлетело !
|
|||||||
32
ProDeveloper
30.05.12
✎
16:22
|
(29) Я не хочу использовать вообще никаких параметров, хочу обойтись {(Организация).* КАК Организация)}, в итоге в КонсолиОтчетовСКД+ вижу что СКД сама сгенерировала запрос РН.ПродажиОборот(&П1, &П2, Регистратор, Организация = &П3) КАК Продажи, т.е. она взяла мой Отбор СКД по Организации и запихала его в Параметры виртуальных таблиц как условие (!) Но почему отчет то долго строится не пойму (((
|
|||||||
33
Fragster
гуру
30.05.12
✎
16:23
|
(29) не волнуйся, если сделать с одним названием - применит в обоих местах
|
|||||||
34
Fragster
гуру
30.05.12
✎
16:23
|
(32) внимательно сравни два запроса
|
|||||||
35
Fragster
гуру
30.05.12
✎
16:24
|
(34)+ два итоговых запроса, я имею ввиду
|
|||||||
36
ProDeveloper
30.05.12
✎
16:26
|
Могу прислать исходный текст запроса СКД и текст запроса который получается после того как СКД над ним поработает, может прояснит ситуацию
|
|||||||
37
Фауст
30.05.12
✎
16:30
|
Попробуй запрос который сгенерировала скд запихнуть в простую консоль запросов, посмотри как отработает, может скуль хулиганит...
|
|||||||
38
ProDeveloper
30.05.12
✎
16:37
|
Если запихнуть готовый запрос на выходе от СКД в консоль запросов, то там РН.ПродажиОбороты(&П1, &П2, Регистратор, Организация = &П3), в итоге задаем все три параметра и все супер. Видимо все таки СКД не заполняет сама параметр &П3 Организацией из Отбора. Непонятная ситуевина.
|
|||||||
39
Фауст
30.05.12
✎
16:42
|
И все таки я бы попробовал переименовать
|
|||||||
40
acsent
30.05.12
✎
16:46
|
зачем 2 раза отбор по организации: в вт и в где?
|
|||||||
41
ProDeveloper
30.05.12
✎
16:48
|
Как на мисту вставить код грамотно заглушкой подскажите. Пришлю целиком запрос. Там нету {ГДЕ}
|
|||||||
45
Лефмихалыч
30.05.12
✎
16:52
|
(0) иди учи матчасть, всё работает замечательно. У тебя запрос просто кривой и надо было галку "Автозаполнение" вырубить
|
|||||||
46
ssh2006
30.05.12
✎
16:52
|
(41) в медленном запросе у тебя нет в условии вт отбора по номенклатуре и подразделению
|
|||||||
47
ProDeveloper
30.05.12
✎
16:56
|
(45) Галку автозаполнения вырубал толку нет!
|
|||||||
48
ProDeveloper
30.05.12
✎
16:58
|
(46) В медленном запросе , сам запрос генерируется СКД, если бы стоял Отбор по номенклатуре и подразделению то СКД сгенерила бы запрос РН.ПродажиОборот(&П1,&П2, Регистратор, Организация = &П3 И Подразделение В ИЕРАРХИИ(&П4) И Номенклатура В ИЕРАРХИИ(&П5)) КАК Продажи
|
|||||||
49
ssh2006
30.05.12
✎
17:02
|
+(48) так поэтому он и медленнее, раз нет этого отбора. Откуда программа узнает что нужно сделать этот отбор, если ты его не задашь
|
|||||||
50
ProDeveloper
30.05.12
✎
17:10
|
(49) Погугли тему {} , в том то и дело что описываешь РН.ПродажиОбороты({&НачалоПериода}, {&КонецПериода}, Регистратор, {(Организация).* КАК Организация}) КАК Продажи и СКД сама сгенерит запрос РН.ПродажиОбороты(&П1, &П2, Регистратор, Организация = &П3), а &П3 возьмет из Отбора СКД, но почему то этого не происходит (((
|
|||||||
51
ProDeveloper
30.05.12
✎
17:11
|
Вот исходный запрос СКД
|
|||||||
52
ssh2006
30.05.12
✎
17:15
|
(50) с чего ты взял, что этого не происходит? В твоем итоговом запросе
РегистрНакопления.Продажи.Обороты(&П, &П2, Регистратор, Организация = &П3) А медленнее он из-за того что нет отбора по номенклатуре и подразделению, как во втором |
|||||||
53
ProDeveloper
30.05.12
✎
17:17
|
А вот этот запрос уже на выходе от СКД, подглядел через внешн. обработку КонсольОтчетовСКД+
|
|||||||
54
ProDeveloper
30.05.12
✎
17:19
|
(52) Погляди исходный запрос СКД и запрос на выходе от СКД, все там есть, а номенклатуры и подразделения не было потому что я отбор в СКД не делал по соответствующим измерениям.
|
|||||||
55
ProDeveloper
30.05.12
✎
17:20
|
(52) что ты на это скажешь ?
|
|||||||
56
ssh2006
30.05.12
✎
17:20
|
(54) в чем проблема тогда?
|
|||||||
57
ProDeveloper
30.05.12
✎
17:23
|
(56) Почему такая разница в производительности ? В варианте через обычные параметры указываешь группу номенклатуры ну например "Продукция химическая" и отчет строится секунд 10. А тоже самое делаешь через вариант №2 где в запросе конструкция {} и отчет строится минут 5-7. Почему?
|
|||||||
58
acsent
30.05.12
✎
17:25
|
файл, скуль?
|
|||||||
59
ProDeveloper
30.05.12
✎
17:26
|
Платформа 8.2.15.301 + SQL
|
|||||||
60
ssh2006
30.05.12
✎
17:26
|
(57) так ты же написал, что не указывал отбор, отсюда и разница:
", а номенклатуры и подразделения не было потому что я отбор в СКД не делал по соответствующим измерениям." |
|||||||
61
acsent
30.05.12
✎
17:27
|
результаты по данным то одинаковые?
|
|||||||
62
ProDeveloper
30.05.12
✎
17:29
|
(60) У меня терпение лопнет тебе объяснять. Все входные параметры полностью одинаковые !!! Результат отчета одинаков !!! Время построения отчетов очень сильно отличается !
|
|||||||
63
ProDeveloper
30.05.12
✎
17:30
|
(60) смотри два запроса которые я выложил в (51) и в (53)
|
|||||||
64
ssh2006
30.05.12
✎
17:31
|
(62) > входные параметры полностью одинаковые
Вот тебе объяснение, оно уже давалось выше: в варианте с {} чтобы попало в отбор вт нужно задавать отбор, а не параметры |
|||||||
65
ProDeveloper
30.05.12
✎
17:31
|
(61) Результаты одинаковые в обоих случаях, разница лишь во времени формирования отчетов
|
|||||||
66
Фауст
30.05.12
✎
17:32
|
выложи листинг быстрого запроса, который на выходе из СКД
|
|||||||
67
ProDeveloper
30.05.12
✎
17:34
|
(64) так и делаю в варианте {} нет никаких параметров Организация, Подразделение, Номенклатура, они задаются через ОТБОР СКД и это ОТБОРЫ а не параметры!!! А СКД сама генерирует текст запроса где в параметрах ВТ в условиях вместо {(Организация).* КАК Организация, (Подразделение).* КАК Подразделение, (Номенклатура).* КАК Номенклатура} встает просто Организация = &П3 И Подразделение В ИЕРАРХИИ(&П4) И Номенклатура В ИЕРАРХИИ(&П5)
|
|||||||
68
ssh2006
30.05.12
✎
17:37
|
(67) Настройки структуры СКД идентичны, проверь?
|
|||||||
69
ProDeveloper
30.05.12
✎
17:38
|
Вот быстрый вариант уже на выходе из СКД который через обычные параметры
|
|||||||
70
ProDeveloper
30.05.12
✎
17:38
|
(66) смотри (69)
|
|||||||
71
ProDeveloper
30.05.12
✎
17:39
|
(68) для чистоты эксперемента все делаю в одном отчете, все полностью ИДЕНТИЧНО !
|
|||||||
72
ProDeveloper
30.05.12
✎
17:40
|
(68) т.е. вся схема СКД совпадает 1 в 1 , меняю только участок кода в параметрах ВТ в условии
|
|||||||
73
hhhh
30.05.12
✎
17:42
|
(70) всё-таки сделайте нормально хотя бы один раз. У вас рассеянное внимание. Всё время нам разное подсовываете. То у вас Номенклатура В ИЕРАРХИИ, то НОменклатура = &П5. То вы включаете ее в отбор, то не включаете.Тоже самое с организацией и подразделениями. Почитайте ваши посты, у вас везде по-разному написано. Хотя и ежу понятно, что В ИЕРАРХИИ например будет работать в 10 раз медленнее, чем без Иерархии.
|
|||||||
74
ProDeveloper
30.05.12
✎
17:46
|
(73) изучите вопрос {}, и поймите что СКД генерирует запрос сама.
все полностью ИДЕНТИЧНОЕ, смотри медленный вариант Исходный запрос СКД (51) потом Запрос на выходе от СКД, который можно подглядеть через КонсольОтчетовСКД+ (53) и Быстрый вариант отчета сделанный просто через Параметры (69) |
|||||||
75
ProDeveloper
30.05.12
✎
17:48
|
(73) Если есть сомнения, скачайте КонсольОтчетовСКД+, накидайте простенький отчет ПродажиОбороты с использованием {} и Отбор, и тут же переделайте его в вариант без использования конструкции {}, а просто через обычные параметры и убедитесь сами что вариант через обычные параметры без использования конструкции {} работает в разы быстрее!
|
|||||||
76
ProDeveloper
30.05.12
✎
17:56
|
(73) Прошу прощения, сам только что попробовал, с простеньким вариантом все работает одинаково быстро (!) Видимо конструкция {} как-то глючит с пакетными запросами или с запросами с ОБЪЕДИНЕНИЕМ, других версий нет (
|
|||||||
77
ssh2006
30.05.12
✎
17:57
|
(76) глюков никаких нет, где-то ты напутал/ошибся
|
|||||||
78
ProDeveloper
30.05.12
✎
17:58
|
(77) Говорю же если с одной табличкой ПродажиОбороты накидать простенький вариант, то все работает как надо и одинаково быстро, но в моем случае конструкция {} видимо как то глючит с пакетными запросами + ОБЪЕДИНЕНИЕ
|
|||||||
79
ssh2006
30.05.12
✎
18:00
|
(78) факт "глюка" должен мотивировать тебя на поиск ошибки. 99% невнимательность, 1% - глюк
|
|||||||
80
ssh2006
30.05.12
✎
18:03
|
+ (79) разбей оба запроса. Оставь только первый из пакета и посмотри и т.д.
|
|||||||
81
ProDeveloper
30.05.12
✎
18:03
|
(79) Глюков полно, вот тебе пример о котором я сообщал в 1С, берешь ДинамическийСписок, открываешь конструктор запросов там нету вкладыша для создания пакетных запросов, однако если самому накидать запрос в другом конструкторе где с пакетными запросами все нормис, и скопировать оттуда текст запроса в ДинамическийСписок, то всё работает как надо.
|
|||||||
82
ssh2006
30.05.12
✎
18:05
|
(81) возьми только первые запросы из пакета и сравни
|
|||||||
83
ProDeveloper
30.05.12
✎
18:06
|
Ошибки точно нет, видать глюк какой то, есть подозрение что надо сделать не пакетными запросами , а через вложенный (!) который кстати ЗЛО, и тогда заработает как надо.
|
|||||||
84
HRom
30.05.12
✎
18:06
|
а у меня временные таблицы группировались в СКД, тогда когда не надо:
v8: В отчете на СКД пропадает одно значение... |
|||||||
85
ProDeveloper
30.05.12
✎
18:08
|
Так же выловил кучу глюков с самим конструктором, когда открытие запроса конструктором его ПОРТИТ сам запрос! Т.е. открыл запрос конструктором нажал "ОК" и все запрос уже корявый, поправил запрос сам ручками и все НОРМИС, и запомнил что туда конструктором лучше не лезть !
|
|||||||
86
МастерВопросов
30.05.12
✎
18:12
|
(85) да да, например скобки в условии "где" убирает.
И закоментированный код тоже, что бывает неудобно во время экспериментов. |
|||||||
87
ssh2006
30.05.12
✎
18:14
|
(83) > Ошибки точно нет
выясни, где "тормоз" - в первом запросе пакета? |
|||||||
88
ProDeveloper
30.05.12
✎
18:15
|
(87) Уже убегаю, завтра перепишу запрос с использованием вложенного запроса, а не через пакеты, есть подозрение что причина именно в этом (!) , если найду причину отпишусь
|
|||||||
89
ssh2006
30.05.12
✎
18:29
|
(88) лучше найди истинную причину, которая скорее всего какой-то недочет.
|
|||||||
90
ProDeveloper
31.05.12
✎
10:44
|
Итак причина найдена, сразу забегая вперед, конструкция {} работает как надо, и пакетные запросы и ОБЪЕДИНЕНИЕ в запросе непричем.
А причина тормозов в следующем - У меня есть схема СКД в которой 2 источника данных: 1 Источник ВЫБРАТЬ РАЗРЕШЕННЫЕ
2 Источник ВЫБРАТЬ
На вкладыше связи наборов данных СКД , следующее: Источник Приемник ВыражениеИсточник ВыражениеПриемник Параметр 1) НаборДанных1 НаборДанных2 Период Период Период 2) НаборДанных1 НаборДанных2 Номенклатура Номенклатура Номенклатура Смысл в чем, у меня есть табличка из 1 источника и я по каждой позиции связки (Период, Номенклатура) получаю из 2 источника Проект на каждую дату, способ описан вот здесь ---> http://1cskd.ru/2010/10/srez-poslednix-na-kazhduyu-datu-v-skd/ Если 2ой источник похерить, и отказаться от аналитики проект, которая должна подтягиваться на каждую дату по каждой номенклатуре, то все работает быстро ! Вопрос, может кто знает в чем тут соль и может быть можно как то обойтись малой кровью, альтернатива "Среза последних на каждую дату в запросе" через вложенные или пакетные запросы с использованием двух левых соединений меня не греет, хотел все сделать изящно через СКД ((( |
|||||||
91
ssh2006
31.05.12
✎
10:58
|
(90) раз медленно, тогда делай в запросе, в одном наборе данных
|
|||||||
92
ProDeveloper
31.05.12
✎
11:00
|
Да это то понятно, просто может кто сталкивался уже с таким ЧУДОМ
|
|||||||
93
ssh2006
31.05.12
✎
11:02
|
(92) это не чудо, так работает
|
|||||||
94
ProDeveloper
31.05.12
✎
11:06
|
Да я понимаю, просто при всем при этом, если в 1 источнике поправить только конструкцию {} и поменять её на обычные параметры, все работает так же молниеностно ! Отсюда вывод, СКД как то цепляет параметр &Номенклатура, потому что Набор1 и Набор2 связаны по периоду и номенклатуру с использованием параметро &Период, &Номенклатура
|
|||||||
95
ProDeveloper
31.05.12
✎
11:10
|
Может быть кто-то уже так хардкодил, и суть в том что надо как-то поправить текст запроса источника 2 и все взлетит и так. Отказаться от набора 2 и переписать все в одном запросе дело 5и минут
|
|||||||
96
ssh2006
31.05.12
✎
11:20
|
(94) тут никаких секретов нет. выложи скрин закладки "Связи" для обоих схем.
|
|||||||
97
ProDeveloper
31.05.12
✎
12:45
|
(96) читай сообщение (90) внимательно
|
|||||||
98
ProDeveloper
31.05.12
✎
13:14
|
В итоге победить неадекватное поведение СКД не удалось, забил на это дело, переписал все в один запрос, и все взлетело) Но теперь червяк голову грызет, в чем же все таки глюкавость такого подхода, где именно СКД не вывозит...
|
|||||||
99
PR
31.05.12
✎
13:14
|
(90) А почему нет варианта голосовалки "Автор провафлил"?
|
|||||||
100
ssh2006
31.05.12
✎
13:32
|
(98) "глюкавости" никакой нет, ты не до конца разобрался
|
|||||||
101
ProDeveloper
31.05.12
✎
13:36
|
(100) Разобрался до конца, с двумя наборами и связями между ними через параметры &Период &Номенклатура, для получения Проекта на каждую дату для Источника1 с конструкцией {} в наборе1 не взлетело.
|
|||||||
102
ProDeveloper
31.05.12
✎
13:39
|
Убираешь конструкцию {} заменяя её на обычные параметры в Источнике1, взлетает, но смысла использовать обычные параметры нету. Переписал все в один источник с использованием {} конструкции, получился один запрос в котором пакетами все собирается, включая срез последних на каждую дату по проектам = взлетело!
|
|||||||
103
ProDeveloper
31.05.12
✎
13:46
|
Косяк именно в связи наборов в СКД, если набор1 не привязывать к набору2 то все работает четко. Если в наборе1 нету конструкции {}, а все сделано через параметры , и набор1 связан с набором2 в СКД, то тоже все работает четко. Как только в наборе1 используешь конструкцию {}, в которой кстати говоря есть Номенклатура типо {(Номенклатура).* КАК Номенклатура}, которая в дальнейшем используется для связи набора1 с набором2 через Параметр связи, то СКД ведет себя странно, и отчет формируется бесконечно долго.
|
|||||||
104
ssh2006
31.05.12
✎
13:50
|
(103) попробуй убрать автозаполнение и {ГДЕ
(&Период), (&Номенклатура)} у второго набора данных |
|||||||
105
ProDeveloper
31.05.12
✎
13:59
|
(104) Взлетело !!! Убрал автозаполнение убрал {ГДЕ} в наборе2. Но сравнивая производительность между таким отчетом и отчетом где все в одном наборе одним запросом с использованием пакетных запросов собирается пакетами включая срез последних на каждую дату по проектам, говорит в пользу последнего. Но зато разобрались !!!
Через 2 набора, с утановленным отбором по организации + в группе по номенклатуре = 15 сек Через 1 набор, с утановленным отбором по организации + в группе по номенклатуре = 7 сек |
|||||||
106
ProDeveloper
31.05.12
✎
14:01
|
(104) Большое спасибо за наводку, теперь хоть буду спать спокойно, а то червяк голову грыз в чем же там дело)
|
|||||||
107
ssh2006
31.05.12
✎
14:05
|
Думаю дело было в том, что вместо отбора в ВТ во втором наборе по номенклатуре, переданной параметром из источника связи, в праметр вт из-за автозаполнения подставлялась номенклатура из настроек СКД из отбора. Там было что-то вроде Номенклатура В ИЕРАРХИИ(&П5). Можно в консоли второй запрос посмотреть было
|
|||||||
108
ProDeveloper
31.05.12
✎
14:06
|
В итоге делаем вывод что oldschool style вывозит, срез последних на каждую дату в запросе производительнее, чем финт ушами СКД через 2 набора и связи между ними через параметр связи. Всем спасибоу за участие в обсуждении данной ветки.
И да правильный вариант ответа - свой 3. СКД работает шикарррно, конструкция {} работает кашерно) |
|||||||
109
ProDeveloper
31.05.12
✎
14:09
|
(107) думаю ты прав, судя по производительности она для каждой позиции набора1, шерстила весь регистр Номенклатура В ИЕРАРХИИ(&П5), где П5 = Отбор.Номенклатура
Исправило ситуацию отключение АВТОЗАПОЛНЕНИЕ и удаления конструкции {ГДЕ} для набора2 Но по производительности так и не выиграло у старой школы, когда срез последних на каждую дату получаешь в запросе пакетами. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |