Имя: Пароль:
1C
 
Ускорение запроса - по хозрасчетному регистру
0 Маленький Вопросик
 
07.02.15
20:30
Товарищи, помогите хоть немного "ускорить" запрос по хозрасчетному регистру - остатки по счету 41.11

      ОстаткиВмагазине = Новый Запрос("ВЫБРАТЬ
                                      |    ХозрасчетныйОстатки.СуммаОстаток КАК СуммаНоменклатуры,
                                      |    ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоНоменклатуры
                                      |ИЗ
                                      |    РегистрБухгалтерии.Хозрасчетный.Остатки(
                                      |            &Дата,
                                      |            Счет = &Счет,
                                      |            ,
                                      |            Субконто1 = &Номенклатура
                                      |                И Субконто3 = &Склад) КАК ХозрасчетныйОстатки
                                      |ГДЕ
                                      |    ХозрасчетныйОстатки.КоличествоОстаток >= &КоличествоОстаток");
                                      
      ОстаткиВмагазине.УстановитьПараметр("Номенклатура", Номенклатура);
      ОстаткиВмагазине.УстановитьПараметр("Склад", Склад);
      ОстаткиВмагазине.УстановитьПараметр("Дата", Дата);
      ОстаткиВмагазине.УстановитьПараметр("Счет", СчетСклада); //41.11
      ОстаткиВмагазине.УстановитьПараметр("КоличествоОстаток", КоличествоПоДокументу);

      ОстаткиПоНоменклатуре = ОстаткиВмагазине.Выполнить().Выгрузить();
      
      Если ОстаткиПоНоменклатуре.Количество()=0 Тогда
          ВозвращаемНоменклатуру = ЗаменительНоменклатуры;
      Иначе      
          ВозвращаемНоменклатуру = Номенклатура;
      КонецЕсли;
1 Dmitrii
 
гуру
07.02.15
20:45
Запрос, как он есть сейчас больше не оптимизировать.
Только вот есть подозрение, что этот код в цикле делается. Тогда так делать не нужно.
А еще можно написать запрос так, чтобы он сразу выдавал нужную номенклатуру, чтобы не надо было заниматься ерундой в виде выгрузки результата в ТЗ, проверки количество строк в ТЗ и т.п.
2 Armando
 
07.02.15
20:46
Если бы склад был вторым субконто, было бы быстрее
3 Рэйв
 
07.02.15
20:47
Мне одному кажется, что ТС просто напоминает о себе и пиарится на пустом месте?6-)
4 Маленький Вопросик
 
07.02.15
20:51
Народ, подскажите как добавить проводку (ручная корректировка) не затерев существующие проводки.
5 Маленький Вопросик
 
07.02.15
20:52
(2) к сожалению идет партионный учет
6 Рэйв
 
07.02.15
20:53
(5)К сожалению, мы на одной планете. :-(
7 Рэйв
 
07.02.15
20:53
с тобой
8 zmaximka
 
07.02.15
21:32
установить еще отбор по второму субконто, тогда в индекс попадешь
9 bolobol
 
07.02.15
22:04
Это в файловой базе тормозит???
10 bolobol
 
07.02.15
22:05
А второе субконто, напомните, какое?
Не пора ли тут провести ревизию остатков, видимо - не закрывались с прошлого века ни разу.
11 RomanYS
 
07.02.15
22:17
Если задать видыСубконто в параметрах, может стать заметно быстрее
12 alle68
 
07.02.15
22:20
(5) Не сожалей, быстрее не будет.
(8) Что за индекс такой волшебный?
(10) А вот это весьма возможно.
(11) Однозначно, хуже не будет!
13 GROOVY
 
07.02.15
22:44
(0) Типизируйте субконто в параметрах ВТ. Больше тут вряд что-то ускорить не меняя метаданные можно.
14 H A D G E H O G s
 
07.02.15
22:53
(13) хе-хе..
Привет.
15 Маленький Вопросик
 
07.02.15
22:53
41.11

Субконто1 = Номенклатура
Субконто2 = Партия
Субконто3 = Склад.

База файловая тестовая - рабочая СКЛ.
16 Маленький Вопросик
 
07.02.15
22:55
(13) можно правильный примерчик типизации значений в запросе?
17 alle68
 
07.02.15
23:03
(16) СП под рукой? Статья "Субконто".
18 Dmitrii
 
гуру
07.02.15
23:10
В данном  случае типизация субконто в параметрах виртуальной таблицы скорее замедлит выполнение запроса.
Нужны остатки по 1-му и 3-му субконто. В параметрах ВТ придется указать массив из двух значений ПВХ.ВидыСубконто.Номенклатура и ПВХ.ВидыСубконто.Склады. Для построения виртуальной таблицы системе придется перекинуть 3-е субконто (Склады) на второе место. А это лишние накладные расходы.

(0) А этот запрос точно не делается в цикле каком-нибудь (например, обхода строк табличной части)?
19 bolobol
 
07.02.15
23:11
(16)
Массив.Добавить(ВидСубконто.Номенклатура)
Массив.Добавить(ВидСубконто.Партии)
Массив.Добавить(ВидСубконто.Склад)

Типа того
20 bolobol
 
07.02.15
23:13
А, не - проще можно:
Массив = Счёт4111.Субконто.ВыгрузитьКолонку(ВидыСубконто)
(18) Ничего не замедлится, условие на третье - все три заданы. Нет проблемы.
21 GROOVY
 
07.02.15
23:16
Так, наоборот, ему партии нафиг не нужны.
22 Маленький Вопросик
 
07.02.15
23:19
ОстаткиВмагазине = Новый Запрос("ВЫБРАТЬ
                                      |    ХозрасчетныйОстатки.СуммаОстаток КАК СуммаНоменклатуры,
                                      |    ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоНоменклатуры
                                      |ИЗ
                                      |    РегистрБухгалтерии.Хозрасчетный.Остатки(
                                      |            &Дата,
                                      |            Счет = &Счет,
                                      |            &ВидыСубконто,
                                      |            Субконто1 = &Номенклатура
                                      |                И Субконто3 = &Склад) КАК ХозрасчетныйОстатки
                                      |ГДЕ
                                      |    ХозрасчетныйОстатки.КоличествоОстаток >= &КоличествоОстаток");
                                      
      
                                      
      Мас = Новый Массив;
      Мас.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);                                       
      Мас.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии);                                       
      Мас.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);                                       
      
      ОстаткиВмагазине.УстановитьПараметр("ВидыСубконто", Мас);
      
      ОстаткиВмагазине.УстановитьПараметр("Номенклатура", Номенклатура);
      ОстаткиВмагазине.УстановитьПараметр("Склад", Склад);
      ОстаткиВмагазине.УстановитьПараметр("Дата", Дата);
      ОстаткиВмагазине.УстановитьПараметр("Счет", СчетСклада);
      ОстаткиВмагазине.УстановитьПараметр("КоличествоОстаток", КоличествоПоДокументу);
23 Маленький Вопросик
 
07.02.15
23:20
что-то не сильно в скорости прибавило
24 bolobol
 
07.02.15
23:21
(23) А два пробовали задать, без партий и условие Субконто3 изменить на Субконто2?
25 alle68
 
07.02.15
23:22
(23) Субконто "Партии" убери. Заодно скажи, сколько раз в цикле эта процедура вызывается.
26 bolobol
 
07.02.15
23:24
Иначе, по-ходу, надо ТиИ делать, ибо заметить скорость выполнения такого запроса - это, мягко говоря, нужно на Пентиуме133 с ФДД базу читать...
27 bolobol
 
07.02.15
23:26
(25) Наверное, столько раз, сколько хватит для оценки, что этот запрос тормозит. Я сейчас на боевой базе, правда скульной, запустил его 10000 раз. Что 1 раз, что 10000 - одинаково - 1,5 секунды клиент висел в ожидании.
28 Deon
 
07.02.15
23:38
РЛС включен?
29 Armando
 
07.02.15
23:58
(0) Кстати, в параметры виртуальной таблицы добавь условие по организации.
30 Deon
 
08.02.15
00:04
Мне вот тоже кажется, что этому запросу особо тормозить и негде. Может проблема, всё же, где-то в другом месте?
31 Reaper_1c
 
08.02.15
01:50
итоги рассчитай...
32 Reaper_1c
 
08.02.15
01:50
точнее пересчитай. Нужно сделать пересчет итогов по регистру бухгалтерии.
Независимо от того, куда вы едете — это в гору и против ветра!