Имя: Пароль:
1C
1С v8
Как лучше всего подсчитать количество движений документов?
0 1dvd
 
20.05.14
13:48
Нужно посчитать сколько было движений прихода и сколько движений расхода в разрезе регистраторов. Подскажите как сделать быстрее?


ВЫБРАТЬ
    Регистратор,
    СУММА(КоличествоПриход),
    СУММА(КоличествоРасход)
ИЗ
    (ВЫБРАТЬ
        ТоварыНаСкладах.Регистратор,
        ВЫБОР
            КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                ТОГДА 1
            ИНАЧЕ
                0
        КОНЕЦ КАК КоличествоПриход,
        ВЫБОР
            КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                ТОГДА 1
            ИНАЧЕ
                0
        КОНЕЦ КАК КоличествоРасход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    ) КАК Движения
СГРУППИРОВАТЬ ПО
    Регистратор
1 vicof
 
20.05.14
13:52
Сгруппировать можно было и вложенный запрос
2 1dvd
 
20.05.14
13:54
(1) спасибо, но запрос выполняется также долго
3 vicof
 
20.05.14
13:59
Поскольку нужно в разрезе регистраторов, то вряд ли получится его убыстрить, в любом случае нужно перебрать все записи.

Можешь попробовать взять обороты за несколько периодов, а потом склеить их между собой.
4 1dvd
 
20.05.14
14:00
(3) оборот по регистратору? А как считать количество движений?
5 vicof
 
20.05.14
14:05
(4) Тады ой.
6 vicof
 
20.05.14
14:08
+(5) Тогда тот же самый запрос, но с условиями на период. Но очень смутно верится, что это ускорит выполнение. Лучше скажи,  зачем это все делается.
7 nufnufcheg
 
20.05.14
14:10
ВЫБРАТЬ
    ТоварыНаСкладахОбороты.Регистратор,
    СУММА(ВЫБОР
            КОГДА ТоварыНаСкладахОбороты.КоличествоПриход = 0
                ТОГДА 0
            ИНАЧЕ 1
        КОНЕЦ) КАК Приход,
    СУММА(ВЫБОР
            КОГДА ТоварыНаСкладахОбороты.КоличествоРасход = 0
                ТОГДА 0
            ИНАЧЕ 1
        КОНЕЦ) КАК Расход
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Обороты(, , Запись, ) КАК ТоварыНаСкладахОбороты

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОбороты.Регистратор
8 1dvd
 
20.05.14
14:13
(6) Была ошибка в процедуре проведения документов. При определенных условиях при перепроведении не очищались движения документов. В результате есть документы, у которых задвоены, затроены движения
9 1dvd
 
20.05.14
14:13
(8) нужно их выявить
10 1dvd
 
20.05.14
14:18
(7) не проверял, но кажется будет дольше
11 nufnufcheg
 
20.05.14
14:31
(10) а ты попробуй
12 vicof
 
20.05.14
14:34
(9) я бы попробовал в одну таблицу взять движения и сгруппировать их по всем измерениям в разрезе регистраторов. Другую не группировать и соединить по всем измерениям и регистратору. Если цифры ресурсов одинаковые - значит движения  нормальные, если нет - движения задвоены
13 1dvd
 
20.05.14
15:08
(11) да, вроде, быстрее. Спасибо
Всем спасибо, задача решена
14 Мохнатое рыло
 
20.05.14
15:30
...извращенцы.

Движения.ТоварыНаСкладах.Очистить();

Нужно когда в обычной форме нажимаете кнопку "Провести" у уже проведенного документа.
15 1dvd
 
20.05.14
15:36
(14) Спасибо, КЭП.
Но, ты не прав