![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Atreides |
![]()
Сообщение
#1
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Задача - разложить данные по предприятия в закладки книги файла эксель. Т.е. одна закладка одно предприятие. + имя закладки это имя предприятия из списка. Шапка одна и так же везде должна быть, количество предприятий может меняться. Для вывода отчет использую шаблон и компоненту EXLReport. В один список все прекрасно выходит, а вот как разбить на страницы с именами предприятий и данные разложить вопрос. Не уверен, что верно написал переход по списку предприятий еще...
Вот пример моего вывода: Код procedure TForm5.Button1Click(Sender: TObject); var col: integer; st: string; year, MonthSelected: string; oth: string; sum_03, sum_04, sum_05, sum_1_04, sum_2_04, sum_1_05, sum_2_05: string; provodka: string; data: string; direct: string; IDSOURCE, PR_MEST: string; priznak: string; NO_FAM: string; cods: string; KOD:string; koll:integer; begin // собираем данные year := Form5.Edit1.Text; MonthSelected := FloatToStr(Form5.ComboBox1.ItemIndex + 1); priznak := IntToStr(Form5.ComboBox3.ItemIndex + 1); oth := 'получе5ние отчетного месяца' + MonthSelected + ''; Form5.ClientDataSet1.close; Form5.ClientDataSet1.DataRequest(oth); Form5.ClientDataSet1.open; oth := Form5.ClientDataSet1.fieldbyname('id_otchm').asstring; IDSOURCE := 'выбор источника загрузки ''; Form5.ClientDataSet1.close; Form5.ClientDataSet1.DataRequest(IDSOURCE); Form5.ClientDataSet1.open; IDSOURCE := Form5.ClientDataSet1.fieldbyname('ID_SOURCE').asstring; PR_MEST := Form5.ClientDataSet1.FieldByName('Pr_MEST').AsString; NO_FAM := Form5.ClientDataSet1.FieldByName('NO_ONE_FAM').AsString; direct := 'reestor_bez_mesta.xls'; //получаем список кодов организации begin cods := 'выборка кодов организации ' + ' order by Kodorg asc '; Form5.ClientDataSet1.close; Form5.ClientDataSet1.DataRequest(cods); Form5.ClientDataSet1.open; koll:=Form5.ClientDataSet1.RecordCount; Kod := Form5.ClientDataSet1.FieldByName('KODORG').AsString; while Form5.ClientDataSet1.Eof do begin //по одной организации st := ' запрос данных о предприятии '; Form5.ClientDataSet2.close; Form5.ClientDataSet2.DataRequest(st); Form5.ClientDataSet2.open; { col := Form5.ClientDataSet2.RecordCount; begin if col = 0 then begin ShowMessage('Данные отсуствуют') end else } Form5.ClientDataSet1.Next; begin Form5.EXLReport1.TemplSheet:='Лист 3'; exlReport1.Template := 'H:\808.COM\Andreev\Справочники\Forms\' + direct; if Assigned(Form5.EXLReport1) then Form5.EXLReport1.Show; // открытие окошка эксель end; end; end; end; //end; Сообщение отредактировано: Atreides - 27.04.2011 13:07 -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
Atreides |
![]()
Сообщение
#2
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Никак не могу найти ошибку, на каждой странице не хватает по три записи, где теряются не понимаю. Так же иногда получается, что данные вписываются в шапку, заполняют собой шапку и на этом появляется запись #НД
Код procedure TForm5.BitBtn3Click(Sender: TObject); var workBooks, activeBook, curr, Range: Variant; CellStart, CellFinish: Variant; sPlace: string; Ls: TStringList; i, iRec: Integer; Data: Variant; st: string; col: integer; year, MonthSelected: string; oth: string; direct: string; IDSOURCE, PR_MEST: string; priznak: string; NO_FAM: string; ID_TRAN: string; ToCell, ToCell2, ToCell3: string; value, value2: string; mesto: string; nametext: string; TemplateSheet: string; begin ToCell := 'C1'; // Var ToCell : String; ToCell2 := 'A6'; ToCell3 := 'B8'; value := Form5.ComboBox1.Text + ' ' + Form5.Edit1.Text + ' г.'; value2 := DateTimeToStr(Now); ID_TRAN := Form5.ComboBox2.Text; mesto := IntToStr(Form5.ComboBox4.ItemIndex); year := Form5.Edit1.Text; MonthSelected := FloatToStr(Form5.ComboBox1.ItemIndex + 1); priznak := IntToStr(Form5.ComboBox3.ItemIndex + 1); oth := 'select ID_OTCHM from sprotchmonth where YEAROTCH = ' + year + ' and MONTHOTCH = ' + MonthSelected + ''; Form5.ClientDataSet1.close; Form5.ClientDataSet1.DataRequest(oth); Form5.ClientDataSet1.open; oth := Form5.ClientDataSet1.fieldbyname('id_otchm').asstring; st := 'select ID_TRANS from SPR_TRANS t where t.NAME_TRANS=' + #39 + ID_TRAN + #39 + ''; Form5.ClientDataSet2.close; Form5.ClientDataSet2.DataRequest(st); Form5.ClientDataSet2.open; ID_TRAN := Form5.ClientDataSet2.fieldbyname('ID_TRANS').asstring; IDSOURCE := 'select * from SPR_TRANS t, SPRSOURCEDATA s where ' + ' t.Id_Trans =' + #39 + ID_TRAN + #39 + ' and t.Id_Trans=s.Id_Trans and s.Pr_Mest=' + #39 + mesto + #39 + ''; Form5.ClientDataSet1.close; Form5.ClientDataSet1.DataRequest(IDSOURCE); Form5.ClientDataSet1.open; IDSOURCE := Form5.ClientDataSet1.fieldbyname('ID_SOURCE').asstring; PR_MEST := Form5.ClientDataSet1.FieldByName('Pr_MEST').AsString; NO_FAM := Form5.ClientDataSet1.FieldByName('NO_ONE_FAM').AsString; nametext := Form5.ClientDataSet1.FieldByName('NAMETEXT').AsString; begin if mesto = '0' then begin st := ' select s.SHORT_NAME, l.Kodorg, kod.forma_tt, l.Kodpodr, '; if NO_FAM = '0' then st := st + ' l.FIO,' else st := st + ' (rpad(l.FIO,38) ||rpad(l. FIODEPEN,38)) FIO, '; st := st + 'l.n_Doclgotn, ' + ' l.Date_Opd, l.Date_Begin_Ab, l.n_Opd, Sposob_Opd, ' + ' l.vid_period_ab, l.kol_doc, ' + ' STAT_OTPR, ' + ' STAT_NAZN, summa, SUMMA_DOP, sysdate ' + ' from ***** ' + ' where l.Id_Otchm= ' + oth + ' and l.Id_Source=' + IDSOURCE + ' ' + ' and lor.pr_attrib=' + priznak + ' ' + ' order by l.Kodorg, s.SHORT_NAME asc '; Form5.ClientDataSet1.close; Form5.ClientDataSet1.DataRequest(st); Form5.ClientDataSet1.open; if Form5.ClientDataSet1.RecordCount = 0 then begin ShowMessage('Записи отсуствуют'); end else begin XLApp := CreateOleObject('Excel.Application'); // XLApp.Visible := True; XLApp.SheetsInNewWorkbook := 1; // Добавим 1 лист - 3 (по умолчанию) workBooks := XLApp.WorkBooks; ActiveBook := workBooks.Add; Curr := ActiveBook.Sheets[1]; // Запомним добавленный лист try Ls := TStringList.Create; // заполнение ClientDataSet1.First; while not ClientDataSet1.Eof do begin sPlace := ClientDataSet1.FieldByName('Kodorg').AsString; if Ls.IndexOf(sPlace) = -1 then begin Ls.Add(sPlace); end; ClientDataSet1.Next; end; for i := 0 to Pred(Ls.Count) do begin ClientDataSet1.Filtered := False; ClientDataSet1.Filter := 'Kodorg = ' + QuotedStr(Ls.Strings[i]); ClientDataSet1.Filtered := True; Data := VarArrayCreate([1, ClientDataSet1.RecordCount, 1, 14], varVariant); ClientDataSet1.First; iRec := 0; while not ClientDataSet1.Eof do begin Data[iRec + 1, 1] := ClientDataSet1.FieldByName('SHORT_NAME').AsString; Data[iRec + 1, 2] := ClientDataSet1.FieldByName('forma_tt').AsString; Data[iRec + 1, 3] := ClientDataSet1.FieldByName('KODPODR').AsString; Data[iRec + 1, 4] := ClientDataSet1.FieldByName('FIO').AsString; Data[iRec + 1, 5] := ClientDataSet1.FieldByName('n_Doclgotn').AsString; Data[iRec + 1, 6] := ClientDataSet1.FieldByName('Date_Opd').AsString; Data[iRec + 1, 7] := ClientDataSet1.FieldByName('Date_Begin_Ab').AsString; Data[iRec + 1, 8] := ClientDataSet1.FieldByName('n_Opd').AsString; Data[iRec + 1, 9] := ClientDataSet1.FieldByName('Sposob_Opd').AsString; Data[iRec + 1, 10] := ClientDataSet1.FieldByName('vid_period_ab').AsString; Data[iRec + 1, 11] := ClientDataSet1.FieldByName('kol_doc').AsString; Data[iRec + 1, 12] := ClientDataSet1.FieldByName('STAT_OTPR').AsString; Data[iRec + 1, 13] := ClientDataSet1.FieldByName('STAT_NAZN').AsString; Data[iRec + 1, 14] := ClientDataSet1.FieldByName('SUMMA').AsString; Inc(iRec); ClientDataSet1.Next; end; // добавляем новый личт из шаблона ПОСЛЕ того, что был текущим Curr := ActiveBook.Sheets.Add(type := TemplateSheet, After := Curr); Curr.Name := Ls.Strings[i]; //разметка страницы curr.PageSetup.PrintArea := 'A1:N' + inttostr(irec + 12); curr.PageSetup.Zoom := 60; curr.PageSetup.Orientation := 2; //разметка страницы CellStart := Curr.Cells[12, 1]; CellFinish := Curr.Cells[iRec + 8, 14]; // корректировка позиции вставки Range := Curr.Range[CellStart, CellFinish]; Curr.Range[ToCell] := value2; Curr.Range['D12:D' + inttostr(irec + 12)].WrapText := True; Curr.Range[ToCell2] := ' ЗA ' + value; Curr.Range[ToCell3] := (Ls.Strings[i]); Range.Value := Data; VarClear(Data); end; finally Ls.Free; end; ClientDataSet1.Filtered := False; Form5.ClientDataSet1.close; ActiveBook.Sheets[1].Delete; // удаление первого листа XLApp.Visible := True; // XLApp.Workbooks[1].SaveAs('C:\' + nametext + '.xls'); // <--- Сохраняем куда надо // XLApp.Quit; // <--- И убираем из процессов XLApp := Unassigned; end; Form5.ComboBox1.ItemIndex := (-1); Form5.ComboBox2.ItemIndex := (-1); Form5.ComboBox3.ItemIndex := (-1); Form5.ComboBox4.ItemIndex := (-1); Form5.Edit1.Clear; end; -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 0:39 |