Имя: Пароль:
1C
1С v8
v8: Замер производительности по отчету
0 lamme
 
27.08.13
17:02
выдает , что строка

начало цикла        

ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьДетальныхЗаписей); // вот эта строк

конеццикла

занимает 95% времени от всего формирования отчета

что не так ?
1 Ненавижу 1С
 
гуру
27.08.13
17:04
гордишься?
2 Maxus43
 
27.08.13
17:05
что плохого? или хорошего?
Поидее хорошо даже, выборка данных занимает всего ничего
3 lamme
 
27.08.13
17:05
обращений к этой строке 2100 раз

чуть где-то ниже идет строка

ТабДок.Присоединить(ОбластьДетальныхЗаписейСклад);

обращений к ней 10900 раз, но % занимает 1,74%
4 lamme
 
27.08.13
17:05
не горжусь.
печалюст
5 lamme
 
27.08.13
17:06
одним словом
была база файловая- отчет формировался 20 сек
стала скульная - отчет формируется 2 мин

замер производительности показывает .. ну в топике
6 lamme
 
27.08.13
17:06
отчет самописный
7 acanta
 
27.08.13
17:06
В текстовый файл не быстрее будет?
8 ДенисЧ
 
27.08.13
17:07
ЗАпрос кажи.
9 lamme
 
27.08.13
17:07
в текстовый файл - что ?
не понял
10 acanta
 
27.08.13
17:08
А там в таблице в формулах нечего сократить?
11 lamme
 
27.08.13
17:08
запрос


        Запрос.Текст =
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    ТаблицаРегистра.Номенклатура КАК Номенклатура,
        |    ТаблицаРегистра.Номенклатура.Код КАК Код,
        |    ТаблицаРегистра.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |    ТаблицаРегистра.КоличествоОстаток КАК КоличествоОстаток,
        |    ТаблицаРегистра.КоличествоОстаток * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоличествоБазовыхЕдОстаток,
        |    ВЫБОР
        |        КОГДА ЦеныНоменклатуры.Цена ЕСТЬ NULL
        |            ТОГДА ЦеныНоменклатурыБезХарактеристик.Цена * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныНоменклатурыБезХарактеристик.ЕдиницаИзмерения.Коэффициент * (КурсыВалютСрезПоследнихБезХарактеристик.Курс / КурсыВалютСрезПоследнихБезХарактеристик.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |        ИНАЧЕ ЦеныНоменклатуры.Цена * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент * (КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |    КОНЕЦ КАК ТипЦенЦена,
        |    ВЫБОР
        |        КОГДА ЦеныНоменклатуры.Цена ЕСТЬ NULL
        |            ТОГДА ТаблицаРегистра.КоличествоОстаток * (ЦеныНоменклатурыБезХарактеристик.Цена / ЦеныНоменклатурыБезХарактеристик.ЕдиницаИзмерения.Коэффициент) * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалютСрезПоследнихБезХарактеристик.Курс / КурсыВалютСрезПоследнихБезХарактеристик.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |        ИНАЧЕ ТаблицаРегистра.КоличествоОстаток * (ЦеныНоменклатуры.Цена / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент) * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |    КОНЕЦ КАК ТипЦенСтоимость,
        |    СпрНоменклатура.Марка_,
        |    СпрНоменклатура.КраткоеНаименование_,
        |    СпрНоменклатура.ПравоЛево_,
        |    СпрНоменклатура.ПередЗад_,
        |    СпрНоменклатура.ВерхНиз_,
        |    СпрНоменклатура.Модель_,
        |    СпрНоменклатура.Кузов_,
        |    СпрНоменклатура.Двигатель_,
        |    СпрНоменклатура.Код
        |{ВЫБРАТЬ
        |    Номенклатура.*,
        |    ХарактеристикаНоменклатуры.*,
        |    КоличествоОстаток,
        |    КоличествоБазовыхЕдОстаток,
        |    ТипЦенЦена,
        |    ТипЦенСтоимость}
        |ИЗ
        |    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, Валюта = &ВалютаУпрУчета) КАК УпрВалюты,
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры}) КАК ТаблицаРегистра
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ТипЦен = &БазовыйТипЦен {(Номенклатура).* КАК Номенклатура}) КАК ЦеныНоменклатуры
        |        ПО ТаблицаРегистра.Номенклатура = ЦеныНоменклатуры.Номенклатура
        |            И ТаблицаРегистра.ХарактеристикаНоменклатуры = ЦеныНоменклатуры.ХарактеристикаНоменклатуры
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
        |                &ДатаКон,
        |                ТипЦен = &БазовыйТипЦен
        |                    И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) {(Номенклатура).* КАК Номенклатура}) КАК ЦеныНоменклатурыБезХарактеристик
        |        ПО ТаблицаРегистра.Номенклатура = ЦеныНоменклатурыБезХарактеристик.Номенклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, ) КАК КурсыВалютСрезПоследних
        |        ПО (ЦеныНоменклатуры.Валюта = КурсыВалютСрезПоследних.Валюта)
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, ) КАК КурсыВалютСрезПоследнихБезХарактеристик
        |        ПО (ЦеныНоменклатурыБезХарактеристик.Валюта = КурсыВалютСрезПоследнихБезХарактеристик.Валюта)
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        |        ПО ТаблицаРегистра.Номенклатура = СпрНоменклатура.Ссылка
        |ГДЕ
        |    ТаблицаРегистра.Номенклатура В ИЕРАРХИИ(&ВыбНоменклатура)
        |    И ТаблицаРегистра.КоличествоОстаток > 0
        |{ГДЕ
        |    ТаблицаРегистра.Склад.* КАК Склад,
        |    ТаблицаРегистра.Номенклатура.* КАК Номенклатура,
        |    ТаблицаРегистра.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
        |    ТаблицаРегистра.КоличествоОстаток КАК КоличествоОстаток,
        |    (ТаблицаРегистра.КоличествоОстаток * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК КоличествоБазовыхЕдОстаток,
        |    (ВЫБОР
        |            КОГДА ЦеныНоменклатуры.Цена ЕСТЬ NULL
        |                ТОГДА ЦеныНоменклатурыБезХарактеристик.Цена * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныНоменклатурыБезХарактеристик.ЕдиницаИзмерения.Коэффициент * (КурсыВалютСрезПоследнихБезХарактеристик.Курс / КурсыВалютСрезПоследнихБезХарактеристик.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |            ИНАЧЕ ЦеныНоменклатуры.Цена * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент * (КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |        КОНЕЦ) КАК ТипЦенЦена,
        |    (ВЫБОР
        |            КОГДА ЦеныНоменклатуры.Цена ЕСТЬ NULL
        |                ТОГДА ТаблицаРегистра.КоличествоОстаток * (ЦеныНоменклатурыБезХарактеристик.Цена / ЦеныНоменклатурыБезХарактеристик.ЕдиницаИзмерения.Коэффициент) * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалютСрезПоследнихБезХарактеристик.Курс / КурсыВалютСрезПоследнихБезХарактеристик.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |            ИНАЧЕ ТаблицаРегистра.КоличествоОстаток * (ЕСТЬNULL(ЦеныНоменклатуры.Цена, ЦеныНоменклатурыБезХарактеристик.Цена) / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент) * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |        КОНЕЦ) КАК ТипЦенСтоимость}
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура
        |{УПОРЯДОЧИТЬ ПО
        |    ТаблицаРегистра.Номенклатура.* КАК Номенклатура,
        |    ТаблицаРегистра.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
        |    КоличествоОстаток КАК КоличествоОстаток,
        |    (ТаблицаРегистра.КоличествоОстаток * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК КоличествоБазовыхЕдОстаток,
        |    (ВЫБОР
        |            КОГДА ЦеныНоменклатуры.Цена ЕСТЬ NULL
        |                ТОГДА ЦеныНоменклатурыБезХарактеристик.Цена * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныНоменклатурыБезХарактеристик.ЕдиницаИзмерения.Коэффициент * (КурсыВалютСрезПоследнихБезХарактеристик.Курс / КурсыВалютСрезПоследнихБезХарактеристик.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |            ИНАЧЕ ЦеныНоменклатуры.Цена * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент * (КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |        КОНЕЦ) КАК ТипЦенЦена,
        |    (ВЫБОР
        |            КОГДА ЦеныНоменклатуры.Цена ЕСТЬ NULL
        |                ТОГДА ТаблицаРегистра.КоличествоОстаток * (ЦеныНоменклатурыБезХарактеристик.Цена / ЦеныНоменклатурыБезХарактеристик.ЕдиницаИзмерения.Коэффициент) * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалютСрезПоследнихБезХарактеристик.Курс / КурсыВалютСрезПоследнихБезХарактеристик.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |            ИНАЧЕ ТаблицаРегистра.КоличествоОстаток * (ЕСТЬNULL(ЦеныНоменклатуры.Цена, ЦеныНоменклатурыБезХарактеристик.Цена) / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент) * ТаблицаРегистра.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен
        |        КОНЕЦ) КАК ТипЦенСтоимость}
        |ИТОГИ
        |    СУММА(КоличествоОстаток)
        |ПО
        |    Номенклатура,
        |    ХарактеристикаНоменклатуры
        |{ИТОГИ ПО
        |    ТаблицаРегистра.Номенклатура.* КАК Номенклатура,
        |    ТаблицаРегистра.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры}
        |АВТОУПОРЯДОЧИВАНИЕ";
12 lamme
 
27.08.13
17:10
запрос НЕ мой ( в смысле - первый раз вижу)

10 - в отчете 15 колонок
тело -
код номенклатура характеристика
остальные колонки - присоединяемые.

в колонках - только одно поле - шаблон.
остальные - выражения

сокращать как бы нечего
13 lamme
 
27.08.13
17:11
судя по всему - брался типовой отчет прайса
и он доделывался
14 ДенисЧ
 
27.08.13
17:11
Выдерни вместо ссылок на номенклатуру и прочие объекты - представление. И настрой макет так, чтобы он брал именно представления, а не ссылки
15 lamme
 
27.08.13
17:12
про выдерни вместо ссылок - не понял

щас - покрую - обмозгую что сказал
16 zavrik
 
27.08.13
17:12
СКД не предлагать?
17 lamme
 
27.08.13
17:13
(16)
неа
18 ДенисЧ
 
27.08.13
17:15
(15) напиши
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПЕРДСТАВЛЕНИЕ(ТаблицаРегистра.Номенклатура) КАК Номенклатура,
19 ДенисЧ
 
27.08.13
17:15
ПРЕДСТАВЛЕНИЕ то есть
20 lamme
 
27.08.13
17:17
(19)
ага
сделал типа такого

выбрад в запросе еще поля
|    ТаблицаРегистра.Номенклатура.Представление,
и тд
и при выводе в отчет - вывожу именно это предатсвление

уже шустрее
21 lamme
 
27.08.13
17:19
ха. уже намного шустрее.

не знал
не знал этого

(19)
спасибо
22 ДенисЧ
 
27.08.13
17:19
(21) А если ты подумаешь немного, то поймёшь почему :-)
23 lamme
 
27.08.13
17:20
(22)
я это понимаю

в таблицу когда выводишь ссылку- подтягивается именно ссылка - со всеми данными и тд и тп
а в представление - это просто строка. без последствий
24 acanta
 
27.08.13
17:23
Думать вредно. Без предыстории, это когда девушка сразу согласна, но ты сомневаешься и хочешь знать почему.. так медленно и печально..
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший