Имя: Пароль:
1C
1С v8
Запрос к Бух.регистру
,
0 cyberandr
 
15.11.11
16:13
Всем привет! Такой вопрос, не подскажите как оптимизировать Запрос к  регистру бухгалтерии (нужна Таблица оборотов), если приходится получать сам регистратор. По времени он получается в 3 раза медленней простого перебора документов.

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

   Остатки=Запрос.Выполнить().Выгрузить();
   
   Для Каждого Стр Из Остатки Цикл
       //    Для Р=0 ПО Стр.ТоварРасход.Количество()-1 ЦИКЛ
       НоваяСтр=РезТб.Добавить();
       НоваяСтр.Дата=НачалоДня(Стр.Регистратор.Дата);
       Если  ТипЗнч(Стр.Регистратор)=Тип("ДокументСсылка.РасходКл") Тогда
           НоваяСтр.ВидОтгрузки="Отгрузка клиенту";                    
       ИначеЕсли   ТипЗнч(Стр.Регистратор)=Тип("ДокументСсылка.РасходБезнал")Тогда
           НоваяСтр.ВидОтгрузки="Безнал";  
       Иначе
           НоваяСтр.ВидОтгрузки="Продажи";              
       КонецЕсли;
1 catena
 
15.11.11
16:16
А почему счет и корсчет в условия вирт таблицы не занести?
2 cyberandr
 
15.11.11
16:26
Это принципиально? Но попробую.
3 hhhh
 
15.11.11
16:29
(2) должно быть быстрее в 125 раз.
4 izekia
 
15.11.11
16:38
(3) в 28
5 cyberandr
 
15.11.11
16:42
Я бы не сказал что в 28 вот новая версия


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

   Остатки=Запрос.Выполнить().Выгрузить();
   
   Для Каждого Стр Из Остатки Цикл
       //    Для Р=0 ПО Стр.ТоварРасход.Количество()-1 ЦИКЛ
       НоваяСтр=РезТб.Добавить();
       НоваяСтр.Дата=НачалоДня(Стр.Регистратор.Дата);
       Если  ТипЗнч(Стр.Регистратор)=Тип("ДокументСсылка.РасходКл") Тогда
           НоваяСтр.ВидОтгрузки="Отгрузка клиенту";                    
       ИначеЕсли   ТипЗнч(Стр.Регистратор)=Тип("ДокументСсылка.РасходБезнал")Тогда
           НоваяСтр.ВидОтгрузки="Безнал";  
       Иначе
           НоваяСтр.ВидОтгрузки="Продажи";              
       КонецЕсли;

Быстрее но не так критично.
6 Maxus43
 
15.11.11
16:45
кор счет тоже в условия вирт таблицы
7 cyberandr
 
15.11.11
17:44
(6) Выдает что нет такого поля как Корсчет
8 Lys
 
15.11.11
17:51
(7) Покажи запрос с условием по корсчету, на который у тебя программа ругается
9 cyberandr
 
15.11.11
18:00
Запрос.Текст = "ВЫБРАТЬ
                  |    УправленческийОбороты.Субконто1 КАК Товар,
                  |    СУММА(УправленческийОбороты.СуммаОборотКт) КАК Сумма,
                  |    УправленческийОбороты.Субконто1.Код КАК ТоварКод,
                  |    УправленческийОбороты.Субконто1.Тип КАК ТоварТип,
                  |    УправленческийОбороты.Субконто1.Артикул КАК ТоварАртикул,
                  |    СУММА(УправленческийОбороты.КоличествоОборотКт) КАК Колво,
                  |    УправленческийОбороты.Регистратор
                  |ИЗ
                  |    РегистрБухгалтерии.Управленческий.Обороты(
                  |            &ДатаНач,
                  |            &ДатаКон,
                  |            Регистратор,
                  |            КорСчет В (&КорСчет)
                  |                И Счет = &Счет10,
                  |            ,
                  |            ,
                  |            ,
                  |            ) КАК УправленческийОбороты
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    УправленческийОбороты.Регистратор,
                  |    УправленческийОбороты.Субконто1,
                  |    УправленческийОбороты.Субконто1.Код,
                  |    УправленческийОбороты.Субконто1.Тип,
                  |    УправленческийОбороты.Субконто1.Артикул";

   Остатки=Запрос.Выполнить().Выгрузить();


Поле не найдено "КорСчет"  <<?>>КорСчет В (&КорСчет)
10 Lys
 
15.11.11
18:03
(9) Ясно. Открой для себя конструктор запросов.
Условие по КорСчету - это отдельный параметр виртуальной таблицы.
11 cyberandr
 
15.11.11
18:07
сорри и впрямь торможу. счас поэксперементируем
12 cyberandr
 
15.11.11
18:35
спасибо всем!
13 GROOVY
 
15.11.11
18:43
Еще думаю сильно поможет типизация поля субконто1.
Ошибка? Это не ошибка, это системная функция.