Помогите с оброботкой
itt5082
13.05.2009 - 11:19
|
Есть оброботка не могу понят как вставить интервал плиз помогите вод код Функция ПолучитьБлокУсловийВыборки() БлокУсловийРеализаций=""; Если Не Организация.Пустая() Тогда БлокУсловийРеализаций=БлокУсловийРеализаций+" | И РеализацияТоваровУслуг.Организация = &Организация"; КонецЕсли; Если Не Контрагент.Пустая() Тогда БлокУсловийРеализаций=БлокУсловийРеализаций+" | И РеализацияТоваровУслуг.Контрагент = &Контрагент"; КонецЕсли; Если Не ДоговорКонтрагента.Пустая() Тогда БлокУсловийРеализаций=БлокУсловийРеализаций+" | И РеализацияТоваровУслуг.ДоговорКонтрагента = &ДоговорКонтрагента"; КонецЕсли; БлокУсловийПлатежей=""; Если Не Организация.Пустая() Тогда БлокУсловийПлатежей=БлокУсловийПлатежей+" | И Организация = &Организация"; КонецЕсли; Если Не Контрагент.Пустая() Тогда БлокУсловийПлатежей=БлокУсловийПлатежей+" | И Контрагент = &Контрагент"; КонецЕсли; Если Не ДоговорКонтрагента.Пустая() Тогда БлокУсловийПлатежей=БлокУсловийПлатежей+" | И ДоговорКонтрагента = &ДоговорКонтрагента"; КонецЕсли; Возврат Новый Структура("БлокУсловийРеализаций, БлокУсловийПлатежей", БлокУсловийРеализаций, БлокУсловийПлатежей); КонецФункции Процедура КнопкаСформироватьНажатие(Кнопка) ДатаНачала=?(ДатаНач=Дата("00010101"), Дата("20081201"), НачалоДня(ДатаНач)); ДатаКонца=?(ДатаКон=Дата("00010101"), КонецДня(ТекущаяДата()), КонецДня(ДатаКон)); ТабДок=ЭлементыФормы.ПолеТД; ТабДок.Очистить(); Макет=ПолучитьМакет("Макет"); ОбластьШапка=Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(ОбластьШапка); ОбластьШапкаТаблицы=Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьКонтрагент=Макет.ПолучитьОбласть("Контрагент"); ОбластьДанные=Макет.ПолучитьОбласть("Данные"); СтруктураУсловийВыборки=ПолучитьБлокУсловийВыборки(); ЗапросРеализации=Новый Запрос; ЗапросРеализации.УстановитьПараметр("ДатаНач", ДатаНачала); ЗапросРеализации.УстановитьПараметр("ДатаКон", ДатаКонца); ЗапросРеализации.УстановитьПараметр("Организация", Организация); ЗапросРеализации.УстановитьПараметр("Контрагент", Контрагент); ЗапросРеализации.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента); ЗапросРеализации.УстановитьПараметр("ВалютаРегл", Константы.ВалютаРегламентированногоУчета.Получить()); ЗапросРеализации.Текст= "ВЫБРАТЬ РАЗРЕШЕННЫЕ | РеализацияТоваровУслуг.Контрагент КАК Контрагент, | РеализацияТоваровУслуг.Ссылка КАК ДокументОтгрузки, | РеализацияТоваровУслуг.Номер КАК ДокументОтгрузкиНомер, | РеализацияТоваровУслуг.ДатаОтгрузки КАК ДокументОтгрузкиДата, | ВЫБОР | КОГДА РеализацияТоваровУслуг.ВалютаДокумента = &ВалютаРегл | ТОГДА РеализацияТоваровУслуг.СуммаДокумента | ИНАЧЕ ВЫБОР | КОГДА КурсыВалют.Курс ЕСТЬ NULL | ТОГДА РеализацияТоваровУслуг.СуммаДокумента | ИНАЧЕ РеализацияТоваровУслуг.СуммаДокумента * КурсыВалют.Курс / КурсыВалют.Кратность | КОНЕЦ | КОНЕЦ КАК ДокументОтгрузкиСумма |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют | ПО РеализацияТоваровУслуг.ВалютаДокумента = КурсыВалют.Валюта | И (НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.ДатаОтгрузки, ДЕНЬ) = НАЧАЛОПЕРИОДА(КурсыВалют.Период, ДЕНЬ)) |ГДЕ | РеализацияТоваровУслуг.ОтражатьВУправленческомУчете = ИСТИНА | И РеализацияТоваровУслуг.Проведен = ИСТИНА | И РеализацияТоваровУслуг.СуммаДокумента <> 0 | И РеализацияТоваровУслуг.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности=ИСТИНА | И РеализацияТоваровУслуг.ДатаОтгрузки МЕЖДУ &ДатаНач И &ДатаКон"+ СтруктураУсловийВыборки.БлокУсловийРеализаций+" | |УПОРЯДОЧИТЬ ПО | РеализацияТоваровУслуг.Контрагент.Наименование, | ДокументОтгрузкиДата |ИТОГИ | СУММА(ДокументОтгрузкиСумма) |ПО | Контрагент"; ЗапросПлатежи=Новый Запрос; ЗапросПлатежи.УстановитьПараметр("ДатаНач", ДатаНачала); ЗапросПлатежи.УстановитьПараметр("ДатаКон", ДатаКонца); ЗапросПлатежи.УстановитьПараметр("Организация", Организация); ЗапросПлатежи.УстановитьПараметр("Контрагент", Контрагент); ЗапросПлатежи.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента); ЗапросПлатежи.УстановитьПараметр("ВалютаРегл", Константы.ВалютаРегламентированногоУчета.Получить()); ЗапросПлатежи.Текст= "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК ПлатежныйДокумент, | ВзаиморасчетыСКонтрагентамиОбороты.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом, | СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход * ВЫБОР | КОГДА ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов = &ВалютаРегл | ТОГДА 1 | ИНАЧЕ ВЫБОР | КОГДА КурсыВалют.Курс ЕСТЬ NULL | ТОГДА 1 | ИНАЧЕ КурсыВалют.Курс / КурсыВалют.Кратность | КОНЕЦ | КОНЕЦ) КАК ПлатежныйДокументСумма, | ВзаиморасчетыСКонтрагентамиОбороты.Период КАК Период |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты( | &ДатаНач, | &ДатаКон, | Регистратор, | ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности=ИСТИНА И | ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем) | "+ СтруктураУсловийВыборки.БлокУсловийПлатежей+") КАК ВзаиморасчетыСКонтрагентамиОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют | ПО ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов = КурсыВалют.Валюта | И (НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ) = НАЧАЛОПЕРИОДА(КурсыВалют.Период, ДЕНЬ)) | |СГРУППИРОВАТЬ ПО | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | ВзаиморасчетыСКонтрагентамиОбороты.Регистратор, | ВзаиморасчетыСКонтрагентамиОбороты.ДокументРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиОбороты.Период |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | ВзаиморасчетыСКонтрагентамиОбороты.Регистратор, | ВзаиморасчетыСКонтрагентамиОбороты.ДокументРасчетовСКонтрагентом, | СУММА((-1)*ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход * ВЫБОР | КОГДА ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов = &ВалютаРегл | ТОГДА 1 | ИНАЧЕ ВЫБОР | КОГДА КурсыВалют.Курс ЕСТЬ NULL | ТОГДА 1 | ИНАЧЕ КурсыВалют.Курс / КурсыВалют.Кратность | КОНЕЦ | КОНЕЦ), | ВзаиморасчетыСКонтрагентамиОбороты.Период |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты( | &ДатаНач, | &ДатаКон, | Регистратор, | ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности=ИСТИНА И | ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем) | "+ СтруктураУсловийВыборки.БлокУсловийПлатежей+") КАК ВзаиморасчетыСКонтрагентамиОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют | ПО ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов = КурсыВалют.Валюта | И (НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ) = НАЧАЛОПЕРИОДА(КурсыВалют.Период, ДЕНЬ)) | |ГДЕ | ВзаиморасчетыСКонтрагентамиОбороты.Регистратор Ссылка Документ.ВозвратТоваровОтПокупателя | |СГРУППИРОВАТЬ ПО | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | ВзаиморасчетыСКонтрагентамиОбороты.Регистратор, | ВзаиморасчетыСКонтрагентамиОбороты.ДокументРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиОбороты.Период | |УПОРЯДОЧИТЬ ПО | Период"; ТаблицаПлатежей=ЗапросПлатежи.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой); ВыборкаКонтрагент=ЗапросРеализации.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл ТабДок.Вывести(ОбластьШапкаТаблицы); ОбластьКонтрагент.Параметры.КонтрагентНаименование=?(ТипЗнч(ВыборкаКонтрагент.Контрагент)=Тип("СправочникСсылка.Контрагенты"), ВыборкаКонтрагент.Контрагент.НаименованиеПолное, ""); ОбластьКонтрагент.Параметры.Контрагент=ВыборкаКонтрагент.Контрагент; Долг=0; СуммаПлатежа=0; Просрочка=0; ТабДок.Вывести(ОбластьКонтрагент); КолРеализаций=0; ВыборкаДанные=ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДанные.Следующий() Цикл у0=ТабДок.ВысотаТаблицы+1; СуммаДокумента=ВыборкаДанные.ДокументОтгрузкиСумма; ОбластьДанные.Параметры.Заполнить(ВыборкаДанные); ОбластьДанные.Параметры.ДатаПлатежа=""; ОбластьДанные.Параметры.СуммаПлатежа=""; ОбластьДанные.Параметры.Просрочка=""; ОбластьДанные.Параметры.Долг=""; ОбластьДанные.Параметры.ПлатежныйДокумент=""; ОжидаемыйСрокОплаты=Неопределено; СуммаДнейПросрочки=0; КолРеализаций=КолРеализаций+1; Запрос=Новый Запрос; Если ВыборкаДанные.ДокументОтгрузки.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности Тогда Если ВыборкаДанные.ДокументОтгрузки.ДоговорКонтрагента.лаСпособыКонтроляДнейЗадолженности=Перечисления.СпособыКонтроляДнейЗадолженности.ПоКалендарнымДням Тогда ОжидаемыйСрокОплаты=ВыборкаДанные.ДокументОтгрузкиДата+86400*ВыборкаДанные.ДокументОтгрузки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности; Иначе ОжидаемыйСрокОплаты=ЗаполнениеДокументов.ОпределитьДату(ВыборкаДанные.ДокументОтгрузкиДата, ВыборкаДанные.ДокументОтгрузки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности); КонецЕсли; КонецЕсли; ОбластьДанные.Параметры.ОжидаемыйСрокОплаты=ОжидаемыйСрокОплаты; Структура=Новый Структура("Контрагент, ДокументРасчетовСКонтрагентом", ВыборкаДанные.Контрагент, ВыборкаДанные.ДокументОтгрузки); Таб=ТаблицаПлатежей.НайтиСтроки(Структура); Если Таб.Количество()>0 Тогда СуммаДнейПросрочки=0; Для каждого Элемент Из Таб Цикл СуммаДокумента=СуммаДокумента-Элемент.ПлатежныйДокументСумма; СуммаПлатежа=СуммаПлатежа+Элемент.ПлатежныйДокументСумма; ОбластьДанные.Параметры.ПлатежныйДокумент=Элемент.ПлатежныйДокумент; ОбластьДанные.Параметры.ДатаПлатежа=Элемент.Период; ОбластьДанные.Параметры.СуммаПлатежа=Элемент.ПлатежныйДокументСумма; ОбластьДанные.Параметры.Долг=СуммаДокумента; Если НачалоДня(ОжидаемыйСрокОплаты)<НачалоДня(Элемент.Период) Тогда СуммаДнейПросрочки=(НачалоДня(Элемент.Период)-НачалоДня(ОжидаемыйСрокОплаты))/86400; Иначе СуммаДнейПросрочки=0; КонецЕсли; ОбластьДанные.Параметры.Просрочка=СуммаДнейПросрочки; ТабДок.Вывести(ОбластьДанные); КонецЦикла; Иначе ОбластьДанные.Параметры.Долг=СуммаДокумента; Если НачалоДня(ОжидаемыйСрокОплаты)<НачалоДня(ДатаКонца) Тогда СуммаДнейПросрочки=(НачалоДня(ДатаКонца)-НачалоДня(ОжидаемыйСрокОплаты))/86400; Иначе СуммаДнейПросрочки=0; КонецЕсли; ОбластьДанные.Параметры.Просрочка=СуммаДнейПросрочки; ТабДок.Вывести(ОбластьДанные); КонецЕсли; Просрочка=Просрочка+СуммаДнейПросрочки; Долг=СуммаДокумента; у1=ТабДок.ВысотаТаблицы; Если у0<>у1 Тогда ТабДок.Область(у0, 2, у1, 2).Объединить(); ТабДок.Область(у0, 3, у1, 3).Объединить(); ТабДок.Область(у0, 4, у1, 4).Объединить(); ТабДок.Область(у0, 5, у1, 5).Объединить(); КонецЕсли; КонецЦикла; ОбластьДанные.Параметры.ДокументОтгрузки=""; ОбластьДанные.Параметры.ДокументОтгрузкиНомер="Итого"; ОбластьДанные.Параметры.ДокументОтгрузкиСумма=ВыборкаКонтрагент.ДокументОтгрузкиСумма; ОбластьДанные.Параметры.ДокументОтгрузкиДата=""; ОбластьДанные.Параметры.ОжидаемыйСрокОплаты=""; ОбластьДанные.Параметры.ПлатежныйДокумент=""; ОбластьДанные.Параметры.ДатаПлатежа=""; ОбластьДанные.Параметры.СуммаПлатежа=СуммаПлатежа; ОбластьДанные.Параметры.Долг=Долг; ОбластьДанные.Параметры.Просрочка=Окр(Просрочка/КолРеализаций, 1); ТабДок.Вывести(ОбластьДанные); ОбластьДанные.Параметры.ДокументОтгрузки=""; ОбластьДанные.Параметры.ДокументОтгрузкиНомер="Коэффициент инкассации, %"; ОбластьДанные.Параметры.ДокументОтгрузкиСумма=Окр(СуммаПлатежа*100/ВыборкаКонтрагент.ДокументОтгрузкиСумма, 0); ОбластьДанные.Параметры.ДокументОтгрузкиДата=""; ОбластьДанные.Параметры.ОжидаемыйСрокОплаты=""; ОбластьДанные.Параметры.ПлатежныйДокумент=""; ОбластьДанные.Параметры.ДатаПлатежа=""; ОбластьДанные.Параметры.СуммаПлатежа=""; ОбластьДанные.Параметры.Долг=""; ОбластьДанные.Параметры.Просрочка=""; ТабДок.Вывести(ОбластьДанные); КонецЦикла; КонецПроцедуры Процедура КнопкаНастройкаПериодаНажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.УстановитьПериод(ДатаНач, ?(ДатаКон='0001-01-01', ДатаКон, КонецДня(ДатаКон))); НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; Если НастройкаПериода.Редактировать() Тогда ДатаНач = НастройкаПериода.ПолучитьДатуНачала(); ДатаКон = НастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; КонецПроцедуры |