Имя: Пароль:
1C
1С v8
Группировка в макете
0 anisa8310
 
04.07.14
11:25
Добрый день! Самописная конфа.
Есть документ "Реестр платежей" в нем две таб части, вывожу печатную форму, все нормально в первой таб части ("ОстаткиПоБанковскимСчетам") нужно ещё группировку сделать "ВидСчета" и "Валюта".
Это сама функция:
Функция ПечатьРеестрПлатежей(МассивОбъектов, ОбъектыПечати) Экспорт
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    абпРеестрПлатежей.Ссылка,
    |    абпРеестрПлатежей.Номер,
    |    абпРеестрПлатежей.Дата,
    |    абпРеестрПлатежей.Организация,
    |    абпРеестрПлатежей.ЗаявкиНаРасход.(
    |        НомерСтроки,
    |        ВЫБОР
    |            КОГДА абпРеестрПлатежей.ЗаявкиНаРасход.Контрагент ССЫЛКА Справочник.Контрагенты
    |                ТОГДА абпРеестрПлатежей.ЗаявкиНаРасход.Контрагент.НаименованиеПолное
    |            КОГДА абпРеестрПлатежей.ЗаявкиНаРасход.Контрагент ССЫЛКА Справочник.ФизическиеЛица
    |                ТОГДА абпРеестрПлатежей.ЗаявкиНаРасход.Контрагент.Наименование
    |        КОНЕЦ КАК Контрагент,
    |        ДоговорКонтрагента.Наименование КАК ДоговорКонтрагента,
    |        ЗаявкаНаРасход.Ответственный.Наименование КАК Ответственный,
    |        СуммаКОплате КАК СуммаКОплате,
    |        БанковскийСчетКасса КАК БанковскийСчетКасса,
    |        ЕСТЬNULL(абпРеестрПлатежей.ЗаявкиНаРасход.БанковскийСчетКасса.Банк.Наименование, """") КАК Банк,
    |        ЗаявкаНаРасход,
    |        Назначение,
    |        ЦФО,
    |        СтатьяБюджета,
    |        Ссылка.Статус КАК СтатусЗаявки
    |    ),
    |    абпРеестрПлатежей.Руководитель,
    |    абпРеестрПлатежей.ГлавныйБухгалтер,
    |    абпРеестрПлатежей.Статус
    |ИЗ
    |    Документ.абпРеестрПлатежей КАК абпРеестрПлатежей
    |ГДЕ
    |    абпРеестрПлатежей.Ссылка В(&МассивОбъектов)";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);    
    ДокументНаПечать = Запрос.Выполнить().Выбрать();
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.КлючПараметровПечати = "РеестрПлатежей_РеестрПлатежей";
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабличныйДокумент.ТолькоПросмотр = Истина;
    ТабличныйДокумент.ОтображатьСетку = Ложь;
        
    Макет = УправлениеПечатью.ПолучитьМакет("Документ.абпРеестрПлатежей.ПФ_MXL_РеестрПлатежей");
    
    Пока ДокументНаПечать.Следующий() Цикл
        
        ПечатьНеВозможна = Ложь;
        Если ДокументНаПечать.Руководитель = Справочники.СотрудникиОрганизаций.ПустаяСсылка() Тогда
            Сообщить("Руководитель не указан.");
            ПечатьНеВозможна = Истина;
        КонецЕсли;

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

        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДокументНаПечать.Ссылка);
    
    КонецЦикла;  
    
    Возврат ТабличныйДокумент;
    

    
КонецФункции


http://i055.radikal.ru/1407/7a/61ba1f301e27.jpg


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


Помогите кто знает как это сделать раскидать из по признаку рквизитов-группировку вывести в макет...Заранее спасибы)
в этом месте
1 barrgand
 
04.07.14
11:33
(0) Читать все лень, но думаю поможет НачатьГруппуСтрок() и ЗакончитьГруппуСтрок()
2 anisa8310
 
04.07.14
11:39
(1) спасибо-ознакомлюсь с этим методом...
3 anisa8310
 
04.07.14
11:57
неть( не подходит
4 SerF_2011
 
04.07.14
12:11
см. (1) в купе со вторым параметром метода Вывести()
5 SerF_2011
 
04.07.14
12:11
*вкупе)
6 SerF_2011
 
04.07.14
12:16
и я использовал НачатьАвтогруппировкуСтрок и ЗакончитьАвтогруппировкуСтрок
7 Mitriy
 
04.07.14
12:17
Правой кнопкой мыши в коде - Конструктор запроса с обработкой результата - Вывод в табличный документ - вставляешь свой запрос - ОК - изучаешь...
8 anisa8310
 
04.07.14
16:41
(6) ага пытаюсь