Имя: Пароль:
1C
 
Запрос, показывающий возникновение и прекращение задолженности в УТ 10
0 Obliterator
 
10.04.17
13:05
Всем привет!

Стоит задача - в УТ 10 (10.3.37.1) написать запрос, показывающий по выбранному договору и за выбранный период даты возникновения и окончания задолженности, в итоге нужно получить таблицу вида:

https://docs.google.com/spreadsheets/d/1swilTDOXzhFequ7lpLb3PdaWV3cAx5qgVb2Dx7AUPyA/edit?usp=sharing

Пишу такой запрос:

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

УПОРЯДОЧИТЬ ПО
    Регистратор
АВТОУПОРЯДОЧИВАНИЕ

Получаю такой результат:

https://drive.google.com/file/d/0B6F_pZSHKOpsWTVILVhLSFl0SU0/view?usp=sharing

Не получается объединить полученные данные в таблицу нужного вида. Что я делаю не так? Как написать запрос так, чтобы получилась таблица нужного вида?
1 Альбатрос
 
10.04.17
13:08
Соединять надо
2 Альбатрос
 
10.04.17
13:09
А вобще нужен учет по документам расчетов и все
3 Obliterator
 
10.04.17
13:10
(1) Что соединять? Как? Можете подсказать? Думаю, не могу сообразить.
4 Obliterator
 
10.04.17
13:19
Что с чем нужно объединить? Выбрать отдельно регистраторы с началом и окончанием задолженности и сделать объединение?
5 Альбатрос
 
10.04.17
13:22
(4) Не объединение, а соединение
6 Альбатрос
 
10.04.17
13:23
А вот по какому условию соединять хз. А чо тебе (2) не нравится?
7 Obliterator
 
10.04.17
14:00
(6) Клиенту не нравится.
8 Obliterator
 
10.04.17
14:01
(5) То есть, выбрать сначала с датами открытия задолженности, и левое соединение с датами закрытия? Или как?
9 Злопчинский
 
10.04.17
14:04
Посмотри на ИС у Ильдаровича
10 Obliterator
 
10.04.17
14:07
(9) Пардон, если глупый вопрос, но что это за ИС у Ильдаровича?
11 DrShad
 
10.04.17
14:09
(10) ИС 7 )))
12 Numerus Mikhail
 
10.04.17
14:14
13 Arutynov
 
10.04.17
15:38
Может глупо но по быстрому:
ВЫБРАТЬ
    Взаиморасчеты.Регистратор.ДокументОснование КАК ДолгПоявилсяРегистратор,
    ВЫБОР
        КОГДА Взаиморасчеты.СуммаВзаиморасчетовРасход > 0
            ТОГДА Взаиморасчеты.Регистратор
    КОНЕЦ КАК ДолгЗакрылсяРегистратор,
    Взаиморасчеты.Регистратор.ДокументОснование.СуммаДокумента,
    Взаиморасчеты.СуммаВзаиморасчетовРасход,
    Взаиморасчеты.Регистратор.ДокументОснование.Дата КАК ДолгПоявился,
    ВЫБОР
        КОГДА Взаиморасчеты.СуммаВзаиморасчетовРасход > 0
            ТОГДА Взаиморасчеты.Регистратор.Дата
    КОНЕЦ КАК ДолгЗакрылся,
    ДЕНЬ(Взаиморасчеты.Регистратор.ДокументОснование.Дата) КАК ДеньПоявился,
    ДЕНЬ(ВЫБОР
            КОГДА Взаиморасчеты.СуммаВзаиморасчетовРасход > 0
                ТОГДА Взаиморасчеты.Регистратор.Дата
        КОНЕЦ) КАК ДеньЗакрылся
ПОМЕСТИТЬ Временная
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , ДоговорКонтрагента = &ДоговорКонтрагента) КАК Взаиморасчеты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Временная.ДолгПоявилсяРегистратор,
    Временная.ДолгЗакрылсяРегистратор,
    Временная.ДолгПоявился,
    Временная.ДолгЗакрылся,
    Временная.ДеньЗакрылся - Временная.ДеньПоявился КАК КоличествоДней
ИЗ
    Временная КАК Временная
14 Obliterator
 
10.04.17
16:03
Сделали вот так, может поможет кому...



ВЫБРАТЬ
    ВЫБОР
        КОГДА Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток > 0
                И Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток <= 0
            ТОГДА Взаиморасчеты.Период
        ИНАЧЕ 0
    КОНЕЦ КАК ДолгПоявился,
    ВЫБОР
        КОГДА Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток > 0
                И Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток <= 0
            ТОГДА Взаиморасчеты.Регистратор
        ИНАЧЕ НЕОПРЕДЕЛЕНО
    КОНЕЦ КАК ДолгПоявился_Регистратор
ПОМЕСТИТЬ Вт_Появление
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , ДоговорКонтрагента = &ДоговорКонтрагента) КАК Взаиморасчеты
ГДЕ
    Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток > 0
    И Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток <= 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫБОР
        КОГДА Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток <= 0
                И Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток > 0
            ТОГДА Взаиморасчеты.Период
        ИНАЧЕ 0
    КОНЕЦ КАК ДатаЗакрылся,
    ВЫБОР
        КОГДА Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток <= 0
                И Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток > 0
            ТОГДА Взаиморасчеты.Регистратор
        ИНАЧЕ НЕОПРЕДЕЛЕНО
    КОНЕЦ КАК ЗакрылсяРегистратор
ПОМЕСТИТЬ Вт_Закрытие
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , ДоговорКонтрагента = &ДоговорКонтрагента) КАК Взаиморасчеты
ГДЕ
    Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток <= 0
    И Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Вт_Появление.ДолгПоявился КАК ДолгПоявился_свзь,
    Вт_Появление.ДолгПоявился_Регистратор,
    МИНИМУМ(Вт_Закрытие.ДатаЗакрылся) КАК ДатаЗакрылся
ПОМЕСТИТЬ ВТ_Данные
ИЗ
    Вт_Появление КАК Вт_Появление
        ПОЛНОЕ СОЕДИНЕНИЕ Вт_Закрытие КАК Вт_Закрытие
        ПО Вт_Появление.ДолгПоявился <= Вт_Закрытие.ДатаЗакрылся

СГРУППИРОВАТЬ ПО
    Вт_Появление.ДолгПоявился_Регистратор,
    Вт_Появление.ДолгПоявился
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Данные.ДатаЗакрылся,
    Вт_Закрытие.ЗакрылсяРегистратор,
    ВТ_Данные.ДолгПоявился_Регистратор,
    ВТ_Данные.ДолгПоявился_свзь
ПОМЕСТИТЬ ВТ_Буфер
ИЗ
    Вт_Закрытие КАК Вт_Закрытие
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные КАК ВТ_Данные
        ПО Вт_Закрытие.ДатаЗакрылся = ВТ_Данные.ДатаЗакрылся
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Вт_Появление.ДолгПоявился,
    Вт_Появление.ДолгПоявился_Регистратор,
    ВТ_Буфер.ДатаЗакрылся,
    ВТ_Буфер.ЗакрылсяРегистратор
ИЗ
    Вт_Появление КАК Вт_Появление
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Буфер КАК ВТ_Буфер
        ПО Вт_Появление.ДолгПоявился = ВТ_Буфер.ДолгПоявился_свзь
            И Вт_Появление.ДолгПоявился_Регистратор = ВТ_Буфер.ДолгПоявился_Регистратор



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