Имя: Пароль:
1C
1С v8
8.2 БП Запрос по 76,05 счету
0 ИУБиПовиц
 
22.04.14
11:57
Добрый день. Есть такая проблема.Нужно получить запросом остаток по счету 76.05(Субконто подразделение, контрагент, договор, и док расчетов) развернутые по контрагентам, и договор с максимальной суммой задолжености. Причем получить так, что бы были итоги по тому краткосрочная задолженность это или нет(Срок действия в договоре старше 1 января 14).
Делаю так, все хорошо, но нет разделения итогов, по кратко и долгосрочной задолженности. Каким образом нужно модифицировать сей код?
Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОбщиеОстатки.Субконто1,
        |    ОбщиеОстатки.Субконто2,
        |    ОбщиеОстатки.СуммаОстаток КАК СуммаОстаток,
        |    ОбщиеОстатки.Субконто1Наименование,
        |    ОбщиеОстатки.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
        |    ОбщиеОстатки.СрокДействия,
        |    ОбщиеОстатки.СуммаРазвернутыйОстатокДт
        |ПОМЕСТИТЬ ВыборкаПоОстаткам
        |ИЗ
        |    (ВЫБРАТЬ
        |        ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
        |        ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
        |        ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток,
        |        ХозрасчетныйОстатки.Субконто1.Наименование КАК Субконто1Наименование,
        |        ВЫБОР
        |            КОГДА ПериодыДок.СрокДействия >= &ДатаКраткосрочных
        |                ТОГДА ИСТИНА
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ КАК ЭтоКраткосрочнаяЗадолженость,
        |        ПериодыДок.СрокДействия КАК СрокДействия,
        |        ХозрасчетныйОстатки.СуммаРазвернутыйОстатокДт КАК СуммаРазвернутыйОстатокДт
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный.Остатки(
        |                &Дата,
        |                Счет = &Счет7605,
        |                ,
        |                Субконто1 = &Субконто1
        |                    ИЛИ &ПоВсем) КАК ХозрасчетныйОстатки
        |            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |                ХозрасчетныйОстаткиИОбороты.Субконто2 КАК ДоговорКонтрагента,
        |                МАКСИМУМ(ХозрасчетныйОстаткиИОбороты.Регистратор.Дата) КАК СрокДействия
        |            ИЗ
        |                РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &Дата, Регистратор, , Счет = &Счет7605, , ) КАК ХозрасчетныйОстаткиИОбороты
        |            ГДЕ
        |                ХозрасчетныйОстаткиИОбороты.Организация = &Организация
        |            
        |            СГРУППИРОВАТЬ ПО
        |                ХозрасчетныйОстаткиИОбороты.Субконто2) КАК ПериодыДок
        |            ПО ХозрасчетныйОстатки.Субконто2 = ПериодыДок.ДоговорКонтрагента
        |    ГДЕ
        |        ХозрасчетныйОстатки.Организация = &Организация
        |    
        |    ОБЪЕДИНИТЬ ВСЕ
        |    
        |    ВЫБРАТЬ
        |        ХозрасчетныйОстатки.Субконто1,
        |        ХозрасчетныйОстатки.Субконто2,
        |        ХозрасчетныйОстатки.СуммаОстаток,
        |        ХозрасчетныйОстатки.Субконто1.Наименование,
        |        ВЫБОР
        |            КОГДА ПериодыДок.СрокДействия >= &ДатаКраткосрочных
        |                ТОГДА ИСТИНА
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ,
        |        ПериодыДок.СрокДействия,
        |        ХозрасчетныйОстатки.СуммаРазвернутыйОстатокДт
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный.Остатки(
        |                &Дата,
        |                Счет = &Счет60,
        |                ,
        |                Субконто1 = &Субконто1
        |                    ИЛИ &ПоВсем) КАК ХозрасчетныйОстатки
        |            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |                ХозрасчетныйОстаткиИОбороты.Субконто2 КАК ДоговорКонтрагента,
        |                МАКСИМУМ(ХозрасчетныйОстаткиИОбороты.Регистратор.Дата) КАК СрокДействия
        |            ИЗ
        |                РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &Дата, Регистратор, , Счет = &Счет60, , ) КАК ХозрасчетныйОстаткиИОбороты
        |            ГДЕ
        |                ХозрасчетныйОстаткиИОбороты.Организация = &Организация
        |            
        |            СГРУППИРОВАТЬ ПО
        |                ХозрасчетныйОстаткиИОбороты.Субконто2) КАК ПериодыДок
        |            ПО ХозрасчетныйОстатки.Субконто2 = ПериодыДок.ДоговорКонтрагента
        |    ГДЕ
        |        ХозрасчетныйОстатки.Организация = &Организация) КАК ОбщиеОстатки";
        
        Запрос.УстановитьПараметр("Дата", Новый Граница(КонецДня(ДатаОтчета),ВидГраницы.Включая));
        Запрос.УстановитьПараметр("ДатаКраткосрочных", ДатаКраткосрочнойЗадолжености);
        Запрос.УстановитьПараметр("Счет7605",Счет76);
        Запрос.УстановитьПараметр("Счет60",Счет60);
        Запрос.УстановитьПараметр("Организация",Организация);
        Запрос.УстановитьПараметр("Субконто1",Справочники.Контрагенты.НайтиПоКоду("000002506"));
        
        Запрос.УстановитьПараметр("ПоВсем",Истина);
        
        
        ТабДокумент = Новый ТабличныйДокумент;
        макет = ПолучитьМакет("Макет");
        Областьшапка = макет.ПолучитьОбласть("Шапка");
        
        ТабДокумент.Вывести(Областьшапка);
        
        
         Запрос.Выполнить();
        
         //Выборка по договорам
         Запрос.Текст =
               "ВЫБРАТЬ
               |    ОстаткиСвернутые.Субконто1,
               |    ОстаткиСвернутые.Субконто2,
               |    ОстаткиСвернутые.СуммаОстаток КАК СуммаОстаток,
               |    ОстаткиСвернутые.Субконто1Наименование КАК Субконто1Наименование,
               |    ОстаткиСвернутые.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |    ОстаткиСвернутые.СрокДействия
               |ИЗ
               |    (ВЫБРАТЬ
               |        ВыборкаПоОстаткам.Субконто1 КАК Субконто1,
               |        ВыборкаПоОстаткам.Субконто2 КАК Субконто2,
               |        СУММА(ВыборкаПоОстаткам.СуммаОстаток) КАК СуммаОстаток,
               |        ВыборкаПоОстаткам.Субконто1Наименование КАК Субконто1Наименование,
               |        ВыборкаПоОстаткам.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |        ВыборкаПоОстаткам.СрокДействия КАК СрокДействия
               |    ИЗ
               |        ВыборкаПоОстаткам КАК ВыборкаПоОстаткам
               |    
               |    СГРУППИРОВАТЬ ПО
               |        ВыборкаПоОстаткам.Субконто1Наименование,
               |        ВыборкаПоОстаткам.Субконто1,
               |        ВыборкаПоОстаткам.Субконто2,
               |        ВыборкаПоОстаткам.ЭтоКраткосрочнаяЗадолженость,
               |        ВыборкаПоОстаткам.СрокДействия) КАК ОстаткиСвернутые
               |
               |УПОРЯДОЧИТЬ ПО
               |    Субконто1Наименование,
               |    СуммаОстаток УБЫВ";
              
              
               //Итоговая таблица
              
     ВыборкаПоДОговорам = Запрос.Выполнить().Выбрать();
    
    
         Запрос.Текст =
               "ВЫБРАТЬ
               |    ОстаткиСвернутые.Субконто1,
               |    ОстаткиСвернутые.Субконто2,
               |    ОстаткиСвернутые.СуммаОстаток КАК СуммаОстаток,
               |    ОстаткиСвернутые.Субконто1Наименование КАК Субконто1Наименование,
               |    ОстаткиСвернутые.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |    ОстаткиСвернутые.СрокДействия,
               |    ОстаткиСвернутые.СуммаОстаток2 КАК СуммаОстаток2
               |ИЗ
               |    (ВЫБРАТЬ
               |        ВыборкаПоОстаткам.Субконто1 КАК Субконто1,
               |        """" КАК Субконто2,
               |        СУММА(ВыборкаПоОстаткам.СуммаОстаток) КАК СуммаОстаток,
               |        ВыборкаПоОстаткам.Субконто1Наименование КАК Субконто1Наименование,
               |        ИСТИНА КАК ЭтоКраткосрочнаяЗадолженость,
               |        """" КАК СрокДействия,
               |        СУММА(ВыборкаПоОстаткам.СуммаРазвернутыйОстатокДт) КАК СуммаОстаток2
               |    ИЗ
               |        ВыборкаПоОстаткам КАК ВыборкаПоОстаткам
               |    
               |    СГРУППИРОВАТЬ ПО
               |        ВыборкаПоОстаткам.Субконто1Наименование,
               |        ВыборкаПоОстаткам.Субконто1) КАК ОстаткиСвернутые
               |ГДЕ
               |    ОстаткиСвернутые.СуммаОстаток > 0
               |
               |УПОРЯДОЧИТЬ ПО
               |    Субконто1Наименование
               |ИТОГИ
               |    СУММА(СуммаОстаток),
               |    СУММА(СуммаОстаток2)
               |ПО
               |    ОБЩИЕ,
               |    ЭтоКраткосрочнаяЗадолженость" ;


        

    Результат = Запрос.Выполнить();
    
    //тзДат = СформироватьТЗССроками(Результат.Выгрузить().ВыгрузитьКолонку("Субконто2"));
    
    //тз = Результат.Выгрузить().ВыгрузитьКолонку("Субконто2");
    

    ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ВыборкаОбщийИтог.Следующий();        // Общий итог

    // Вставить обработку выборки ВыборкаОбщийИтог

    ВыборкаКраткосрочная = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ЭтоКраткосрочнаяЗадолженость");

    ном = 0;
    Пока ВыборкаКраткосрочная.Следующий() Цикл
            ном = ном+1;
            ОблСтрока = макет.ПолучитьОбласть("Строка");
            ОблСтрока.Параметры.Заполнить(ВыборкаКраткосрочная);
            ОблСтрока.Параметры.Ном = Ном;
            ОблСтрока.Параметры.Наименование =  ?(ВыборкаКраткосрочная.ЭтоКраткосрочнаяЗадолженость = Истина,"Краткосрочная","Долгосрочная");
            ТабДокумент.Вывести(ОблСтрока);
            
            подном = 0;
            
            ВыборкаДетальныеЗаписи = ВыборкаКраткосрочная.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() цикл
                
                подном = подном+1;
                ОблСтрока = макет.ПолучитьОбласть("Строка");
                ОблСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
                ОблСтрока.Параметры.ном = "" + Ном + "." + подном;
                ОблСтрока.Параметры.Наименование =  ВыборкаДетальныеЗаписи.Субконто1;
                
                Если ВыборкаПоДОговорам.НайтиСледующий(Новый Структура("Субконто1",ВыборкаДетальныеЗаписи.Субконто1)) тогда
                    ОБлСтрока.Параметры.Заполнить(ВыборкаПоДОговорам);
                    
                КонецЕсли;
                
                
                //массивНайденДата = тзДат.НайтиСтроки(Новый Структура("Контрагент,ДоговорКонтрагента",ВыборкаДетальныеЗаписи.Субконто1,ВыборкаДетальныеЗаписи.Субконто2));
                //ОблСтрока.Параметры.СрокДействия = ВыборкаДетальныеЗаписи.Субконто2.ДатаПоследнейПоставки;
                //для каждого эл из массивНайденДата цикл
                //    ОблСтрока.Параметры.СрокДействия     = эл.СрокДействия    ;
                //КонецЦикла;
                
                
                ТабДокумент.Вывести(ОблСтрока);
                
                
            КонецЦикла;
            
        
    КонецЦикла;
    
    облИтого = макет.ПолучитьОбласть("Итого");
    облИтого.Параметры.Заполнить(ВыборкаОбщийИтог);
    
    ТабДокумент.Вывести(облИтого);
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент);
1 ИУБиПовиц
 
22.04.14
12:19
пробую так делать, какие-то неведомые цифры появляются
//Выборка по договорам
         Запрос.Текст =
               "ВЫБРАТЬ
               |    МАКСИМУМ(ОстаткиСвернутые.Субконто2) КАК Субконто2,
               |    ОстаткиСвернутые.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |    ОстаткиСвернутые.Субконто1
               |ПОМЕСТИТЬ ВыборкаДоговоры
               |ИЗ
               |    (ВЫБРАТЬ
               |        ВыборкаПоОстаткам.Субконто1 КАК Субконто1,
               |        ВыборкаПоОстаткам.Субконто2 КАК Субконто2,
               |        СУММА(ВыборкаПоОстаткам.СуммаОстаток) КАК СуммаОстаток,
               |        ВыборкаПоОстаткам.Субконто1Наименование КАК Субконто1Наименование,
               |        ВыборкаПоОстаткам.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |        ВыборкаПоОстаткам.СрокДействия КАК СрокДействия
               |    ИЗ
               |        ВыборкаПоОстаткам КАК ВыборкаПоОстаткам
               |    
               |    СГРУППИРОВАТЬ ПО
               |        ВыборкаПоОстаткам.Субконто1Наименование,
               |        ВыборкаПоОстаткам.Субконто1,
               |        ВыборкаПоОстаткам.Субконто2,
               |        ВыборкаПоОстаткам.ЭтоКраткосрочнаяЗадолженость,
               |        ВыборкаПоОстаткам.СрокДействия) КАК ОстаткиСвернутые
               |
               |СГРУППИРОВАТЬ ПО
               |    ОстаткиСвернутые.ЭтоКраткосрочнаяЗадолженость,
               |    ОстаткиСвернутые.Субконто1";
              
              
               //Итоговая таблица
              
     //ВыборкаПоДОговорам = Запрос.Выполнить().Выбрать();
     Запрос.Выполнить();
    
    
         Запрос.Текст =
               "ВЫБРАТЬ
               |    ОстаткиСвернутые.Субконто1,
               |    ОстаткиСвернутые.Субконто2,
               |    ОстаткиСвернутые.СуммаОстаток КАК СуммаОстаток,
               |    ОстаткиСвернутые.Субконто1Наименование КАК Субконто1Наименование,
               |    ОстаткиСвернутые.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |    ОстаткиСвернутые.СрокДействия,
               |    ОстаткиСвернутые.СуммаОстаток2 КАК СуммаОстаток2
               |ИЗ
               |    (ВЫБРАТЬ
               |        ВыборкаПоОстаткам.Субконто1 КАК Субконто1,
               |        ВыборкаДоговоры.Субконто2 КАК Субконто2,
               |        СУММА(ВыборкаПоОстаткам.СуммаОстаток) КАК СуммаОстаток,
               |        ВыборкаПоОстаткам.Субконто1Наименование КАК Субконто1Наименование,
               |        ВыборкаДоговоры.ЭтоКраткосрочнаяЗадолженость КАК ЭтоКраткосрочнаяЗадолженость,
               |        ВыборкаПоОстаткам.СрокДействия КАК СрокДействия,
               |        СУММА(ВыборкаПоОстаткам.СуммаРазвернутыйОстатокДт) КАК СуммаОстаток2
               |    ИЗ
               |        ВыборкаПоОстаткам КАК ВыборкаПоОстаткам
               |            ЛЕВОЕ СОЕДИНЕНИЕ ВыборкаДоговоры КАК ВыборкаДоговоры
               |            ПО ВыборкаПоОстаткам.Субконто1 = ВыборкаДоговоры.Субконто1
               |    
               |    СГРУППИРОВАТЬ ПО
               |        ВыборкаПоОстаткам.Субконто1Наименование,
               |        ВыборкаПоОстаткам.Субконто1,
               |        ВыборкаДоговоры.Субконто2,
               |        ВыборкаДоговоры.ЭтоКраткосрочнаяЗадолженость,
               |        ВыборкаПоОстаткам.СрокДействия) КАК ОстаткиСвернутые
               |ГДЕ
               |    ОстаткиСвернутые.СуммаОстаток > 0
               |
               |УПОРЯДОЧИТЬ ПО
               |    Субконто1Наименование
               |ИТОГИ
               |    СУММА(СуммаОстаток),
               |    СУММА(СуммаОстаток2)
               |ПО
               |    ОБЩИЕ,
               |    ЭтоКраткосрочнаяЗадолженость" ;
2 hhhh
 
22.04.14
12:56
ну вы же суммируете тупо остаток за разные периоды?

               |        СУММА(ВыборкаПоОстаткам.СуммаОстаток) КАК СуммаОстаток,

               |        СУММА(ВыборкаПоОстаткам.СуммаРазвернутыйОстатокДт) КАК СуммаОстаток2
               |    ИЗ
               |        ВыборкаПоОстаткам КАК ВыборкаПоОстаткам
               |            ЛЕВОЕ СОЕДИНЕНИЕ ВыборкаДоговоры КАК ВыборкаДоговоры
               |            ПО ВыборкаПоОстаткам.Субконто1 = ВыборкаДоговоры.Субконто1
               |    
               |    СГРУППИРОВАТЬ ПО
               |        ...
               |        ВыборкаПоОстаткам.СрокДействия

ну то есть изначально понятно что если сложить остатки за январь с остатками за февраль, то получится фигня.
3 ИУБиПовиц
 
22.04.14
13:12
Ну вот например
Контрагент Иванов общий остаток 10000р
из которых
остаток по договору А = 15000 по ДТ
остаток по договору Б = 5000 р по КТ

у меня в отчете должно быть

Иванов ДатаВозникновенияЗадолжености(последняя по 2 договорам) 10000 и последняя колонка Договор А(так как остаток больше).
Как это запросом собрать, что то не пойму
4 ИУБиПовиц
 
22.04.14
13:13
А если наоборот
остаток по А 5000 ДТ
а по Б 15000 КТ
то должен выводить нуль
5 hhhh
 
22.04.14
13:20
вы вообще непонятно как писали запрос.

СуммаРазвернутыйОстатокКт - у вас даже и нет такого в принципе.


личше взять типовой отчет кредиторская задолженность и немножко подрихтовать.