1C Реквизиты табличной части - в Excel |
![]() |
![]() |
![]() |
Автор: А.Волос |
Программа выводит в Excel-документ реквизиты всех табличных частей выбранного документа. В предыдущей программе мы выводили реквизиты табличных частей документа в табличное поле формы, что смотрелось неплохо, но более удобно вывести результат в отдельный табличный документ. К тому же табличный документ легко конвертируется и сохраняется в Excel-таблицу. Excel-таблица хороша тем, что в ней возможны различные акробатические трюки в дальнейшей обработке результатов. - выберите из раскрывающего списка формы имя типа документа. - далее выберите из второго списка номер документа выбранного типа и нажмите кнопку "Выполнить" . - программа выведет результат в Excel-таблицу, предварительно попросит указать каталог для сохранения xls-файла.
Процедура КнопкаВыполнитьНажатие(Кнопка) ТипДокумента = ЭлементыФормы.ПолеВыбора2.Значение; НомерДок = ЭлементыФормы.ПолеВыбора1.Значение; Если СокрЛП(ТипДокумента) = "" Тогда Предупреждение("Выберите тип документа"); ИначеЕсли СокрЛП(НомерДок) = "" Тогда Предупреждение("Выберите номер документа"); Иначе ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); //создадим табличный документ ТипДок = СокрЛП(ТипДокумента); //имя типа документа РеквизитИмя = ""; РеквизитЗначение = ""; ТабДок = Новый ТабличныйДокумент; Секция = ТабДок.ПолучитьОбласть("R1"); Секция.Область("R1C1").Текст = ""; Секция.Область("R1C2").Текст = ""; Секция.Область("R1C3").Текст = ""; ТабДок.Вывести(Секция,1,"Группа",Истина); //пробельная строка Секция.Область("R1C1").Текст = "Документ:"; Секция.Область("R1C2").Текст = ТипДок; //имя документа Секция.Область("R1C3").Текст = ""; ТабДок.Вывести(Секция,1,"Группа",Истина); Секция.Область("R1C1").Текст = ""; Секция.Область("R1C2").Текст = ""; Секция.Область("R1C3").Текст = ""; ТабДок.Вывести(Секция,1,"Группа",Истина); //пробельная строка ТабДок.НачатьАвтогруппировкуСтрок(); // Создадим таблицу значений и заполним ее ТЗДанных = Новый ТаблицаЗначений; ТЗДанных.Колонки.Добавить("Документ", Новый ОписаниеТипов("Строка")); ТЗДанных.Колонки.Добавить("ТабЧасть", Новый ОписаниеТипов("Строка")); ТЗДанных.Колонки.Добавить("Реквизит", Новый ОписаниеТипов("Строка")); ТЗДанных.Колонки.Добавить("ЗначениеРеквизита", Новый ОписаниеТипов("Строка")); СтрокаВсехРеквизитов = " |Метаданные.Документы."+ТипДок+".ТабличныеЧасти.*.Реквизиты.* |"; МассивСтрокМногострочнойСтроки = ПолучитьМассивСтрокМногострочнойСтроки(СтрокаВсехРеквизитов); мМассивСтрок = РазвернутьМассивСтрокОбходаМетаданных(МассивСтрокМногострочнойСтроки, "*", "Имя"); Для Каждого эл Из мМассивСтрок Цикл МасСтрок = РазложитьСтрокуВМассив(эл, "."); НоваяСтрока = ТЗДанных.Добавить(); НоваяСтрока.Документ = СокрЛП(МасСтрок[2]); НоваяСтрока.ТабЧасть = СокрЛП(МасСтрок[4]); НоваяСтрока.Реквизит = СокрЛП(МасСтрок[6]); НоваяСтрока.ЗначениеРеквизита = "Знач. Реквизита"; КонецЦикла; //Инициируем табличное поле данными из таблицы значений //ТабличноеПоле1 = ТЗДанных; КолонкиТЗ = ТЗДанных.Колонки; МассивРеквиз = Новый Массив; МассивТабЧастей = Новый Массив; МассивРеквиз.Добавить(ТЗДанных.ВыгрузитьКолонку(КолонкиТЗ[2] )); МассивТабЧастей.Добавить(ТЗДанных.ВыгрузитьКолонку(КолонкиТЗ[1] )); МасТемп = новый Массив(); ТабЧастьИмя = ""; колич = МассивРеквиз[0].Количество(); //Просканируем массив таб частей индМассивТабЧастей = 0; Для Каждого элем Из МассивТабЧастей Цикл Для Каждого элл Из элем Цикл Если индМассивТабЧастей = 0 Тогда //Сообщить("Инициируем ТабЧастьИмя"); ТабЧастьИмя = элл; КонецЕсли; Если ТабЧастьИмя <> элл ИЛИ индМассивТабЧастей > колич-2 Тогда //если строки не равны или это последний элемент массива Если индМассивТабЧастей > колич-2 Тогда МасТемп.Добавить(МассивРеквиз[0][индМассивТабЧастей]); КонецЕсли; Сообщить("ТабЧастьИмя: "+ТабЧастьИмя); Секция.Область("R1C1").Текст = ""; Секция.Область("R1C2").Текст = ""; Секция.Область("R1C3").Текст = ""; ТабДок.Вывести(Секция,2,"Группа 1",Истина); //пробельная строка Секция.Область("R1C1").Текст = "Табличная часть: "; Секция.Область("R1C2").Текст = ТабЧастьИмя; // имя текущей ТабЧасти Секция.Область("R1C3").Текст = ""; ТабДок.Вывести(Секция,2,"Группа 1",Истина); // Получим необходимые данные для проведения и проверки заполнения данных по табличной части "Товары". СтруктураПолей = Новый Структура(); Для Каждого Элемент из МасТемп Цикл СтруктураПолей.Вставить(Элемент, Элемент); КонецЦикла; //СканПростойСтруктуры(СтруктураПолей); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДокументСсылка", ДокСсылка); Запрос.Текст = мСформироватьЗапросПоТабличнойЧасти2(ДокОбъект, ТабЧастьИмя, СтруктураПолей); ТаблицаЗнач = Запрос.Выполнить().Выгрузить(); //Пока еще у нас нет переменной Таблица значений ПоказатьТаблицу(ТаблицаЗнач); Количество = ТаблицаЗнач.Колонки.Количество(); Для каждого Строка из ТаблицаЗнач Цикл Для Индекс = 0 По Количество-1 Цикл РеквизитИмя = СокрЛП(ТаблицаЗнач.Колонки[Индекс].Имя); РеквизитЗначение = Строка[СокрЛП(ТаблицаЗнач.Колонки[Индекс].Имя)]; Секция.Область("R1C1").Текст = ""; Секция.Область("R1C2").Текст = РеквизитИмя; //имя реквизита Секция.Область("R1C3").Текст = РеквизитЗначение; //значение реквизита ТабДок.Вывести(Секция,3,"Группа 2",Истина); КонецЦикла; Секция.Область("R1C1").Текст = ""; Секция.Область("R1C2").Текст = ""; // Секция.Область("R1C3").Текст = ""; // ТабДок.Вывести(Секция,3,"Группа 2",Истина); КонецЦикла; ТаблицаЗнач.Очистить(); Секция.Область("R1C1").Текст = ""; Секция.Область("R1C2").Текст = ""; Секция.Область("R1C3").Текст = ""; ТабДок.Вывести(Секция,2,"Группа 1",Истина); //пробельная строка МасТемп.Очистить(); ТабЧастьИмя = элл; Если индМассивТабЧастей > колич-2 Тогда break; КонецЕсли; КонецЕсли; МасТемп.Добавить(МассивРеквиз[0][индМассивТабЧастей]); индМассивТабЧастей = индМассивТабЧастей+1; КонецЦикла; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); //ТабДок.ИтогиСнизу = Истина; ТабДок.ОтображатьСетку = Истина; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Истина; ТабДок.Показать(); ИмяФайла = ТипДок + НомерДок; СохраненитьТабличныйДокументВExcel(ИмяФайла, Ложь, ТабДок); КонецЕсли; КонецПроцедуры
Скачать внешнюю обработку: Реквизиты табличной части - в Excel
|
Обновлено 24.09.2014 11:10 |