Имя: Пароль:
1C
1С v8
УТ 10. Отчет Задолженность контрагентов по периодам.
0 JeHer
 
05.08.14
06:55
Понадобилось пользователю в УТ 10.3 видеть задолженность контрагентов по периодам. Есть типовой отчет, который показывает эту задолженность на одну конкретную дату, т.е. данные берутся из таблицы остатков. Прикрутил к этому отчету таблицу ВзаиморасчетыСКонтрагентамиОстаткиИОбороты, чтобы получать остатки по периодам, но отчет формируется всё равно неправильно.
Грешу на условие связи, но никак не могу догнать, откуда берутся минусовые остатки, если &ПереключательЗадолженность = 1?

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


В результат запроса всё равно попадают остатки с минусом

куда залить лучше картину?

В чем может быть причина?
1 Cube
 
05.08.14
07:19
(0) Берешь СКД, ложишь туда простой запрос:

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

Заполняешь ресурсы.
На последней закладке делаешь таблицу: группировка строк - ДоговорКонтрагента, группировка колонок - ПериодМесяц, выбранные поля - СуммаВзаиморасчетовКонечныйОстаток

Сохраняешь. Пользуешься.
Остальные настройки добавить по вкусу.
2 JeHer
 
05.08.14
07:22
(1) В том-то и дело, что таким образом получаются свернутые  остатки, а именно эта связь дает или дебиторскую или кредиторскую или остатки в зависимости от переключателя

(ВЫБОР
                КОГДА &ПереключательЗадолженность = 1
                    ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОборотыНужногоТипа.СуммаВзаиморасчетовКонечныйОстаток > 0
                КОГДА &ПереключательЗадолженность = 2
                    ТОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОборотыНужногоТипа.СуммаВзаиморасчетовКонечныйОстаток < 0
                ИНАЧЕ ИСТИНА
            КОНЕЦ)
3 JeHer
 
05.08.14
07:23
(2)+ т.е. у контрагента по сделкам на конец периода остатки могут быть как положительные так и отрицательные.
4 Cube
 
05.08.14
07:34
(2) Я тебе про отчет на СКД (новый, с блекджеком и шл...), а ты мне про типовой отчет на построителе отчетов...
Делай на СКД.
5 Cube
 
05.08.14
07:38
(2) А, так ты ещё и костыли какие-то лепишь там...
Вообще-то, характер отношений по договору (кто дебитор, а кто кредитор) определяет вид договора (с поставщиком, с покупателем)... Всегда так было. Единственное - вид договора "прочее" не дает однозначного ответа.
6 JeHer
 
05.08.14
07:39
(4) какая разница: СКД или построитель? Результат один и тот же. Хоть к блекджеку и шлюхам еще и вискарь был бы.
7 Godofsin
 
05.08.14
07:54
(6) Никак нет! Свой отчет на СКД это свой блек-джек и свои шлюхи!
8 JeHer
 
05.08.14
08:01
(7) как не хочется рисовать нижеприведенную хрень:
- вытащить все обороты и остатки, чтобы определить периоды
- затем в цикле по периодам получать положительные или отрицательные остатки на конец каждого периода

Видимо, придется делать или убеждать пользователя, что Задолженность = Остатки по взаиморасчетам. Т.е. какая разница, по каким сделкам он нам должен, а по каким - мы ему? Всё равно в целом по итогам периода или он нам должен или мы ему, ну или сальдо нулевое - и все довольны.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс