Как выгрузиться в EXCEL со сводными таблицами Пошаговый рабочий алгоритм выгрузки в EXCEL на примере выгрузки отчетов производства за смену(Автор статьи: Funny ):
(1) Нарисовать форму обработки и к кнопке запуска прицепить процедуру:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
Если ПроверкаДат( ) Тогда
Состояние( "Запущена выгрузка данных" ) ;
ПолучитьДанныеВТаблице( ) ;
Если чОтчетов< > 0 Тогда
СортироватьТаблицу( ) ;
ВыгрузитьТаблицуВФайл( ) ;
ЗакрытьСистему( ) ;
Состояние( "Выгрузка завершена" ) ;
Иначе
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
(2) Создадим функцию ПроверкаДат() корректного указания дат обработки
(3) Создадим процедуру ПолучитьДанныеВТаблице() выборки требуемых данных из документов в таблицу значений
(4) Создадим процедуру СортироватьТаблицу() для сортировки таблицы значений как нам нужно
(5) Создадим процедуру ВыгрузитьТаблицуВФайл() выгрузки ТЗ в Excel-файл:
Код 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;
КонецФункции
Код 1C v 7.x РабочаяКнига = СоздатьОбъект( "Excel.Application" ) ;
РабочаяКнига. SheetsInNewWorkbook = 1 ;
РабочаяКнига. Caption = "Отчет по договорам отгрузки" ;
NewBook = РабочаяКнига. Workbooks;
List = NewBook. Add;
СписокСтолбцов = СоздатьОбъект( "СписокЗначений" ) ;
СписокСтолбцов. ДобавитьЗначение( "Модель" ) ;
СписокСтолбцов. ДобавитьЗначение( "Разнорядка" ) ;
СписокСтолбцов. ДобавитьЗначение( "По договору" ) ;
СписокСтолбцов. ДобавитьЗначение( "Отгрузили" ) ;
СписокСтолбцов. ДобавитьЗначение( "Осталось" ) ;
Для Столбец = 1 По СписокСтолбцов. РазмерСписка( ) Цикл
Ячейка = РабочаяКнига. Cells( 1 , Столбец) ;
Ячейка. Value = СписокСтолбцов. ПолучитьЗначение( Столбец) ;
КонецЦикла ;
Запрос = СоздатьОбъект( "Запрос" ) ;
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаНач по ДатаКон;
|Разнорядка = Регистр.УчетДоговоров.Разнорядка;
|Модель = Регистр.УчетДоговоров.Модель.Группа;
|Колво = Регистр.УчетДоговоров.Количество;
|Функция КолвоПриход = Приход(Колво);
|Функция КолвоРасход = Расход(Колво);
|Функция КолвоОст = КонОст(Колво);
|Группировка Разнорядка;
|Группировка Модель;
|"
;
Если Запрос. Выполнить( ТекстЗапроса) = 0 Тогда
Возврат ;
КонецЕсли ;
НомерСтроки = 1 ;
Пока Запрос. Группировка( "Разнорядка" ) = 1 Цикл
Пока Запрос. Группировка( "Модель" ) = 1 Цикл
Модель = Запрос. Модель;
Разнорядка = Запрос. Разнорядка;
КолПоДоговору = Запрос. КолвоПриход;
КолОтгрузили = Запрос. КолвоРасход;
КолОсталось = Запрос. КолвоОст;
НомерСтроки = НомерСтроки + 1 ;
Для Ст = 1 По СписокСтолбцов. РазмерСписка( ) Цикл
Ячейка = РабочаяКнига. Cells( НомерСтроки, Ст) ;
Если Ст = 1 Тогда
Ячейка. Value = Модель;
ИначеЕсли Ст = 2 Тогда
Ячейка. Value = Строка( Разнорядка) ;
ИначеЕсли Ст = 3 Тогда
Ячейка. Value = КолПоДоговору;
ИначеЕсли Ст = 4 Тогда
Ячейка. Value = КолОтгрузили;
ИначеЕсли Ст = 5 Тогда
Ячейка. Value = КолОсталось;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецЦикла ;
СводнаяТаблица = РабочаяКнига. ActiveSheet. PivotTableWizard;
СводнаяТаблица. SmallGrid = 0 ;
СводнаяТаблица. PivotFields( 1 ) . Orientation = 1 ;
СводнаяТаблица. PivotFields( 2 ) . Orientation = 3 ;
СводнаяТаблица. PivotFields( 3 ) . Orientation = 4 ;
СводнаяТаблица. PivotFields( 4 ) . Orientation = 4 ;
СводнаяТаблица. PivotFields( 5 ) . Orientation = 4 ;
СводнаяТаблица. Format( 1 ) ;
РабочаяКнига. CommandBars( "PivotTable" ) . Visible = 0 ;
РабочаяКнига. Visible = 1 ;
Опубликовано на сайте: https://HelpF.pro Прямая ссылка: https://HelpF.pro/faq/view/455.html