Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:04

Система компоновки данных.

Автор Porter-2008, 18 июл 2011, 01:07

0 Пользователей и 1 гость просматривают эту тему.

Porter-2008

Люди, подскажите как можно реализовать и осуществить задачу. Нужно сформулировать отчет с помощью системы компоновки данных, нужно выводить все договора для каждого контрагента. Эти данные нужно выводить в отчете. Колво договоров всегда меняеться и нужно програмно создавать макет. Я попробовал создать массив для договоров, только незнаю как его добавить. Я только новичок и извините если что не так.


Вот что я написал в форме:

Перем Настройки;

Процедура ДействияФормыСформулировать(Кнопка)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ЗАПРОСЫ      
    ЗапросИтог = Новый Запрос;
   ЗапросИтог.Текст =
      "ВЫБРАТЬ
      |   Контрагенты.Ссылка КАК Контрагенты,
      |   Контрагенты.Код,
      |   Контрагенты.Наименование,
      |   Контрагенты.ИНН,
      |   Контрагенты.КПП,
      |   Контрагенты.НаименованиеПолное,
      |   КонтактнаяИнформация.Представление КАК Представление,
      |   КонтактнаяИнформация.Тип КАК КонтактнаяИнформацияТип,
      |   КонтактнаяИнформация.Вид КАК ВидАдреса,
      |   ДоговорыКонтрагентов.Ссылка КАК ДоговораКонтрагентовНД1
      |ИЗ
      |   Справочник.Контрагенты КАК Контрагенты
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
      |      ПО Контрагенты.Ссылка = КонтактнаяИнформация.Объект
      |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
      |      ПО Контрагенты.ОсновнойДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
      |ГДЕ
      |   Контрагенты.ЭтоГруппа = ЛОЖЬ";

     Результат = ЗапросИтог.Выполнить();
    ЗаполнениеНаборДанных01 = Результат.Выгрузить();
   
   
   ЗапросДоп1 = Новый Запрос;
   ЗапросДоп1.Текст = "ВЫБРАТЬ
                      |   Контрагенты.Ссылка КАК Контрагенты,
                      |   ДоговорыКонтрагентов.Ссылка КАК ДоговораКонтрагентовНД2
                      |ИЗ
                      |   Справочник.Контрагенты КАК Контрагенты
                      |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                      |      ПО Контрагенты.ОсновнойДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка";
   ////|Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
   //Запрос.УстановитьПараметр("СписокНоменклатуры",ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
   ////Запрос.УстановитьПараметр("ВидНоменклатуры",Перечисления.ВидыНоменклатуры.Материалы);
   Результат = ЗапросДоп1.Выполнить();
   ЗаполнениеНаборДанных02 = Результат.Выгрузить();
   

/////////////////////////////////////////////////////////////////////////////////////////////////
//С помощью запроса мы находим максимальное число договоров у контрагентов
    Запрос1 = Новый Запрос;
   Запрос1.Текст =
      "ВЫБРАТЬ
      |   Контрагенты.Ссылка КАК Контрагенты,
      |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДоговорыКонтрагентов.Ссылка) КАК ДоговорыКонтрагентов
      |ИЗ
      |   Справочник.Контрагенты КАК Контрагенты
      |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
      |      ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
      |ГДЕ
      |   Контрагенты.ЭтоГруппа = ЛОЖЬ
      |
      |СГРУППИРОВАТЬ ПО
      |   Контрагенты.Ссылка
      |
      |УПОРЯДОЧИТЬ ПО
      |   ДоговорыКонтрагентов УБЫВ";

   Результат = Запрос1.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
    CчетчикК = 0;     //для записи контрагентов
   CчетчикД = 0;     //для записи договоров
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      CчетчикК = CчетчикК + 1;
      //Надо записать в переменную "максДоговоров" максимальное число договоров у контрагента
      Если  CчетчикД = 0 тогда
            максДоговоров = ВыборкаДетальныеЗаписи.ДоговорыКонтрагентов;
         CчетчикД = 1;
      КонецЕсли;
   КонецЦикла;
/////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////
//С помощью запроса мы находим максимальное число банковских счетов у контрагентов

   ЗапросБС1 = Новый Запрос;
   ЗапросБС1.Текст =
      "ВЫБРАТЬ
      |   Контрагенты.Ссылка КАК Контрагенты,
      |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ БанковскиеСчета.Ссылка) КАК БанковскиеСчета
      |ИЗ
      |   Справочник.Контрагенты КАК Контрагенты
      |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
      |      ПО Контрагенты.Ссылка = БанковскиеСчета.Владелец
      |ГДЕ
      |   Контрагенты.ЭтоГруппа = ЛОЖЬ
      |
      |СГРУППИРОВАТЬ ПО
      |   Контрагенты.Ссылка
      |
      |УПОРЯДОЧИТЬ ПО
      |   БанковскиеСчета УБЫВ";

   Результат = ЗапросБС1.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
    CчетчикБС = 0;
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл               //записывает самый первый элемент в перем КолвоБС т к у нас упорядочивание по убыванию
       Если CчетчикБС = 0 тогда
         максБСчета = ВыборкаДетальныеЗаписи.БанковскиеСчета;
         CчетчикБС = 1;
      КонецЕсли;   
   КонецЦикла;
/////////////////////////////////////////////////////////////////////////////////////////////////   
/////////////////////////////////////////////////////////////////////////////////////////////////   
//Создаем двумерный массив для договоров используя полученные данные о его размере
    ПараметрКонтрагент = 0;      //сохраняеться предыдущий контрагент в переменную

    k = -1;
   d = 1;
    ДвумерныйМассив = Новый Массив(CчетчикК,максДоговоров+2);

    Запрос2 = Новый Запрос;
   Запрос2.Текст =
      "ВЫБРАТЬ
      |   Контрагенты.Ссылка КАК Контрагенты,
      |   ДоговорыКонтрагентов.Ссылка КАК ДоговорыКонтрагентов,
      |   КонтактнаяИнформация.Представление КАК ФактическийАдрес
      |ИЗ
      |   Справочник.Контрагенты КАК Контрагенты
      |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
      |      ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
      |      ПО КонтактнаяИнформация.Объект = Контрагенты.Ссылка
      |ГДЕ
      |   Контрагенты.ЭтоГруппа = ЛОЖЬ";

   Результат = Запрос2.Выполнить();
   
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            
      Если ПараметрКонтрагент = ВыборкаДетальныеЗаписи.Контрагенты  Тогда           
                                                                             //если условие ВЕРНО тогда это значит что просматриваеться
         d = d + 1;                                                                    //все тот же контрагент и нужно перебирать документы
         ДвумерныйМассив[k][d] = ВыборкаДетальныеЗаписи.ДоговорыКонтрагентов;
               
      КонецЕсли;   
       
      Если ПараметрКонтрагент <> ВыборкаДетальныеЗаписи.Контрагенты  Тогда   
          k = k + 1;
         d = 1;                                                                                 //нужно делать сброс для счетчика для корректного добавления по всем договорам
         ДвумерныйМассив[k][0] = ВыборкаДетальныеЗаписи.Контрагенты;
         ДвумерныйМассив[k][1] = ВыборкаДетальныеЗаписи.ДоговорыКонтрагентов;
           //ОбластьМакета.Параметры.КИзМассиваНачало = ВыборкаДетальныеЗаписи.Контрагенты;               
         
      КонецЕсли;   
                 
      ПараметрКонтрагент = ВыборкаДетальныеЗаписи.Контрагенты; 
      
   КонецЦикла;
/////////////////////////////////////////////////////////////////////////////////////////////////

   
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ЗАПРОСЫ   
   
   ВнешниеНаборыДанных = Новый Структура;
   
   ВнешниеНаборыДанных.Вставить("НаборДанных01", ЗаполнениеНаборДанных01);
   ВнешниеНаборыДанных.Вставить("НаборДанных02", ЗаполнениеНаборДанных02);
      
   СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   //УстановитьСхему();
   УстановитьНастройки();
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
     
   //ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   //ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
   
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);

//Выводит в другом окне(   
   //ДокументРезультат = Новый ТабличныйДокумент;
   //ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   //ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
//Выводит в другом окне)   


//Выводит в этом же окне(
   ЭлементыФормы.Результат.Очистить();                                 //Очищаем поле табличного документа
   ДокументРезультат = ЭлементыФормы.Результат;
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;  //Выводим результат в табличный документ
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   //результат_вывода = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);                //Оригинал! Выводит весь результат.
//Выводит в этом же окн)
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
   
   ДокументРезультат.ОтображатьСетку = Ложь;
   ДокументРезультат.ОтображатьЗаголовки = Ложь;
   ДокументРезультат.Показать();
КонецПроцедуры



Процедура УстановитьНастройки()
      
   Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   ГруппировкаКонтрагенты = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ГруппировкаКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ СистемныеПоля.НомерПоПорядку
   //////////НомерПоПорядку = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядку");
   //ПолеКонтрагенты = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   //ПолеКонтрагенты.Использование = Истина;
   //ПолеКонтрагенты.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядку");     //Новый ПолеКомпоновкиДанных!!!
   //
   //
   //ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   //ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ Код   
   Поле1 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле1.Использование = Истина;
   Поле1.Поле = Новый ПолеКомпоновкиДанных("Код");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;   
   
//ВЫВОДИМ Контрагенты      
   Поле2 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле2.Использование = Истина;
   Поле2.Поле = Новый ПолеКомпоновкиДанных("Контрагенты");     //Новый ПолеКомпоновкиДанных!!!
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ НаименованиеПолное
    Поле3 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле3.Использование = Истина;
   Поле3.Поле = Новый ПолеКомпоновкиДанных("НаименованиеПолное");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ ИНН
    Поле4 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле4.Использование = Истина;
   Поле4.Поле = Новый ПолеКомпоновкиДанных("ИНН");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
      
//ВЫВОДИМ КПП
   Поле5 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле5.Использование = Истина;
   Поле5.Поле = Новый ПолеКомпоновкиДанных("КПП");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ Представление
   Поле6 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле6.Использование = Истина;
   Поле6.Поле = Новый ПолеКомпоновкиДанных("Представление");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;

////ВЫВОДИМ Телефон
//   Поле7 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
//   Поле7.Использование = Истина;
//   Поле7.Поле = Новый ПолеКомпоновкиДанных("Телефон");     
//   
//   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
//   ВыбранныеПоляДляКонтрагенты.Использование = Истина;

//ВЫВОДИМ ВидАдреса
   Поле8 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле8.Использование = Истина;
   Поле8.Поле = Новый ПолеКомпоновкиДанных("ВидАдреса");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ КонтактнаяИнформацияТип
   Поле9 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле9.Использование = Истина;
   Поле9.Поле = Новый ПолеКомпоновкиДанных("КонтактнаяИнформацияТип");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ ДоговораКонтрагентовНД1
   Поле10 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле10.Использование = Истина;
   Поле10.Поле = Новый ПолеКомпоновкиДанных("ДоговораКонтрагентовНД1");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;
   
//ВЫВОДИМ ДоговораКонтрагентовНД2
   Поле11 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле11.Использование = Истина;
   Поле11.Поле = Новый ПолеКомпоновкиДанных("ДоговораКонтрагентовНД2");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;   
   
//ВЫВОДИМ БанковскиеСчета
   Поле12 = ГруппировкаКонтрагенты.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   Поле12.Использование = Истина;
   Поле12.Поле = Новый ПолеКомпоновкиДанных("БанковскиеСчета");     
   
   ВыбранныеПоляДляКонтрагенты = ГруппировкаКонтрагенты.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКонтрагенты.Использование = Истина;


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



Процедура УстановитьСхему()
    СКД = Новый СхемаКомпоновкиДанных;
   ИД = СКД.ИсточникиДанных.Добавить();
   ИД.Имя = "ИсточникДанных";
   ИД.ТипИсточникаДанных = "Local";
   НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъединениеСхемыКомпоновкиДанных"));
   НаборДанных.Имя = "НаборДанных1";
   Набор1 = НаборДанных.Элементы.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
    Набор1.Имя = "НаборДанных01";
   Набор1.ИмяОбъекта = "НаборДанных01";
   Набор1.ИсточникДанных = "ИсточникДанных";
   
   //Набор2 = НаборДанных.Элементы.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
   //Набор2.Имя = "НаборДанных02";
   //Набор2.ИмяОбъекта = "НаборДанных02";
   //Набор2.ИсточникДанных = "ИсточникДанных";
   
   Поле1 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле1.Поле = "Код";
   Поле1.ПутьКДанным = "Код";
   Поле1.Заголовок = "Код";
   
   Поле2 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле2.Поле = "Наименование";
   Поле2.ПутьКДанным = "Наименование";
   Поле2.Заголовок = "Наименование";
   
   Поле3 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле3.Поле = "НаименованиеПолное";
   Поле3.ПутьКДанным = "НаименованиеПолное";
   Поле3.Заголовок = "НаименованиеПолное";
   
   Поле4 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле4.Поле = "ИНН";
   Поле4.ПутьКДанным = "ИНН";
   Поле4.Заголовок = "ИНН";
   
   Поле5 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле5.Поле = "КПП";
   Поле5.ПутьКДанным = "КПП";
   Поле5.Заголовок = "КПП";

   Поле6 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле6.Поле = "ВидАдреса";
   Поле6.ПутьКДанным = "ВидАдреса";
   Поле6.Заголовок = "ВидАдреса";
   
   Поле7 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле7.Поле = "Представление";
   Поле7.ПутьКДанным = "Представление";
   Поле7.Заголовок = "Представление";
   
   Поле8 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле8.Поле = "БанковскиеСчета";
   Поле8.ПутьКДанным = "БанковскиеСчета";
   Поле8.Заголовок = "БанковскиеСчета";
   
   Поле9 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле9.Поле = "Договора";
   Поле9.ПутьКДанным = "Договора";
   Поле9.Заголовок = "Договора";

   
   //Поле1 = Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   //Поле1.Поле = "Дата";
   //Поле1.ПутьКДанным = "Дата";
   //Поле1.Заголовок = "Дата";
   
   
КонецПроцедуры   



Шурыгин Иван Сергеевич

Цитата: Porter-2008 от 18 июл 2011, 01:07
Люди, подскажите как можно реализовать и осуществить задачу. Нужно сформулировать отчет с помощью системы компоновки данных, нужно выводить все договора для каждого контрагента. Эти данные нужно выводить в отчете. Колво договоров всегда меняеться и нужно програмно создавать макет. Я попробовал создать массив для договоров, только незнаю как его добавить. Я только новичок и извините если что не так.

я честно скажу половину вашего вообще не понял... зачем выводится контактная информация?? зачем банковские счета?? если задача лишь с договарами?? вы напишите шапку таблицы которой хотите получить... я по этому коду понял что нужна такая шапка

контрагенты/договоры | банковский счет | адрес

если да, то необходимо создать новую схему компановки данных, там создать набор записей, тип запрос,
и примерно такой текст запроса

ВЫБРАТЬ
ДоговорыКонтрагентов.Ссылка,
ДоговорыКонтрагентов.Владелец,
БанковскиеСчета.НомерСчета,
КонтактнаяИнформация.Представление
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
ПО ДоговорыКонтрагентов.Владелец = БанковскиеСчета.Владелец
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ПО ДоговорыКонтрагентов.Владелец = КонтактнаяИнформация.Представление


далее в настройках указать групировку по контрагентам (тут это поле владелец). и вы получите отчет с представленной выше шапкой
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Porter-2008

Извините, я может не совсем верно сформулировал мою задачу. Просто вся загвоздка в том что необходимо выводить договора и каждый договор должен быть в своей колонке. И количество этих колонок всегда меняеться. Поэтому сказали что надо создавть програмным образом макет. Толь вот с этим загвоздка.

(много лишнего присутствует... извините за грязь)

контрагенты/договоры | банковский счет | адрес | ... | договор1 | договор2 | договор3 | договор4 | договор5 | ....| договорN |

Шурыгин Иван Сергеевич

также СКД. формируйте группировку сначало по контрагентам в вниз, и по договорам вправо)
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Porter-2008

напишите пожалуйста поподробнее как это сделать. У меня никак не получаеться со столбцами.

Шурыгин Иван Сергеевич

сейчас просто под рукой нет платформы... расскажу как помню. в настройках формирования есть кросс таблица, выбираете ее. там можно выбрать формирование и колонок и столбцов. поэкспериментируйте с этой таблицей, и получите в итоге результат
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск