Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Помогите с выборками

Помогите с выборками
Я
   imakhd
 
06.05.18 - 18:45
Необходимо вывести данные о выданных кредитах организации (дата, наращенная сумма), с возможностью формирования операции. Для каждого месяца должна создаваться отдельная операция. Плюс, если на одном договоре несколько сумм, то программа должна вывести их и рассчитать проценты по ним.
Ниже прилагаю листинг. Помогите разобраться в чём проблема.
Не цепляются последние даты месяцев, кроме завершающего месяца периода
 
 
   imakhd
 
1 - 06.05.18 - 18:45
// Вставить содержимое обработчика.

    Запрос = Новый запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
                   |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
                   |    КОНЕЦПЕРИОДА(ХозрасчетныйОстаткиИОбороты.Период, МЕСЯЦ) КАК ПерМесяц,
                   |    ХозрасчетныйОстаткиИОбороты.Период КАК Период,
                   |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНач
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&Начало, &Конец, День, ДвиженияИГраницыПериода, Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
                   |ИТОГИ
                   |    СУММА(СуммаНач)
                   |ПО
                   |    ПерМесяц,
                   |    Субконто1,
                   |    Субконто2";
    Запрос.УстановитьПараметр("Начало",Начало_периода);
    Запрос.УстановитьПараметр("Конец",Конец_периода);
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ПредоставленныеЗаймы);
    
    РезультатЗапроса = Запрос.Выполнить();
    КоличествоДнейВГоду = ДеньГода(КонецГода(Конец_периода));
    
    
    МойТабличныйДокумент = Новый ТабличныйДокумент;
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    Макет = ОтчетОбъект.ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьИтог = Макет.ПолучитьОбласть("Итог");
    ОбластьПробел = Макет.ПолучитьОбласть ("Пробел");
    
    ВыборкаПерМесяц = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    Пока ВыборкаПерМесяц.Следующий()Цикл
        ВыборкаКонтрагентов = ВыборкаПерМесяц.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);    
        Пока ВыборкаКонтрагентов.Следующий() Цикл
            ВыборкаДоговоров = ВыборкаКонтрагентов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
            Пока ВыборкаДоговоров.Следующий() Цикл
                ОбластьШапка.Параметры.Контрагент = ВыборкаДоговоров.Субконто1;
                ОбластьШапка.Параметры.Договор = ВыборкаДоговоров.Субконто2;
                МойТабличныйДокумент.Вывести(ОбластьШапка);
                НаращеннаяСумма = 0;
                Выборка = ВыборкаДоговоров.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
                //ДатаТекущая = НачалоМесяца(ВыборкаПермесяц.Пермесяц);

                ДатаПредыдущая = НачалоМесяца(ВыборкаПерМесяц.ПерМесяц);
                
                Пока Выборка.Следующий() Цикл
                    ДатаТекущая = Выборка.Период; 
                    //на 2 марта сумма остатков = 0, на 26 марта с периодом 24 дня остаток 10 млн

                    СуммаТекущая = Выборка.СуммаНач;                    
                    //на период между датой предыдущей и датой текущей должны начислить проценты на сумму

                    КоличествоДней = ((ДатаТекущая - ДатаПредыдущая)/3600)/24;
                    Если (ДатаПредыдущая = ДатаТекущая) и 
                        (СуммаТекущая <> 0) тогда
                        КоличествоДней = КоличествоДней +1;
                    КонецЕсли;    
                    Проценты = ОКР(СуммаТекущая*Процентная_ставка/100*КоличествоДней/КоличествоДнейВГоду, 2);
                    НаращеннаяСумма = НаращеннаяСумма + Проценты;
                    ОбластьСтрока.Параметры.ДатаПредыдущая = ДатаПредыдущая;
                    ОбластьСтрока.Параметры.ДатаТекущая = ДатаТекущая;
                    ОбластьСтрока.Параметры.Сумма = СуммаТекущая;
                    ОбластьСтрока.Параметры.Проценты = Проценты;
                    МойТабличныйДокумент.Вывести(ОбластьСтрока);
                    ДатаПредыдущая = ДатаТекущая;                    
                    //создание опреации

                    //проверка Создать операцию

                    Если СоздатьОперацию Тогда
                        Операция = Документы.ОперацияБух.СоздатьДокумент();
                        Операция.Дата = Выборка.ПерМесяц;
                        Операция.Комментарий = "Начисление процентов по предоставленному займу";
                        Операция.Содержание = "Начисление процентов по предоставленному займу";
                        Операция.Организация = Организация;
                        Операция.СпособЗаполнения = "Вручную";
                    КонецЕсли;
                    ОбщаяСумма = 0;
                    Если СоздатьОперацию И (НаращеннаяСумма <> 0) Тогда
                        //добавляем проводки

                        Проводка = Операция.Движения.Хозрасчетный.Добавить();
                        Проводка.Активность = Истина;    
                        Проводка.Организация = Организация;
                        Проводка.Период = Выборка.ПерМесяц;            
                        Проводка.Содержание = "Начисление процентов по предоставленному займу"//другое содержание, не то, что в документе, может быть для каждой строки разное            

                        Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами;
                        Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = ВыборкаКонтрагентов.Субконто1;
                        Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = ВыборкаДоговоров.Субконто2;
                        Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ПрочиеДоходы;
                        Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПрочиеДоходыИРасходы] = СтатьяРасходов;
                        Проводка.Сумма = НаращеннаяСумма;
                        Проводка.СуммаНУКт = НаращеннаяСумма;
                        ОбщаяСумма = ОбщаяСумма + НаращеннаяСумма;
                    КонецЕсли;
                Конеццикла;    
                ОбластьИтог.Параметры.НаращеннаяСумма = НаращеннаяСумма;
                ОбластьИтог.Параметры.Заполнить(ВыборкаКонтрагентов);
                МойТабличныйДокумент.Вывести(ОбластьИтог);
                ОбластьПробел.Параметры.Заполнить(ВыборкаДоговоров);
                МойТабличныйДокумент.Вывести(ОбластьПробел);                                        
            КонецЦикла;
            Если СоздатьОперацию И (ОбщаяСумма <> 0) Тогда
                Операция.СуммаОперации = ОбщаяСумма;
                Операция.Движения.Хозрасчетный.Записывать = Истина;
                Операция.Записать(РежимЗаписиДокумента.Запись);
                Операция.Движения.Хозрасчетный.Записать(Истина);
                Сообщить("Создана " + Операция);
            КонецЕсли;
        КонецЦикла;        
    КонецЦикла;
    Возврат МойТабличныйДокумент;
   shuhard
 
2 - 06.05.18 - 19:35
(0)ну нафига форуму за тебя решать тестовые задания ?
   hhhh
 
3 - 06.05.18 - 19:38
(0) ну так пробуй

Запрос.УстановитьПараметр("Конец",КонецДня(Конец_периода));
   imakhd
 
4 - 06.05.18 - 19:46
(3) Хмм... Без изменений

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует