unit Globalni; interface uses System.SysUtils, System.Win.ComObj, ddPlugin_TLB; const strLov = '40755509 LOVATO spol.s r.o.'; CRLF = #13#10; sklVyroba = '200'; //vytvořeno 10.6.2022// z funkce ExportKoopObj v ComObject upravené 6.5.2020 function ExportKoopObjXls(const Helios: IHelios; idKObj: integer; ZobrTypKooObj: boolean; NadpisTypuKoopObj: string; vlastTbl: string; Cesta: string; Nazev: string; ZobrazInfoKonec: Integer): string; safecall; implementation uses Vcl.Controls, System.Win.ComServ, Vcl.Graphics, Vcl.Forms, System.Variants, System.StrUtils, Vcl.Dialogs, Vcl.Clipbrd, System.Classes, Winapi.Windows, System.DateUtils, Vcl.StdActns, Winapi.ShlObj, Vcl.StdCtrls, Vcl.ComCtrls, myUtils, helUtils, XLSReadWriteII5, XLSSheetData5, Xc12DataStyleSheet5, Xc12Utils5//, // nExcel, ; //procedure ExportKoopObj(const Helios: IHelios; idKObj: integer; ZobrTypKooObj: boolean; NadpisTypuKoopObj: string; vlastTbl: string); safecall; // upraveno 6.5.2020 // upraveno 6.5.2020 function ExportKoopObjXls (const Helios: IHelios; idKObj: integer; ZobrTypKooObj: boolean; NadpisTypuKoopObj: string; vlastTbl: string; Cesta: string; Nazev: string; ZobrazInfoKonec: Integer): string; var lSQL, fld: string; jCena: Extended; xls: TXLSReadWriteII5; wSheet1, wSheet2: TXLSWorksheet; poz: IHeQuery; idPolKObj, idKZ, idx, idDZCenik: integer; cObj, cOrg, dodav, dat, datKO: string; listSumace: boolean; VybranyAdresar: boolean; // přidáno 10.6.2022 NazevSouboru: String; // přidáno 10.6.2022 Vysledek: String; // přidáno 10.6.2022 begin // Helios.Info('ID: "' + IntToStr(idKObj) + '", ZobrTypKooObj:"' + BoolToStr(ZobrTypKooObj) + '", NadpisTypuKoopObj"' + NadpisTypuKoopObj + '", Zarovnani: "' + vlastTbl + '", cesta: "' + Cesta + '", Nazev: "' + Nazev + '", ZobrazInfoKonec: "'+ IntToStr(ZobrazInfoKonec) + '"'); listSumace:= false; Vysledek := '**_CHYBA_**'; if (idKObj>0) then begin // lSQL:= 'SELECT p.Polozka,p.Kusy,p.PozadTerDod_X,k.RegCis FROM ' + tblPKObj + ' p INNER JOIN ' + tblPrikaz + ' pr ON (p.IDPrikaz=pr.id)'; // lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' k ON (pr.IdTabKmen=k.id) WHERE p.IDObjednavky=' + IntToStr(idKObj); // lSQL:= lSQL + ' ORDER BY p.Polozka'; // lSQL:= 'SELECT DISTINCT(kz.RegCis),pko.PozadTerDod,SUM(pko.Kusy) FROM ' + tblPKObj + ' pko'; // zakomentováno 6.5.2020 lSQL:= 'SELECT DISTINCT(kz.RegCis), pko.PozadTerDod,SUM(pko.Kusy), dbo._ef_NTS_TypObjednavkyKZKooP(kz.id, pko.id) FROM ' + tblPKObj + ' pko'; // přidáno 6.5.2020 lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IDPrikaz=p.id) INNER JOIN ' + tblKZ + ' kz ON (p.IDTabKmen=kz.id)'; lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' GROUP BY kz.RegCis,pko.PozadTerDod, dbo._ef_NTS_TypObjednavkyKZKooP(kz.id, pko.id) ORDER BY pko.PozadTerDod'; // kz.RegCis'; // přidáno 6.5.2020 // lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' GROUP BY kz.RegCis,pko.PozadTerDod ORDER BY pko.PozadTerDod'; // kz.RegCis'; // zakomentováno 6.5.2020 poz:= Helios.OpenSQL(lSQL); if (poz.RecordCount>0) then begin cOrg:= ''; datKO:= ''; lSQL:= 'SELECT c.CisloOrg, k.TerminOdeslani FROM ' + tblKObj + ' k INNER JOIN ' + tblCOrg + ' c ON (k.IDOrganizace=c.id) WHERE k.id=' + IntToStr(idKObj); with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin if not(VarIsNull(FieldByNameValues('CisloOrg'))) then cOrg:= VarToStr(FieldByNameValues('CisloOrg')); if not(VarIsNull(FieldByNameValues('TerminOdeslani'))) then datKO:= VarToStr(FieldByNameValues('TerminOdeslani')); end; idDZCenik:= 0; if (cOrg<>'') and (datKO<>'') then begin lSQL:= 'DECLARE @dat DATETIME, @cnt INT' + CRLF + 'SET @dat=CONVERT(datetime,N' + datKO.QuotedString + ', 104)' + CRLF + 'SELECT COUNT(d.ID) AS Pocet FROM ' + tblDZ + ' d INNER JOIN ' + tblDZe + ' de ON (de.ID=d.ID)' + ' WHERE d.IDSklad=N' + sklVyroba.QuotedString + ' AND d.CisloOrg=' + cOrg + ' AND d.RadaDokladu=N''220'' AND d.DruhPohybuZbo=11' + ' AND @dat BETWEEN d.Splatnost AND d.DatUhrady AND dbo.hfx_SD_AktualniUrovenSchvalovani(d.ID, 0)=9999'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then if (VarToStr(FieldByNameValues('Pocet')).ToInteger)>1 then begin Helios.Error('Pro daného dodavatele existuje víc platných Nabídkových ceníků !' + CRLF + 'Export nebude proveden'); Exit; end; lSQL:= 'DECLARE @idDZ INT=0, @dat DATETIME' + CRLF + 'SET @dat=CONVERT(datetime,N' + datKO.QuotedString + ', 104)' + CRLF + 'IF EXISTS(SELECT 1 FROM ' + tblDZ + ' d INNER JOIN ' + tblDZe + ' de ON (de.ID=d.ID)' + ' WHERE d.IDSklad=N' + sklVyroba.QuotedString + ' AND d.CisloOrg=' + cOrg + ' AND d.RadaDokladu=N''220'' AND d.DruhPohybuZbo=11' + ' AND @dat BETWEEN d.Splatnost AND d.DatUhrady AND dbo.hfx_SD_AktualniUrovenSchvalovani(d.ID, 0)=9999)' + CRLF + ' SET @idDZ=(SELECT d.ID FROM ' + tblDZ + ' d INNER JOIN ' + tblDZe + ' de ON (de.ID=d.ID)' + ' WHERE d.IDSklad=N' + sklVyroba.QuotedString + ' AND d.CisloOrg=' + cOrg + ' AND d.RadaDokladu=N''220'' AND d.DruhPohybuZbo=11' + ' AND @dat BETWEEN d.Splatnost AND d.DatUhrady AND dbo.hfx_SD_AktualniUrovenSchvalovani(d.ID, 0)=9999)' + CRLF + 'SELECT @idDZ AS idDoklad'; with Helios.OpenSQL(lSQL) do idDZCenik:= VarToStr(FieldByNameValues('idDoklad')).ToInteger; end; // přidáno 10.6.2022 VybranyAdresar := false; if trim(cesta) <> '' then begin fld := cesta; VybranyAdresar := true; end else begin // fld:= GetEnvironmentVariable('USERPROFILE') + '\Desktop'; VybranyAdresar := VyberAdresar(fld, 'Umístění exportního souboru'); end; // konec přidání 10.6.2022 cObj:= ''; dodav:= ''; // if VyberAdresar(fld, 'Umístění exportního souboru') then // zakomentováno 10.6.2022 if VybranyAdresar then // přidáno 10.6.202 begin lSQL:= 'SELECT k.Objednavka, (c.ICO + N' + QuotedStr(' ') + ' + c.Nazev) AS Nazev, k.TerminOdeslani FROM ' + tblKObj; lSQL:= lSQL + ' k INNER JOIN ' + tblCOrg + ' c ON (k.IDOrganizace=c.id) WHERE k.id=' + IntToStr(idKObj); with Helios.OpenSQL(lSQL) do begin cObj:= VarToStr(FieldByNameValues('Objednavka')); dodav:= VarToStr(FieldByNameValues('Nazev')); datKO:= VarToStr(FieldByNameValues('TerminOdeslani')); end; cObj:= StringReplace(cObj,'/','',[rfReplaceAll]); xls:= TXLSReadWriteII5.Create(nil); try xls.Version:= xvExcel97; if (listSumace) then begin wSheet2:= xls.Sheets[0]; wSheet2.Name:= 'Sumace'; // xls[1].InsertRows(0,poz.RecordCount); // xls[1].InsertColumns(0,7); wSheet2.AsString[0,0]:= 'Objednavatel'; wSheet2.AsString[2,0]:= strLov; wSheet2.AsString[0,2]:= 'Dodavatel:'; wSheet2.AsString[2,2]:= dodav; wSheet2.AsString[0,4]:= 'Datum vystavení:'; wSheet2.AsString[2,4]:= datKO; wSheet2.AsString[0,6]:= 'Čís.obj.'; wSheet2.AsString[1,6]:= 'Poř.č.'; wSheet2.Columns.Items[1].NumberFormat:= '##0'; wSheet2.Columns.Items[1].HorizAlignment:= chaCenter; wSheet2.AsString[2,6]:= 'Číslo výrobku'; wSheet2.AsString[3,6]:= 'Množství'; wSheet2.Columns.Items[3].NumberFormat:= '###,##0.###'; wSheet2.AsString[4,6]:= 'Splnit do'; wSheet2.Columns.Items[4].NumberFormat:= 'DD.MM.YYYY'; wSheet2.Columns.Items[4].HorizAlignment:= chaCenter; // přidáno 6.5.2020 if ZobrTypKooObj then begin wSheet2.AsString[5,6]:= NadpisTypuKoopObj; if (vlastTbl='NaStred') then wSheet2.Columns.Items[5].HorizAlignment:= chaCenter; if (vlastTbl='Vpravo') then wSheet2.Columns.Items[5].HorizAlignment:= chaRight; end; // konec přidáno 6.5.2020 idx:= 7; poz.First; while not(poz.EOF) do begin wSheet2.AsString[0, idx]:= cObj; wSheet2.AsInteger[1, idx]:= idx-6; // VarToStr(poz.FieldValues(0)); wSheet2.AsString[2, idx]:= VarToStr(poz.FieldValues(0)); // RegCis wSheet2.AsFloat[3, idx]:= StrToFloat(VarToStr(poz.FieldValues(2))); // mnozstvi dat:= VarToStr(poz.FieldValues(1)); if (dat<>'') then wSheet2.AsString[4, idx]:= dat; // přidáno 6.5.2020 if ZobrTypKooObj then wSheet2.AsString[5, idx]:= VarToStr(poz.FieldValues(3)); // Typ objednávky - poznámka z kmenové karty // konec přidáno 6.5.2020 Inc(idx); poz.Next; end; wSheet2.AutoWidthCols(0, 4); end; // if Helios.YesNo('Mám přerovnat položky objednávky podle datumu a reg.čísla ?',false) then // PrerovnejPolozkyKoopObj(Helios,idKObj); // lSQL:= 'SELECT pko.Polozka,kz.RegCis,pko.Kusy,pko.PozadTerDod_X FROM ' + tblPKObj + ' pko'; // zakomentováno 6.5.2020 lSQL:= 'SELECT pko.Polozka, kz.RegCis, pko.Kusy, pko.PozadTerDod_X, dbo._ef_NTS_TypObjednavkyKZKooP(kz.id, pko.id), kz.ID AS IDKmen' + ' FROM ' + tblPKObj + ' pko' // přidáno 6.5.2020 + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IdPrikaz=p.id)' + ' INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)' + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj); { lSQL:= 'CREATE TABLE #Vystup (Pozice INT IDENTITY(1,1),RegCis NVARCHAR(20),Polozka INT,Kusu NUMERIC(19,6)) ' + CRLF; lSQL:= lSQL + 'INSERT INTO #Vystup (RegCis,Polozka,Kusu) '; lSQL:= lSQL + 'SELECT DISTINCT(kz.RegCis),pko.Polozka,SUM(pko.Kusy) FROM ' + tblPKObj + ' pko'; lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IDPrikaz=p.id) INNER JOIN ' + tblKZ + ' kz ON (p.IDTabKmen=kz.id)'; lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' GROUP BY kz.RegCis,pko.Polozka ORDER BY pko.Polozka' + CRLF; lSQL:= lSQL + 'SELECT * FROM #Vystup'; } poz:= Helios.OpenSQL(lSQL); if (poz.RecordCount>0) then begin poz.First; idx:= 7; if (listSumace) then wSheet1:= xls.Add else wSheet1:= xls.Sheets[0]; wSheet1.Name:= 'Detail'; wSheet1.AsString[0,0]:= 'Objednavatel'; wSheet1.AsString[2,0]:= strLov; wSheet1.AsString[0,2]:= 'Dodavatel:'; wSheet1.AsString[2,2]:= dodav; wSheet1.AsString[0,4]:= 'Datum vystavení:'; wSheet1.AsString[2,4]:= datKO; wSheet1.AsString[0,6]:= 'Čís.obj.'; wSheet1.AsString[1,6]:= 'Poř.č.'; wSheet1.Columns.Items[1].NumberFormat:= '##0'; wSheet1.Columns.Items[1].HorizAlignment:= chaCenter; wSheet1.AsString[2,6]:= 'Číslo výrobku'; wSheet1.AsString[3,6]:= 'Množství'; wSheet1.Columns.Items[3].NumberFormat:= '###,##0.###'; wSheet1.AsString[4,6]:= 'Splnit do'; wSheet1.Columns.Items[4].NumberFormat:= 'DD.MM.YYYY'; wSheet1.Columns.Items[4].HorizAlignment:= chaCenter; // přidáno 6.5.2020 if ZobrTypKooObj then begin wSheet1.AsString[5,6]:= NadpisTypuKoopObj; if (vlastTbl='NaStred') then wSheet1.Columns.Items[5].HorizAlignment:= chaCenter; if (vlastTbl='Vpravo') then wSheet1.Columns.Items[5].HorizAlignment:= chaRight; wSheet1.AsString[6,6]:= 'JCena'; wSheet1.Columns.Items[6].NumberFormat:= '###,##0.###'; end // konec přidáno 6.5.2020 else begin wSheet1.AsString[5,6]:= 'JCena'; wSheet1.Columns.Items[5].NumberFormat:= '###,##0.###'; end; while not(poz.EOF) do begin wSheet1.AsString[0, idx]:= cObj; wSheet1.AsInteger[1, idx]:= VarToStr(poz.FieldByNameValues('Polozka')).ToInteger; // polozka wSheet1.AsString[2, idx]:= VarToStr(poz.FieldByNameValues('RegCis')); // RegCis wSheet1.AsFloat[3, idx]:= StrToFloat(VarToStr(poz.FieldByNameValues('Kusy'))); // mnozstvi dat:= ''; if not(VarIsNull(poz.FieldByNameValues('PozadTerDod_X'))) then dat:= VarToStr(poz.FieldByNameValues('PozadTerDod_X')); if (dat<>'') then wSheet1.AsString[4, idx]:= dat; idKZ:= VarToStr(poz.FieldByNameValues('IDKmen')).ToInteger; jCena:= 0; if (idDZCenik>0) then begin lSQL:= 'SELECT TOP(1) CASE WHEN d.Mena=N''CZK'' THEN pz.JCbezDaniKcPoS ELSE pz.JCBezDaniValPoS END AS JCPolozky FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS + ' ss ON (ss.ID=pz.IDZboSklad) INNER JOIN ' + tblDZ + ' d ON (d.ID=pz.IDDoklad) WHERE d.ID=' + idDZCenik.ToString + ' AND ss.IDKmenZbozi=' + idKZ.ToString; with Helios.OpenSQL (lSQL) do if (RecordCount>0) then jCena:= VarToStr(FieldByNameValues('JCPolozky')).ToDouble; end; // přidáno 6.5.2020 if ZobrTypKooObj then begin wSheet1.AsString[5, idx]:= VarToStr(poz.FieldValues(4)); // Typ objednávky - poznámka z kmenové karty if (jCena>0) then wSheet1.AsFloat[6, idx]:= jCena; end // konec přidáno 6.5.2020 else if (jCena>0) then wSheet1.AsFloat[5, idx]:= jCena; Inc(idx); poz.Next; end; wSheet1.AutoWidthCols(0, 4); end; if (listSumace) then begin xls.Sheets[0].Rows.Items[6].FontStyle:= [xfsBold]; xls.Sheets[0].Columns.Items[1].HorizAlignment:= chaCenter; xls.Sheets[0].Columns.Items[3].HorizAlignment:= chaCenter; xls.Sheets[0].Columns.Items[4].HorizAlignment:= chaCenter; end; if not(listSumace) then xls.Sheets[0].Rows.Items[6].FontStyle:= [xfsBold] else xls.Sheets[1].Rows.Items[6].FontStyle:= [xfsBold]; //přidáno 10.6.2022 if (Nazev.Trim<>'') then NazevSouboru:= Nazev.Trim else NazevSouboru:= 'Obj-' + cObj + '.xls'; //konec přidání 10.6.2022 //xls.SaveToFile(fld + '\Obj-' + cObj + '.xls'); // zakomentováno 10.6.2022 xls.SaveToFile(fld + '\' + NazevSouboru); // přidáno 10.6.2022 Vysledek:= NazevSouboru; // přidáno 10.6.2022 finally xls.Free; end; if (ZobrazInfoKonec=1) then Helios.Info('Export souboru ukončen.'); end; end else Helios.Error(#1'Kooperační objednávka neobsahuje žádnou položku.'#1); end else Helios.Error(#1'Nelze identifikovat Kooperační objednávku.'#1); ExportKoopObjXls := Vysledek; end; end.