ТЗ=новый ТаблицаЗначений; Т1=новый ТаблицаЗначений; Т1.Колонки.Добавить("День"); //ТД=новый ТабличныйДокумент; ТабД=ЭлементыФормы.ПолеТабличногоДокумента1; Макет=ЭтотОбъект.ПолучитьМакет("Макет1"); Для н=1 по 7 цикл Если Не ПустаяСтрока(ТД.Область(1,н).Текст) Тогда ТЗ.Колонки.Добавить(); КонецЕсли; Конеццикла; Для м=0 по ТД.ВысотаТаблицы-1 цикл стр=ТЗ.Добавить(); Конеццикла; Для м=0 по ТЗ.Колонки.Количество()-1 цикл Для н=0 по ТЗ.Количество()-1 цикл ТЗ[н][м]= ТД.Область(н+1,м+1).Текст; Конеццикла; Конеццикла; мн=новый массив; Для м=0 по ТЗ.Колонки.Количество()-1 цикл мн.Добавить(ТЗ[0][м]); ТЗ.Колонки[м].Имя=ТЗ[0][м]; Конеццикла; Если мн.Найти("Аналитика1")=Неопределено и мн.Найти("Аналитика2")=Неопределено и мн.Найти("Аналитика3")=Неопределено и мн.Найти("Аналитика4")=Неопределено тогда Сообщить("Не указана аналитика!"); Возврат; Конецесли; //Для н=0 по мн.ВГраница() цикл // Если мн[н]="Аналитика1" Или мн[н]="Аналитика2" Или мн[н]="День" Или мн[н]="Остаток" Тогда // мн.Удалить(н); // н=н-1; // Конецесли; // Если н=мн.ВГраница() тогда прервать конецесли; //КонецЦикла; //кдк=Цел(мн.Количество()/2)-1+?(мн.Найти("Остаток")=Неопределено,0,1); //мн.Очистить(); // Для м=0 по ТЗ.Колонки.Количество()-1 цикл // мн.Добавить(ТЗ[0][м]); //Конеццикла; ТЗ.Удалить(0); мд=массив("День"); ур=0;ан=0; Если Не мн.Найти("Аналитика1")=Неопределено тогда ма1=массив("Аналитика1"); ур=ур+1; ан=1; Конецесли; Если Не мн.Найти("Аналитика2")=Неопределено тогда ма2=массив("Аналитика2"); ур=ур+1; ан=2; Конецесли; Если Не мн.Найти("Аналитика3")=Неопределено тогда ма3=массив("Аналитика3"); ур=ур+1; Конецесли; Если Не мн.Найти("Аналитика4")=Неопределено тогда ма4=массив("Аналитика4"); ур=ур+1; Конецесли; //ур=Уровень(); рез=новый ТаблицаЗначений; Для н=1 по 4 цикл имя="Аналитика"+н; Если Не мн.Найти(имя)=Неопределено тогда рез.Колонки.Добавить(имя); Конецесли; конеццикла; //Если кдк=1 тогда для н=0 по мд.ВГраница() цикл рез.Колонки.Добавить("пр"+н); рез.Колонки.Добавить("рас"+н); Если Не мн.Найти("Остаток")=Неопределено тогда рез.Колонки.Добавить("ост"+н); конецесли; конеццикла; //стр=рез.Добавить(); //стр[0]=ма1[0]; //для н=0 по мд.ВГраница() цикл // стр[2*н+1]="Приход"; // стр[2*н+2]="Расход"; //конеццикла; Если ур=1 тогда Если ан=1 тогда для к=0 по ма1.ВГраница() цикл Отбор=Новый Структура; Отбор.Вставить("Аналитика1",ма1[к]); стр1=рез.Добавить(); стр2=рез.Добавить(); стр1[0]=ма1[к]; для н=0 по мд.ВГраница() цикл Отбор.Вставить("День",мд[н]); Строки=ТЗ.НайтиСтроки(Отбор); Если Не мн.Найти("Приход1")=Неопределено и Не мн.Найти("_Приход1")=Неопределено и Не мн.Найти("Расход1")=Неопределено и Не мн.Найти("_Расход1")=Неопределено тогда для каждого стрм из Строки цикл стр1[2*н+1]=?(ПустаяСтрока(стрм.Приход1),0,Число(стрм.Приход1)); стр1[2*н+2]=?(ПустаяСтрока(стрм.Расход1),0,Число(стрм.Расход1)); Если Не мн.Найти("Остаток")=Неопределено тогда стр1[2*н+3]=?(ПустаяСтрока(стрм.Остаток),0,Число(стрм.Остаток)); конецесли; стр2[2*н+1]=?(стрм.Приход1<>стрм._Приход1,?(ПустаяСтрока(стрм._Приход1),0,Число(стрм._Приход1)),0); стр2[2*н+2]=?(стрм.Расход1<>стрм._Расход1,?(ПустаяСтрока(стрм._Расход1),0,Число(стрм._Расход1)),0); КонецЦикла; Конецесли; Отбор.Удалить("День"); КонецЦикла; Отбор.Удалить("Аналитика1"); КонецЦикла; Иначеесли ан=2 тогда для к=0 по ма2.ВГраница() цикл Отбор=Новый Структура; Отбор.Вставить("Аналитика2",ма2[к]); стр1=рез.Добавить(); стр2=рез.Добавить(); стр1[0]=ма2[к]; для н=0 по мд.ВГраница() цикл Отбор.Вставить("День",мд[н]); Строки=ТЗ.НайтиСтроки(Отбор); Если Не мн.Найти("Приход1")=Неопределено и Не мн.Найти("_Приход1")=Неопределено и Не мн.Найти("Расход1")=Неопределено и Не мн.Найти("_Расход1")=Неопределено тогда для каждого стрм из Строки цикл стр1[2*н+1]=?(ПустаяСтрока(стрм.Приход1),0,Число(стрм.Приход1)); стр1[2*н+2]=?(ПустаяСтрока(стрм.Расход1),0,Число(стрм.Расход1)); Если Не мн.Найти("Остаток")=Неопределено тогда стр1[2*н+3]=?(ПустаяСтрока(стрм.Остаток),0,Число(стрм.Остаток)); конецесли; стр2[2*н+1]=?(стрм.Приход1<>стрм._Приход1,?(ПустаяСтрока(стрм._Приход1),0,Число(стрм._Приход1)),0); стр2[2*н+2]=?(стрм.Расход1<>стрм._Расход1,?(ПустаяСтрока(стрм._Расход1),0,Число(стрм._Расход1)),0); КонецЦикла; Конецесли; Отбор.Удалить("День"); КонецЦикла; Отбор.Удалить("Аналитика2"); КонецЦикла; Конецесли; Иначеесли ур=2 тогда для к=0 по ма1.ВГраница() цикл Отбор=Новый Структура; Отбор.Вставить("Аналитика1",ма1[к]); Для т=0 по ма2.ВГраница() цикл Отбор.Вставить("Аналитика2",ма2[т]); стр1=рез.Добавить(); стр2=рез.Добавить(); стр1[0]=ма1[к];стр1[1]=ма2[т]; для н=0 по мд.ВГраница() цикл Отбор.Вставить("День",мд[н]); Строки=ТЗ.НайтиСтроки(Отбор); Если Не мн.Найти("Приход1")=Неопределено и Не мн.Найти("_Приход1")=Неопределено и Не мн.Найти("Расход1")=Неопределено и Не мн.Найти("_Расход1")=Неопределено тогда для каждого стрм из Строки цикл стр1[2*н+2]=?(ПустаяСтрока(стрм.Приход1),0,Число(стрм.Приход1)); стр1[2*н+3]=?(ПустаяСтрока(стрм.Расход1),0,Число(стрм.Расход1)); Если Не мн.Найти("Остаток")=Неопределено тогда стр1[2*н+4]=?(ПустаяСтрока(стрм.Остаток),0,Число(стрм.Остаток)); конецесли; стр2[2*н+2]=?(стрм.Приход1<>стрм._Приход1,?(ПустаяСтрока(стрм._Приход1),0,Число(стрм._Приход1)),0); стр2[2*н+3]=?(стрм.Расход1<>стрм._Расход1,?(ПустаяСтрока(стрм._Расход1),0,Число(стрм._Расход1)),0); КонецЦикла; Конецесли; Отбор.Удалить("День"); КонецЦикла; Отбор.Удалить("Аналитика2"); КонецЦикла; Отбор.Удалить("Аналитика1"); КонецЦикла; Иначеесли ур=3 тогда для к=0 по ма1.ВГраница() цикл Отбор=Новый Структура; Отбор.Вставить("Аналитика1",ма1[к]); Для т=0 по ма2.ВГраница() цикл Отбор.Вставить("Аналитика2",ма2[т]); Для м=0 по ма3.ВГраница() цикл Отбор.Вставить("Аналитика3",ма3[м]); стр1=рез.Добавить(); стр2=рез.Добавить(); стр1[0]=ма1[к];стр1[1]=ма2[т];стр1[2]=ма3[м]; для н=0 по мд.ВГраница() цикл Отбор.Вставить("День",мд[н]); Строки=ТЗ.НайтиСтроки(Отбор); для каждого стрм из Строки цикл стр1[2*н+3]=?(ПустаяСтрока(стрм.Приход1),0,Число(стрм.Приход1)); стр1[2*н+4]=?(ПустаяСтрока(стрм.Расход1),0,Число(стрм.Расход1)); Если Не мн.Найти("Остаток")=Неопределено тогда стр1[2*н+5]=?(ПустаяСтрока(стрм.Остаток),0,Число(стрм.Остаток)); конецесли; стр2[2*н+3]=?(стрм.Приход1<>стрм._Приход1,?(ПустаяСтрока(стрм._Приход1),0,Число(стрм._Приход1)),0); стр2[2*н+4]=?(стрм.Расход1<>стрм._Расход1,?(ПустаяСтрока(стрм._Расход1),0,Число(стрм._Расход1)),0); КонецЦикла; Отбор.Удалить("День"); КонецЦикла; Отбор.Удалить("Аналитика3"); КонецЦикла; Отбор.Удалить("Аналитика2"); КонецЦикла; Отбор.Удалить("Аналитика1"); КонецЦикла; Иначеесли ур=4 тогда для к=0 по ма1.ВГраница() цикл Отбор=Новый Структура; Отбор.Вставить("Аналитика1",ма1[к]); Для т=0 по ма2.ВГраница() цикл Отбор.Вставить("Аналитика2",ма2[т]); Для м=0 по ма3.ВГраница() цикл Отбор.Вставить("Аналитика3",ма3[м]); Для л=0 по ма4.ВГраница() цикл Отбор.Вставить("Аналитика4",ма4[л]); стр1=рез.Добавить(); стр2=рез.Добавить(); стр1[0]=ма1[к];стр1[1]=ма2[т];стр1[2]=ма3[м];стр1[3]=ма4[л]; для н=0 по мд.ВГраница() цикл Отбор.Вставить("День",мд[н]); Строки=ТЗ.НайтиСтроки(Отбор); для каждого стрм из Строки цикл стр1[2*н+4]=?(ПустаяСтрока(стрм.Приход1),0,Число(стрм.Приход1)); стр1[2*н+5]=?(ПустаяСтрока(стрм.Расход1),0,Число(стрм.Расход1)); Если Не мн.Найти("Остаток")=Неопределено тогда стр1[2*н+6]=?(ПустаяСтрока(стрм.Остаток),0,Число(стрм.Остаток)); конецесли; стр2[2*н+4]=?(стрм.Приход1<>стрм._Приход1,?(ПустаяСтрока(стрм._Приход1),0,Число(стрм._Приход1)),0); стр2[2*н+5]=?(стрм.Расход1<>стрм._Расход1,?(ПустаяСтрока(стрм._Расход1),0,Число(стрм._Расход1)),0); КонецЦикла; Отбор.Удалить("День"); КонецЦикла; Отбор.Удалить("Аналитика4"); КонецЦикла; Отбор.Удалить("Аналитика3"); КонецЦикла; Отбор.Удалить("Аналитика2"); КонецЦикла; Отбор.Удалить("Аналитика1"); КонецЦикла; КонецЕсли; //ЭлементыФормы.таб.Значение=рез ; //ЭлементыФормы.таб.СоздатьКолонки(); обл=Макет.ПолучитьОбласть("шапка|Аналитика"); Если ур=1 тогда обл.Параметры.Аналитика="Аналитика"+ан; ТабД.Вывести(обл); Иначе обл.Параметры.Аналитика="Аналитика1"; ТабД.Вывести(обл); Для н=2 по ур цикл обл.Параметры.Аналитика="Аналитика"+н; ТабД.Присоединить(обл); Конеццикла; Конецесли; для н=0 по мд.ВГраница() цикл обл=Макет.ПолучитьОбласть("шапка|Данные"); Дата=ПолучитьД(мд[н]); обл.Параметры.Дата=Дата; ТабД.Присоединить(обл); Конеццикла; Для каждого стр из рез цикл обл=?(Не пустаяСтрока(стр[0]),Макет.ПолучитьОбласть("строка|Аналитика"),Макет.ПолучитьОбласть("строка1|Аналитика")); обл.Параметры.ЗначениеА=стр[0]; ТабД.Вывести(обл); если ур>1 тогда Для н=2 по ур цикл обл.Параметры.ЗначениеА=стр[н-1]; ТабД.Присоединить(обл); конеццикла; конецесли; обл=?(Не пустаяСтрока(стр[0]),Макет.ПолучитьОбласть("строка|Данные"),Макет.ПолучитьОбласть("строка1|Данные")); для н=0 по мд.ВГраница() цикл обл.Параметры.Прих=стр["пр"+н]; обл.Параметры.Расх=стр["рас"+н]; обл.Параметры.Ост=стр["ост"+н]; ТабД.Присоединить(обл); Конеццикла; Конеццикла; ТабД.Показать();