Пошаговый рабочий алгоритм выгрузки в EXCEL на примере выгрузки отчетов производства за смену(Автор статьи:
(3) Создадим процедуру ПолучитьДанныеВТаблице() выборки требуемых данных из документов в таблицу значений
(4) Создадим процедуру СортироватьТаблицу() для сортировки таблицы значений как нам нужно
Код 1C v 8.х Процедура ВыгрузитьТаблицуВФайл()
Если FileOfReports = Неопределено Тогда
Попытка
FileOfReports = Новый COMОбъект( "Excel.Application" ) ;
MyBook= FileOfReports. WorkBooks. Add( истина ) ;
FirstSheet= MyBook. Worksheets( 1 ) ;
FirstSheet. Name = ОпределитьДату( НачПериода) + "-" + ОпределитьДату( КонПериода) ;
FirstSheet. Activate( ) ;
MyBook. SaveAs( КаталогDBF+ "ОтчетыПроизводства.xls" ) ;
Исключение
Сообщить( "ОШИБКА ЗАПИСИ В EXCEL-ФАЙЛ:" + ОписаниеОшибки( ) ) ;
Сообщить( "Совет: Возможно файл, в который должна быть произведена запись, Вами открыт для просмотра" ) ;
Сообщить( "Если это так, то закройте файл и запустите данную обработку повторно!" ) ;
КонецПопытки ;
FileOfReports. Visible = 0 ;
Иначе
FileOfReports. Visible = 0 ;
КонецЕсли ;
чОтчетов = ТаблицаОтчетов. Количество( ) ;
ЭлементыФормы. ИндикаторЗагрузки. МинимальноеЗначение = 0 ;
ЭлементыФормы. ИндикаторЗагрузки. МаксимальноеЗначение = чОтчетов;
ЭлементыФормы. Logo. Заголовок = "Выгружаю документы" ;
лСчетчикИндикатора = 0 ;
ВыгрузитьЗаголовокТаблицы( 26 ) ;
фСтарт= истина ;
чОт= 2 ;
Пока чОтчетов > = 1 Цикл
чОтчетов = чОтчетов - 1 ;
СтрокаОтчетов = ТаблицаОтчетов. Получить( чОтчетов) ;
Если ( СтрокаОтчетов. ДатаВыпуска= ДатаВыпускаПред)
И ( СтрокаОтчетов. Принадлежность= ПринадлежностьПред)
И ( СтрокаОтчетов. Типоразмер= ТипоразмерПред)
И ( СтрокаОтчетов. ТипОсновы= ТипОсновыПред)
Тогда
Иначе
ДатаВыпускаПред= СтрокаОтчетов. ДатаВыпуска;
ПринадлежностьПред= СтрокаОтчетов. Принадлежность;
ТипоразмерПред= СтрокаОтчетов. Типоразмер;
ТипОсновыПред= СтрокаОтчетов. ТипОсновы;
Если фСтарт Тогда
фСтарт = ложь ;
Иначе
чДо= глСчетчикСтрок;
ВыгрузитьСтрокуИтог( чОт, чДо, 26 ) ;
КонецЕсли ;
чОт= глСчетчикСтрок;
КонецЕсли ;
ВыгрузитьСтрокуОтчетовВФайл( СтрокаОтчетов, 26 ) ;
лСчетчикИндикатора = лСчетчикИндикатора + 1 ;
ЭлементыФормы. ИндикаторЗагрузки. Значение = лСчетчикИндикатора;
ОбработкаПрерыванияПользователя( ) ;
КонецЦикла ;
чДо= глСчетчикСтрок;
ВыгрузитьСтрокуИтог( чОт, чДо, 26 ) ;
Состояние( "Данные файла выгружены" ) ;
libСообщитьНК1 ( "ИНФО: ШАГ 1 ВЫПОЛНЕН. Данные файла Отчеты.DBF успешно считаны" , 1 ) ;
ЭлементыФормы. Logo. Заголовок = "Создание сводных таблиц" ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "наим" , "Дата" , "Наим" , "" , "К" ) ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "ЮВ" , "Дата" , "Наим,Каркас,Вид" , "" , "К" ) ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "В пр(2)" , "Дата" , "Наим,Каркас,Основа" , "" , "К" ) ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "В пр" , "Дата" , "Каркас,Основа" , "" , "К" ) ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "Основа" , "Дата" , "Основа" , "" , "кг основы" ) ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "Напыление" , "" , "Напылен" , "" , "кг напылен" ) ;
СоздатьТаблицуЛист( MyBook. Worksheets( 1 ) . Name, "Клей" , "" , "Дата" , "" , "кг клея" ) ;
КонецПроцедуры
Процедура СоздатьТаблицуЛист(стрДанные,стрСводнаяТаблица,стрПоле1,стрПоле2,стрПоле3,стрПоле4) ;
лПоля. Очистить( ) ;
стрПоля= стрПоле2 ;
i= 1 ;
Пока Найти( стрПоля, "," ) < > 0 Цикл
n= Найти( стрПоля, "," ) ;
лПоля. Добавить( Сред( стрПоля, 1 , n- 1 ) ) ;
стрПоля= Сред( стрПоля, n+ 1 ) ;
i= i+ 1 ;
КонецЦикла ;
лПоля. Добавить( стрПоля) ;
FirstSheet. Activate( ) ;
дДиапазонДанных= FirstSheet. UsedRange. Address;
ДиапазонДанных= FirstSheet. Name+ "!" + Строка( дДиапазонДанных) ;
SourceType = xlDatabase;
SourceData = ДиапазонДанных;
Cache = MyBook. PivotCaches( ) . Add( SourceType, SourceData) ;
TableDestination= "" ;
TableName= стрСводнаяТаблица;
Cache. CreatePivotTable( TableDestination, TableName) ;
Если СокрЛП( стрПоле1 ) < > "" Тогда
MyBook. ActiveSheet. PivotTables( TableName) . PivotFields( стрПоле1 ) . Orientation = 3 ;
КонецЕсли ;
чНомер= 0 ;
Пока чНомер< i Цикл
Если СокрЛП( лПоля[чНомер]. Значение) < > "" Тогда
MyBook. ActiveSheet. PivotTables( TableName) . PivotFields( лПоля[чНомер]. Значение) . Orientation = 1 ;
КонецЕсли ;
чНомер = чНомер + 1 ;
КонецЦикла ;
Если СокрЛП( стрПоле3 ) < > "" Тогда
MyBook. ActiveSheet. PivotTables( TableName) . PivotFields( стрПоле3 ) . Orientation = 2 ;
КонецЕсли ;
Если СокрЛП( стрПоле4 ) < > "" Тогда
MyBook. ActiveSheet. PivotTables( TableName) . PivotFields( стрПоле4 ) . Orientation = 4 ;
КонецЕсли ;
чНомер= 0 ;
Пока чНомер< i Цикл
Если СокрЛП( лПоля[чНомер]. Значение) < > "" Тогда
Если IfPivotItemExists( TableName, лПоля[чНомер]. Значение, "(пусто)" ) Тогда
MyBook. ActiveSheet. PivotTables( TableName) . PivotFields( лПоля[чНомер]. Значение) . PivotItems( "(пусто)" ) . Visible = False;
КонецЕсли ;
КонецЕсли ;
чНомер = чНомер + 1 ;
КонецЦикла ;
MyBook. ShowPivotTableFieldList = False;
FileOfReports. CommandBars( "PivotTable" ) . Visible = False;
MyBook. ActiveSheet. Name = стрСводнаяТаблица;
MyBook. Save( ) ;
КонецПроцедуры
Функция IfPivotItemExists(strTableName,strFieldName,strItemName)
nItems = MyBook. ActiveSheet. PivotTables( strTableName) . PivotFields( strFieldName) . PivotItems( ) . Count;
i = 1 ;
Пока i < = nItems Цикл
Если strItemName= MyBook. ActiveSheet. PivotTables( strTableName) . PivotFields( strFieldName) . PivotItems( i) . Name Тогда
Возврат True;
КонецЕсли ;
i= i+ 1 ;
КонецЦикла ;
Возврат False;
КонецФункции