Имя: Пароль:
1C
1С v8
Задваиваются проводки при выборе из регистра бухгалтерии ДвиженияССубконто
,
0 wisekat
 
28.01.14
11:18
Есть такой запрос в СКД:

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

Обнаружилось, что некоторые проводки в нашем отчёте задваиваются.

Что это может быть?
1 zak555
 
28.01.14
11:21
параметры виртуальной таблицы не любишь ?
2 wisekat
 
28.01.14
11:43
(1) Это по поводу фильтров на счета?
3 wisekat
 
28.01.14
11:45
(1) Вроде там не работали правильно отборы. У нас ВыбСчетаЗатрат и ВыбСчетаИзноса - это списки счетов. Но на самом деле они не списки, а ТаблицыЗначений - иначе 1С не отбирает правильно по списку оператором "В". Формируются так:

    СпСчетаИзноса = Новый ТаблицаЗначений;
    СпСчетаИзноса.Колонки.Добавить("СчетИзноса");
    НоваяСтрока = СпСчетаИзноса.Добавить();
    НоваяСтрока.СчетИзноса = ПланыСчетов.Хозрасчетный.НайтиПоКоду("131");
    НоваяСтрока = СпСчетаИзноса.Добавить();
    НоваяСтрока.СчетИзноса = ПланыСчетов.Хозрасчетный.НайтиПоКоду("1321");
    
    СпСчетаЗатрат = Новый ТаблицаЗначений;
    СпСчетаЗатрат.Колонки.Добавить("СчетЗатрат");
    НоваяСтрока = СпСчетаЗатрат.Добавить();
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("231");
    НоваяСтрока = СпСчетаЗатрат.Добавить();
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("232");
    НоваяСтрока = СпСчетаЗатрат.Добавить();
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("233");
    НоваяСтрока = СпСчетаЗатрат.Добавить();
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("91");
    НоваяСтрока = СпСчетаЗатрат.Добавить();
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("92");
    НоваяСтрока = СпСчетаЗатрат.Добавить();
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("949");
4 Maxus43
 
28.01.14
11:45
(2) да.. Ну и отгадай что будет если в документе 2 строки например.
По простому - вытащи ещё регистратор, и погляди в док у которого "задвоено"
5 Maxus43
 
28.01.14
11:46
>>иначе 1С не отбирает правильно по списку оператором "В"
врёшь же, всё 1с нормально отбирает. Массив счетов передавай в запрос в параметр
6 wisekat
 
28.01.14
11:46
т.е. надо отобрать 12 корреспонденций 131-231, 131-232, ..., 1321-949

Я бы и сам рад использовать параметры вирт. таблицы если бы оно сработало как надо - и должно было быть гораздо быстрее как я понимаю.
7 wisekat
 
28.01.14
11:47
(5) Сейчас проверю через массив, но помню что напрямую в запросе массив не работал.
8 wisekat
 
28.01.14
11:48
Насчёт задвоения сам разобрался - в регистре было две записи по одному ОС. Протупил, думал, что там только по одной записи к каждому ОС.

Запрос вот такой должен был быть:

ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.Период,
    ХозрасчетныйДвиженияССубконто.СчетДт,
    ХозрасчетныйДвиженияССубконто.СчетКт,
    ХозрасчетныйДвиженияССубконто.СубконтоКт1,
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.Код,
    ХозрасчетныйДвиженияССубконто.Организация,
    ХозрасчетныйДвиженияССубконто.Сумма,
    СчетаБухгалтерскогоУчетаОССрезПоследних.СчетУчета
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач, &ДатаКон, , , ) КАК ХозрасчетныйДвиженияССубконто
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаБухгалтерскогоУчетаОС.СрезПоследних КАК СчетаБухгалтерскогоУчетаОССрезПоследних
        ПО ХозрасчетныйДвиженияССубконто.СубконтоКт1 = СчетаБухгалтерскогоУчетаОССрезПоследних.ОсновноеСредство
            И ХозрасчетныйДвиженияССубконто.Организация = СчетаБухгалтерскогоУчетаОССрезПоследних.Организация
ГДЕ
    ХозрасчетныйДвиженияССубконто.СчетДт В(&ВыбСчетаЗатрат)
    И ХозрасчетныйДвиженияССубконто.СчетКт В(&ВыбСчетаИзноса)
    И ХозрасчетныйДвиженияССубконто.Организация = &ВыбОрганизация
    И ХозрасчетныйДвиженияССубконто.Активность
9 wisekat
 
28.01.14
11:49
(8) т.е. дополнительно по Организации в регистре надо было фильтровать
10 wisekat
 
28.01.14
14:35
(5) Попробовал. Массивы в параметрах виртуальной таблицы работают. Причём работают раз в 100 быстрее наверное :).

Запрос теперь выглядит так:

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

Я так понимаю, по счетам построены внутренние индексы, которые позволяют платформе оптимизировать запрос. А вот перенос Организации в параметры виртуальной таблицы ускорения не даёт - или это ускорение уже просто незаметно. Насколько я знаю, для измерения регистра надо свойство Индексировать устанавливать для построения соответствующего индекса, которые платформа может использовать?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс