Имя: Пароль:
1C
1С v8
Запрос по тч документа и соединение с Регистром накопления остатки
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    тогда
       ответ = Вопрос("В ТЧ уже Есть строки!!!! Удалить ИХ?", РежимДиалогаВопрос.ДаНет);
       Если ОТВЕТ = КодВозвратаДиалога.Да тогда
           СведенияОЗайме.Очистить();
       иначе
           Загружать = не Загружать;
       КонецЕсли;          
   КонецЕсли;
   
   Если Загружать тогда
       СведенияОЗайме.Загрузить(тз);
   КонецЕсли;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.