Имя: Пароль:
1C
1С v8
ОстаткиИОбороты с реквизитами движения
, ,
0 ДенисЧ
 
17.03.20
10:25
Есть (вроде) простой запрос

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

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура
ИТОГИ
    СУММА(КоличествоНачальныйОстаток),
    СУММА(КоличествоПриход),
    СУММА(КоличествоРасход),
    СУММА(КоличествоКонечныйОстаток)
ПО
    ОБЩИЕ,
    Склад КАК Склад,
    Номенклатура КАК Номенклатура
АВТОУПОРЯДОЧИВАНИЕ


Убираю соединение с движениями - всё хорошо.
Добавляю - вылезают строки со складами, на которых остатков давным-давно нет...

Что я пропустил?
1 FIXXXL
 
17.03.20
10:28
(0) остатков нет, а движения?
2 ДенисЧ
 
17.03.20
10:33
(1) Нет, разумеется.
3 ДенисЧ
 
17.03.20
10:39
PS. Сделал аналогично на СКД - два набора записей, первый остатки и обороты, второй движения, соединения по тем же полям. Результат такой же...
4 vicof
 
17.03.20
10:42
А нафига тебе движения, если ты из них никакие поля не выбираешь?
5 ДенисЧ
 
17.03.20
10:43
(4) Это пока. Там будут выводиться реквизиты регистра с группировкой по ним.
6 Cyberhawk
 
17.03.20
10:47
Может нулевые несхлопнутые итоги
7 ДенисЧ
 
17.03.20
10:49
(6) Нет. Там один ресурс, количество. И оно в нуле.
Причём типовой отчёт не показывает остатков.
И если убрать соединение с движениями - тоже не показывает.
8 Cyberhawk
 
17.03.20
13:09
(7) Ты ничего не понял
9 toypaul
 
гуру
17.03.20
13:17
ничего не пропустил
почему - смотреть профайлер
что делать - использовать имеющие
10 ДенисЧ
 
17.03.20
13:49
(8) Я тебя понял. Пересчитал итоги (пришлось 10 человек из базы выгнать) - всё встало на место.
11 Cyberhawk
 
17.03.20
14:20
(10) А про что тогда твое "Нет" в (7)?
12 Sasha_H
 
17.03.20
14:23
ептын дрын разверни движения и посмотри в деталях если движения есть то они и выходят. Нпе может без движений выйти что-то. Хотят тоже может когда даже движений нет и остаток на нуле это вне типовых конфигурациях или в конфах где не настроен расчет итогов
13 1c TTT
 
17.03.20
14:26
Не надо виртуальные таблицы регистров соединять между собой. Надо во временные таблицы и индексировать по полям соединения.
14 ДенисЧ
 
17.03.20
14:27
(11) Про "нулевые несхлопнутые итоги"
(12) Научи в ОстаткахИОБоротах получать реквизит регистра. И можешь претендовать на премию.
15 1c TTT
 
17.03.20
14:35
Соединение по регистратору тоже мне кажется не совсем быстрая операция)
16 Sasha_H
 
17.03.20
14:36
(14) а где тут остатки и обороты написано у меня - ты датый чтоли!?
17 Sasha_H
 
17.03.20
14:40
(10) что тут написал то... Пересчитал стало все нормально но до это выходили движения. Ты либо выражайся ормально с примерами четскими либо пойди отоспись!
18 Sasha_H
 
17.03.20
14:44
так делать плохо по оптимальности
19 Sasha_H
 
17.03.20
14:45
надо первый запрос с виртальными остатками поместить в ВТ о чем тебе люди и писали и потом соединить. обязательно проиндексировать ВТ по полям соединения. хотя избався от ибыточных соединений например период это лишнее, когда в твоем случае Регситратор - это уже индексное поле
20 Sasha_H
 
17.03.20
14:46
вот это точно ПЛОХО И (Движения.Период МЕЖДУ &ДатаНачала И КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ))
21 Sasha_H
 
17.03.20
14:48
все там нормально у него (15) только период надо точно выбросить из соединения а измерения и регистраторы должны быть в кластерном индексе но это дополнительно можно трасировкой посмотреь, а то тут угадывать долго можно
22 Sasha_H
 
17.03.20
14:50
и еще в коде чушь.. ты делаешь соединение по измерениям которых нет в расчете
И ТоварыНаСкладахОстаткиИОбороты.Качество = Движения.Качество
            И ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры = Движения.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстаткиИОбороты.СерияНоменклатуры = Движения.СерияНоменклатуры

регистратор эти все поля должны быть обязательно объявлены сверху!
23 Sasha_H
 
17.03.20
14:53
https://its.1c.ru/db/metod8dev#content:2664:hdoc

Расчет итогов по регистратору
Если необходимо получить итоги остатков по регистратору регистра, то следует учитывать тот факт, что получать итоги по регистратору можно только внутри группировки Период. Такая особенность связана с тем, что регистратор является уточнением периода. В случае если итоги по регистратору будут получены до получения итогов по периоду, полученные итоги будут некорректны. Аналогичная ситуация с получением итогов по номеру строки - такие итоги можно получать только внутри группировки по периоду и регистратору.

Итоги по реквизиту регистратора
Итоги по реквизиту регистратора корректно рассчитаны быть не могут. Если требуется вывести в результат остатки с указанием реквизита регистратора, то следует получать группировку по регистратору и выводить в результат только реквизит регистратора, не выводя самого регистратора.
24 Cyberhawk
 
17.03.20
14:59
(14) "Про "нулевые несхлопнутые итоги"" // Так пересчет итогов-то помог?