Имя: Пароль:
1C
 
Запрос. Расчет данных за каждый день.
0 Denyk
 
17.07.10
23:39
Есть задача: рассчитать за определеный период (месяц например)по каждому дню какие-то данные (например просроченные долги клиентов) на каждый день этого периода. В СКД есть понятие дополнения периода, но его получается можно использовать только для стандартных ресурсов, я так понял, для вычисляемых данных ничего не получается. Подскажите, кто решал данную задачу.
1 Asmody
 
18.07.10
00:13
дополнение периода не для ресурсов вообще. в общем случае, все можно посчитать. не всегда тривиально, но можно
2 Denyk
 
18.07.10
00:19
То что все можно посчитать, это понятно :) Вопрос конкретный. Как один из вариантов решения - это объединение запросов по каждому из дней периодов. Хочу узнать нет ли более элегантного решения.
3 Рэйв
 
18.07.10
00:52
(0)В чем смысл расчета долгов на каждый день если на конец периода допустим ты ему должен, а не наоборот?
4 Aleksey_3
 
18.07.10
00:55
(3) Для оценки работа менеджера например. Т.е. показывает, что клиент не на наши бабки весь месяц живет, а в конце месяца долг закрывает. А он добросовестный и платит всегда вовремя
5 Рэйв
 
18.07.10
00:59
(4)Все равно за день- имхо, маразм. Раз в месяц на конец- вполне достаточно
6 Asmody
 
18.07.10
01:11
(3) долг - это у тебя остаток по какому-то регистру или производное от него? ну так тут было уже лес с подлеском веток тем про расчет остатка на каждую жату
7 Denyk
 
18.07.10
01:15
(5) Ежедневный расчет суммы штрафа за просроченные долги клиентов. А в конце месяца - сумма всех штрафов. Долги тут просто как начальные данные для расчета.
8 Denyk
 
18.07.10
01:23
В СКД если дополнить период для вывода по дням, то выводит остатки верные, но расчитать от них уже ничего не получится, только если в конкретном дне были изменения остатков.
9 Рэйв
 
18.07.10
01:23
(7)Это тебе не по дням надо тогда. Делал я такую вещь. просточенная дебиторская задолженность. Очень мутная штука.  Надо не на дни итоги выводить, а разворачивать по документам расхода, смотреть оплату по нему и не просроченна ли дата платежа по договору... Хрень полная.Чуть мозг не сломал.
10 Рэйв
 
18.07.10
01:25
*Просроченная
11 Denyk
 
18.07.10
01:29
(9) Да ничего особо заумного. В 7-ке спокойно сделал еще лет 5 назад. Алгоритм простой: рассчитываем на конец Дня №1 просроченный долг (дата оплаты документа < дата расчета), умножаем на процент + тоже самое с Днем №2 ... Днем №N.  В отчете это выглядит как строки по менеджерам, а колонки по каждому дню в периоде со значениями просроченных долгов по менеджеру и его сумма штрафа.
12 Рэйв
 
18.07.10
01:29
+Учитывая что оплата может прийти чем угодно. От платежки до бух операции
13 Рэйв
 
18.07.10
01:29
(11)--->(12)
14 Рэйв
 
18.07.10
01:30
+сможет быть предоплата
15 Рэйв
 
18.07.10
01:30
непривязанная ни к чему
16 Denyk
 
18.07.10
01:32
Блин, при чем тут оплата? У тебя может быть предоплата по любому клиенту, но по одному из них просроченный долг и по этому клиенту тебе начисляется штраф.
17 Рэйв
 
18.07.10
01:33
(16)Он тебе кидает 1000 000 и потом у него 2 месяца нет привязанной оплаты ни по одному расходу. Куда их девать ? В просроченные? фиг там...Еще куча денег в запасе остается для закупок у него
18 Denyk
 
18.07.10
01:39
(17) Возьми идеальный случай. Клиенты платят после отгрузки, все идеально закрывается, вот только платят не всегда вовремя. И за это "не вовремя" нужно начислить штраф тому, кто с этим клиентом работает. И если сегодня по этому клиенту штраф рассчитали , а завтра он опять не заплатил, то и завтра по нему тоже надо рассчитать штраф.
19 Aleksey_3
 
18.07.10
01:39
(17) Тогда не будет дебиторки
20 Рэйв
 
18.07.10
01:39
(18)Я тебя умоляю...Идеальный случай. Я их что-то ни разу не встречал.
21 Рэйв
 
18.07.10
01:40
(19) Сделал уж...но попотеть пришлось.Щас смотрю на код и сам ужасаюсь..
22 Denyk
 
18.07.10
01:41
+(17) К тому же у меня есть вариант сквозного погашения долгов: закрываю долги автоматически по ФИФО, а не "привязал-не привязал".
23 Рэйв
 
18.07.10
01:41
да еще эти долбанные 255 таблиц в скуле. Пришлось виртуальными таблицами заморачиваться, как будто там без этого фунт изюма
24 Denyk
 
18.07.10
01:43
Но вопрос даже не в этом. Кто как борется с закрытиями долгов и т.п. проблемами -это совсем другой вопрос.
25 Denyk
 
18.07.10
01:49
Пример отчета для 7-ки: http://rapidshare.com/files/407517392/__________________.mxl
26 Рэйв
 
18.07.10
01:55
(25)Ну тогда зацени и мои страдания:)
правда я уже под конец уже увольнялся, поэтому об оптимизации уже речи не шло. Лишь бы работало...

   Если НЕ ЗначениеЗаполнено(НачПериода) ИЛИ
       НЕ ЗначениеЗаполнено(КонПериода)Тогда
       Предупреждение("Не заполнен период");
       Возврат;
   КонецЕсли;    
   Счет=ПланыСчетов.Типовой.НайтиПоКоду("1210");
   Если Счет.Пустая() Тогда
       Сообщить("В типовом плане счетов не найдет счет '1210'");
       Возврат;
   КонецЕсли;    
   ОчиститьСообщения();
   НачДата=ТекущаяДата();
   Сообщить("Начало формирования отчета: "+НачДата);
   Запрос=Новый Запрос;
   Запрос.МенеджерВременныхТаблиц= Новый МенеджерВременныхТаблиц;
   Счет1210=ПланыСчетов.Типовой.НайтиПоКоду("1210");
   Запрос.УстановитьПараметр("Конт",КонтрагентФильтр);
   Запрос.УстановитьПараметр("Дата",КонецДня(КонПериода));
   Запрос.УстановитьПараметр("Счет",Счет1210);
   Запрос.УстановитьПараметр("Дата1",НачПериода);
   Запрос.УстановитьПараметр("Дата2",КонецДня(КонПериода));
   Запрос.Текст="
   //сначала соберем все документы РН по 1210 за период------------------------таб 1
   |Выбрать
   |   ТиповойДвиженияССубконто.Регистратор.Контрагент КАК Контрагент,
   |    ТиповойДвиженияССубконто.Регистратор КАК РН,
   |    СУММА(ТиповойДвиженияССубконто.Сумма) КАК Сумма
   |   Поместить тРН
   |ИЗ
   |РегистрБухгалтерии.Типовой.ДвиженияССубконто(&Дата1, &Дата2, СчетДт =&Счет И Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
   |) КАК ТиповойДвиженияССубконто";
   Если НЕ Условия="<нет условий>" Тогда
       Запрос.Текст=Запрос.Текст+"
       //
       |ГДЕ
       |"+?(Условия="Не равно(не в группе)","  НЕ ","")+" ТиповойДвиженияССубконто.СубконтоДт1 В Иерархии(&Контр)";
       Запрос.УстановитьПараметр("Контр",КонтрагентФильтр);    
   КонецЕсли;
   Запрос.Текст=Запрос.Текст+"
   //Свернем по документам(детальные проводки нам не нужны)
   |СГРУППИРОВАТЬ ПО
   |   ТиповойДвиженияССубконто.Регистратор.Контрагент,
   |    ТиповойДвиженияССубконто.Регистратор";
   
   Запрос.УстановитьПараметр("Контр",КонтрагентФильтр);
   Состояние("Обработка таблицы расходных накладных...");
   Запрос.Выполнить();
   //--------------------------------------------------------------------------таб 1 кон
   
   
Запрос.Текст="
   //---------------------------------ПКО----------------------------------таб 2 нач
   |ВЫБРАТЬ
   |        ТиповойДвиженияССубконто.Регистратор КАК ПКО,
   |        СУММА(ТиповойДвиженияССубконто.Сумма) КАК Сумма
   |       Поместить тПКО
   |ИЗ
   |РегистрБухгалтерии.Типовой.ДвиженияССубконто(&Дата1, &Дата2, СчетКт =&Счет И Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер) КАК ТиповойДвиженияССубконто
   |ГДЕ
   | ТиповойДвиженияССубконто.Регистратор.ДокументОснование<>Неопределено  ";
   
   Если НЕ Условия="<нет условий>" Тогда
       Запрос.Текст=Запрос.Текст+"
//        |ГДЕ
       |И "+?(Условия="Не равно(не в группе)"," НЕ ","")+"ТиповойДвиженияССубконто.СубконтоКт1 В Иерархии(&Контр)";
   КонецЕсли;
   Запрос.Текст=Запрос.Текст+"
   |    СГРУППИРОВАТЬ ПО
   |        ТиповойДвиженияССубконто.Регистратор";
   Состояние("Обработка таблицы ПКО...");
   Запрос.Выполнить();
   //----------------------------------------------------------------------------------------таб 2 кон
   
   
   Запрос.Текст="
   //--------------------------------Платежки---------------------------------------------------таб 3 нач
   |ВЫБРАТЬ
   |        ТиповойДвиженияССубконто.Регистратор КАК Плат,
   |        СУММА(ТиповойДвиженияССубконто.Сумма) КАК Сумма
   |        Поместить тПлат
   |ИЗ
   |РегистрБухгалтерии.Типовой.ДвиженияССубконто(&Дата1, &Дата2, СчетКт =&Счет И Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее) КАК ТиповойДвиженияССубконто
   |ГДЕ
   |       ТиповойДвиженияССубконто.Регистратор.ДокументОснование<>Неопределено
   |";

   Если НЕ Условия="<нет условий>" Тогда
       Запрос.Текст=Запрос.Текст+"
       //|ГДЕ
       |И "+?(Условия="Не равно(не в группе)"," НЕ ","")+"ТиповойДвиженияССубконто.СубконтоКт1 В Иерархии(&Контр)";
   КонецЕсли;    
   Запрос.Текст=Запрос.Текст+"
   |    СГРУППИРОВАТЬ ПО
   |        ТиповойДвиженияССубконто.Регистратор";
   Состояние("Обработка таблицы платежек...");
   Запрос.Выполнить();
   //------------------------------------------------------------------------------------------таб 3 кон
   
   Запрос.Текст="ВЫБРАТЬ
                |    ЗапБух.РН КАК ДокРН,
                |    ЗапБух.Контрагент КАК Конт,
                |    ЗапБух.Сумма КАК СуммаРН,
                |  ЗапПКО.ПКО КАК ДокПКО,
                |  ЗапПлат.Плат КАК ДокБанк,
                |    ЕСТЬNULL(ЗапПКО.Сумма, 0) КАК СуммаКасса,
                |    ЕСТЬNULL(ЗапПлат.Сумма, 0) КАК СуммаБанк
                |ПОМЕСТИТЬ тДанные2
                |ИЗ
                |    тРН КАК ЗапБух
                |        ЛЕВОЕ СОЕДИНЕНИЕ тПКО КАК ЗапПКО
                |        ПО (ЗапПКО.ПКО.ДокументОснование = ЗапБух.РН
                |                ИЛИ ЗапПКО.ПКО.ДокументОснование = ЗапБух.РН.Сделка)
//                 |            И (ЗапПКО.ПКО.Оплачено = ИСТИНА)
//                 |            И (ЗапПКО.ПКО.ДокументОснование <> НЕОПРЕДЕЛЕНО)
                |        ЛЕВОЕ СОЕДИНЕНИЕ тПлат КАК ЗапПлат
                |        ПО (ЗапПлат.Плат.ДокументОснование = ЗапБух.РН
                |                ИЛИ ЗапПлат.Плат.ДокументОснование = ЗапБух.РН.Сделка)";
//                 |            И (ЗапПлат.Плат.Оплачено = ИСТИНА)
//                 |            И (ЗапПлат.Плат.ДокументОснование <> НЕОПРЕДЕЛЕНО)";
   Состояние("Расчет оплаты по документам реализации...");
   Запрос.Выполнить();
   //<----------Выберем доки, которые соединились с РН,
   //чтобы потом их изключить из общего запроса по движениям не связанными с конкретными РН
   тДокиОплаты=ЛукВТ(Запрос,"тДанные2");
   тДокиОплаты.Сортировать("ДокРН");
   
   ПКОсОснованиями    =Новый СписокЗначений;
   ПлатСОснованиями=Новый СписокЗначений;
   ДокиВычет=Новый СписокЗначений;
   ДокРНдо="чсяс"; //заодно обнулим суммы у РН по которым 2 или больше оплат(у них дублируются суммы при соединении)
   //тз с типизированными полями свернем и вернем обратно в запрос
   
   тВЗапрос=Новый ТаблицаЗначений;
   тВЗапрос.Колонки.Добавить("ДокРН",Новый ОписаниеТипов("ДокументСсылка.РеализацияТоваровУслуг"));
   тВЗапрос.Колонки.Добавить("Конт",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
   тВЗапрос.Колонки.Добавить("СуммаРН",Новый ОписаниеТипов("Число"));
   тВЗапрос.Колонки.Добавить("СуммаКасса",Новый ОписаниеТипов("Число"));
   тВЗапрос.Колонки.Добавить("СуммаБанк",Новый ОписаниеТипов("Число"));
   
   
   Для Каждого Стр Из тДокиОплаты Цикл
       Если ЗначениеЗаполнено(Стр.ДокПКО) Тогда
           ПКОсОснованиями.Добавить(Стр.ДокПКО);    
           Если ДокиВычет.НайтиПоЗначению(Стр.ДокПКО)=Неопределено Тогда
                ДокиВычет.Добавить(Стр.ДокПКО);
           КонецЕсли;    
       КонецЕсли;    
       Если ЗначениеЗаполнено(Стр.ДокБанк) Тогда
           ПлатСОснованиями.Добавить(Стр.ДокБанк);    
           Если ДокиВычет.НайтиПоЗначению(Стр.ДокБанк)=Неопределено Тогда
                ДокиВычет.Добавить(Стр.ДокБанк);
           КонецЕсли;    
       КонецЕсли;
       Если ДокРНдо=Стр.ДокРН  Тогда
           Стр.СуммаРН=0;
       КонецЕсли;    
       ДокРНдо=Стр.ДокРН;
       новСтр=тВЗапрос.Добавить();
       новСтр.ДокРН=Стр.ДокРН;
       новСтр.Конт=Стр.Конт;
       новСтр.СуммаРН=Стр.СуммаРН;
       новСтр.СуммаКасса=Стр.СуммаКасса;
       новСтр.СуммаБанк=Стр.СуммаБанк;
       
   КонецЦикла;    

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

   Запрос.Выполнить();
   //----------------------------> вычислили
   
   Запрос.Текст="
   //--------------------------------------------------Уровень 3 нач
   |ВЫБРАТЬ
   |            Данные.ДокРН КАК ДокРН,
   |            Данные.Конт КАК Контрагент,
   |            ЕстьNULL(Данные.СуммаРН,0) КАК СуммаРН,
   |            ЕстьNULL(Данные.СуммаКасса,0) КАК СуммаКасса,
   |            ЕстьNULL(Данные.СуммаБанк,0) КАК СуммаБанк,
//    |            Данные.ДопКолД КАК ДопКолД,
   |            Данные.ДатаГраница КАК ДатаГраница,
   |          ЕстьNULL(Данные.Долг,0) КАК ДолгБезУсловий,
   |            ЕстьNULL(ВЫБОР
   |                КОГДА &Дата2 > Данные.ДатаГраница
   |                    ТОГДА Данные.Долг
   |                ИНАЧЕ 0
   |            КОНЕЦ,0) КАК Долг
   |    Поместить тДолги
   |        ИЗ
   | тДанные КАК Данные";
   Состояние("Соединение таблиц 2...");
   Запрос.Выполнить();
   //----------------------------------------------------- Уровень 3 кон
   
   Запрос.Текст="
   //----------------------------------------------------------------Уровень 4 (Верхний)  нач
   |ВЫБРАТЬ  
   //беремо статки по контрам по 1210 и соединяем полным с полученной таблицей долгов
   |    Долги.ДокРН ,
   |   Выбор Когда Долги.ДокРН Есть NULL Тогда
   |            ДатаВремя(1980,1,1,0,0,0)
   |         Иначе
   |             Долги.ДокРН.Дата
   |   Конец КАК ДатаРН,
   |    Долги.Контрагент  КАК Контрагент,
   |    ЕстьNULL(Долги.СуммаРН,0) КАК СуммаРН,
   |    ЕстьNULL(Долги.СуммаКасса,0)КАК СуммаКасса,
   |    ЕстьNULL(Долги.СуммаБанк,0) КАК СуммаБанк,
   |    ЕстьNULL(Долги.Долг,0) КАК Долг,
   |   ЕстьNULL(Долги.ДолгБезУсловий,0) КАК ДолгБезУсловий,
   |    Долги.ДатаГраница КАК ДатаГраница,
   |    ТиповойОстатки.Субконто1 КАК СубКонт,
   |    ЕстьNULL(ТиповойОстатки.СуммаОстаток,0) КАК СНД
   |ИЗ ";    
   //обработка фильтра по котру
   Если НЕ Условия="<нет условий>" Тогда
       Запрос.Текст=Запрос.Текст+"
       |РегистрБухгалтерии.Типовой.Остатки(&Дата1, Счет =&Счет,, "+?(Условия="Не равно(не в группе)"," НЕ ","")+"Субконто1 В ИЕРАРХИИ (&Контр) ) КАК ТиповойОстатки";
       //|"+?(Условия="Не равно(не в группе)"," НЕ ","")+"ТиповойОстатки.Субконто1 В ИЕРАРХИИ (&Контр) ";
       Запрос.УстановитьПараметр("Контр",КонтрагентФильтр);
   Иначе
       Запрос.Текст=Запрос.Текст+"
       |РегистрБухгалтерии.Типовой.Остатки(&Дата1, Счет =&Счет ) КАК ТиповойОстатки";        
   КонецЕсли;    
   Запрос.Текст=Запрос.Текст+"
   |ПОЛНОЕ СОЕДИНЕНИЕ
   | тДолги КАК Долги
   |ПО Долги.Контрагент=ТиповойОстатки.Субконто1
   |УПОРЯДОЧИТЬ ПО
   |Контрагент,
   |ДокРН
   |АВТОУПОРЯДОЧИВАНИЕ";
   Состояние("Формирование основной таблицы отчета...");
   тРез=Запрос.Выполнить().Выгрузить();
   
   Запрос.Текст="Уничтожить тРН";
   Запрос.Выполнить();
   
   Запрос.Текст="Уничтожить тПКО";
   Запрос.Выполнить();
   
   Запрос.Текст="Уничтожить тПлат";
   Запрос.Выполнить();
   
   Запрос.Текст="Уничтожить тДанные";
   Запрос.Выполнить();
   
   Запрос.Текст="Уничтожить тДанные1";
   Запрос.Выполнить();
   
   Запрос.Текст="Уничтожить тДанные2";
   Запрос.Выполнить();
   
   Запрос.Текст="Уничтожить тДолги";
   Запрос.Выполнить();
   

   
   
   Запрос.УстановитьПараметр("Дата1",НачПериода);
   Запрос.УстановитьПараметр("Дата2",КонецДня(КонПериода));
   Запрос.УстановитьПараметр("Счет",Счет );
   
//    тРез        =Запрос.Выполнить().Выгрузить();//перевли на вр. таблицы
   тРез.Колонки.Добавить("ДолгСписанный");
   тРез.ЗаполнитьЗначения("","ДолгСписанный");
   
   Запрос.УстановитьПараметр("ДокВычет",ДокиВычет);
   


   
   
//<--------------------------------В связи с тем что кроме РН и привязанным к ним платежам постоянно ъ
//вылезают какие то левые ник чему ни привязанные документы для которых каждый раз нужно дописывать запросы, то решил на все это плюнуть и
//все что не вошло в предыдущий запрос расписать одной суммой

//Сначала соберем все дебетовое кроме РН, которые мы собрали выше
Запрос.Текст="ВЫБРАТЬ
            |  ТиповойДвиженияССубконто.Регистратор.Ссылка,
            |    ТиповойДвиженияССубконто.СубконтоДт1 КАК Контрагент,
            |    -ТиповойДвиженияССубконто.Сумма КАК Сумма
            |ИЗ
            |    РегистрБухгалтерии.Типовой.ДвиженияССубконто(
            |            &Дата1,
            |            &Дата2,
            |            СчетДт = &Счет
            |                И (НЕ Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг)) КАК ТиповойДвиженияССубконто";
            Если НЕ Условия="<нет условий>" Тогда
                Запрос.Текст=Запрос.Текст+"
                |ГДЕ "+?(Условия="Не равно(не в группе)"," НЕ ","")+" ТиповойДвиженияССубконто.СубконтоДт1 В ИЕРАРХИИ (&Контр)";
            КонецЕсли;
            тВозвраты=Запрос.Выполнить().Выгрузить();
            Запрос.Текст="
            |ВЫБРАТЬ
            |    ТиповойДвиженияССубконтоМинус.Регистратор.Ссылка,
            |    ТиповойДвиженияССубконтоМинус.СубконтоКт1 КАК Контрагент,
            |    ТиповойДвиженияССубконтоМинус.Сумма КАК Сумма
            |ИЗ
            |    РегистрБухгалтерии.Типовой.ДвиженияССубконто(
            |            &Дата1,
            |            &Дата2,
            |            СчетКт = &Счет
            |                И (НЕ Регистратор В (&ДокВычет))) КАК ТиповойДвиженияССубконтоМинус";
            Если НЕ Условия="<нет условий>" Тогда
                Запрос.Текст=Запрос.Текст+"
                |ГДЕ "+?(Условия="Не равно(не в группе)"," НЕ ","")+" ТиповойДвиженияССубконтоМинус.СубконтоКт1 В ИЕРАРХИИ (&Контр)";
            КонецЕсли;
            тКт1210=Запрос.Выполнить().Выгрузить();
            ДЛя Каждого Стр Из тКт1210 Цикл
               Нов=тВозвраты.Добавить();
               Нов.Контрагент=Стр.Контрагент;
               Нов.Сумма=Стр.Сумма;
            КонецЦикла;    
            тВозвраты.Свернуть("Контрагент","Сумма");
            //<----------- отладочные данные
            Если Отладка и ЗначениеЗаполнено(КонтОтладка) Тогда
                мСтрок=тВозвраты.НайтиСтроки(Новый Структура("Контрагент",КонтОтладка));
                ДО=0;
                Для Каждого Эл Из мСтрок Цикл
                    ДО=ДО+Эл.Сумма;
                КонецЦикла;    
                мСтрок2=тКт1210.НайтиСтроки(Новый Структура("Контрагент",КонтОтладка));
                КО=0;
                Для Каждого Эл Из мСтрок2 Цикл
                    КО=КО+Эл.Сумма;
                КонецЦикла;    
                тДокиОплаты.Колонки.Добавить("СНД");
                тДокиОплаты.Колонки.Добавить("ДО");
                тДокиОплаты.Колонки.Добавить("КО");
                Если тДокиОплаты.Количество()=0 Тогда
                    СтрочкаТЗ=тДокиОплаты.Добавить();
                Иначе
                    СтрочкаТЗ=тДокиОплаты[0];
                КонецЕсли;
                СтрочкаТЗ.ДО=ДО;
                СтрочкаТЗ.КО=КО;
                СтрДляСНД=тРез.Найти(КонтОтладка,"СубКонт");
                Если СтрДляСНД<>Неопределено Тогда
                   СтрочкаТЗ.СНД=СтрДляСНД.СНД;    
                КонецЕсли;    
            КонецЕсли;    
            //----------------->
   тРез.Колонки.Добавить("СуммаРаспр");
   тРез.ЗаполнитьЗначения(0,"СуммаРаспр");
   
   
   // РН могут выводиться в несколько строк подряд если было несколько документов оплат
   //нужно обнулить дублирование сумм и долгов  
   //+заодно  обнулим начальное сальдо для всех строк по контрагенту кроме первой, а то при нескольких аплатах
   //сальдо складывается
   РНДо="123";
   КонтДО="123";
   //Заполним контрагентов без движений и отсортируем по имени
   ПустаяРН=Документы.РеализацияТоваровУслуг.ПустаяСсылка();
   ПустаяДата=Дата(2009,9,1,0,0,0);
   тРез.Колонки.Добавить("Код");
   КодПустых=0;
           Состояние("Сортировка...");
   ДЛя Каждого Стр Из тРез Цикл
       Если НЕ ЗначениеЗаполнено(Стр.Контрагент) Тогда
           Стр.Контрагент=Стр.СубКонт;
       КонецЕсли;
       Если Стр.ДокРН=NULL Тогда
           Стр.ДокРН=ПустаяРН;
           Стр.ДатаРН=ПустаяДата;
       КонецЕсли;    
       Если ЗначениеЗаполнено(Стр.Контрагент) Тогда
           Стр.Код=Стр.Контрагент.Код;
       Иначе
           КодПустых=КодПустых+1;
           Стр.Код="пустой"+(КодПустых);
       КонецЕсли;    
   Конеццикла;    
   тРез.Сортировать("Контрагент,Код,ДатаРН,ДокРН");
   КонтДО="4654";
   ДЛя Каждого Стр Из тРез Цикл
       Если Стр.Контрагент=КонтДО  Тогда
           Стр.СНД=0;
       КонецЕсли;    
       КонтДО=Стр.Контрагент;
   КонецЦикла;    
   
   тРез.Свернуть("Контрагент,Код,СубКонт,ДатаРН,ДокРН,ДатаГраница","СуммаРН,СуммаКасса,СуммаБанк,Долг,ДолгБезУсловий,СНД,ДолгСписанный,СуммаРаспр");
   Для Каждого Стр Из тРез Цикл
       КонтДО=Стр.Контрагент;
       Если НЕ ЗначениеЗаполнено(Стр.ДокРН) Тогда
           Продолжить;
       КонецЕсли;    
       Если Стр.ДокРН=РНДо Тогда
           Стр.Долг          =?(Стр.Долг=0,0,Стр.Долг-Стр.СуммаРН);
           Стр.ДолгБезУсловий=?(Стр.ДолгБезУсловий=0,0,Стр.ДолгБезУсловий-Стр.СуммаРН);
           
           Стр.СуммаРН    =0;
           
       КонецЕсли;    
       РНДо=Стр.ДокРН;    
   КонецЦикла;    
   
   //---------------------
   струкПоиск=Новый Структура("Контрагент");
   Для Каждого Стр из тВозвраты    Цикл
       Если Стр.Сумма <> 0 Тогда
           СуммаРаспр=Стр.Сумма;
           струкПоиск.Контрагент=Стр.Контрагент;
           массивСтрок=тРез.НайтиСтроки(струкПоиск);
           
           Если массивСтрок.Количество()>0 Тогда
               
               
               Для Каждого Эл Из массивСтрок Цикл
                   Если СуммаРаспр=0 Тогда
                       Прервать;
                   КонецЕсли;    
                   Если Эл.ДолгБезУсловий>=СуммаРаспр Тогда
                       
                       //Эл.Долг=Эл.Долг-СуммаРаспр;
                       //Эл.=Эл.Долг-СуммаРаспр;
                       //Эл.ДолгСписанный=""+Эл.Долг+"
                       //|(-"+СуммаРаспр+")";
                       Эл.СуммаРаспр=СуммаРаспр;
                       СуммаРаспр=0;
                       
                   Иначе
                       Если Эл.ДолгБезУсловий>0 Тогда
                       Эл.СуммаРаспр=Эл.ДолгБезУсловий;
                       
                       //Эл.ДолгСписанный="(-"+Эл.Долг+")";
                       СуммаРаспр=СуммаРаспр-Эл.ДолгБезУсловий;
                       //Эл.Долг=0;
                       КонецЕсли;
                   КонецЕсли;    
               Конеццикла;    
               Если СуммаРаспр>0 Тогда
                   массивСтрок[массивСтрок.Количество()-1].СуммаРаспр=массивСтрок[массивСтрок.Количество()-1].СуммаРаспр+СуммаРаспр;
               КонецЕсли;    
           Иначе // значит у контра нет ни остатков ни продаж, одно непонятно что в движениях,которое тоже надо учитывать
               НС=тРез.Добавить();
               НС.Контрагент=Стр.Контрагент;
               НС.ДокРН            =ПустаяРН;
               НС.СуммаРН            =0;
               НС.Долг                =0;
               НС.ДолгБезУсловий    =0;
               НС.СуммаРН            =0;
               НС.СНД                =0;
               НС.СуммаКасса        =0;
               НС.СуммаБанк        =0;
               НС.СуммаРаспр        =СуммаРаспр;
               СуммаРаспр=0;
               
           КонецЕсли;    
       КонецЕсли;
       
   Конеццикла;    
   Таб            = Новый ТабличныйДокумент;
   Макет        =ПолучитьМакет("Макет");
   Постфикс=? (ФормаОтчета=1,"1","");
   ОбластьШапка=Макет.ПолучитьОбласть("Шапка"+Постфикс);
   ОбластьШапка.Параметры.НачПериода=Формат(НачПериода,"ДФ=дд.ММ.гг");
   ОбластьШапка.Параметры.КонПериода=Формат(КонПериода,"ДФ=дд.ММ.гг");
   
   ОбластьШапка.Параметры.КонтрФ="Условия: "+Условия+"  " +?(Условия="<нет условий>","","<."+КонтрагентФильтр+".>");
   
   Таб.Вывести(ОбластьШапка);
   
   ОбластьСтрока    =Макет.ПолучитьОбласть("Строка"+Постфикс);
   ОбластьСНД        =Макет.ПолучитьОбласть("ПерваяСтрока");
   ОбластьИтог        =Макет.ПолучитьОбласть("Итог"+Постфикс);
   
   нпп            =0;
   сч=0;
   Первый      = Истина;
   ВсегоСтрок  =тРез.Количество();
   КонтДО        ="васчсмчсчя";
   ДолгДО        ="васчсмчсчя";
   ИтогоДО        ="васчсмчсчя";
   ИтСуммаРН    =0;
   ИтДолг        =0;
   ИтОплата    =0;
   ИтДолгБезУсловий=0;
   Итого        =0;
   ИтСНД       =0;
   
   ОбщийСНД    =0;
   ОбщийСуммаРН=0;
   ОбщийДолг    =0;
   ОбщийДолгБезУсловий    =0;
   ОбщийИтого    =0;
   ОбщийОплата    =0;
   
   тБуфер=новый    ТаблицаЗначений;//для отсеивания с нулевыми долгами
   тБуфер.Колонки.Добавить("нпп");
   тБуфер.Колонки.Добавить("СНД");
   тБуфер.Колонки.Добавить("Конт");
   тБуфер.Колонки.Добавить("СуммаРН");
   тБуфер.Колонки.Добавить("ДатаРН");
   тБуфер.Колонки.Добавить("Оплата");
   тБуфер.Колонки.Добавить("Долг");
   тБуфер.Колонки.Добавить("ДолгБезУсловий");
   тБуфер.Колонки.Добавить("ДатаГраница");
   тБуфер.Колонки.Добавить("Сток");
   тБуфер.Колонки.Добавить("Итого");
   тБуфер.Колонки.Добавить("ДокРН");
   тБуфер.Колонки.Добавить("СуммаРаспр");
   тБуфер.Колонки.Добавить("Сальдо1210");
   КонтрагентовБольше1=Ложь;
   тРез.Сортировать("Контрагент,Код,ДатаРН,ДокРН");

   Для Каждого Стр Из тРез  Цикл
       //Если ФормаОтчета=1 И Стр.ДолгБезУсловий=0 и Стр.СНД=0 Тогда
       //    Продолжить;
       //КонецЕсли;    
       Если Стр.ДокРН=NULL Тогда
           Стр.ДокРН=ПустаяРН;
           Стр.Контрагент=Стр.СубКонт;
       КонецЕсли;    
       сч=сч+1;
       Состояние("Формирование отчета ..."+сч+" из "+ВсегоСтрок);
       ОбработкаПрерыванияПользователя();
       Если Стр.Контрагент <>КонтДО и КонтДО<> "васчсмчсчя" Тогда
           Если ИтДолгБезУсловий<>0 Тогда
               КонтрагентовБольше1=Истина;
               Для Каждого СтрБуф Из тБуфер Цикл
                   нпп    =нпп+1;
                   Если тБуфер.Индекс(СтрБуф)=0 Тогда
                       ОбластьСальдо=Макет.ПолучитьОбласть("Сальдо"+Постфикс);
                       ОбластьСальдо.Параметры.СНД            =СтрБуф.СНД;
                       ОбластьСальдо.Параметры.СНДдолг        =?(СтрБуф.Снд>0,СтрБуф.Снд,"");
                       ОбластьСальдо.Параметры.Контр        =СтрБуф.Конт;
                       //ОбластьСальдо.Параметры.Контр        =КонтДо;
                       Таб.Вывести(ОбластьСальдо);
                       Если СтрБуф.Снд<>0 и ФормаОтчета<>1 и ЗначениеЗаполнено(СтрБуф.ДокРН) Тогда
                           ОбластьСНД.Параметры.ДолгБезУсловий    =СтрБуф.Снд;
                           ОбластьСНД.Параметры.Долг            =?(СтрБуф.Снд>0,СтрБуф.Снд,"");
                           ОбластьСНД.Параметры.ДатаДолга        =Формат(НачПериода,"ДФ=дд.ММ.гг");
                           ОбластьСНД.Параметры.Итого            =?(СтрБуф.Снд>0,СтрБуф.Снд,"");
                           ОбластьСНД.Параметры.Агент            ="Просроченный долг прошлого периода";
                           Таб.Вывести(ОбластьСНД);
                           
                       КонецЕсли;    
                       
                   КонецЕсли;    
                   
                   ОбластьСтрока.Параметры.нпп            =нпп;    
                   
                   ОбластьСтрока.Параметры.Контр        =СтрБуф.Конт;    
                   ОбластьСтрока.Параметры.СуммаРН        =СтрБуф.СуммаРН;
                   ОбластьСтрока.Параметры.ДатаРН        =Формат(СтрБуф.ДатаРН,"ДФ=дд.ММ.гг");
                   ОбластьСтрока.Параметры.Итого      =?(СтрБуф.Итого<0,0,СтрБуф.Итого);
                   ОбластьСтрока.Параметры.ДокРН        =СтрБуф.ДокРН;
                   
                   Попытка
                       ОбластьСтрока.Параметры.Агент        =СтрБуф.ДокРН.Агент;
                   Исключение
                       
                   КонецПопытки;
                   
                   Если ФормаОтчета=2 Или ФормаОтчета=3 Тогда
                       ОбластьСтрока.Параметры.Оплата        =СтрБуф.Оплата;
                       ОбластьСтрока.Параметры.Долг        =СтрБуф.Долг;
                       ОбластьСтрока.Параметры.ДатаДолга    =?(СтрБуф.Долг>0,Формат(СтрБуф.ДатаГраница,"ДФ=дд.ММ.гг"),"");
                       ОбластьСтрока.Параметры.Сток        =СтрБуф.Сток;
                       ОбластьСтрока.Параметры.ДолгБезУсловий        =СтрБуф.ДолгБезУсловий;
                   Иначе
                       ОбластьСтрока.Параметры.НомерРН=СтрБуф.ДокРН.Номер;
                       ОбластьСтрока.Параметры.ДолгБезУсловий        =СтрБуф.ДолгБезУсловий;
                       
                   КонецЕсли;
                   
                   Таб.Вывести(ОбластьСтрока);
               КонецЦикла;    
               //Сообщить(Формат(ИтСуммаРН,"ЧРД=','; ЧГ=0 "));
               ОбластьИтог.Параметры.ИтСуммаРН    =ИтСуммаРН;
               ОбластьИтог.Параметры.ИтДолгБезУсловий    =ИтДолгБезУсловий;
               Если ФормаОтчета= 2 Или ФормаОтчета=3 Тогда
                   ОбластьИтог.Параметры.ИтДолг    =?(ИтДолг<=0,0,ИтДолг);
                   ОбластьИтог.Параметры.ИтОплата    =ИтОплата;
               КонецЕсли;    
               ИтСток=СтрБуф.Конт.ОсновнойДоговорКонтрагента.СуммаТоварногоЗапаса;
               ОбластьИтог.Параметры.ИтИтого    =?(ИтДолг-ИтСток<=0,0,ИтДолг-ИтСток);//?(Итого<0,0,Итого);        
               ОбластьИтог.Параметры.Контр        =КонтДО;
               ОбластьИтог.Параметры.Сток        =ИтСток;
               ОбщийСуммаРН                    =ОбщийСуммаРН+ИтСуммаРН;
               ОбщийДолг                        =ОбщийДолг+?(ИтДолг<=0,0,ИтДолг);
               ОбщийДолгБезУсловий                =ОбщийДолгБезУсловий+ИтДолгБезУсловий;
               ОбщийИтого                        =ОбщийИтого+ОбластьИтог.Параметры.ИтИтого;
               ОбщийОплата                        =ОбщийОплата+ИтОплата;
               
               Таб.Вывести(ОбластьИтог);
                ИтогоДО        ="васчсмчсчя";
               //ОбщийСуммаРН                    =ОбщийСуммаРН+ИтСуммаРН;
           //    ОбщийДолг                        =ОбщийДолг+ИтДолг;
           //    ОбщийДолгБезУсловий                =ОбщийДолг+ИтДолгБезУсловий;
           //    ОбщийИтого                        =ОбщийИтого+Итого;
               
           КонецЕсли;
           Ит
27 Рэйв
 
18.07.10
02:12
+Еще не все влезло:)))

                ИтогоДО        ="васчсмчсчя";
               //ОбщийСуммаРН                    =ОбщийСуммаРН+ИтСуммаРН;
           //    ОбщийДолг                        =ОбщийДолг+ИтДолг;
           //    ОбщийДолгБезУсловий                =ОбщийДолг+ИтДолгБезУсловий;
           //    ОбщийИтого                        =ОбщийИтого+Итого;
               
           КонецЕсли;
           ИтСуммаРН        =0;        
           ИтДолг            =Стр.СНД;
           ИтОплата        =0;
           ИтДолгБезУсловий=Стр.Снд;
           ИтСНД          =0;
           Сток            =0;
           тБуфер.Очистить();
           Первый=Истина;
       КонецЕсли;    
       
       
       ДокРН=Стр.ДокРН;
       //расчет долга------------------------------------------------
       Итого                =0;
       Сток                =0;
       
       Долг                =Стр.Долг-Стр.СуммаРаспр;//смотрим оплату
       ДолгБезУсловий        =Стр.ДолгБезУсловий;
       ДатаГраницаДолга    =Стр.ДатаГраница;
       Если Первый Тогда
           ИтДолг=Стр.Снд;//-Стр.СуммаРаспр;
           ИтДолгБезУсловий=Стр.Снд;
       КонецЕсли;    
       Оплата        =Стр.СуммаКасса+Стр.СуммаБанк;
       
       Если ДатаГраницаДолга=NULL или ТипЗнч(ДатаГраницаДолга) <> Тип("Дата") Тогда
          ДоГраницы=Ложь;
       Иначе
          ДоГраницы=НачалоДня(ДатаГраницаДолга+86400)>НачалоДня(КонПериода);
       КонецЕсли;
       ИтСуммаРН    =ИтСуммаРН+Стр.СуммаРН;
       ДолгБуферФорма3=ИтДолг;// для формы 3 сохраним значение до прибавления
       //Если  Стр.СуммаРаспр>0 и Первый Тогда
       //    Если Стр.СуммаРН>0 Тогда
               Если НЕ ДоГраницы Тогда
                   ДолгФорма3=Стр.СуммаРН-Стр.СуммаРаспр-Оплата;
               Иначе    
               //    ДолгФорма3=Стр.Снд-Стр.СуммаРаспр-Оплата;
                   ДолгФорма3=0;
               КонецЕсли;
       //        Если ИтДолг< ДолгФорма3 Тогда
       //             ИтДолг= ДолгФорма3;
       //        КонецЕсли;    
       //    Иначе    
       //        ДолгФорма3=?(ИтДолг-ДолгБуферФорма3>0,ИтДолг-ДолгБуферФорма3,ДолгБуферФорма3-Стр.СуммаРаспр);
       //    КонецЕсли;    
       //Иначе
       //    Если НЕ ЗначениеЗаполнено(Стр.ДокРН) Тогда
       //        ДолгФорма3=ИтДолг;
       //    Иначе    
       //        ДолгФорма3=?(ИтДолг-ДолгБуферФорма3>0,ИтДолг-ДолгБуферФорма3,0);
       //    КонецЕсли;    
       //КонецЕсли;
       ИтОплата    =ИтОплата+Оплата;
       ИтДолгБезУсловий    =ИтДолгБезУсловий+ДолгБезУсловий-Стр.СуммаРаспр;
       Итого        =ИтДолг-Сток;
       ДолгПеч=ИтДолг;
       ИтогоПеч=Итого;
       СтокПеч =Сток;
       
       //заполняем по контрагенту временную таблицу. Если долгов не будет, мы ее благоволучно пропустим
       НовСтр=тБуфер.Добавить();
       Если Первый Тогда
           НовСтр.СНД =Стр.СНД;
           Первый=Ложь;
           ОбщийСНД       =ОбщийСНД+Стр.СНД;
       КонецЕсли;
       Если ФормаОтчета=3 Тогда
           //    НовСтр.Долг=ДолгФорма3;
           Если ДоГраницы Тогда
               ИтогоПеч=0;
               ДатаГраницаДолга="";
           Иначе    
               ИтогоПеч=ДолгФорма3;//Стр.СуммаРН-Стр.СуммаРаспр-Оплата;    
               Если ИтогоПеч<0 Тогда
                   ИтогоПеч=0;
               КонецЕсли;
           КонецЕсли;    
           Если Итого=ИтогоДО Тогда
               ИтогоПеч=0;
           КонецЕсли;    
           СуммаДолгаПоРН=Стр.СуммаРН-Оплата-Стр.СуммаРаспр;
           ДолгФорма3=?(СуммаДолгаПоРН<0 и ДолгФорма3=0 ,СуммаДолгаПоРН,ДолгФорма3);
           ДолгПеч=ДолгФорма3;
           ИтДолг=ИтДолг+ДолгФорма3;
       Иначе
           Если ЗначениеЗаполнено(Стр.ДокРН) и ЗначениеЗаполнено(Стр.ДатаГраница) Тогда
               ИтДолг    =ИтДолг+?(ДоГраницы,0,ДолгБезУсловий)-Стр.СуммаРаспр;
           Иначе
               ИтДолг=ИтДолг-Стр.СуммаРаспр;
           КонецЕсли;
       КонецЕсли;    
   
       НовСтр.Конт=Стр.Контрагент;
       НовСтр.СуммаРН=Стр.СуммаРН;
       НовСтр.ДатаРН=?(ДокРН=NULL,"",ДокРН.Дата);
       НовСтр.Оплата=Оплата;
       НовСтр.Долг=ДолгПеч;
       //НовСтр.ДолгБезУсловий=?(Стр.ДолгБезУсловий=0,0,ИтДолгБезУсловий);
       НовСтр.ДолгБезУсловий    =""+ИтДолгБезУсловий+?(Стр.СуммаРаспр<>0,"(-"+Стр.СуммаРаспр+")","");
       НовСтр.ДатаГраница        =ДатаГраницаДолга;
       НовСтр.Сток                =СтокПеч;
       НовСтр.Итого            =ИтогоПеч;
       НовСтр.ДокРН            =?(ДокРН=NULL,"Нет реализации",ДокРН);
       НовСтр.СуммаРаспр=Стр.СуммаРаспр;
       КонтДО=Стр.Контрагент;
       ИтогоДО=Итого;
   КонецЦикла;    
   Выводить=Истина;
   Если КонтрагентовБольше1 Тогда
       Если ИтДолгБезУсловий=0 Тогда
           Выводить=Ложь;
       КонецЕсли;    
   КонецЕсли;    
   Если Выводить Тогда
       Для Каждого СтрБуф Из тБуфер Цикл
           нпп    =нпп+1;
           ОбластьСтрока.Параметры.нпп            =нпп;    
           
           ОбластьСтрока.Параметры.Контр        =СтрБуф.Конт;    
           ОбластьСтрока.Параметры.СуммаРН        =СтрБуф.СуммаРН;
           ОбластьСтрока.Параметры.ДатаРН        =Формат(СтрБуф.ДатаРН,"ДФ=дд.ММ.гг");
           ОбластьСтрока.Параметры.Итого      =?(СтрБуф.Итого<0,0,СтрБуф.Итого);;
           ОбластьСтрока.Параметры.ДокРН        =СтрБуф.ДокРН;
           Попытка
               ОбластьСтрока.Параметры.Агент        =СтрБуф.ДокРН.Агент;
           Исключение
               
           КонецПопытки;
           
           Если тБуфер.Индекс(СтрБуф)=0 Тогда
               ОбластьСальдо=Макет.ПолучитьОбласть("Сальдо"+Постфикс);
               ОбластьСальдо.Параметры.СНД            =СтрБуф.СНД;
               ОбластьСальдо.Параметры.СНДдолг=?(СтрБуф.Снд>0,СтрБуф.Снд,"");
               ОбластьСальдо.Параметры.Контр        =СтрБуф.Конт;
               Таб.Вывести(ОбластьСальдо);
               Если СтрБуф.Снд<>0 и ФормаОтчета<>1 и ЗначениеЗаполнено(СтрБуф.ДокРН) Тогда
                   ОбластьСНД.Параметры.ДолгБезУсловий=СтрБуф.Снд;
                   ОбластьСНД.Параметры.Долг=?(СтрБуф.Снд>0,СтрБуф.Снд,"");
                   ОбластьСНД.Параметры.ДатаДолга=Формат(НачПериода,"ДФ=дд.ММ.гг");
                   ОбластьСНД.Параметры.Итого=?(СтрБуф.Снд>0,СтрБуф.Снд,"");
                   ОбластьСНД.Параметры.Агент            ="Просроченный долг прошлого периода";
                   Таб.Вывести(ОбластьСНД);
                   
               КонецЕсли;    
               
           КонецЕсли;    
           
           Если ФормаОтчета=2 Или ФормаОтчета = 3 Тогда
               ОбластьСтрока.Параметры.Оплата        =СтрБуф.Оплата;
               ОбластьСтрока.Параметры.Долг        =СтрБуф.Долг;
               ОбластьСтрока.Параметры.ДолгБезУсловий        =СтрБуф.ДолгБезУсловий;
               ОбластьСтрока.Параметры.ДатаДолга    =?(СтрБуф.Долг>0,Формат(СтрБуф.ДатаГраница,"ДФ=дд.ММ.гг"),"");
               ОбластьСтрока.Параметры.Сток        =СтрБуф.Сток;
           Иначе
               ОбластьСтрока.Параметры.НомерРН=СтрБуф.ДокРН.Номер;
               ОбластьСтрока.Параметры.ДолгБезУсловий        =СтрБуф.ДолгБезУсловий;
           КонецЕсли;
           
           Таб.Вывести(ОбластьСтрока);
       КонецЦикла;    
   КонецЕсли;
   //Сообщить(Формат(ИтСуммаРН,"ЧРД=','; ЧГ=0 "));
   //--------
   ОбластьИтог.Параметры.ИтСуммаРН    =ИтСуммаРН;
   ОбластьИтог.Параметры.ИтДолгБезУсловий    =ИтДолгБезУсловий;
   Если ФормаОтчета= 2 Или ФормаОтчета=3 Тогда
       ОбластьИтог.Параметры.ИтДолг    =?(ИтДолг<=0,0,ИтДолг);
       ОбластьИтог.Параметры.ИтОплата    =ИтОплата;
   КонецЕсли;    
   ИтСток=КонтДО.ОсновнойДоговорКонтрагента.СуммаТоварногоЗапаса;
   ОбластьИтог.Параметры.ИтИтого    =?(ИтДолг-ИтСток<=0,0,ИтДолг-ИтСток);//?(Итого<0,0,Итого);        
   ОбластьИтог.Параметры.Контр        =КонтДО;
   ОбластьИтог.Параметры.Сток        =ИтСток;
   ОбщийСуммаРН                    =ОбщийСуммаРН+ИтСуммаРН;
   ОбщийДолг                        =ОбщийДолг+?(ИтДолг<=0,0,ИтДолг);
   ОбщийДолгБезУсловий                =ОбщийДолгБезУсловий+ИтДолгБезУсловий;
   ОбщийИтого                        =ОбщийИтого+ОбластьИтог.Параметры.ИтИтого;
   ОбщийОплата                        =ОбщийОплата+ИтОплата;
   Таб.Вывести(ОбластьИтог);
   ОбластьОбщий=Макет.ПолучитьОбласть("Общий"+Постфикс);
   
   ОбластьОбщий.Параметры.ОбщийСуммаРН    =ОбщийСуммаРН;
   ОбластьОбщий.Параметры.ОбщийОплата    =ОбщийОплата;
   ОбластьОбщий.Параметры.ОбщийИтого    =ОбщийИтого;
   ОбластьОбщий.Параметры.ОбщийДолгБезУсловий    =ОбщийДолгБезУсловий;
   Если ФормаОтчета= 2 или ФормаОтчета=3 Тогда
       ОбластьОбщий.Параметры.ОбщийДолг=ОбщийДолг;
   КонецЕсли;    
   Таб.Вывести(ОбластьОбщий);
   Таб.ТолькоПросмотр        =Истина;
   Таб.ФиксацияСверху        =8;
   Таб.ОтображатьЗаголовки    =Ложь;
   Таб.ОтображатьСетку        =Ложь;
   
   Таб.Показать("Дебиторская задолженность контрагентов.");
   КонДата=ТекущаяДата();
   Разница=КонДата-НачДата;
   Инт="";
   Если Разница<60 Тогда
       Инт=Инт+Разница+" сек.";
   Иначе
       Мин=Цел(Разница/60);
       Сек=Разница-Мин*60;
       Инт=Инт+Мин+" мин. "+?(Сек=0,"",""+Сек+ " сек.");    
   КонецЕсли;    
   Если Отладка Тогда
       ТабОтладка=Новый ТабличныйДокумент;
       Макет=ПолучитьМакет("МакетОтладка");
       ОбластьШапка    =Макет.ПолучитьОбласть("Шапка");
       ОбластьШапка.Параметры.Конт=КонтОтладка;
       ТабОтладка.Вывести(ОбластьШапка);
       ОбластьСтрока    =Макет.ПолучитьОбласть("Строка");
       ОбластьСНД        =Макет.ПолучитьОбласть("СНД");
       ОбластьСНД.Параметры.СНД=тДокиОплаты[0].СНД;
       ТабОтладка.Вывести(ОбластьСНД);
       ИтРн=0;
       ИтОплата=0;
       Для Каждого Стр из тДокиОплаты Цикл
           ОбластьСтрока.Параметры.РН            =Стр.ДокРН;    
           ОбластьСтрока.Параметры.СуммаРН        =СтрЗаменить(Строка(Стр.СуммаРН),"Реализация ТМЗ и услуг","РН ");
           ИтРН=ИтРН+Стр.СуммаРН;
           ОбластьСтрока.Параметры.ПКО            =СтрЗаменить(Строка(Стр.ДокПКО),"Приходный кассовый ордер","ПКО ");    
           ОбластьСтрока.Параметры.СуммаКасса    =Стр.СуммаКасса;    
           ОбластьСтрока.Параметры.Оплата          =Стр.СуммаКасса+Стр.СуммаБанк;    
           ИтОплата=ИтОплата+ОбластьСтрока.Параметры.Оплата;
           ОбластьСтрока.Параметры.Платежка    =СтрЗаменить(Строка(Стр.ДокБанк),"Платежное поручение входящее","Плат ");    
           ОбластьСтрока.Параметры.СуммаБанк    =Стр.СуммаБанк;            
           ТабОтладка.Вывести(ОбластьСтрока);
       КонецЦикла;    
       ОбластьИтог=Макет.ПолучитьОбласть("Итог");
       ОбластьИтог.Параметры.ИтРН=ИтРН;
       ОбластьИтог.Параметры.ИтОплата=ИтОплата;
       ОбластьИтог.Параметры.ДО=тДокиОплаты[0].ДО;
       ОбластьИтог.Параметры.КО=тДокиОплаты[0].КО;
       ТабОтладка.Вывести(ОбластьИтог);
       ТабОтладка.Показать("Рассчет контрагента "+КонтОтладка);
   КонецЕсли;    
   Сообщить("Окончание формирования отчета:"+КонДата+"
   |Время формирования: "+Инт);
28 Рэйв
 
18.07.10
02:13
Ужас короче...
29 Denyk
 
18.07.10
15:11
Ну и нафига сюда было кидать это чудище? :)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс