Обращаю внимание, что Отчет не будет показывать просроченные долги в стандартной конфигурации УТ 10.3 (см. PS в конце текста)
Отчет будем строить на СКД с использовантем методики Простейший вариант создания отчета или как быстро создать красивый отчет на СКД (v8 Обычное приложение), т. е. начнем с основной схемы компоновки данных, в которую добавим новый набор данных, определенных запросом:
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток) КАК СуммаУпрОстаток,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Организация КАК Организация,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Владелец КАК Контрагент,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности + &СдвигДат
ИНАЧЕ "-"
КОНЕЦ КАК ДопустимоеЧислоДнейДолга,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьСуммуЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимаяСуммаЗадолженности
ИНАЧЕ "-"
КОНЕЦ КАК ДопустимаяСуммаДолга
ПОМЕСТИТЬ ДоговорСуммаДолга
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ГраницаКонца, {(ДоговорКонтрагента.Организация В ИЕРАРХИИ (&Организация)) КАК ОтборПоОрганизации, (ДоговорКонтрагента.Владелец В ИЕРАРХИИ (&Контрагент)) КАК ОтборПоКонтрагенту}) КАК ВзаиморасчетыСКонтрагентамиОстатки
ГДЕ
ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток > 0
СГРУППИРОВАТЬ ПО
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности + &СдвигДат
ИНАЧЕ "-"
КОНЕЦ,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьСуммуЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимаяСуммаЗадолженности
ИНАЧЕ "-"
КОНЕЦ,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Организация,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Владелец
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период) КАК Период,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента
ПОМЕСТИТЬ ДоговорДатаПоследнегоПереходаЧерезНоль
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(
,
&ГраницаКонца,
Регистратор,
,
ДоговорКонтрагента В
(ВЫБРАТЬ
ДоговорСуммаДолга.ДоговорКонтрагента
ИЗ
ДоговорСуммаДолга)) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
ГДЕ
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрНачальныйОстаток <=0 И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрКонечныйОстаток > 0
СГРУППИРОВАТЬ ПО
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
ВзаиморасчетыСКонтрагентамиОбороты.Период КАК ДатаДокумента,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ, ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности + &СдвигДат)
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
КОНЕЦ КАК ДатаОплаты,
ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход - ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход КАК Приход
ПОМЕСТИТЬ ДоговорРеализации
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
,
&ГраницаКонца,
Регистратор,
ДоговорКонтрагента В
(ВЫБРАТЬ
ДоговорСуммаДолга.ДоговорКонтрагента
ИЗ
ДоговорСуммаДолга)) КАК ВзаиморасчетыСКонтрагентамиОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДоговорДатаПоследнегоПереходаЧерезНоль КАК ДоговорДатаПоследнегоПереходаЧерезНоль
ПО ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента = ДоговорДатаПоследнегоПереходаЧерезНоль.ДоговорКонтрагента
И ВзаиморасчетыСКонтрагентамиОбороты.Период >= ДоговорДатаПоследнегоПереходаЧерезНоль.Период
ГДЕ
ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход - ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход > 0
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДоговорРеализации.ДоговорКонтрагента,
ДоговорРеализации.ДатаДокумента,
ДоговорРеализации.ДатаОплаты,
ДоговорРеализации.Регистратор,
ДоговорРеализации.Приход,
ВЫБОР
КОГДА ДоговорРеализации.ДатаОплаты = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА NULL
ИНАЧЕ РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорРеализации.ДатаОплаты, ДЕНЬ, 1), &Дата, ДЕНЬ)
КОНЕЦ КАК ДнейПросрочки,
СУММА(ДоговорРеализацияКО.Приход) - ДоговорРеализации.Приход КАК НО,
СУММА(ДоговорРеализацияКО.Приход) КАК КО,
ДоговорСуммаДолга.СуммаУпрОстаток
ПОМЕСТИТЬ ДоговорРеализацииОбратныйНарастИтог
ИЗ
ДоговорСуммаДолга КАК ДоговорСуммаДолга
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДоговорРеализации КАК ДоговорРеализации
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДоговорРеализации КАК ДоговорРеализацияКО
ПО ДоговорРеализации.ДоговорКонтрагента = ДоговорРеализацияКО.ДоговорКонтрагента
И (ВЫБОР
КОГДА ДоговорРеализации.ДатаОплаты = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА ВЫБОР
КОГДА ДоговорРеализации.ДатаДокумента = ДоговорРеализацияКО.ДатаДокумента
ТОГДА ДоговорРеализации.Регистратор ИНАЧЕ ДоговорРеализации.ДатаДокумента КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА ДоговорРеализации.ДатаОплаты = ДоговорРеализацияКО.ДатаОплаты
ТОГДА ДоговорРеализации.Регистратор ИНАЧЕ ДоговорРеализации.ДатаОплаты КОНЕЦ
КОНЕЦ)
ПО ДоговорСуммаДолга.ДоговорКонтрагента = ДоговорРеализации.ДоговорКонтрагента
СГРУППИРОВАТЬ ПО
ДоговорРеализации.ДоговорКонтрагента,
ДоговорРеализации.ДатаДокумента,
ДоговорРеализации.ДатаОплаты,
ДоговорРеализации.Регистратор,
ДоговорРеализации.Приход,
ДоговорСуммаДолга.СуммаУпрОстаток
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДоговорРеализацииОбратныйНарастИтог.ДоговорКонтрагента,
ДоговорРеализацииОбратныйНарастИтог.ДатаДокумента КАК ДатаДокумента,
ДоговорРеализацииОбратныйНарастИтог.ДатаОплаты КАК ДатаОплаты,
ДоговорРеализацииОбратныйНарастИтог.Регистратор,
ДоговорРеализацииОбратныйНарастИтог.Приход КАК СуммаДокумента,
ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток - ДоговорРеализацииОбратныйНарастИтог.КО >= 0
ТОГДА ДоговорРеализацииОбратныйНарастИтог.Приход
ИНАЧЕ ДоговорРеализацииОбратныйНарастИтог.Приход - ДоговорРеализацииОбратныйНарастИтог.КО + ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток
КОНЕЦ КАК СуммаДолга,
ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.ДнейПросрочки > 0
ТОГДА ДоговорРеализацииОбратныйНарастИтог.ДнейПросрочки
ИНАЧЕ 0
КОНЕЦ КАК ДнейПросрочки,
ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.ДнейПросрочки > 0
ТОГДА ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток - ДоговорРеализацииОбратныйНарастИтог.КО >= 0
ТОГДА ДоговорРеализацииОбратныйНарастИтог.Приход
ИНАЧЕ ДоговорРеализацииОбратныйНарастИтог.Приход - ДоговорРеализацииОбратныйНарастИтог.КО + ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток
КОНЕЦ
КОНЕЦ КАК СуммаПросроченногоДолга,
ДоговорРеализацииОбратныйНарастИтог.НО,
ДоговорРеализацииОбратныйНарастИтог.КО,
ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток,
ДоговорРеализацииОбратныйНарастИтог.Регистратор.ОтражатьВБухгалтерскомУчете КАК БУ,
ДоговорСуммаДолга.Организация,
ДоговорСуммаДолга.Контрагент,
ДоговорСуммаДолга.ДопустимоеЧислоДнейДолга,
ДоговорСуммаДолга.ДопустимаяСуммаДолга,
СФпоРеализациям.СФ КАК СФ
ИЗ
ДоговорРеализацииОбратныйНарастИтог КАК ДоговорРеализацииОбратныйНарастИтог
ЛЕВОЕ СОЕДИНЕНИЕ ДоговорСуммаДолга КАК ДоговорСуммаДолга
ПО ДоговорРеализацииОбратныйНарастИтог.ДоговорКонтрагента = ДоговорСуммаДолга.ДоговорКонтрагента
{ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СчетФактураВыданный.Ссылка КАК СФ,
СчетФактураВыданный.ДокументОснование КАК Реализация
ИЗ
Документ.СчетФактураВыданный КАК СчетФактураВыданный
ГДЕ
СчетФактураВыданный.Проведен = ИСТИНА
И СчетФактураВыданный.ПометкаУдаления = ЛОЖЬ
И СчетФактураВыданный.ДокументОснование В
(ВЫБРАТЬ
ДоговорРеализацииОбратныйНарастИтог.Регистратор
ИЗ
ДоговорРеализацииОбратныйНарастИтог)) КАК СФпоРеализациям
ПО ДоговорРеализацииОбратныйНарастИтог.Регистратор = СФпоРеализациям.Реализация}
ГДЕ
ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток - ДоговорРеализацииОбратныйНарастИтог.НО > 0
УПОРЯДОЧИТЬ ПО
ДатаОплаты,
ДатаДокумента
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
ВидыКонтактнойИнформации.Ссылка,
ВидыКонтактнойИнформации.Наименование,
ВидыКонтактнойИнформации.ВидОбъектаКонтактнойИнформации
ИЗ
Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
ГДЕ
ВидыКонтактнойИнформации.ВидОбъектаКонтактнойИнформации = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовКонтактнойИнформации.Контрагенты)
И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ)
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ЗНАЧЕНИЯХАРАКТЕРИСТИК (ВЫБРАТЬ
КонтактнаяИнформация.Объект,
КонтактнаяИнформация.Вид,
КонтактнаяИнформация.Представление
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация)
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА Вид
ПОЛЕЗНАЧЕНИЯ Представление }
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДоговорРеализацииОбратныйНарастИтог
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДоговорРеализации
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДоговорДатаПоследнегоПереходаЧерезНоль
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДоговорСуммаДолга
Запрос состоит из нескольких подзапросов:
1. ДоговорСуммаДолга:
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток) КАК СуммаУпрОстаток,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Организация КАК Организация,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Владелец КАК Контрагент,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности + &СдвигДат
ИНАЧЕ "-"
КОНЕЦ КАК ДопустимоеЧислоДнейДолга,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьСуммуЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимаяСуммаЗадолженности
ИНАЧЕ "-"
КОНЕЦ КАК ДопустимаяСуммаДолга
ПОМЕСТИТЬ ДоговорСуммаДолга
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ГраницаКонца, {(ДоговорКонтрагента.Организация В ИЕРАРХИИ (&Организация)) КАК ОтборПоОрганизации, (ДоговорКонтрагента.Владелец В ИЕРАРХИИ (&Контрагент)) КАК ОтборПоКонтрагенту}) КАК ВзаиморасчетыСКонтрагентамиОстатки
ГДЕ
ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток > 0
СГРУППИРОВАТЬ ПО
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности + &СдвигДат
ИНАЧЕ "-"
КОНЕЦ,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КонтролироватьСуммуЗадолженности
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ДопустимаяСуммаЗадолженности
ИНАЧЕ "-"
КОНЕЦ,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Организация,
ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.Владелец
;
- выборка из регистра взаиморасчетов только тех договоров по которым на указанную дату имеется долг контрагента, с попутным получением допустимых сумм задолженности и допустимого количества дней задолженности. Обращаю внимание на то, что в выражении поля ДопустимоеЧислоДнейЗадолженности возможно использование параметра СдвигДат — который обеспечивает сдвиг расчета просроченой задолженности.
Результат этой части запроса (в консоли отчетов) будет примерно таким (здесь для простоты включен отбор по договору):
ДоговорКонтрагента |
Организация |
Контрагент |
ДопустимоеЧислоДнейДолга |
ДопустимаяСуммаДолга |
СуммаУпрОстаток |
№5420 от 01.06.2011 |
ООО Сервис |
Горбунков С.Н. |
20 |
4 500,00 |
8 775,00 |
2. ДоговорДатаПоследнегоПереходаЧерезНоль:
ВЫБРАТЬ
МАКСИМУМ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период) КАК Период,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента
ПОМЕСТИТЬ ДоговорДатаПоследнегоПереходаЧерезНоль
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(
,
&ГраницаКонца,
Регистратор,
,
ДоговорКонтрагента В
(ВЫБРАТЬ
ДоговорСуммаДолга.ДоговорКонтрагента
ИЗ
ДоговорСуммаДолга)) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
ГДЕ
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрНачальныйОстаток <=0
И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрКонечныйОстаток > 0
СГРУППИРОВАТЬ ПО
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента
;
- получает дату последнего перехода через 0, для каждого договора, попавшего в результат первого запроса
Результат двух рассмотренных частей запроса:
ДоговорКонтрагента |
Период |
№5420 от 01.06.2011 |
03.10.2011 13:27:14 |
3. ДоговорРеализации:
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
ВзаиморасчетыСКонтрагентамиОбороты.Период КАК ДатаДокумента,
ВЫБОР
КОГДА ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ, ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности + &СдвигДат)
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
КОНЕЦ КАК ДатаОплаты,
ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход - ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход КАК Приход
ПОМЕСТИТЬ ДоговорРеализации
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
,
&ГраницаКонца,
Регистратор,
ДоговорКонтрагента В
(ВЫБРАТЬ
ДоговорСуммаДолга.ДоговорКонтрагента
ИЗ
ДоговорСуммаДолга)) КАК ВзаиморасчетыСКонтрагентамиОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДоговорДатаПоследнегоПереходаЧерезНоль КАК ДоговорДатаПоследнегоПереходаЧерезНоль
ПО ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента = ДоговорДатаПоследнегоПереходаЧерезНоль.ДоговорКонтрагента
И ВзаиморасчетыСКонтрагентамиОбороты.Период >= ДоговорДатаПоследнегоПереходаЧерезНоль.Период
ГДЕ
ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход - ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход > 0
;
- формирует выборку регистраторов регистра взаиморасчетов по договорам из первого запроса начиная с даты последнего перехода через 0 (из второго запроса), при условии, что регистратор увеличивает долг контрагента.
Результат:
ДатаОплаты |
ДоговорКонтрагента |
Приход |
Регистратор |
14.11.2011 16:36:29 |
№5420 от 01.06.2011 |
2 824,56 |
Реализация товаров и услуг 00000000862 от 25.10.2011 16:36:29 |
23.10.2011 14:01:43 |
№5420 от 01.06.2011 |
1 027,08 |
Реализация товаров и услуг 00000000003 от 03.10.2011 14:01:43 |
14.11.2011 11:06:31 |
№5420 от 01.06.2011 |
339,12 |
Реализация товаров и услуг 00000000840 от 25.10.2011 11:06:31 |
09.11.2011 11:13:38 |
№5420 от 01.06.2011 |
802,8 |
Реализация товаров и услуг 00000000666 от 20.10.2011 11:13:38 |
23.10.2011 13:27:14 |
№5420 от 01.06.2011 |
1 147,68 |
Реализация товаров и услуг 00000000002 от 03.10.2011 13:27:14 |
17.11.2011 11:20:28 |
№5420 от 01.06.2011 |
640,08 |
Реализация товаров и услуг 00000000982 от 28.10.2011 11:20:28 |
23.10.2011 14:41:04 |
№5420 от 01.06.2011 |
1 106,28 |
Реализация товаров и услуг 00000000004 от 03.10.2011 14:41:04 |
01.11.2011 15:12:47 |
№5420 от 01.06.2011 |
725,4 |
Реализация товаров и услуг 00000000371 от 12.10.2011 15:12:47 |
27.10.2011 15:09:03 |
№5420 от 01.06.2011 |
162 |
Реализация товаров и услуг 00000000232 от 07.10.2011 15:09:03 |
4. ДоговорРеализацииОбратныйНарастИтог:
ВЫБРАТЬ
ДоговорРеализации.ДоговорКонтрагента,
ДоговорРеализации.ДатаДокумента,
ДоговорРеализации.ДатаОплаты,
ДоговорРеализации.Регистратор,
ДоговорРеализации.Приход,
ВЫБОР
КОГДА ДоговорРеализации.ДатаОплаты = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА NULL
ИНАЧЕ РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорРеализации.ДатаОплаты, ДЕНЬ, 1), &Дата, ДЕНЬ)
КОНЕЦ КАК ДнейПросрочки,
СУММА(ДоговорРеализацияКО.Приход) - ДоговорРеализации.Приход КАК НО,
СУММА(ДоговорРеализацияКО.Приход) КАК КО,
ДоговорСуммаДолга.СуммаУпрОстаток
ПОМЕСТИТЬ ДоговорРеализацииОбратныйНарастИтог
ИЗ
ДоговорСуммаДолга КАК ДоговорСуммаДолга
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДоговорРеализации КАК ДоговорРеализации
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДоговорРеализации КАК ДоговорРеализацияКО
ПО ДоговорРеализации.ДоговорКонтрагента = ДоговорРеализацияКО.ДоговорКонтрагента
И (ВЫБОР
КОГДА ДоговорРеализации.ДатаОплаты = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА ВЫБОР
КОГДА ДоговорРеализации.ДатаДокумента = ДоговорРеализацияКО.ДатаДокумента
ТОГДА ДоговорРеализации.Регистратор
ИНАЧЕ ДоговорРеализации.ДатаДокумента
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА ДоговорРеализации.ДатаОплаты = ДоговорРеализацияКО.ДатаОплаты
ТОГДА ДоговорРеализации.Регистратор
ИНАЧЕ ДоговорРеализации.ДатаОплаты
КОНЕЦ
КОНЕЦ)
ПО ДоговорСуммаДолга.ДоговорКонтрагента = ДоговорРеализации.ДоговорКонтрагента
СГРУППИРОВАТЬ ПО
ДоговорРеализации.ДоговорКонтрагента,
ДоговорРеализации.ДатаДокумента,
ДоговорРеализации.ДатаОплаты,
ДоговорРеализации.Регистратор,
ДоговорРеализации.Приход,
ДоговорСуммаДолга.СуммаУпрОстаток
;
- формирует таблицу обратного нарастающего итога долга контрагента (фактически имитирует рассчет итогов регистра) по результатам третьего запроса.
Результат:
ДатаДокумента |
ДатаОплаты |
ДнейПросрочки |
ДоговорКонтрагента |
Регистратор |
СуммаУпрОстаток |
НО |
Приход |
КО |
20.10.2011 11:13:38 |
09.11.2011 11:13:38 |
-9 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000666 от 20.10.2011 11:13:38 |
6 270,00 |
3 803,76 |
802,8 |
4 606,56 |
12.10.2011 15:12:47 |
01.11.2011 15:12:47 |
-1 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000371 от 12.10.2011 15:12:47 |
6 270,00 |
4 606,56 |
725,4 |
5 331,96 |
03.10.2011 14:01:43 |
23.10.2011 14:01:43 |
8 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000003 от 03.10.2011 14:01:43 |
6 270,00 |
6 600,24 |
1 027,08 |
7 627,32 |
25.10.2011 11:06:31 |
14.11.2011 11:06:31 |
-14 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000840 от 25.10.2011 11:06:31 |
6 270,00 |
3 464,64 |
339,12 |
3 803,76 |
07.10.2011 15:09:03 |
27.10.2011 15:09:03 |
4 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000232 от 07.10.2011 15:09:03 |
6 270,00 |
5 331,96 |
162 |
5 493,96 |
28.10.2011 11:20:28 |
17.11.2011 11:20:28 |
-17 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000982 от 28.10.2011 11:20:28 |
6 270,00 |
640,08 |
640,08 |
|
03.10.2011 13:27:14 |
23.10.2011 13:27:14 |
8 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000002 от 03.10.2011 13:27:14 |
6 270,00 |
7 627,32 |
1 147,68 |
8 775 |
25.10.2011 16:36:29 |
14.11.2011 16:36:29 |
-14 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000862 от 25.10.2011 16:36:29 |
6 270,00 |
640,08 |
2 824,56 |
3 464,64 |
03.10.2011 14:41:04 |
23.10.2011 14:41:04 |
8 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000004 от 03.10.2011 14:41:04 |
6 270,00 |
5 493,96 |
1 106,28 |
6 600,24 |
5. И наконец, итоговая выборка:
ВЫБРАТЬ
ДоговорРеализацииОбратныйНарастИтог.ДоговорКонтрагента,
ДоговорРеализацииОбратныйНарастИтог.ДатаДокумента КАК ДатаДокумента,
ДоговорРеализацииОбратныйНарастИтог.ДатаОплаты КАК ДатаОплаты,
ДоговорРеализацииОбратныйНарастИтог.Регистратор,
ДоговорРеализацииОбратныйНарастИтог.Приход КАК СуммаДокумента,
ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток - ДоговорРеализацииОбратныйНарастИтог.КО >= 0
ТОГДА ДоговорРеализацииОбратныйНарастИтог.Приход
ИНАЧЕ ДоговорРеализацииОбратныйНарастИтог.Приход - ДоговорРеализацииОбратныйНарастИтог.КО + ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток
КОНЕЦ КАК СуммаДолга,
ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.ДнейПросрочки > 0
ТОГДА ДоговорРеализацииОбратныйНарастИтог.ДнейПросрочки
ИНАЧЕ 0
КОНЕЦ КАК ДнейПросрочки,
ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.ДнейПросрочки > 0
ТОГДА ВЫБОР
КОГДА ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток - ДоговорРеализацииОбратныйНарастИтог.КО >= 0
ТОГДА ДоговорРеализацииОбратныйНарастИтог.Приход
ИНАЧЕ ДоговорРеализацииОбратныйНарастИтог.Приход - ДоговорРеализацииОбратныйНарастИтог.КО + ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток
КОНЕЦ
КОНЕЦ КАК СуммаПросроченногоДолга,
ДоговорРеализацииОбратныйНарастИтог.НО,
ДоговорРеализацииОбратныйНарастИтог.КО,
ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток,
ДоговорРеализацииОбратныйНарастИтог.Регистратор.ОтражатьВБухгалтерскомУчете КАК БУ,
ДоговорСуммаДолга.Организация,
ДоговорСуммаДолга.Контрагент,
ДоговорСуммаДолга.ДопустимоеЧислоДнейДолга,
ДоговорСуммаДолга.ДопустимаяСуммаДолга,
СФпоРеализациям.СФ КАК СФ
ИЗ
ДоговорРеализацииОбратныйНарастИтог КАК ДоговорРеализацииОбратныйНарастИтог
ЛЕВОЕ СОЕДИНЕНИЕ ДоговорСуммаДолга КАК ДоговорСуммаДолга
ПО ДоговорРеализацииОбратныйНарастИтог.ДоговорКонтрагента = ДоговорСуммаДолга.ДоговорКонтрагента
{ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СчетФактураВыданный.Ссылка КАК СФ,
СчетФактураВыданный.ДокументОснование КАК Реализация
ИЗ
Документ.СчетФактураВыданный КАК СчетФактураВыданный
ГДЕ
СчетФактураВыданный.Проведен = ИСТИНА
И СчетФактураВыданный.ПометкаУдаления = ЛОЖЬ
И СчетФактураВыданный.ДокументОснование В
(ВЫБРАТЬ
ДоговорРеализацииОбратныйНарастИтог.Регистратор
ИЗ
ДоговорРеализацииОбратныйНарастИтог)) КАК СФпоРеализациям
ПО ДоговорРеализацииОбратныйНарастИтог.Регистратор = СФпоРеализациям.Реализация}
ГДЕ
ДоговорРеализацииОбратныйНарастИтог.СуммаУпрОстаток - ДоговорРеализацииОбратныйНарастИтог.НО > 0
УПОРЯДОЧИТЬ ПО
ДатаОплаты,
ДатаДокумента
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
ВидыКонтактнойИнформации.Ссылка,
ВидыКонтактнойИнформации.Наименование,
ВидыКонтактнойИнформации.ВидОбъектаКонтактнойИнформации
ИЗ
Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
ГДЕ
ВидыКонтактнойИнформации.ВидОбъектаКонтактнойИнформации = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовКонтактнойИнформации.Контрагенты)
И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ)
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ЗНАЧЕНИЯХАРАКТЕРИСТИК (ВЫБРАТЬ
КонтактнаяИнформация.Объект,
КонтактнаяИнформация.Вид,
КонтактнаяИнформация.Представление
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация)
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА Вид
ПОЛЕЗНАЧЕНИЯ Представление }
;
- формирует дебиторку, и получает необходимые поля для вывода информации на экран почти в окончательном виде, остальное за нас сделает СКД.
Результат
ДатаДокумента |
ДатаОплаты |
ДнейПросрочки |
ДоговорКонтрагента |
Регистратор |
СуммаУпрОстаток |
НО |
КО |
03.10.2011 14:41:04 |
23.10.2011 14:41:04 |
8 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000004 от 03.10.2011 14:41:04 |
6 270,00 |
5 493,96 |
6 600,24 |
28.10.2011 11:20:28 |
17.11.2011 11:20:28 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000982 от 28.10.2011 11:20:28 |
6 270,00 |
640,08 |
||
25.10.2011 16:36:29 |
14.11.2011 16:36:29 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000862 от 25.10.2011 16:36:29 |
6 270,00 |
640,08 |
3 464,64 |
|
20.10.2011 11:13:38 |
09.11.2011 11:13:38 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000666 от 20.10.2011 11:13:38 |
6 270,00 |
3 803,76 |
4 606,56 |
|
25.10.2011 11:06:31 |
14.11.2011 11:06:31 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000840 от 25.10.2011 11:06:31 |
6 270,00 |
3 464,64 |
3 803,76 |
|
12.10.2011 15:12:47 |
01.11.2011 15:12:47 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000371 от 12.10.2011 15:12:47 |
6 270,00 |
4 606,56 |
5 331,96 |
|
07.10.2011 15:09:03 |
27.10.2011 15:09:03 |
4 |
№5420 от 01.06.2011 |
Реализация товаров и услуг 00000000232 от 07.10.2011 15:09:03 |
6 270,00 |
5 331,96 |
5 493,96 |
Добавим мелкие штрихи в СКД:
В полях схемы компоновки данных у Поля «ДоговорКонтрагента», нужно установить в столбце «Роль» флажек «Обязательное», у Поля «Регистратор» в столбце «Выражение представления» заполнить:
ВЫБОР
КОГДА ВЫРАЗИТЬ(Регистратор, "Документ.РеализацияТоваровУслуг") ЕСТЬ НЕ NULL
ТОГДА "Реал № " + СТРОКА(Регистратор.Номер) + " от " +
ФОРМАТ(Регистратор.Дата, "ДФ=dd.MM.yyyy") ИНАЧЕ
Регистратор
КОНЕЦ
Для сокращения длины строки в столбце «Регистратор»
Во вкладке «Вычисляемые поля» добавляем новые поля:
«ПроцентПросроченногоДолга» заполняем выражением «100*СуммаПросроченногоДолга/СуммаДолга»
и
«ПроцентПросроченнойСуммы» заполняем выражением «100*СуммаПросроченногоДолга/СуммаДокумента»
Во вкладке «Ресурсы» добавляем следующие ресурсы:
ПроцентПросроченногоДолга (выражение «100*Сумма(СуммаПросроченногоДолга)/Сумма(СуммаДолга)»),
ПроцентПросроченнойСуммы(выражение «100*Сумма(СуммаПросроченногоДолга)/Сумма(СуммаДокумента)»),
СуммаДокумента, СуммаДолга, СуммаПросроченногоДолга (Выражение для всех Сумма(с соотв. полем))
Прикручиваем форму, слегка изменяем её вид, задаем параметры в модуле формы как ранее описано в //infostart.ru/public/99753/
Получаем итоговый отчет. Работает шустро. Имеется тенденция к замедлению формирования отчета при увеличении периода хранения информации в базе (т.к. возрастает время обработки третьего подзапроса).
P.S.: по умолчанию реквизиты договоров "КонтролироватьЧислоДнейЗадолженности" и "КонтролироватьСуммуЗадолженности", а также сами значения соответствующих реквизитов не доступны для заполнения, если реквизит ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом, т.е. для использования данной обработки потребуется правка конфигурации, обеспечивающая возможность ввода соответствующих реквизитов, например в модуле формы элемента справочника договоры контрагентов можно "подправить" процедуру УстановитьВидимость, так:
Процедура УстановитьВидимость()
// Управление видимостью элементов формы
Если ВестиПоДокументамРасчетовСКонтрагентом Тогда
ВидимостьКонтроляДней = Истина;
Иначе
ВидимостьКонтроляДней = Ложь;
КонецЕсли;
ВидимостьКонтроляДней = Истина; //< --- ДОБАВЛЕННАЯ СТРОКА
...
...
Либо можно создать внешнюю форму для корректровки элемента справочника ДоговорыКонтрагентов.