|
|
|
Запрос по тч документа и соединение с Регистром накопления остатки | ☑ | ||
|---|---|---|---|---|
|
0
evgeniy1987
07.04.12
✎
11:20
|
Здравствуйте. Есть Документ график в ТЧ у которого есть такие поля:, дата платежа, суммаОснДолг, СуммаПроцент, доступность и Есть регистр накопления остатки который двигается документом этого типа и приходными документами у него поля ДоговорКонтра, СуммаОснДолг,СуммаПроценты. При формировании повторного графика по тому же договору Он должен автоматически заполнится таким образом: строки которые оплачены уже по прошлому графику(в регистре остаток 0) должны получить признак доступность ЛОЖЬ, строки которые частично оплачены, должны превратиться в несколько в одной суммы которые частично оплачены с доступностью ложь в другой суммы которые осталось заплатить с доступностью истина.
Пока получился такой запрос Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Изм_ГрафикЗаймаСведенияОЗайме.ДатаПлатежа КАК ДатаПлатежа, | СУММА(Изм_ГрафикЗаймаСведенияОЗайме.Процент) КАК Процент, | СУММА(Изм_ГрафикЗаймаСведенияОЗайме.Сумма) КАК Сумма, | ИСТИНА КАК Доступность, | ЕСТЬNULL(ОстаткиПоЗаймам.СуммаОснДолгОстаток, 0) КАК ОсталосьЗаплатитьОсн, | ЕСТЬNULL(ОстаткиПоЗаймам.СуммаПроцентыОстаток, 0) КАК ОсталосьЗаплатитьПР |ИЗ | Документ.Изм_ГрафикЗайма.СведенияОЗайме КАК Изм_ГрафикЗаймаСведенияОЗайме | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | Изм_ОстаткиПоКонтрагентуОстатки.ДатаОперации КАК ДатаОперации, | СУММА(Изм_ОстаткиПоКонтрагентуОстатки.СуммаОснДолгОстаток) КАК СуммаОснДолгОстаток, | СУММА(Изм_ОстаткиПоКонтрагентуОстатки.СуммаПроцентыОстаток) КАК СуммаПроцентыОстаток, | Изм_ОстаткиПоКонтрагентуОстатки.Договор КАК Договор | ИЗ | РегистрНакопления.Изм_ОстаткиПоКонтрагенту.Остатки КАК Изм_ОстаткиПоКонтрагентуОстатки | | СГРУППИРОВАТЬ ПО | Изм_ОстаткиПоКонтрагентуОстатки.ДатаОперации, | Изм_ОстаткиПоКонтрагентуОстатки.Договор) КАК ОстаткиПоЗаймам | ПО Изм_ГрафикЗаймаСведенияОЗайме.Ссылка.ДоговорКонтрагента = ОстаткиПоЗаймам.Договор | И Изм_ГрафикЗаймаСведенияОЗайме.ДатаПлатежа = ОстаткиПоЗаймам.ДатаОперации |ГДЕ | Изм_ГрафикЗаймаСведенияОЗайме.Ссылка = &График | |СГРУППИРОВАТЬ ПО | Изм_ГрафикЗаймаСведенияОЗайме.ДатаПлатежа, | ЕСТЬNULL(ОстаткиПоЗаймам.СуммаОснДолгОстаток, 0), | ЕСТЬNULL(ОстаткиПоЗаймам.СуммаПроцентыОстаток, 0) | |УПОРЯДОЧИТЬ ПО | ДатаПлатежа"; Запрос.УстановитьПараметр("График", График); Результат = Запрос.Выполнить(); тз = Результат.Выгрузить(); не понятно как размножить строки по частичной оплате и как сделать выставление флага доступности в запросе, так что то ругается Изм_ГрафикЗаймаСведенияОЗайме.Сумма = ЕСТЬNULL(ОстаткиПоЗаймам.СуммаОснДолгОстаток, 0) Спасибо.. |
|||
|
1
Zubek
07.04.12
✎
11:49
|
Используй таблицу ОстаткиИОбороты
|
|||
|
2
evgeniy1987
07.04.12
✎
13:10
|
Ну Она мне вряд ли поможет в данном случае, я решил по старинке пойти через тз.
Результат = Запрос.Выполнить(); тз = Результат.Выгрузить(); тз.Колонки.Добавить("Сальдо",Новый ОписаниеТипов("Число")); тзКопия = тз.Скопировать(); Тз.Очистить(); для Каждого стр из тзКопия цикл //СтрНовая = тз.Добавить(); //СтрНовая.ДатаПлатежа = Стр.ДатаПлатежа; РазницаОсн = Стр.Сумма - Стр.ОсталосьЗаплатитьОсн; РазницаПр= Стр.Процент - Стр.ОсталосьЗаплатитьПР; Если ( РазницаОсн> 0) ИЛИ (РазницаПр > 0) тогда СтрНовая = тз.Добавить(); СтрНовая.ДатаПлатежа = Стр.ДатаПлатежа; СтрНовая.доСтупность = ЛОЖЬ; СтрНовая.Сумма = РазницаОсн; СтрНовая.Процент = РазницаПр; Если ( НЕ РазницаОсн= Стр.Сумма ) ИЛИ (НЕ РазницаПр= Стр.Процент) тогда СтрНовая = тз.Добавить(); СтрНовая.ДатаПлатежа = Стр.ДатаПлатежа; СтрНовая.доСтупность = Истина; СтрНовая.Сумма = Стр.Сумма - РазницаОсн; СтрНовая.Процент = Стр.Процент - РазницаПр;; КонецЕсли; иначе СтрНовая = тз.Добавить(); СтрНовая.ДатаПлатежа = Стр.ДатаПлатежа; СтрНовая.доСтупность = Истина; СтрНовая.Сумма = Стр.Сумма; СтрНовая.Процент = Стр.Процент ; КонецЕсли; КонецЦикла; СуммаВсего = ОбщаяСуммаЗайма; для каждого стр из тз цикл СуммаВсего = СуммаВсего - стр.Сумма; стр.Сальдо = СуммаВсего; КонецЦикла; Загружать = Истина; Если СведенияОЗайме.Количество() > 0 тогда ответ = Вопрос("В ТЧ уже Есть строки!!!! Удалить ИХ?", РежимДиалогаВопрос.ДаНет); Если ОТВЕТ = КодВозвратаДиалога.Да тогда СведенияОЗайме.Очистить(); иначе Загружать = не Загружать; КонецЕсли; КонецЕсли; Если Загружать тогда СведенияОЗайме.Загрузить(тз); КонецЕсли; |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |