|
Запрос. Расчет данных за каждый день. | ☑ | ||
|---|---|---|---|---|
|
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
|
Ну и нафига сюда было кидать это чудище? :)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |