Имя: Пароль:
1C
1С v8
Удваивается сумма долга в запросе при левом соединении
0 barsik123
 
20.06.14
16:40
Совсем туплю, отчет в целом работает нормально, но вот при таком случае начинает задваиваться долг.
Есть регистр накопления, по которому отражаются долги в разрезе Лицевой счет, Услуга, Квитанция, Квитанция это документ отражающий дату оказания услуги и другую информацию по этой услуге. На лицевой счет по конкретной квитанции выставили два иска. Два, потому что по первому иску был отказ и выставили второй. В иске нет поля квитанции,зато есть два поля Начало искового периода и конец искового периода. Дата квитанции попадает в диапазон дат начала искового периода и конец искового периода для двух исков. Код запроса такой:
ВЫБРАТЬ
    Остатки.ЛицевойСчет КАК ЛицевойСчет,
    Остатки.Квитанция КАК Квитанция,
    Количество(1) КАК КоличествоЗаписей,
    СУММА(Остатки.СуммаОстаток) КАК Долг,
    СтатусыИсковСрезПоследних.Иск КАК Иск,
    СтатусыИсковСрезПоследних.Статус КАК Статус
ИЗ
    РегистрНакопления.НачислениеКвартПлатыЛС.Остатки(
            &Дата,
            ЛицевойСчет = &ЛС
                И Услуги = &Услуга
                ) КАК Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыИсков.СрезПоследних(, Иск.ЛицевойСчет = &ЛС) КАК СтатусыИсковСрезПоследних
        ПО Остатки.ЛицевойСчет = СтатусыИсковСрезПоследних.Иск.ЛицевойСчет
            И (Остатки.Квитанция.Дата МЕЖДУ СтатусыИсковСрезПоследних.Иск.НачалоИсковогоПериода И СтатусыИсковСрезПоследних.Иск.КонецИсковогоПериода)

СГРУППИРОВАТЬ ПО
    Остатки.ЛицевойСчет,
    СтатусыИсковСрезПоследних.Иск,
    СтатусыИсковСрезПоследних.Статус,
    Остатки.Квитанция
ИТОГИ ПО
    ЛицевойСчет,
    Иск,
    Статус,
    Квитанция

И в результате этого запроса, долг по лицевому счету увеличивается в двое. Такое увеличение у меня происходит только в случает если на одну квитанцию проходят более одного иска.  Подскажите как правильнее было бы изменить запрос,чтобы не происходило удвоение.
1 Жан Пердежон
 
20.06.14
16:43
странно, что только задваивается
2 Крошка Ру
 
20.06.14
16:49
(0) По "СтатусыИсковСрезПоследних.Иск" группируешь, а по "Остатки.СуммаОстаток" - суммируешь.
Иска - два, сумм остатков - тоже две
3 barsik123
 
20.06.14
17:23
(2) Вот думаю как лучше выкрутится именно сделав это в запросе, без дополнительных манипуляций при прохождении результатов запроса. по смыслу в иске нет никакой задолженности, задолженность есть только у квитанции и у лицевого счета. Иск я здесь приплетаю лишь только для того,чтобы сразу получить нужную информацию в запросе, которую выведу в печатную форму.
4 Господин ПЖ
 
20.06.14
17:24
группировать например
5 Segate
 
20.06.14
18:22
(3)Максимум() к примеру
6 barsik123
 
20.06.14
18:35
(5) ну если я тупо вместо Сумма Поставлю Максимум,то если будут две и более квитанций по этому лс,то он и выдаст в качестве долга по лицевому счету максимальную задолжность по одной из квитанций. Здесь как-то хитрее нужно сделать.
7 barsik123
 
20.06.14
19:13
Придумал пока только так сделать, сначала в одну таблицу собираю долги по лицевым счетам, во второй таблице собираю долги по квитанциям, в третью таблицу кидаю последние иски. И все это объединяю:
ВЫБРАТЬ
    Остатки.ЛицевойСчет КАК ЛицевойСчет,
    СУММА(Остатки.СуммаОстаток) КАК Долг
ПОМЕСТИТЬ ДолгПоЛС
ИЗ
    РегистрНакопления.НачислениеКвартПлатыЛС.Остатки(
            &Дата,
            ЛицевойСчет = &ЛС
                И Услуги = &Услуга) КАК Остатки

СГРУППИРОВАТЬ ПО
    Остатки.ЛицевойСчет
;

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

СГРУППИРОВАТЬ ПО
    Остатки.ЛицевойСчет,
    Остатки.Квитанция,
    Остатки.Квитанция.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СтатусыИсковСрезПоследних.Иск,
    СтатусыИсковСрезПоследних.Статус,
    СтатусыИсковСрезПоследних.Иск.НачалоИсковогоПериода КАК НачалоИсковогоПериода,
    СтатусыИсковСрезПоследних.Иск.КонецИсковогоПериода КАК КонецИсковогоПериода
ПОМЕСТИТЬ ИСКИ
ИЗ
    РегистрСведений.СтатусыИсков.СрезПоследних(, Иск.ЛицевойСчет = &ЛС) КАК СтатусыИсковСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДолгПоЛС.ЛицевойСчет КАК ЛицевойСчет,
    ДолгКвитанцииПоЛС.Квитанция КАК Квитанция,
    ДолгПоЛС.Долг КАК Долг,
    ДолгКвитанцииПоЛС.Долг КАК ДолгПоКвитанции,
    Иски.Иск,
    Иски.Статус
ИЗ
    ДолгПоЛС КАК ДолгПоЛС
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДолгКвитанцииПоЛС КАК ДолгКвитанцииПоЛС
        ПО ДолгПоЛС.ЛицевойСчет = ДолгКвитанцииПоЛС.ЛицевойСчет
        ЛЕВОЕ СОЕДИНЕНИЕ ИСКИ КАК Иски
        ПО (ДолгКвитанцииПоЛС.ЛицевойСчет = Иски.Иск.ЛицевойСчет)
            И (ДолгКвитанцииПоЛС.ДатаДок МЕЖДУ Иски.НачалоИсковогоПериода И Иски.КонецИсковогоПериода)

Конечно,обрабатывать такой результат выполнения не очень удобно, получается придется бежать по обычной таблице значений, а не по группировкам.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший