{ Zmeny ve verzich ---------------------- 2.0.2013.0904 - pokud na PL (dodaci list z IT) existuje nova karta materialu, zalozi se do skupiny MAT ... 2.0.2022.0614 - kanbanové objednávky - posílání e-mailem // as 10.6.2022 2.0.2022.0718 - přidána kontrola verze pluginu //18.7.2022 } unit ComObjekt; INTERFACE uses System.SysUtils, System.Win.ComObj, ddPlugin_TLB; //{$DEFINE IHePlugin3} const tblObjMatPoh = '[dbo].[_TabObjMat_PohybyZboExpPr]'; tblOrg = '[dbo].[TabCisOrg]'; // tblOrg = '[dbo].[TabOrganizace]'; // přidáno 26.6.2018 // opraveno 3.7.2018 podle unit3 BrowseID_PluginInfo = 871; type TidVPsKanban = record id: integer; radaPrikaz: string[20]; idKZ: integer; ks: Extended; ksVKoop: Extended; end; // !!! pri zmene IHePluginXX upravit take v plgAbout - info o jadru !!! TplgLOVATO = class(TComObject, {$IFDEF IHePlugin3} IHePlugin3 {$ELSE} IHePlugin {$ENDIF}) protected // function PartnerIdentification: WideString; safecall; // function DelphiCompilerVersion: Single; safecall; procedure Run (const Helios: IHelios); safecall; function TestKoopObjVydejMat (const Helios:IHelios; idPKO: integer): Boolean; safecall; procedure ImportEP (const Helios: IHelios; const idDZx: integer; ExpP: boolean); safecall; procedure KontrolaExistVsechObj (const Helios: IHelios); safecall; // procedure ExportKoopObj(const Helios: IHelios; idKObj: integer); safecall; // zakomentováno 6.5.2020 procedure ExportKoopObj_OLD (const Helios: IHelios; idKObj: integer; ZobrTypKooObj: boolean; NadpisTypuKoopObj: string; vlastTbl: string); safecall; // upraveno 6.5.2020 procedure ExportKoopObjHQL (const Helios: IHelios; idKObj: integer); safecall; procedure GenerujVydejZEP (const Helios: IHelios); safecall; procedure OdpovedPPL (const Helios: IHelios); safecall; procedure UlozChybu (const Helios: IHelios; msg: string; E:Exception); procedure ImportNesplObj (const Helios: IHelios); safecall; procedure HromadneOdvedeniEvidKoop (const Helios: IHelios); safecall; procedure GenerujVydejMatZPrikazu (const Helios: IHelios; idEvidKoop: integer); safecall; procedure PrerovnejPolozkyKoopObj (const Helios: IHelios; idKObj: integer); safecall; procedure ZadejPolPrijemkyNaVydejku (const Helios: IHelios; idPrij: integer); safecall; procedure ZadejVyrPrikazNaVydejku (const Helios: IHelios; idVPr: integer); safecall; procedure StavSkladuDoZadVyp (const Helios: IHelios); safecall; procedure VyrabeneDilceDoZadVyp (const Helios: IHelios); procedure ImportZClipboardu (const Helios: IHelios; TypImp: byte); safecall; procedure PrevodStavSkladuImp (const Helios: IHelios; TypImp: byte); safecall; procedure RozpadPrijStavNaKooperanty (const Helios: IHelios; const idDZ: integer=0; const idSS: Integer=0); safecall; procedure KooperaceniPolozkySeSeskupenim (const Helios: IHelios); safecall; procedure ImportStavuInventur (const Helios: IHelios); safecall; procedure ImportObjMaterialu (const Helios: IHelios; const typ:byte); safecall; procedure ImportObjMatEdit (const Helios: IHelios; idZazn: integer); safecall; procedure ImportObjMatRozpad (const Helios: IHelios); safecall; procedure ImportReklamace (const Helios: IHelios); safecall; procedure ImportDL_CHD (const Helios: IHelios); safecall; procedure ImportDL (const Helios: IHelios; const ZpracProcedurou: boolean); safecall; // přidáno při číslu palety // upraveno 27.4.2022 procedure SmazObjNadvyroby (const Helios: IHelios; idNad: integer); safecall; private FHelios: IHelios; procedure OnException (Sender: TObject; E: Exception); // procedure SouboryProItalii(const Helios: IHelios; TypSouboru: byte); safecall; end; const Class_LOVATO: TGUID = '{EA0150F1-EA07-45D2-9109-E7349B03AC1B}'; plgSysName = 'plgLOVATO'; Nadvyr = '20000105'; sklVyr = '200'; sklCHD = '20000107'; orgLovatoIT = '1'; orgLovatoITmena = 'EUR'; szNovyImportExpP = 'V00'; szNovyImportMat = 'M00'; rImpNesplObj = '200'; CRLF = #13#10; tblStavUm = '[dbo].[TabVStavUmisteni]'; tblUmist = '[dbo].[TabUmisteni]'; tblRozpPrijStav = '[dbo].[_TabRozpadPrijStav]'; tblEvidOp = '[dbo].[_TabEvidOperaci_Barcode]'; tblEvidOpVPr = '[dbo].[_TabEvidOpPrikazy]'; tblEvidNadvyrVPr = '[dbo].[_TabEvidNadvyrPrikaz]'; tblPZSD = '[dbo].[TabPohybyZboziSD]'; errPlg = CRLF + '(plgLOVATO, COM)'; 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, dxCore, myUtils, helUtils, XLSReadWriteII5, XLSSheetData5, Xc12DataStyleSheet5, Xc12Utils5, // nExcel, plgKonfig, plgType, plgMain, plgSpravce, // [RK 13.04.2012] nove komponenty DevExpress toto vyzaduji, jinak zatuhne Helios dxGDIPlusAPI, {!initialization!} // frmMain, // frmUnit2, frmUnit3, //prozatimně zakomentováno 26.6.2018 (z důvodu TBPackageU) frmUnit5, // frmUnit6, frmBaliciListy, // frmUnit8, { formPrijemkaNadvyroba} frmUnit9, frmOdvedPrikaz, { formOdvedeniPrikazu pres BarCode} frmUnit11, { formStSklHrZmen } frmUnit12, { formRozdelMat } frmUnit13, { formPrevPrij } frmDemontaz, { formDemontaz} frmMaterial, { formMaterial } frmUnit15, { formOdvodRele } frmReklamaceMat, { formDemontazMat } frmKanbanBox, frmKanbanObj, Globalni, // přidáno 10.6.2022 System.Types; var oVar1: OleVariant; aktObd: integer; fName: string; // xls: TXLSReadWriteII5; // icoAdd, icoDel, icoEdit, icoPrev, icoNext: TIcon; // hFnd: THandle; // RS: TResourceStream; hdl: Cardinal; // přidáno 9.8.2018 waitForm: TForm; waitLabel: TLabel; waitPBar: TProgressBar; function waitStart (TheParent: TComponent; sMsg: string; maxPBar: integer; PBarColor: TColor):Boolean; begin result:= false; if (waitForm=nil) then begin waitForm:= TForm.Create(TheParent); with waitForm do begin Position:= poOwnerFormCenter; width:= 500; Height:= 25; waitLabel:= TLabel.Create(waitForm); with waitLabel do begin Align:= alClient; Alignment:= taCenter; Font.Height:= -30; ParentFont:= false; Caption:= sMsg; Parent:= waitForm; end; if (maxPBar>0) then begin waitPBar:= TProgressBar.Create(waitForm); with waitPBar do begin AlignWithMargins:= true; BarColor:= PBarColor; Position:= 0; Top:= waitLabel.Top + waitLabel.Height + 5; Min:= 0; Max:= maxPBar; Width:= waitForm.Width - 10; Left:= 5; Height:= 10; Parent:= waitForm; end; end; SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION); ClientHeight:= Height; Show; Invalidate; Repaint; end; result:= true; end; end; procedure waitSetProgBar (pozice: integer); begin if (pozice>0) then if Assigned(waitPBar) then if (waitPBar.Max>=pozice) then begin waitPBar.Position:= pozice; waitPBar.Parent.Invalidate; end; end; procedure WaitSetMsg (sMsg : string ); begin WaitLabel.Caption := sMsg; WaitForm.Refresh; end; function waitEnd: boolean; begin result:= false; if (waitForm<>nil) then begin waitForm.Hide; waitForm.Free; waitForm:= nil; result:= true; end; end; // konec přidání 9.8.2018 //přidáno 26.6.2018 { WaitForm : TForm; WaitLabel : TLabel; // function WaitStart( TheParent : TComponent; sMsg : string ) : boolean; function WaitStart( TheParent : TComponent; sMsg : string ) : boolean; begin Result := False; // create our message form // only if it's not already // created if( Nil = WaitForm )then begin WaitForm := TForm.Create( TheParent ); with WaitForm do begin Position := poScreenCenter; Width := 500; Height := 25; // create the message label WaitLabel := TLabel.Create( WaitForm ); with WaitLabel do begin Align := alClient; Alignment := taCenter; Font.Height := -30; ParentFont := False; Caption := sMsg; Parent := WaitForm; end; // hide the title bar SetWindowLong( Handle, GWL_STYLE, GetWindowLong( Handle, GWL_STYLE ) and not WS_CAPTION ); ClientHeight := Height; Show; Update; end; Result := True; end; end; procedure WaitSetMsg( sMsg : string ); begin WaitLabel.Caption := sMsg; WaitForm.Refresh; end; function WaitEnd : boolean; begin Result := False; if( Nil <> WaitForm )then begin WaitForm.Hide; WaitForm.Free; WaitForm := Nil; Result := True; end; end; } //konec přidání 26.6.2018 // přidáno 4.7.2018 { WaitForm : TForm; WaitLabel : TLabel; function waitStart(TheParent: TComponent; sMsg: string):Boolean; begin result:= false; if (waitForm=nil) then begin waitForm:= TForm.Create(TheParent); with waitForm do begin Position:= poScreenCenter; width:= 500; Height:= 25; waitLabel:= TLabel.Create(waitForm); with waitLabel do begin Align:= alClient; Alignment:= taCenter; Font.Height:= -30; ParentFont:= false; Caption:= sMsg; Parent:= waitForm; end; SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION); ClientHeight:= Height; Show; Update; end; result:= true; end; end; procedure WaitSetMsg( sMsg : string ); begin WaitLabel.Caption := sMsg; WaitForm.Refresh; end; function waitEnd: boolean; begin result:= false; if (waitForm<>nil) then begin waitForm.Hide; waitForm.Free; waitForm:= nil; result:= true; end; end; } // konec přidání 4.7.2018 function VyberAdresar (var Foldr: string; Title: string): Boolean; var BrowseInfo: TBrowseInfo; ItemIDList: PItemIDList; DisplayName: array[0..MAX_PATH] of Char; begin Result := False; FillChar(BrowseInfo, SizeOf(BrowseInfo), #0); with BrowseInfo do begin hwndOwner := Application.Handle; pszDisplayName := @DisplayName[0]; lpszTitle := PChar(Title); ulFlags := BIF_RETURNONLYFSDIRS; end; ItemIDList := SHBrowseForFolder(BrowseInfo); if Assigned(ItemIDList) then if SHGetPathFromIDList(ItemIDList, DisplayName) then begin Foldr := DisplayName; Result := True; end; end; function OtevriSouborXLS (var nazev: string; title: shortString): Boolean; var dlgOpenXP: TOpenDialog; // dialog pro Windows XP dlgOpenW7: TFileOpenDialog; // dialog pro Windows Vista a novejsi titulek, filtr1, filtr2: string; iniDir: wideString; begin result:= false; if title='' then title:= 'Vyberte soubor pro import '; filtr1:= 'Sešit MS Excel'; filtr2:= '*.xls;*.xlsx'; nazev:= ''; iniDir:= GetEnvironmentVariable('USERPROFILE') + '\Desktop'; try dlgOpenXP:= TOpenDialog.Create(nil); dlgOpenW7:= TFileOpenDialog.Create(nil); if JeVistaAVyssi then // funkce z "myUtils.pas" begin dlgOpenW7.Title:= title; dlgOpenW7.OkButtonLabel:= 'Vybrat'; with dlgOpenW7.FileTypes.Add do begin DisplayName:= filtr1; FileMask:= filtr2; end; dlgOpenW7.DefaultFolder:= iniDir; if dlgOpenW7.Execute then begin nazev:= dlgOpenW7.FileName; result:= true; end; end else begin dlgOpenXP.Title:= titulek; dlgOpenXP.Filter:= filtr1 + '|' + filtr2; dlgOpenXP.InitialDir:= iniDir; if dlgOpenXP.Execute then begin nazev:= dlgOpenXP.FileName; result:= true; end; end; finally dlgOpenXP.Free; dlgOpenW7.Free; end; end; procedure TplgLOVATO.OnException (Sender: TObject; E: Exception); begin try LockWindowUpdate (0); FHelios.Error (plgPrelozException (E.Message)); except Vcl.Forms.Application.ShowException (E); //pro jistotu end; end; procedure TplgLOVATO.UlozChybu (const Helios: IHelios; msg: string; E: Exception); var txt: string; begin if not Assigned(E) then txt:= '' else txt:= E.Message; if txt<>'' then msg:= msg + ' - chyba: ' + txt; Helios.ExecSQL ('INSERT #TabExtKom (Poznamka) SELECT N' + msg.QuotedString); end; { procedure TplgLOVATO.VytvorKanbanObj(const Helios: IHelios; const zOznac: ShortString; const arrID: TArray); var lSQL: string; i: integer; begin lSQL:= ''; if (zOznac='1') and (Length(arrID)>0) then begin lSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabKanbanObj') + ') IS NULL' + CRLF; lSQL:= 'CREATE TABLE #TabKanbanObj (IDbox INT NOT NULL)' + CRLF; for i:=0 to Length(arrID)-1 do lSQL:= lSQL + 'INSERT #TabKanbanObj (IDbox) VALUES (' + IntToStr(arrID[i]) + ')' + CRLF; end; lSQL:= lSQL + 'EXEC dbo.ep_VytvorKanbanObj'; try Helios.ExecSQL(lSQL); except on E:Exception do begin Clipboard.AsText:= lSQL; Helios.Error(#1'Chyba při vytváření Kanban objednávky - '#1 + E.Message); end; end; Helios.Refresh(true); end; } procedure TplgLOVATO.KontrolaExistVsechObj (const Helios: IHelios); safecall; var lSQL, fName: string; obj, poz, regC: string; idx: integer; xls: TXLSReadWriteII5; wSheet1: TXLSWorkSheet; chyba: boolean; begin if OtevriSouborXLS(fName, 'Vyberte XLS soubor se seznamem objednávek') then begin xls:= TXLSReadWriteII5.Create(nil); try chyba:= false; xls.LoadFromFile(fName); wSheet1:= xls.Items[0]; idx:= 1; waitStart(nil, 'Běží porovnávání objedávek - celkem ' + IntToStr(wSheet1.LastRow), wSheet1.LastRow, $0000FF); // clRed waitSetProgBar(1); //dočasně zakomentováno 26.6.2018 obj:= Trim(wSheet1.AsString[0,idx]); if (obj<>'') then begin lSQL:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT NULL , Poznamka NVARCHAR(255) )'; Helios.ExecSQL(lSQL); while (obj<>'') do begin poz:= RightStr(Trim(wSheet1.AsString[1,idx]),4); regC:= Trim(wSheet1.AsString[2,idx]); lSQL:= 'SELECT id FROM ' + tblPZ + ' WHERE RegCis=N' + regC.QuotedString + ' AND DruhPohybuZbo=9 AND NazevSozNa1=' + QuotedStr(obj); lSQL:= lSQL + ' AND NazevSozNa2=N' + QuotedStr(poz); with Helios.OpenSQL(lSQL) do if (RecordCount=0) then begin chyba:= true; Helios.ExecSQL('INSERT #TabExtKom (Poznamka) SELECT N' + QuotedStr('Chybí objednávka ' + obj + '/' + poz + ' - ' + regC)); end; Inc(idx); if (idx mod 10=0) then waitSetProgBar(idx); //dočasně zakomentováno 26.6.2018 obj:= Trim(wSheet1.AsString[0,idx]); end; end; waitEnd; Helios.Info(#1'Kontrola ukončena'#1 + IfThen(chyba,CRLF + '(po odkliknutí OK se zobrazí přehled chyb)','')); except on E:Exception do Helios.Error('Chyba při zpracování XLS souboru: ' + E.Message + #1); end; xls.Free; end; end; procedure TplgLOVATO.ImportObjMaterialu (const Helios: IHelios; const typ:byte); var lSQL, sTemp: string; idVyd, cOrg, cnt: integer; begin lSQL:= 'IF OBJECT_ID(N' + QuotedStr('dbo._TabObjMat_PohybyZboExpPr') + ') IS NOT NULL DROP TABLE dbo._TabObjMat_PohybyZboExpPr' + CRLF; lSQL:= lSQL + 'CREATE TABLE ' + tblObjMatPoh + ' (ID int IDENTITY(1,1) NOT NULL, IdPohybZbozi int NOT NULL, SkupZbo NVARCHAR(3) NOT NULL,'; lSQL:= lSQL + 'RegCis NVARCHAR(30) NOT NULL, Mnozstvi numeric(19, 6) DEFAULT 0.0 NOT NULL, MnozstviVyd numeric(19, 6) DEFAULT 0.0 NOT NULL,'; lSQL:= lSQL + ' PozadDatDod DATETIME, SdilenyMat BIT DEFAULT 0, MnozstviZad numeric(19,6) DEFAULT 0.0 NOT NULL, IdKmenZbozi int NOT NULL)'; Helios.ExecSQL(lSQL); cOrg:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg'))); cnt:= 0; lSQL:= 'SELECT pz.Id, (pz.Mnozstvi-pz.MnOdebrane-pz.MnozstviStorno) AS Mnozstvi, kz.Id AS idKZ, kz.SkupZbo, kz.RegCis, pz.PozadDatDod, ISNULL(kze._SdilenyMaterial,0) AS Sdileny FROM ' + tblPZ; lSQL:= lSQL + ' pz INNER JOIN ' + tblDZ + ' dz ON (dz.Id=pz.IDDoklad) INNER JOIN ' + tblSS + ' ss ON (ss.Id=pz.IdZboSklad) INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.Id)'; lSQL:= lSQL + ' LEFT JOIN ' + tblKZe + ' kze ON (kze.Id=kz.Id) WHERE dz.CisloOrg=' + IntToStr(cOrg) + ' AND dz.Splneno=0 AND dz.StavRezervace<>N' + QuotedStr('X'); lSQL:= lSQL + ' AND dz.RadaDokladu=N' + QuotedStr('280') + ' AND dz.DruhPohybuZbo=9 AND DATEDIFF(day,GETDATE(),pz.PozadDatDod)<4 AND (pz.Mnozstvi-pz.MnOdebrane-pz.MnozstviStorno)>0'; if (typ=1) then lSQL:= lSQL + ' AND kze._SdilenyMaterial=1'; with Helios.OpenSQL(lSQL) do begin First; while not(EOF) do begin Inc(cnt); lSQL:= 'INSERT ' + tblObjMatPoh + ' (IdPohybZbozi, SkupZbo, RegCis, Mnozstvi, PozadDatDod, SdilenyMat, IdKmenZbozi, MnozstviZad) VALUES (' + VarToStr(FieldByNameValues('Id')) + ',N'; lSQL:= lSQL + QuotedStr(VarToStr(FieldByNameValues('SkupZbo'))) + ',N' + QuotedStr(VarToStr(FieldByNameValues('RegCis'))); lSQL:= lSQL + ',' + StringReplace(VarToStr(FieldByNameValues('Mnozstvi')),',','.',[rfReplaceAll]) + ','; sTemp:= VarToStr(FieldByNameValues('PozadDatDod')); lSQL:= lSQL + IfThen(sTemp='','NULL','CONVERT(datetime,N' + QuotedStr(sTemp) + ',104)'); lSQL:= lSQL + ',' + IfThen(LowerCase(VarToStr(FieldByNameValues('Sdileny')))='false','0','1') + ',' + VarToStr(FieldByNameValues('idKZ')) + ','; lSQL:= lSQL + StringReplace(VarToStr(FieldByNameValues('Mnozstvi')),',','.',[rfReplaceAll]) + ')'; try Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error(#1'Chyba řádek ' + IntToStr(cnt) + '/ RČ ' + VarToStr(FieldByNameValues('RegCis')) + ' >> ' + E.Message + #1); end; Next; end; lSQL:= 'MERGE ' + tblObjMatPoh + ' AS T USING (SELECT DISTINCT(IdKmenZbozi), SUM(Mnozstvi) AS MnSum FROM ' + tblObjMatPoh + ' GROUP BY IdKmenZbozi) AS S'; lSQL:= lSQL + ' ON (S.IdKmenZbozi=T.IdKmenZbozi) WHEN MATCHED THEN UPDATE SET T.MnozstviZad=S.MnSum;'; Helios.ExecSQL(lSQL); end; Helios.OpenBrowse(100134,''); end; procedure TplgLOVATO.ImportObjMatEdit (const Helios: IHelios; idZazn: Integer); var lSQL, mn: string; btn: TModalResult; begin if (idZazn>0) then begin mn:= '0'; mn:= Trim(InputBoxOkCancel('Vydávané množství materiálu celkem','Množství celkem: ', mn, btn)); if (btn=mrOk) and (mn<>'') then Helios.ExecSQL('UPDATE ' + tblObjMatPoh + ' SET MnozstviZad=' + StringReplace(mn,',','.',[rfReplaceAll]) + ' WHERE IdKmenZbozi=' + IntToStr(idZazn)); end; end; procedure TplgLOVATO.ImportObjMatRozpad (const Helios: IHelios); var lSQL: string; begin lSQL:= 'SELECT DISTINCT(idKmenZbozi), MnozstviZad FROM ' + tblObjMatPoh; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin Next; end; end; end; procedure TplgLOVATO.ImportStavuInventur (const Helios: IHelios); var lSQL, idPlan: string; begin if Helios.Prenos2(100099,'id','DatumGenerovani_X',oVar1,oVar2,'','Inventurní hlavičky',true,true,false,1) then begin if (VarToStr(oVar1)<>'') then begin lSQL:= 'SELECT i.IdKmenZbozi,i.MnozstviInv,i.DatPorizeni,i.SkupZbo+RegCis,ss.IDSklad,i.MnozstviSklad FROM ' + tblInvI; lSQL:= lSQL + ' i LEFT JOIN ' + tblSS + ' ss ON (i.IDSklad=ss.id) WHERE i.idDoklad IN (' + VarToStr(oVar1) + ')'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin idPlan:= ''; lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi,Datum) VALUES (' + VarToStr(FieldValues(0)) + ','; lSQL:= lSQL + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]); lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(2))) + ',104) )'; lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; try with Helios.OpenSQL(lSQL) do idPlan:= VarToStr(FieldValues(0)); if (idPlan<>'') then begin lSQL:= 'UPDATE ' + tblPPlanE + ' SET _IDSklad=N' + QuotedStr(VarToStr(FieldValues(4))) + ',_InventuraSM=1'; lSQL:= lSQL + ' WHERE id=' + idPlan + CRLF + 'IF (@@ROWCOUNT=0) INSERT ' + tblPPlanE + ' (id,_IDSklad,_InventuraSM)'; lSQL:= lSQL + ' VALUES (' + idPlan + ',N'+ QuotedStr(VarToStr(FieldValues(4))) + ',1)'; Helios.ExecSQL(lSQL); end; except on E:Exception do UlozChybu(Helios,'Nelze uložit položku inventury (fyz): ' + VarToStr(FieldValues(3)) + ' sklad ' + VarToStr(FieldValues(4)),E); end; idPlan:= ''; lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi,Datum) VALUES (' + VarToStr(FieldValues(0)) + ','; lSQL:= lSQL + StringReplace(VarToStr(FieldValues(5)),',','.',[rfReplaceAll]); lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(2))) + ',104) )'; lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; try with Helios.OpenSQL(lSQL) do idPlan:= VarToStr(FieldValues(0)); if (idPlan<>'') then begin lSQL:= 'UPDATE ' + tblPPlanE + ' SET _IDSklad=N' + QuotedStr(VarToStr(FieldValues(4))) + ',_InventuraSM=0'; lSQL:= lSQL + ' WHERE id=' + idPlan + CRLF + 'IF (@@ROWCOUNT=0) INSERT ' + tblPPlanE + ' (id,_IDSklad,_InventuraSM)'; lSQL:= lSQL + ' VALUES (' + idPlan + ',N'+ QuotedStr(VarToStr(FieldValues(4))) + ',0)'; Helios.ExecSQL(lSQL); end; except on E:Exception do UlozChybu(Helios,'Nelze uložit položku inventury (skl): ' + VarToStr(FieldValues(3)) + ' sklad ' + VarToStr(FieldValues(4)),E); end; Next; end; end; end else Helios.Info(#1'Nebyla vybrána žádná inventura.'#1); end else Helios.Info(#1'Akce importu inventurních stavů byla zrušena.'#1); end; procedure TplgLOVATO.SmazObjNadvyroby (const Helios: IHelios; idNad: integer); var sql, msg: string; errId: byte; cVyd, cPrij, datVyd, datPrij: string; idDZv, idPZ, idDZp, idVydejMat, idVydejStorno, idPrijMat, idPrijStorno: Integer; realVyd, realPrij: boolean; begin msg:= ''; errId:= 0; cVyd:= ''; cPrij:= ''; idVydejMat:= 0; datVyd:= ''; idVydejStorno:= 0; idPrijMat:= 0; datPrij:= ''; idPrijStorno:= 0; with Helios.OpenSQL('SELECT id FROM ' + tblEvidNadvyr + ' WHERE Stav=0 AND Splneno=1 AND id=' + IntToStr(idNad)) do if (RecordCount=1) then begin errId:= 1; msg:= 'Nelze smazat, objednávka Nadvýroby byla již splněna.'; end; if (errId=0) then with Helios.OpenSQL('SELECT id FROM ' + tblEvidNadvyr + ' WHERE Zaevidovano>0 AND id=' + IntToStr(idNad)) do if (RecordCount=1) then begin errId:= 2; msg:= 'Nelze smazat, na objednávce Nadvýroby jsou evidované vyrobené kusy.' + CRLF; msg:= msg + 'Objednávku lze ručně označit jako splněnou' + CRLF; msg:= msg + ' a zbylý materiál vrátit převodem na sklad 200-Výroba.'; end; if (errId=0) then with Helios.OpenSQL('SELECT IdVydejkaMat FROM ' + tblEvidNadvyr + ' WHERE IdVydejkaMat IS NOT NULL AND id=' + IntToStr(idNad)) do if (RecordCount=1) then begin realVyd:= false; idVydejMat:= StrToInt(VarToStr(FieldValues(0))); if (idVydejMat>0) then with Helios.OpenSQL('SELECT RadaDokladu + N'' '' + CONVERT(nvarchar,PoradoveCislo),DatPorizeni FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydejMat)) do begin cVyd:= VarToStr(FieldValues(0)); datVyd:= VarToStr(FieldValues(1)); end; realPrij:= false; idPrijMat:= 0; if (idVydejMat>0) then begin with Helios.OpenSQL('SELECT TOP(1) IDDoklad FROM ' + tblPZ + ' WHERE IDOldDoklad=' + IntToStr(idVydejMat)) do if (RecordCount=1) then idPrijMat:= StrToInt(VarToStr(FieldValues(0))); with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydejMat) + ' AND Realizovano=1') do if (RecordCount=1) then realVyd:= true; end; if (idPrijMat>0) then begin with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE id=' + IntToStr(idPrijMat) + ' AND Realizovano=1') do if (RecordCount=1) then realPrij:= true; with Helios.OpenSQL('SELECT RadaDokladu + N'' '' + CONVERT(nvarchar,PoradoveCislo),DatPorizeni FROM ' + tblDZ + ' WHERE id=' + IntToStr(idPrijMat)) do begin cPrij:= VarToStr(FieldValues(0)); datPrij:= VarToStr(FieldValues(1)); end; end; if (realVyd) and (realPrij) then errId:= 13; if (idVydejMat>0) and not(realVyd) and (idPrijMat=0) then errId:= 4; if (idVydejMat>0) and (realVyd) and (idPrijMat>0) and not(realPrij) then errId:= 6; end; case errId of 3: begin // real vyd+prij Helios.Error(#1 + 'Na objednávku byl již vydán materiál, bude vygenerována vratka na sklad 200-Výroba.' + #1); idDZv:= 0; sql:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF; sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(Nadvyr) + ',@Mena=N' + QuotedStr('CZK'); sql:= sql + ',@DruhPohybu=4,@RadaDokladu=N' + QuotedStr('450') + ',@Insert=1,@CisloOrg=0,@PC=NULL'; sql:= sql + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ'; try with Helios.OpenSQL(sql) do idDZv:= StrToInt(VarToStr(FieldValues(0))); except on E:Exception do begin Clipboard.AsText:= sql; Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message); end; end; if (idDZv>0) then begin sql:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ',IdSkladPrevodu=N' + QuotedStr(sklVyr); sql:= sql + ',TypPrevodky=N' + QuotedStr('250') + ',DruhPohybuPrevod=0,PopisDodavky=N' + QuotedStr('Storno Nadvýroby - zpětný převod mat.'); sql:= sql + ' WHERE id=' + IntToStr(idDZv); Helios.ExecSQL(sql); sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka'; sql:= sql + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF; sql:= sql + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZv) + ',@IDDokladSrc=' + IntToStr(idPrijMat); sql:= sql + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK'); sql:= sql + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null'; sql:= sql + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Storno Nadvýroby - zpětný převod mat.'); sql:= sql + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0'; sql:= sql + ',@VytvaretDokladovouVazbu=0,@VytvaretPolozkovouVazbu=0'; try Helios.ExecSQL(sql); sql:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZv) + CRLF; sql:= sql + 'UPDATE ' + tblEvidNadvyr + ' SET IdVratkaMat=' + IntToStr(idDZv) + ' WHERE id='; sql:= sql + IntToStr(idNad); Helios.ExecSQL(sql); { idDZp:= 0; sql:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF; sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(sklVyr) + ',@Mena=N' + QuotedStr('CZK'); sql:= sql + ',@DruhPohybu=0,@RadaDokladu=N' + QuotedStr('250') + ',@Insert=1,@CisloOrg=0,@PC=NULL'; sql:= sql + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ'; try Clipboard.AsText:= sql; with Helios.OpenSQL(sql) do idDZp:= StrToInt(VarToStr(FieldValues(0))); except on E:Exception do Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, kontaktujte správce.'#1 + CRLF + E.Message + CRLF + sql); end; if (idDZp>0) then begin sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka'; sql:= sql + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF; sql:= sql + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZp) + ',@IDDokladSrc=' + IntToStr(idDZv); sql:= sql + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK'); sql:= sql + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null'; sql:= sql + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Storno Nadvýroby - zpětný převod mat.'); sql:= sql + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0'; sql:= sql + ',@VytvaretDokladovouVazbu=0,@VytvaretPolozkovouVazbu=1'; try Clipboard.AsText:= sql; Helios.ExecSQL(sql); sql:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZp); Helios.ExecSQL(sql); except on E:Exception do begin Helios.Error(#1'Nelze uložit hlavičku položky příjemky/převodky, kontaktujte správce.'#1 + CRLF + E.Message); end; end; end; } except on E:Exception do Helios.Error(#1'Nelze vygenerovat výdejka (vratka).'#1 + CRLF + E.Message); end; end; Helios.Info(#1'Pozor, vytvořená výdejka není realizovaná.'#1); end; 4: begin // udelana vydejka, nerealizovana, bez navazne prijemky Helios.Error(#1 + 'Na objednávku byla vygenerována výdejka, aktuálně není realizována a bude zrušena.' + #1); sql:= 'BEGIN TRAN' + CRLF + 'DELETE FROM ' + tblDZDod + ' WHERE IDHlavicky=' + IntToStr(idVydejMat) + CRLF; sql:= sql + 'DELETE FROM ' + tblPZSD + ' WHERE Id IN (SELECT id FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idVydejMat) + ')' + CRLF; sql:= sql + 'DELETE FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idVydejMat) + CRLF; sql:= sql + 'DELETE FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydejMat) + ' AND Realizovano=0' + CRLF; sql:= sql + 'UPDATE ' + tblEvidNadvyroby + ' SET IdVydejkaMat=NULL WHERE id=' + IntToStr(idNad) + CRLF; sql:= sql + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN'; try Helios.ExecSQL(sql); except on E:Exception do Helios.Error(#1'Chyba: ' + E.Message + #1); end; end; 5: begin Helios.Error(#1 + 'Na objednávku byl převeden materiál, proveďte zpětný převod ručně (Př. ' + cPrij + ')' + #1); end; 6: begin // vytvorena a realizovana vydejka, vytvorena a NErealizovana prijemka sql:= 'BEGIN TRAN' + CRLF + 'EXEC dbo.hp_SmazDokladOZ @IDDoklad=' + IntToStr(idPrijMat) + CRLF; sql:= sql + 'UPDATE ' + tblDZ+ ' SET NavaznyDoklad=NULL WHERE id=' + IntToStr(idVydejMat); { try Helios.ExecSQL(sql); except on E:Exception do Helios.Error(#1'Chyba: ' + E.Message + #1); end; } sql:= sql + CRLF + 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL'; sql:= sql + ' CREATE TABLE #TabTempUziv(Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)'; sql:= sql + CRLF + 'DECLARE @dVyd DATETIME, @idStorno INT, @bylaChyba INT, @uziv SMALLINT' + CRLF; sql:= sql + 'SELECT @uziv=Id FROM ' + tblUziv + ' WHERE LoginName=SUSER_SNAME()' + CRLF; sql:= sql + 'SET @dVyd=' + IfThen(datVyd='','NULL','CONVERT(datetime,N' + QuotedStr(datVyd) + ',104)') + CRLF; // sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idStorno OUT, @Sklad=N' + QuotedStr(sklVyr) + ',@DruhPohybu=3'; // sql:= sql + ',@RadaDokladu=N' + QuotedStr('410') + ',@Insert=1,@Mena=N' + QuotedStr('CZK'); // sql:= sql + ',@PC=NULL,@DatumPorizeni=@dVyd,@CisloOrg=0' + CRLF; sql:= sql + 'EXEC dbo.hp_Generuj_Storno_Doklad @ID=' + IntToStr(idVydejMat) + ',@Selectem=0'; sql:= sql + ',@DruhPohybu=3,@RadaDokladu=N' + QuotedStr('410') + ',@IDSklad=N' + QuotedStr(sklVyr); sql:= sql + ',@AObdobi=NULL,@ADatPorizeni=@dVyd,@idStorno=@idStorno OUT,@bylaChyba=@bylaChyba OUT'; sql:= sql + CRLF + 'IF @idStorno IS NOT NULL' + CRLF + ' BEGIN' + CRLF + ' EXEC dbo.hp_Realizuj_prijem @ID=@idStorno,@DatumRealizace=@dVyd,'; sql:= sql + '@Uzivatel=@uziv,@bylaChyba=@bylaChyba OUT' + CRLF; sql:= sql + ' EXEC dbo.hp_OZZrusStornoAPuvDok @idStorno=@idStorno' + CRLF + ' END' + CRLF; sql:= sql + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN'; try Helios.ExecSQL(sql); except on E:Exception do Helios.Error(#1'Chyba: ' + E.Message + #1); end; end; 13: begin if Helios.YesNo(#1'Opravdu chcete objednávku smazat ?'#1 + CRLF + '!! všechny navázané příjmy a výdeje budou stornovány !!',false) then begin sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL'; sql:= sql + ' CREATE TABLE #TabTempUziv(Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)'; sql:= sql + 'BEGIN TRAN' + CRLF + 'DECLARE @dVyd DATETIME, @idStorno INT, @bylaChyba INT, @uziv SMALLINT' + CRLF; sql:= sql + 'SELECT @uziv=Id FROM ' + tblUziv + ' WHERE LoginName=SUSER_SNAME()' + CRLF; sql:= sql + 'SET @dVyd=' + IfThen(datVyd='','NULL','CONVERT(datetime,N' + QuotedStr(datPrij) + ',104)') + CRLF; sql:= sql + 'EXEC dbo.hp_Generuj_Storno_Doklad @ID=' + IntToStr(idPrijMat) + ',@Selectem=0'; sql:= sql + ',@DruhPohybu=1,@RadaDokladu=N' + QuotedStr('200') + ',@IDSklad=N' + QuotedStr(sklVyr); sql:= sql + ',@AObdobi=NULL,@ADatPorizeni=@dVyd,@idStorno=@idStorno OUT,@bylaChyba=@bylaChyba OUT' + CRLF; sql:= sql + 'IF @idStorno IS NOT NULL' + CRLF + ' BEGIN' + CRLF + ' EXEC dbo.hp_Realizuj_vydej @ID=@idStorno,@DatumRealizace=@dVyd'; sql:= sql + ',@Hlidat=0,@Uzivatel=@uziv,@bylaChyba=@bylaChyba OUT' + CRLF; sql:= sql + ' EXEC dbo.hp_OZZrusStornoAPuvDok @idStorno=@idStorno' + CRLF; sql:= sql + ' UPDATE ' + tblDZ+ ' SET NavaznyDoklad=NULL WHERE id=' + IntToStr(idVydejMat) + CRLF + ' END' + CRLF; sql:= sql + 'SET @dVyd=' + IfThen(datVyd='','NULL','CONVERT(datetime,N' + QuotedStr(datVyd) + ',104)') + CRLF; sql:= sql + 'EXEC dbo.hp_Generuj_Storno_Doklad @ID=' + IntToStr(idVydejMat) + ',@Selectem=0'; sql:= sql + ',@DruhPohybu=3,@RadaDokladu=N' + QuotedStr('410') + ',@IDSklad=N' + QuotedStr(sklVyr); sql:= sql + ',@AObdobi=NULL,@ADatPorizeni=@dVyd,@idStorno=@idStorno OUT,@bylaChyba=@bylaChyba OUT' + CRLF; sql:= sql + 'IF @idStorno IS NOT NULL' + CRLF + ' BEGIN' + CRLF + ' EXEC dbo.hp_Realizuj_prijem @ID=@idStorno,@DatumRealizace=@dVyd,'; sql:= sql + '@Uzivatel=@uziv,@bylaChyba=@bylaChyba OUT' + CRLF; sql:= sql + ' EXEC dbo.hp_OZZrusStornoAPuvDok @idStorno=@idStorno' + CRLF + ' END' + CRLF; sql:= sql + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN'; try Helios.ExecSQL(sql); except on E:Exception do Helios.Error(#1'Chyba: ' + E.Message + #1); end; end; end; end; if (msg<>'') then Helios.Error(#1 + msg + #1) else Helios.ExecSQL('UPDATE ' + tblEvidNadvyroby + ' SET Stav=1 WHERE id=' + IntToStr(idNad)); Helios.Refresh(true); end; procedure TplgLOVATO.KooperaceniPolozkySeSeskupenim (const Helios: IHelios); var sql, IDcka, cOrg, idKOp: string; cnt: integer; begin IDcka:= ''; IDKop:= VarToStr(Helios.QueryBrowse.FieldByNameValues('IDObjednavky')); sql:= 'TabPrPostup.typ=2 AND '; if Helios.Prenos(bidVyrOper,'ID',oVar1,sql,'Kooperační operace na výrobních příkazech',true) then begin if not VarIsNull(oVar1) then IDcka:= VarToStr(oVar1); if (IDcka<>'') then begin sql:= 'SELECT FROM ' + tblPrPost + ' WHERE id IN (' + IDcka + ')'; end; end; end; // rozpad prijemky nebo vybranych karet stavu skladu pro prevod na kooperanty procedure TplgLOVATO.RozpadPrijStavNaKooperanty (const Helios: IHelios; const idDZ: integer=0; const idSS: Integer=0); safecall; var sql, celkP, celkD, dodat, stred: string; l_loop: integer; chyba: boolean; mn: Extended; begin chyba:= false; sql:= ''; if (idDZ>0) then begin sql:= 'INSERT ' + tblRozpPrijStav + ' (IdKmenZbozi,Mnozstvi,CisloZbozi)'; sql:= sql + ' SELECT DISTINCT(kz.id),SUM(pz.Mnozstvi),kz.CisloZbozi FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS; sql:= sql + ' ss ON (pz.IdZboSklad=ss.id) INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id) WHERE'; sql:= sql + ' pz.IDDoklad=' + IntToStr(idDZ) + ' GROUP BY kz.id,kz.CisloZbozi ORDER BY kz.id'; try Helios.ExecSQL(sql); except chyba:= true; end; end; if not(chyba) then begin sql:= 'SELECT DISTINCT(RIGHT(vp.KmenoveStredisko,3)) FROM TabPrKVazby kv INNER JOIN TabPrikaz vp'; sql:= sql + ' ON (kv.IdPrikaz=vp.Id AND vp.StavPrikazu<=40) WHERE kv.mnoz_Nevydane>0 AND kv.nizsi IN'; sql:= sql + ' (SELECT IdKmenZbozi FROM _TabRozpadPrijStav) ORDER BY RIGHT(vp.KmenoveStredisko,3)'; with Helios.OpenSQL(sql) do if RecordCount>0 then begin First; while (not(EOF) and not(chyba)) do begin stred:= VarToStr(FieldValues(0)); sql:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Stav' + stred); sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Stav' + stred; sql:= sql + ' NUMERIC(19,6) NOT NULL DEFAULT 0.0' + CRLF; sql:= sql + 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Pozad' + stred); sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Pozad' + stred; sql:= sql + ' NUMERIC(19,6) NOT NULL DEFAULT 0.0' + CRLF; try Helios.ExecSQL(sql); except chyba:= true; end; if not(chyba) then begin sql:= sql + 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Prebyt' + stred); sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Prebyt' + stred; sql:= sql + ' AS ([Stav' + stred + ']-[Pozad' + stred + '])' + CRLF; Helios.ExecSQL(sql); sql:= 'SET NOCOUNT ON' + CRLF; sql:= sql + 'DECLARE @idKZ INT,@MnS NUMERIC(19,6),@MnP NUMERIC(19,6),@Skl NVARCHAR(30)' + CRLF; sql:= sql + 'DECLARE c CURSOR LOCAL FAST_FORWARD FOR SELECT IdKmenZbozi FROM '; sql:= sql + tblRozpPrijStav + CRLF + 'OPEN c' + CRLF + 'WHILE (1=1) BEGIN FETCH NEXT FROM c INTO @idKZ' + CRLF; sql:= sql + ' IF (@@FETCH_STATUS<>0) BREAK' + CRLF + 'SET @MnS=ISNULL((SELECT ISNULL(Mnozstvi,0) FROM ' + tblSS; sql:= sql + ' WHERE IdKmenZbozi=@idKZ AND IDSklad'; if stred='200' then sql:= sql + '=N' + QuotedStr('200') else sql:= sql + ' LIKE N' + QuotedStr('200%' + stred); sql:= sql + '),0)' + CRLF; sql:= sql + 'SET @MnP=ISNULL((SELECT ISNULL(SUM(kv.Mnoz_Nevydane),0) FROM ' + tblPrVaz + ' kv INNER JOIN' + tblPrikaz; sql:= sql + ' vp ON (kv.IdPrikaz=vp.Id AND vp.StavPrikazu<=40) WHERE kv.Nizsi=@idKZ AND vp.KmenoveStredisko'; if stred='200' then sql:= sql + '=N' + QuotedStr('200') else sql:= sql + ' LIKE N' + QuotedStr('200%' + stred); sql:= sql + '),0)' + CRLF; sql:= sql + 'UPDATE ' + tblRozpPrijStav + ' SET Stav' + stred + '=@MnS,Pozad' + stred; sql:= sql + '=@MnP WHERE idKmenZbozi=@idKZ' + CRLF + 'END' + CRLF + 'CLOSE c' + CRLF + 'DEALLOCATE c'; try Helios.ExecSQL(sql); except chyba:= true; end; end; Next; end; celkD:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('CelkemDodat'); celkD:= celkD + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD CelkemDodat AS ('; dodat:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Dodat' + stred); dodat:= dodat + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Dodat' + stred + ' AS ('; // celkem prebytek celkP:= celkP + 'CASE WHEN [Stav' + stred + ']-[Pozad' + stred + ']>0 THEN ([Stav' + stred + ']-'; celkP:= celkP + '[Pozad' + stred + ']) ELSE 0 END + '; // celkem dodat celkD:= celkD + 'CASE WHEN [Stav' + stred + ']-[Pozad' + stred + ']<0 THEN ABS([Stav' + stred + ']-'; celkD:= celkD + '[Pozad' + stred + ']) ELSE 0 END + '; // celkem Prebytek mn:= 0; sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N''_TabRozpadPrijStav'')'; sql:= sql + ' AND [name] LIKE N''Prebyt%'''; with Helios.OpenSQL('') do if RecordCount>0 then begin First; while not(EOF) do begin Next; end; end; celkP:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('CelkemPrebyt'); celkP:= celkP + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD CelkemPrebyt NUMERIC(19,6) DEFAULT 0.0'; sql:= 'UPDATE ' + QuotedStr(tblRozpPrijStav) + ' SET '; Helios.ExecSQL(celkP + CRLF + sql); // celkem Dodat SetLength(celkD,Length(celkD)-3); celkD:= celkD + ')'; Helios.ExecSQL(celkD); end; end; end; procedure TplgLOVATO.PrevodStavSkladuImp (const Helios: IHelios; TypImp: Byte); var lSQL: string; cnt: integer; begin cnt:= 0; lSQL:= 'SELECT ssi.IDSklad,ssi.IDKmenZbozi,ssi.Minimum,ssi.Maximum,ssi.id,kz.SkupZbo,kz.RegCis FROM '; lSQL:= lSQL + 'dbo.TabStavSkladuImp ssi INNER JOIN ' + tblKZ + ' kz ON (ssi.IdKmenZbozi=kz.id)'; with Helios.OpenSQL(lSQL) do if RecordCount>0 then begin First; while not(EOF) do begin lSQL:= 'DECLARE @idSS INT' + CRLF + 'SET @idSS=(SELECT id FROM ' + tblSS; lSQL:= lSQL + ' WHERE IDSklad=N' + QuotedStr(VarToStr(FieldValues(0))); lSQL:= lSQL + ' AND IDKmenZbozi=' + VarToStr(FieldValues(1)) + ')' + CRLF + 'IF (@idSS IS NOT NULL)' + CRLF + 'BEGIN'; lSQL:= lSQL + CRLF + 'UPDATE ' + tblSS + ' SET Minimum=' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]); lSQL:= lSQL + ',Maximum=' + StringReplace(VarToStr(FieldValues(3)),',','.',[rfReplaceAll]) + ' WHERE id=@idSS'; lSQL:= lSQL + CRLF + 'DELETE FROM dbo.TabStavSkladuImp WHERE id=' + VarToStr(FieldValues(4)) + CRLF + 'END'; try Helios.ExecSQL(lSQL); Inc(cnt); except on E:Exception do Helios.Error('Nelze uložit položku '#1 + VarToStr(FieldValues(5)) + ' ' + VarToStr(FieldValues(6)) + #1); end; Next; end; if cnt>0 then Helios.Info(#1'Aktualizováno ' + IntToStr(cnt) + ' položek.'#1); Helios.Refresh(true); end; end; procedure TplgLOVATO.ImportReklamace (const Helios: IHelios); var lSQL, radky, zaznam, nazevSloupce: string; regC, cisloRekl, sarze, datPrijeti, stavCZ, decisionIT: string; iRegC, iCisloRekl, iSarze, iDatPrijeti, iStavCZ, iDecisionIT: integer; cnt, cntX, sl, idxR, idxS, lastPos: integer; arrRadky: TArray>; prvniPrazdne, cont: boolean; aktR, aktC, rowMax, colMax: integer; begin if (Clipboard.HasFormat(CF_TEXT)) then begin cont := true; prvniPrazdne := false; try radky := Clipboard.AsText; if (LeftStr(radky,1)=#9) then prvniPrazdne := true; sl := PosCount (#9, LeftStr(radky, Pos(#13, radky)-1)) + 1; // pocet sloupcu except on E:Exception do cont := false; end; if (radky<>'') and (cont) then begin cont:= true; radky:= radky.Replace(#10#10, ' '); radky:= radky.Replace(#10, ' '); radky:= radky.Replace(CRLF, ' '); cnt:= Length(radky)-Length(StringReplace(radky, Chr(13),'',[rfReplaceAll]))+1; SetLength (arrRadky, cnt, sl); // index od 0 if (Pos(#13, radky)>0) then zaznam := LeftStr(radky, Pos(#13, radky)-1) // nazvy sloupcu else zaznam := radky; for idxR:=Low(arrRadky) to High(arrRadky) do begin // radky := radky.Trim; if (radky='') then Continue; lastPos := 0; if (Pos(#13,radky)>0) then begin if (Pos(#9,radky)>0) then begin if (helUtils.PosCount(#9, radky)>=sl) then lastPos := helUtils.LastPos(#13, LeftStr(radky, helUtils.PosNthString (radky, #9, sl)-1)) else if (RightStr(radky,1)='"') then lastPos := radky.Length else lastPos := helUtils.LastPos(#13, radky); zaznam := LeftStr (radky, lastPos); end // else // zaznam := radky.Trim; end; // else // zaznam := radky.Trim; zaznam:= zaznam.Replace(#10, ' '); zaznam:= zaznam.Replace(#10#10, ' '); zaznam:= zaznam.Replace(CRLF, ' '); // zaznam:= Trim (StringReplace(zaznam, #9#9, #9' '#9, [rfReplaceAll])); if (zaznam<>'') then for idxS:=0 to sl-1 do begin if (zaznam<>'') then begin if (Pos (#9, zaznam)>0) then begin arrRadky[idxR,idxS] := LeftStr(zaznam, Pos(#9, zaznam)-1).Trim; Delete (zaznam, 1, Pos(#9, zaznam)); end else begin arrRadky[idxR,idxS] := zaznam.Trim; zaznam := ''; end; end; end; if (lastPos>0) then Delete (radky, 1, lastPos) else Delete (radky, 1,Pos(#13, radky)+1); end; // idxR iRegC := -1; iCisloRekl := -1; iSarze := -1; iDatPrijeti := -1; iStavCZ := -1; iDecisionIT := -1; for idxS:=0 to sl-1 do begin nazevSloupce := arrRadky[0, idxS].Trim; if (nazevSloupce.ToLower='typ výrobku') then iRegC := idxS; end; // idsS lSQL := 'DROP TABLE IF EXISTS #TabImportReklamace' + CRLF + 'CREATE TABLE #TabImportReklamace (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY' + ', RegCis NVARCHAR(30) NOT NULL, CisloReklamace NVARCHAR(30), Sarze NVARCHAR(100), DatPrijeti NVARCHAR(20), StavCZ NVARCHAR(200)' + ', DecisionIT NVARCHAR(250), PoznamkaIT NVARCHAR(500) )' + CRLF; { if (iRegC>-1) then for idxR:=High(arrRadky) downto Low(arrRadky) do if (arrRadky[idxR, iRegC]='') then SetLength (arrRadky, Length(arrRadky)-1); } cntX := 0; for idxR:=Low(arrRadky) to High(arrRadky) do begin idKZ := 0; regC := arrRadky[idxR, 2].Trim; cisloRekl := arrRadky[idxR, 3].Trim; sarze := arrRadky[idxR, 5].Trim; datPrijeti := arrRadky[idxR, 6].Trim; stavCZ := arrRadky[idxR, 9].Trim; decisionIT := arrRadky[idxR, 10].Trim; if (regC<>'') and (decisionIT<>'') and (cisloRekl<>'') then begin lSQL := lSQL + 'INSERT #TabImportReklamace (RegCis, CisloReklamace, Sarze, DatPrijeti, StavCZ, DecisionIT) SELECT N' + regC.QuotedString + ', N' + cisloRekl.QuotedString + ', N' + sarze.QuotedString + ', N' + datPrijeti.QuotedString + ', N' + stavCZ.QuotedString + ', N' + decisionIT.QuotedString + CRLF; Inc (cntX); end; end; // idxR lSQL := lSQL + 'IF OBJECT_ID(N''dbo.ep_HDC_ImportQMSReklamace_VyjadreniIT_2'', ''P'') IS NOT NULL EXEC dbo.ep_HDC_ImportQMSReklamace_VyjadreniIT_2'; try Helios.ExecSQL (lSQL); except on E:Exception do Helios.Error (#1 + 'Chyba: ' + #1 + E.Message); end; end; // radky<>'' and cont if (cntX=0) then Helios.Error (#1'Nedohledány žádné záznamy pro zápis'#1) else Helios.Info ('Import ukončen'); end; // Clipboard.HasFormat end; procedure TplgLOVATO.ImportZClipboardu (const Helios: IHelios; TypImp: Byte); var arrRadky: TArray>; idx: integer; lSQL, sz, rc, sMin, sMax, idKZ, jc: string; begin lSQL:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT NULL, Poznamka NVARCHAR(255) NOT NULL )'; Helios.ExecSQL(lSQL); case TypImp of 1: ReseedTable (Helios,'TabStavSkladuImp'); 2: begin lSQL := 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabImpRCCena') + ') IS NOT NULL DROP TABLE #TabImpRCCena' + CRLF; lSQL := lSQL + 'CREATE TABLE #TabImpRCCena (RegCis NVARCHAR(35) NOT NULL, JCena NUMERIC(19,6) DEFAULT 0.0, Autor NVARCHAR(50) DEFAULT SUSER_SNAME())'; Helios.ExecSQL (lSQL); end; end; try arrRadky := Clipboard2StringArray(false); // false = nemaze nazvy sloupcu for idx:=0 to High(arrRadky) do begin idKZ:= ''; sz:= ''; rc:= ''; case TypImp of 1: begin sz:= UpperCase(arrRadky[idx,0]); rc:= UpperCase(arrRadky[idx,1]); sMin:= arrRadky[idx,2]; if sMin='' then sMin:= '0'; sMax:= arrRadky[idx,3]; if sMax='' then sMax:= '0'; lSQL:= 'SELECT Id FROM ' + tblKZ + ' WHERE UPPER(SkupZbo)=N' + QuotedStr(sz); lSQL:= lSQL + ' AND UPPER(RegCis)=N' + QuotedStr(rc); with Helios.OpenSQL(lSQL) do if RecordCount=1 then idKZ:= VarToStr(FieldValues(0)) else Helios.ExecSQL('INSERT #TabExtKom (Poznamka) SELECT N' + QuotedStr('Karta nenalezena: ' + sz + ' ' + rc + ' : min. ' + sMin) + ' , max. ' + sMax); if (idKZ<>'') then begin lSQL:= 'INSERT dbo.TabStavSkladuImp (SkupZboImp,RegCisImp,IDKmenZbozi,IDSklad,Minimum,Maximum) VALUES (N'; lSQL:= lSQL + QuotedStr(sz) + ',N' + QuotedStr(rc) + ',' + idKZ + ',N' + QuotedStr(Helios.Sklad) + ','; lSQL:= lSQL + StringReplace(sMin,',','.',[rfReplaceAll]) + ',' + StringReplace(sMax,',','.',[rfReplaceAll]) + ')'; try Helios.ExecSQL(lSQL); except on E:Exception do begin UlozChybu(Helios,'Nelze importovat min/max do Stavu skladu.',E); end; end; end; end; 2: begin rc:= IfThen(arrRadky[idx,0]<>'', UpperCase(arrRadky[idx,0]), ''); jc:= IfThen(arrRadky[idx,1]<>'', arrRadky[idx,0], '0'); if (rc<>'') then Helios.ExecSQL('INSERT #TabImpRCCena (RegCis, JCena) VALUES (N' + QuotedStr(rc) + ',' + StringReplace(jc,',','.',[rfReplaceAll]) + ')'); end; end; end; case TypImp of 2: Helios.ExecSQL('EXEC dbo.ep_PZ_Import @Typ=1, @IDDoklad=' + VarToStr(Helios.HeliosVlastnik.QueryBrowse.FieldByNameValues('ID'))); end; except on E:Exception do begin lSQL:= 'Nelze importovat údaje ze schránky (Clipboardu).'; UlozChybu(Helios,lSQL,E); Helios.Error(#1 + lSQL + #1); end; end; Helios.Refresh(true); try with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do if RecordCount>0 then Helios.OpenBrowse(541,''); finally end; end; procedure TplgLOVATO.VyrabeneDilceDoZadVyp (const Helios: IHelios); var lSQL, IDs: string; aID: TArray; idx: integer; begin lSQL:= 'TabKmenZbozi.Blokovano=0 AND TabKmenZbozi.Dilec=1'; if Helios.Prenos(bidSS,'TabKmenZbozi.id',oVar1,lSQL,'Vyberte požadované dílce',true) then begin if not VarIsNull(oVar1) then begin Helios.ExecSQL('DELETE FROM ' + tblPPlan + ' WHERE Autor=SUSER_SNAME() AND IDVarianta IS NULL'); IDs:= VarToStr(oVar1); lSQL:= 'SELECT id,1 FROM ' + tblKZ + ' WHERE id IN (' + IDs + ')'; with Helios.OpenSQL(lSQL) do if RecordCount>0 then begin First; while not(EOF) do begin lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi) VALUES (' + VarToStr(FieldValues(0)); lSQL:= lSQL + ',' + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]) + ')'; Helios.ExecSQL(lSQL); Next; end; end; { aID:= StrToArrayInt(IDs); for idx:= Low(aID) to High(aID) do begin lSQL:= 'SELECT kz.id,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON(ss.IdKmenZbozi=kz.id) WHERE ss.id=' + IntToStr(aID[idx]); with Helios.OpenSQL('') end; } Helios.Refresh(true); end; end; end; procedure TplgLOVATO.StavSkladuDoZadVyp (const Helios: IHelios); var lSQL,IDs: string; aID: TArray; idx: integer; begin Helios.Info(#1'Bude importovan stav vybraneho skladu.'#1); lSQL:= 'TabStavSkladu.Mnozstvi>0'; if Helios.Prenos2(bidSS,'TabStavSkladu.id','',oVar1,oVar2,lSQL,'',true,true,false,1) then begin if not VarIsNull(oVar1) then begin Helios.ExecSQL('DELETE FROM ' + tblPPlan + ' WHERE Autor=SUSER_SNAME()'); IDs:= VarToStr(oVar1); lSQL:= 'SELECT kz.id,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON(ss.IdKmenZbozi=kz.id)'; lSQL:= lSQL + ' WHERE ss.id IN (' + IDs + ')'; with Helios.OpenSQL(lSQL) do if RecordCount>0 then begin First; while not(EOF) do begin lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi) VALUES (' + VarToStr(FieldValues(0)); lSQL:= lSQL + ',' + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]) + ')'; Helios.ExecSQL(lSQL); Next; end; end; { aID:= StrToArrayInt(IDs); for idx:= Low(aID) to High(aID) do begin lSQL:= 'SELECT kz.id,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON(ss.IdKmenZbozi=kz.id) WHERE ss.id=' + IntToStr(aID[idx]); with Helios.OpenSQL('') end; } Helios.Refresh(true); end; end; end; procedure TplgLOVATO.ZadejVyrPrikazNaVydejku (const Helios: IHelios; idVPr: Integer); var lSQL: string; pz,mu: IHeQuery; idVydej,idPolExpP,idExpPr,idNPol,sMU,sNO: string; idx: Integer; mn: extended; begin if (idVPr>0) then begin lSQL:= 'SELECT kz.id FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)'; lSQL:= lSQL + ' WHERE kz.SkupZbo LIKE ' + QuotedStr('V%') + ' AND p.id=' + IntToStr(idVPr); with Helios.OpenSQL(lSQL) do if RecordCount=0 then begin Helios.Error(#1'Výrobní příkaz není na finální výrobek.'#1); Exit; end; lSQL:= 'SELECT p.IdRezervace,kz.SkupZbo,kz.RegCis,kz.Nazev1 FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)'; lSQL:= lSQL + ' WHERE kz.SkupZbo LIKE ' + QuotedStr('V%') + ' AND p.IdRezervace IS NOT NULL AND p.id=' + IntToStr(idVPr); pz:= Helios.OpenSQL(lSQL); if (pz.RecordCount>0) then begin if Helios.YesNo('Chcete dílec z výrobního příkazu uložit do výdejky exportu ?',false) then begin lSQL:= 'TabDokladyZbozi.CisloOrg=1 AND TabDokladyZbozi.IDSklad=N' + QuotedStr(sklVyroba) + ' AND TabDokladyZbozi.DruhPohybuZbo IN (2,3,4)'; lSQL:= lSQL + ' AND TabDokladyZbozi.RadaDokladu IN (N' + QuotedStr('420') + ') AND TabDokladyZbozi.Realizovano=0'; if Helios.Prenos(bidDZVydej,'id',vOle1,lSQL,'Výdejky pro Vývoz',true) then begin pz.First; idPolExpP:= VarToStr(pz.FieldValues(0)); // ID polozky v ExpPr sNO:= ''; sMU:= ''; idVydej:= VarToStr(vOle1); mu:= Helios.OpenSQL('SELECT ISNULL(MistoUrceni,0) FROM ' + tblDZ + ' WHERE id=' + idVydej); if (mu.RecordCount>0) then begin sMU:= VarToStr(mu.FieldValues(0)); lSQL:= 'SELECT dz.NavaznaObjednavka FROM ' + tblPZ + ' pz INNER JOIN ' + tblDZ + ' dz ON (pz.idDoklad=dz.id)'; lSQL:= lSQL + ' WHERE pz.DruhPohybuZbo=9 AND pz.id=' + idPolExpP; // jen Exp.prikazy with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin sNO:= LeftStr(VarToStr(FieldValues(0)),2); if ((sNO<>'52') and (sMU='3')) or ( ((sNO<>'45') and (sMU='1')) and ((sNO<>'50') and (sMU='1')) ) then begin Helios.Error(#1'Místo určení na výdejce není určeno pro tuto řadu objednávek.'#1); Exit; end; end; end; with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE BlokovaniEditoru IS NOT NULL AND id=' + idVydej) do if (RecordCount=0) then // doklad neni blokovan begin Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + idVydej); pz.First; idx:= 0; while not(pz.EOF) do begin idPolExpP:= VarToStr(pz.FieldValues(0)); // ID polozky v ExpPr lSQL:= VarToStr(pz.FieldValues(1)) + ' ' + VarToStr(pz.FieldValues(2)) + ' - ' + VarToStr(pz.FieldValues(3)); // try mn:= StrToFloat(InputBox(lSQL,'Množství na výdejku:','0')); // 5.10.2018 přidáno ošetření na nečíslo // except on E:Exception do begin // helios.Error('Zadaná honota není číslo!'); // exit; // end // end; if (mn>0) then begin lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka '; lSQL:= lSQL + 'NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF; lSQL:= lSQL + 'DECLARE @m NVARCHAR(3),@vc INT,@sDPH NUMERIC(5,2),@sSD NUMERIC(5,2),@kEUR NUMERIC(19,6),'; lSQL:= lSQL + '@jm INT,@k NUMERIC(19,6),@ss INT,@mn NUMERIC(19,6),@idOut INT,@d DATETIME' + CRLF; // udaje z radky Exp. prikazu lSQL:= lSQL + 'SELECT @sDPH=SazbaDPH,@sSD=SazbaSD,@mn=' + StringReplace(FloatToStr(mn),',','.',[rfReplaceAll]); lSQL:= lSQL + ',@k=Kurz,@jm=JednotkaMeny,@ss=IDZboSklad,@kEUR=KurzEuro FROM ' + tblPZ + ' WHERE id=' + idPolExpP + CRLF; // udaje z hlavicky Exp. prikazu with Helios.OpenSQL('SELECT Mena,VstupniCena,Kurz,KurzEuro,DatPorizeni FROM ' + tblDZ + ' WHERE id=' + idVydej) do begin lSQL:= lSQL + 'SET @m=N' + QuotedStr(VarToStr(FieldValues(0))) + CRLF + 'SET @vc=' + VarToStr(FieldValues(1)); lSQL:= lSQL + CRLF + 'SET @k=' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SET @kEUR=' + StringReplace(VarToStr(FieldValues(3)),',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SET @d=CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(4))) + ',104)' + CRLF; end; lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + idVydej + ',@DruhPohybu=2,@CisloOrg=1,@IDZboSklad=@ss,'; lSQL:= lSQL + '@Mena=@m,@Kurz=@k,@JednotkaMeny=@jm,@KurzEuro=@kEUR,@SazbaSD=@sSD,@SazbaDPH=@sDPH,@ZakazanoDPH=0,'; lSQL:= lSQL + '@VstupniCena=4,@Mnozstvi=@mn,@JCbezDaniKC=0,@PovolitDuplicitu=1,@DatPorizeni=@d,@Selectem=0'; lSQL:= lSQL + CRLF + 'SELECT @idOut'; idNPol:= ''; try Inc(idx); with Helios.OpenSQL(lSQL) do if not VarIsNull(FieldValues(0)) then idNPol:= VarToStr(FieldValues(0)); if (idNPol<>'') and (idPolExpP<>'') then begin // aktualizuje udaje na vydejce lSQL:= 'DECLARE @idP INT,@idRez INT,@d DATETIME,@idDok INT' + CRLF; lSQL:= lSQL + 'DECLARE @n1 NVARCHAR(30),@n2 NVARCHAR(30),@jc NUMERIC(19,6),@jcV NUMERIC(19,6),@k NUMERIC(12,5)' + CRLF; lSQL:= lSQL + 'SELECT @n1=NazevSozNa1,@n2=NazevSozNa2,@d=PozadDatDod,@jc=JCbezDaniKC,@jcV=JCbezDaniVal,@idDok=IDDoklad FROM ' + tblPZ; lSQL:= lSQL + ' WHERE id=' + idPolExpP + CRLF; lSQL:= lSQL + 'SELECT @k=Kurz FROM ' + tblDZ + ' WHERE id=@idDok' + CRLF; lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET PozadDatDod=@d,NazevSozNa1=@n1,NazevSozNa2=@n2,JCbezDaniKC=@jcV*@k,JCbezDaniVal=@jcV'; lSQL:= lSQL + ',IdOldPolozka=' + idPolExpP + ' WHERE id=' + idNPol + CRLF; lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET CCbezDaniKc=JCbezDaniKC*Mnozstvi,CCbezDaniVal=JCbezDaniVal*Mnozstvi WHERE id=' + idNPol; Helios.ExecSQL(lSQL); // prepocte mnozstvi vydane na ExpPr lSQL:= 'SELECT ISNULL( (SELECT IDDoklad FROM ' + tblPZ + ' WHERE Id=' + idPolExpP + '), 0)'; with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin idExpPr:= VarToStr(FieldValues(0)); lSQL:= 'MERGE dbo.TabPohybyZbozi AS T USING (SELECT ss.Id, kz.MJEvidence AS MJ FROM dbo.TabStavSkladu ss' + CRLF; lSQL:= lSQL + ' INNER JOIN dbo.TabKmenZbozi kz ON (kz.Id=ss.IDKmenZbozi) WHERE ss.IDSklad=N''200'') AS S'; lSQL:= lSQL + ' ON (T.IdZboSklad=S.Id) WHEN MATCHED AND T.IDDoklad=' + idExpPr + ' THEN UPDATE SET T.MJ=S.MJ, T.MJEvidence=S.MJ;'; Helios.ExecSQL(lSQL); lSQL:= 'BEGIN TRY' + CRLF + 'EXEC dbo.hp_Aktualizuj_OdebraneMnozstviDoklad @IDDoklad=' + idExpPr + ',@DruhPohybu=9' + CRLF; lSQL:= lSQL + 'END TRY' + CRLF + 'BEGIN CATCH' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=ERROR_MESSAGE' + CRLF + 'END CATCH'; //upraveno 5.10.2018 - odstraněny závorky za error_message try Helios.ExecSQL(lSQL); except on E:Exception do // UlozChybu(Helios,'Nelze aktualizovat kalkulační cenu ! SQL: ' + sql, E); UlozChybu(Helios,'Nelze aktualizovat kalkulační cenu ! SQL: ' + lsql, E); // změněno 26.6.2018 (z sql na lsql) end; end; end; except on E:Exception do Helios.Error(#1'Nelze uložit položku na doklad.'#1 + CRLF + E.Message + CRLF + lSQL + errPlg); end; end else Helios.Error(#1'Zadané množství je nulové, převod dílce na výdejku NEBUDE proveden.'#1); pz.Next; end; // Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + idVydej + ',@AktualizaceSlev=0'); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + idVydej); Helios.Refresh(true); end else Helios.Error(#1'Doklad je blokován jiným uživatelem.'#1); end; end; end; end; end; procedure TplgLOVATO.ZadejPolPrijemkyNaVydejku (const Helios: IHelios; idPrij: Integer); var lSQL: string; pz,mu: IHeQuery; mn, mnE: Single; idVydej,idPol,idNPol: string; idx: Integer; begin if (idPrij>0) then begin lSQL:= 'SELECT pz.Id FROM ' + tblDZ + ' dz INNER JOIN ' + tblPZ + ' pz ON (dz.Id=pz.IdDoklad) INNER JOIN ' + tblSS + ' ss ON'; lSQL:= lSQL + ' (pz.IdZboSklad=ss.id) INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id) WHERE dz.DruhPohybuZbo=0'; lSQL:= lSQL + ' AND dz.Id=' + IntToStr(idPrij) + ' AND pz.TypVyrobnihoDokladu=0 AND dz.RadaDokladu IN (N' + QuotedStr('220') + ')'; lSQL:= lSQL + ' AND kz.SkupZbo LIKE ' + QuotedStr('V%') + ' ORDER BY pz.SkupZbo,pz.RegCis,pz.NazevSozNa1,pz.NazevSozNa2'; pz:= Helios.OpenSQL(lSQL); if (pz.RecordCount>0) then begin if Helios.YesNo('Chcete položky FINÁLNÍCH dílců z příjemky z výroby uložit do výdejky exportu ?',false) then begin lSQL:= 'IDSklad=N' + QuotedStr(sklVyroba) + ' AND RadaDokladu IN (N' + QuotedStr('420') + ')'; if Helios.Prenos(100092,'id',vOle1,lSQL,'Výdejky pro Vývoz',true) then begin pz.First; idPol:= VarToStr(pz.FieldValues(0)); // ID polozky v Prijemce idNPol:= '0'; with Helios.OpenSQL('SELECT p.IdRezervace FROM ' + tblPZ + ' pz INNER JOIN ' + tblPrikaz + ' p ON (pz.IdPrikaz=p.id) WHERE pz.id=' + idPol) do if (RecordCount>0) then idNPol:= VarToStr(FieldValues(0)); // ID polozky ExpPrikazu if (idNPol<>'0') then with Helios.OpenSQL('IF NOT EXISTS(SELECT id FROM ' + tblPZ + ' WHERE id=' + idNPol + ') SELECT 0 ELSE SELECT Mnozstvi-MnOdebrane-MnozstviStorno FROM ' + tblPZ + ' WHERE id=' + idNPol) do mnE:= StrToFloat(VarToStr(FieldValues(0))); // mnozstvi zbytek na ExpPr if (mnE<=0) then begin lSQL:= 'Položka objednávky (ExpPř) již byla celá splněna/odeslána.'; Helios.ExecSQL('INSERT #TabExtKom (Poznamka) SELECT N' + QuotedStr(lSQL)); Helios.Error(#1 + lSQL + #1); Exit; end; idVydej:= VarToStr(vOle1); mu:= Helios.OpenSQL('SELECT ISNULL(MistoUrceni,0) FROM ' + tblDZ + ' WHERE id=' + idVydej); if (mu.RecordCount>0) then begin lSQL:= 'SELECT dz.NavaznaObjednavka FROM ' + tblPZ + ' pz INNER JOIN ' + tblDZ + ' dz ON (pz.idDoklad=dz.id)'; lSQL:= lSQL + ' WHERE pz.DruhPohybuZbo=9 AND pz.id=' + idNPol; // jen Exp.prikazy with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin if ((LeftStr(VarToStr(FieldValues(0)),2)<>'45') and (VarToStr(mu.FieldValues(0))='1')) or ((LeftStr(VarToStr(FieldValues(0)),2)<>'52') and (VarToStr(mu.FieldValues(0))='3')) then begin Helios.Error(#1'Místo určení na výdejce není určeno pro tuto řadu objednávek.'#1); Exit; end; end; end; with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE BlokovaniEditoru IS NOT NULL AND id=' + idVydej) do if (RecordCount=0) then // ma vydejku otevrenou nekdo jiny ? 0=ne begin Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + idVydej); pz.First; idx:= 0; while not(pz.EOF) do begin idPol:= VarToStr(pz.FieldValues(0)); lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka '; lSQL:= lSQL + 'NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF; lSQL:= lSQL + 'DECLARE @m NVARCHAR(3),@vc INT,@sDPH NUMERIC(5,2),@sSD NUMERIC(5,2),@kEUR NUMERIC(19,6),'; lSQL:= lSQL + '@jm INT,@k NUMERIC(19,6),@ss INT,@mn NUMERIC(19,6),@idOut INT,@d DATETIME, @mExp NUMERIC(19,6)' + CRLF; lSQL:= lSQL + 'SET @mExp=' + StringReplace(FloatToStr(mnE),'','',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SELECT @sDPH=SazbaDPH,@sSD=SazbaSD,@mn=Mnozstvi,@k=Kurz,@jm=JednotkaMeny,'; lSQL:= lSQL + '@ss=IDZboSklad,@kEUR=KurzEuro FROM ' + tblPZ + ' WHERE id=' + idPol + CRLF; with Helios.OpenSQL('SELECT Mena,VstupniCena,Kurz,KurzEuro,DatPorizeni FROM ' + tblDZ + ' WHERE id=' + idVydej) do begin lSQL:= lSQL + 'SET @m=N' + QuotedStr(VarToStr(FieldValues(0))) + CRLF + 'SET @vc=' + VarToStr(FieldValues(1)); lSQL:= lSQL + CRLF + 'SET @k=' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SET @kEUR=' + StringReplace(VarToStr(FieldValues(3)),',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SET @d=CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(4))) + ',104)' + CRLF; end; lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + idVydej + ',@DruhPohybu=2,@CisloOrg=1,@IDZboSklad=@ss,'; lSQL:= lSQL + '@Mena=@m,@Kurz=@k,@JednotkaMeny=@jm,@KurzEuro=@kEUR,@SazbaSD=@sSD,@SazbaDPH=NULL,@ZakazanoDPH=0,'; lSQL:= lSQL + '@VstupniCena=4,@Mnozstvi=@mn,@JCbezDaniKC=0,@PovolitDuplicitu=1,@DatPorizeni=@d,@Selectem=0' + CRLF; lSQL:= lSQL + 'SELECT @idOut'; idNPol:= ''; try Inc(idx); with Helios.OpenSQL(lSQL) do if not VarIsNull(FieldValues(0)) then idNPol:= VarToStr(FieldValues(0)); if (idNPol<>'') then begin lSQL:= 'IF EXISTS(SELECT id FROM ' + tblPZ + ' WHERE IdPrikaz IS NOT NULL AND id=' + idPol + ') BEGIN'; lSQL:= lSQL + ' DECLARE @idP INT,@idRez INT,@d DATETIME,@idDok INT' + CRLF + 'SELECT @idP=IdPrikaz FROM ' + tblPZ + ' WHERE id=' + idPol + CRLF; lSQL:= lSQL + 'SELECT @idRez=IdRezervace FROM ' + tblPrikaz + ' WHERE IDPrikazRidici=@idP AND id=@idP' + CRLF; lSQL:= lSQL + 'IF (@idRez IS NOT NULL) BEGIN DECLARE @n1 NVARCHAR(30),@n2 NVARCHAR(30),@jc NUMERIC(19,6),@jcV NUMERIC(19,6),@k NUMERIC(12,5)' + CRLF; lSQL:= lSQL + 'SELECT @n1=NazevSozNa1,@n2=NazevSozNa2,@d=PozadDatDod,@jc=JCbezDaniKC,@jcV=JCbezDaniVal,@idDok=IDDoklad FROM ' + tblPZ; lSQL:= lSQL + ' WHERE id=@idRez' + CRLF; lSQL:= lSQL + 'SELECT @k=Kurz FROM ' + tblDZ + ' WHERE id=@idDok' + CRLF; lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET PozadDatDod=@d,NazevSozNa1=@n1,NazevSozNa2=@n2,IdOldPolozka=@idRez,JCbezDaniKC=@jcV*@k,JCbezDaniVal=@jcV'; lSQL:= lSQL + ' WHERE id=' + idNPol + CRLF; lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET CCbezDaniKc=JCbezDaniKC*Mnozstvi,CCbezDaniVal=JCbezDaniVal*Mnozstvi WHERE id=' + idNPol + CRLF; lSQL:= lSQL + 'IF (@idDok IS NOT NULL) EXEC dbo.hp_Aktualizuj_OdebraneMnozstviDoklad @IDDoklad=@idDok,@DruhPohybu=9 END END'; Helios.ExecSQL(lSQL); end; except on E:Exception do begin Clipboard.AsText:= lSQL + CRLF + errPlg; Helios.Error(#1'Nelze uložit položku na doklad.'#1 + CRLF + E.Message + CRLF + '(SQL v clipboardu)'); end; end; pz.Next; end; Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + idVydej + ',@AktualizaceSlev=1'); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + idVydej); Helios.Refresh(true); Helios.Info(#1'Uloženo ' + IntToStr(idx) + ' položek.'#1); end else Helios.Error(#1'Doklad je blokován jiným uživatelem.'#1); end; end; end; end; end; function TplgLOVATO.TestKoopObjVydejMat (const Helios: IHelios; idPKO: Integer): Boolean; var idVPr: integer; begin result:= false; with Helios.OpenSQL('SELECT IDPrikaz FROM ' + tblPKObj + ' WHERE id=' + IntToStr(idPKO)) do if RecordCount>0 then begin idVPr:= StrToInt(VarToStr(FieldValues(0))); with Helios.OpenSQL('SELECT id FROM ' + tblPZ + ' WHERE IDPrikaz=' + IntToStr(idVPr) + ' AND TypVyrobnihoDokladu=1') do if RecordCount>0 then result:= true; end; end; procedure TplgLOVATO.PrerovnejPolozkyKoopObj (const Helios: IHelios; idKObj: Integer); var lSQL: string; idx: integer; pol: IHeQuery; begin lSQL:= 'SELECT pko.id 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) + ' ORDER BY pko.PozadTerDod DESC,kz.RegCis DESC'; pol:= Helios.OpenSQL(lSQL); if pol.RecordCount>0 then begin idx:= 101; pol.First; while not(pol.EOF) do begin try lSQL:= 'UPDATE ' + tblPKObj + ' SET Polozka=' + IntToStr(idx) + ' WHERE id=' + VarToStr(pol.FieldValues(0)); Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error('Chyba: ' + E.Message + CRLF + lSQL); end; Dec(idx); pol.Next end; end; lSQL:= 'SELECT pko.id 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) + ' ORDER BY pko.PozadTerDod,kz.RegCis'; pol:= Helios.OpenSQL(lSQL); if pol.RecordCount>0 then begin idx:= 1; pol.First; while not(pol.EOF) do begin try lSQL:= 'UPDATE ' + tblPKObj + ' SET Polozka=' + IntToStr(idx) + ' WHERE id=' + VarToStr(pol.FieldValues(0)); Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error('Chyba: ' + E.Message + CRLF + lSQL); end; Inc(idx); pol.Next end; end; end; procedure TplgLOVATO.ExportKoopObjHQL (const Helios: IHelios; idKObj: integer); // 29 var lSQL, sqlOut, fName: string; myDIC, myICO, cOrg, cObj, sGUID: string; guid: TGUID; fs: TFileStream; begin CreateGUID(guid); sGuid:= GUIDToString(guid); sGuid:= StringReplace(sGuid,'{','',[rfReplaceAll]); sGuid:= StringReplace(sGuid,'}','',[rfReplaceAll]); with Helios.OpenSQL('SELECT ICO,DIC FROM ' + tblCOrg + ' WHERE CisloOrg=0') do begin myICO:= VarToStr(FieldValues(0)); myDIC:= VarToStr(FieldValues(1)); end; sqlOut:= 'SET NOCOUNT ON' + CRLF + 'DECLARE @nIdDZ INT, @autor NVARCHAR(80), @dt DATETIME' + CRLF; sqlOut:= sqlOut + 'SELECT @autor=SUSER_SNAME()' + CRLF + 'SET @dt=GETDATE()' + CRLF; sqlOut:= sqlOut + 'BEGIN TRAN' + CRLF; lSQL:= 'SELECT REPLACE(k.Objednavka,N''/'',N''''),c.CisloOrg,k.DIC,k.DatPorizeni,k.DatRealizace,k.Autor,'; lSQL:= lSQL + 'SUBSTRING(REPLACE(SUBSTRING(k.Poznamka,1,2000),(CHAR(13) + CHAR(10)),N'' ''),1,2000),k.Cislo,k.Rada FROM ' + tblKObj; lSQL:= lSQL + ' k INNER JOIN ' + tblCOrg + ' c ON (c.Id=k.IDOrganizace) WHERE k.id=' + IntToStr(idKObj); with Helios.OpenSQL(lSQL) do begin cObj:= VarToStr(FieldValues(8)) + VarToStr(FieldValues(7)); cOrg:= VarToStr(FieldValues(1)); sqlOut:= sqlOut + ' INSERT dbo._TabEDI_Doklady (DruhDokladu,DIC_src,CisloOrg_dst,DIC_dst,ParovaciZnak,DatPorizeniDokl'; sqlOut:= sqlOut + ',DatRealizaceDokl,VstupniCena,SazbaDPH,Mena,Poznamka,AutorDokl,Objednavka,GUID) VALUES (1001,N'; sqlOut:= sqlOut + QuotedStr(myDIC) + ',' + VarToStr(FieldValues(1)) + ',N' + QuotedStr(VarToStr(FieldValues(2))); sqlOut:= sqlOut + ',N' + QuotedStr('') + ',CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(3))) + ',104),'; if (VarToStr(FieldValues(4))='') or (VarToStr(FieldValues(4))='30.12.1899') then sqlOut:= sqlOut + 'NULL' else sqlOut:= sqlOut + 'CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(4))) + ',104)'; sqlOut:= sqlOut + ',0,NULL,N' + QuotedStr('CZK') + ','; if (VarToStr(FieldValues(6))='') then sqlOut:= sqlOut + 'NULL' else sqlOut:= sqlOut + 'N' + QuotedStr(VarToStr(FieldValues(6))); sqlOut:= sqlOut + ',N' + QuotedStr(VarToStr(FieldValues(5))) + ',N' + QuotedStr(VarToStr(FieldValues(0))); sqlOut:= sqlOut + ',CONVERT(uniqueidentifier,N' + QuotedStr(sGuid) + ') )' + CRLF; sqlOut:= sqlOut + ' SELECT @nIdDZ=SCOPE_IDENTITY()' + CRLF; lSQL:= 'SELECT k.RegCis,p.Kusy,ROUND(p.Cena/p.Kusy,3),p.Polozka FROM ' + tblPKObj + ' p INNER JOIN ' + tblPrikaz; lSQL:= lSQL + ' pr ON (pr.Id=p.IDPrikaz) INNER JOIN ' + tblKZ + ' k ON (k.Id=pr.IdTabKmen) WHERE p.IDObjednavky=' + IntToStr(idKObj); lSQL:= lSQL + ' ORDER BY p.Polozka'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin sqlOut:= sqlOut + ' INSERT dbo._TabEDI_Polozky (IDDoklad,RegCis,Mnozstvi,JCbezDaniKc,SazbaDPH,Poradi,'; sqlOut:= sqlOut + 'Popis1,Zpracovano) VALUES (@nIdDZ,N' + QuotedStr(VarToStr(FieldValues(0))); sqlOut:= sqlOut + ',' + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]); sqlOut:= sqlOut + ',' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]) + ',21,'; sqlOut:= sqlOut + VarToStr(FieldValues(3)) + ',N' + QuotedStr(cObj + '/' + VarToStr(FieldValues(3))) + ',0)'; sqlOut:= sqlOut + CRLF; Next; end; end; sqlOut:= sqlOut + CRLF + ' INSERT dbo._TabEDI_GUID (GUID,Autor,DatPorizeni) VALUES (CONVERT(uniqueidentifier,N'; sqlOut:= sqlOut + QuotedStr(sGuid) + '),@autor,@dt)' + CRLF; sqlOut:= sqlOut + ' UPDATE dbo._TabEDI_Doklady SET ImportOK=1 WHERE id=@nIdDZ' + CRLF; sqlOut:= sqlOut + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN' + CRLF; end; fName:= GetEnvironmentVariable('USERPROFILE') + '\Desktop\EDI-Koop-' + cOrg + '-' + cObj + '.hql'; fs:= TFileStream.Create(fName, fmCreate); try WriteStringToStream(fs,sqlOut); finally fs.Free; Helios.Info('Soubor uložen jako '#1 + fName + #1); end; end; // !!!!!!!!! nepoužívat - 10.6.2022 bylo přesunuto do unity Globalni.pas !!!!!!!!!! procedure TplgLOVATO.ExportKoopObj_OLD (const Helios: IHelios; idKObj: integer; ZobrTypKooObj: boolean; NadpisTypuKoopObj: string; vlastTbl: string); // upraveno 6.5.2020 const strLov = '40755509 LOVATO spol.s r.o.'; var fld: string; lSQL: string; xls: TXLSReadWriteII5; wSheet1, wSheet2: TXLSWorksheet; poz: IHeQuery; idPolKObj, idx: integer; cObj, dodav, dat, datKO: string; begin 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 if VyberAdresar(fld, 'Umístění exportního souboru') then begin lSQL:= 'SELECT k.Objednavka,c.ICO + N' + QuotedStr(' ') + ' + c.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(FieldValues(0)); dodav:= VarToStr(FieldValues(1)); datKO:= VarToStr(FieldValues(2)); end; cObj:= StringReplace(cObj,'/','',[rfReplaceAll]); xls:= TXLSReadWriteII5.Create(nil); try xls.Version:= xvExcel97; 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 = true 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 = true then begin wSheet2.AsString[5, idx]:= VarToStr(poz.FieldValues(3)); // Typ objednávky - poznámka z kmenové karty end; // konec přidáno 6.5.2020 Inc(idx); poz.Next; end; wSheet2.AutoWidthCols(0, 4); // 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) FROM ' + tblPKObj + ' pko'; // přidáno 6.5.2020 lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IdPrikaz=p.id)'; lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)'; lSQL:= lSQL + ' 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; wSheet1:= xls.Add; 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 = true 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; end; // konec přidáno 6.5.2020 while not(poz.EOF) do begin wSheet1.AsString[0, idx]:= cObj; wSheet1.AsInteger[1, idx]:= StrToInt(VarToStr(poz.FieldValues(0))); // polozka wSheet1.AsString[2, idx]:= VarToStr(poz.FieldValues(1)); // RegCis wSheet1.AsFloat[3, idx]:= StrToFloat(VarToStr(poz.FieldValues(2))); // mnozstvi dat:= VarToStr(poz.FieldValues(3)); if (dat<>'') then wSheet1.AsString[4, idx]:= dat; // přidáno 6.5.2020 if ZobrTypKooObj = true then begin wSheet1.AsString[5, idx]:= VarToStr(poz.FieldValues(4)); // Typ objednávky - poznámka z kmenové karty end; // konec přidáno 6.5.2020 Inc(idx); poz.Next; end; wSheet1.AutoWidthCols(0, 4); end; 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; xls.Sheets[1].Rows.Items[6].FontStyle:= [xfsBold]; xls.SaveToFile(fld + '\Obj-' + cObj + '.xls'); finally xls.Free; end; 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); end; procedure TplgLOVATO.GenerujVydejZEP (const Helios: IHelios); begin end; procedure TplgLOVATO.GenerujVydejMatZPrikazu (const Helios: IHelios; idEvidKoop: integer); const rDoklVydMat = '400'; drVydej = '4'; var pol: IHeQuery; lSQL, podm: string; idKZ, idKZPr, idDZ, idPZ, iPC, idVPr, idPrKVaz: Integer; mnoz, mnozOdv, mnozVPr, mnReal: Extended; sPC, stredVPr, cOrgKoop, idSS, dokl, idObd, cOrg: string; // poradove cislo noveho dokladu vydejky begin idVPr:= 0; with Helios.OpenSQL('SELECT IDPrikaz FROM ' + tblMzdZm + ' WHERE TypMzdy=2 AND id=' + IntToStr(idEvidKoop)) do if (RecordCount>0) then idVPr:= StrToInt(VarToStr(FieldValues(0))); if (idVPr>0) then begin mnozVPr:= 0; stredVPr:= ''; with Helios.OpenSQL('SELECT ISNULL(KmenoveStredisko,' + QuotedStr('') + '),kusy_zive,IDTabKmen FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idVPr)) do if RecordCount=1 then begin stredVPr:= VarToStr(FieldValues(0)); mnozVPr:= StrToFloat(VarToStr(FieldValues(1))); idKZPr:= StrToInt(VarToStr(FieldValues(2))); end; if (stredVPr<>'') and (mnozVPr>0) then begin with Helios.OpenSQL('SELECT ISNULL(Cislo_V,' + QuotedStr('') + ') FROM ' + tblStrom + ' WHERE Cislo=N' + QuotedStr(stredVPr)) do stredVPr:= VarToStr(FieldValues(0)); if (stredVPr<>'') then begin lSQL:= 'SELECT se._CisloOrg FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (s.id=se.id)'; lSQL:= lSQL + ' WHERE s.Cislo=N' + QuotedStr(stredVPr); with Helios.OpenSQL(lSQL) do if RecordCount>0 then cOrg:= VarToStr(FieldValues(0)) else cOrg:= ''; if (cOrg<>'') then begin mnozOdv:= 0; lSQL:= 'SELECT kusy_odv FROM ' + tblMzdZm + ' WHERE TypMzdy=2 AND id=' + IntToStr(idEvidKoop); with Helios.OpenSQL(lSQL) do if RecordCount>0 then mnozOdv:= StrToFloat(VarToStr(FieldValues(0))); lSQL:= 'SELECT nizsi,mnoz_Nevydane,Doklad,id,Mnoz_skut_realizovane FROM ' + tblPrVaz + ' WHERE mnoz_Nevydane>0 AND IDPrikaz=' + IntToStr(idVPr); lSQL:= lSQL + ' ORDER BY DatPorizeni'; pol:= Helios.OpenSQL(lSQL); if (pol.RecordCount>0) and (mnozOdv>0) then begin ReseedTable(Helios,tblDZ); ReseedTable(Helios,tblPZ); podm:= 'Obdobi=' + idObd + ' AND DruhPohybuZbo=' + drVydej + ' AND RadaDokladu=N' + QuotedStr(rDoklVydMat); podm:= podm + ' AND IDSklad=N' + QuotedStr(stredVPr); iPC:= NajdiPrvniVolny(Helios,tblDZ,'PoradoveCislo',drVydej,rDoklVydMat,idObd,podm); lSQL:= 'DECLARE @i INT' + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @i OUT,@sklad=N' + QuotedStr(stredVPr); lSQL:= lSQL + ',@DruhPohybu=' + drVydej + ',@RadaDokladu=N' + QuotedStr(rDoklVydMat) + ',@CisloOrg=' + cOrg + ',@Mena=N'; lSQL:= lSQL + QuotedStr('CZK') + ',@Insert=1' + CRLF + 'SELECT @i'; idDZ:= 0; try with Helios.OpenSQL(lSQL) do if not VarIsNull(FieldValues(0)) then idDZ:= StrToInt(VarToStr(FieldValues(0))); except on E:Exception do Helios.Error(#1'Nelze uložit hlavičku Výdejky materiálu.'#1); end; if (idDZ>0) then begin Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + IntToStr(idDZ)); pol.First; while not(pol.EOF) do begin idSS:= ''; idKZ:= StrToInt(VarToStr(pol.FieldValues(0))); dokl:= VarToStr(pol.FieldValues(2)); idPrKVaz:= StrToInt(VarToStr(pol.FieldValues(3))); mnReal:= StrToFloat(VarToStr(pol.FieldValues(4))); mnoz:= 0; lSQL:= 'SELECT mnozstvi FROM ' + tblKVaz + ' WHERE nizsi=' + IntToStr(idKZ) + ' AND vyssi=' + IntToStr(idKZPr); with Helios.OpenSQL(lSQL) do begin mnoz:= StrToFloat(VarToStr(FieldValues(0))); mnoz:= RoundToEx(mnoz*mnozOdv,-3); mnReal:= mnReal + mnoz; end; if (idKZ>0) then begin lSQL:= 'SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + IntToStr(idKZ) + ' AND IDSklad=N' + QuotedStr(stredVPr); with Helios.OpenSQL(lSQL) do if RecordCount=0 then begin lSQL:= 'INSERT ' + tblSS + ' (IDSklad,IdKmenZbozi) VALUES (N' + QuotedStr(stredVPr) + ',' + IntToStr(idKZ) + ')'; lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; with Helios.OpenSQL(lSQL) do idSS:= VarToStr(FieldValues(0)); end else idSS:= VarToStr(FieldValues(0)); end; lSQL:= 'DECLARE @i INT'; lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @i OUT,@IDDoklad=' + IntToStr(idDZ); lSQL:= lSQL + ',@DruhPohybu=' + drVydej + ',@CisloOrg=' + cOrg + ',@IDZboSklad=' + idSS + ',@Mena=N' + QuotedStr('CZK'); lSQL:= lSQL + ',@JednotkaMeny=1,@Kurz=1'; lSQL:= lSQL + ',@VstupniCena=0,@JCbezDaniKC=0.1,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0,@ZakazanoDPH=0'; lSQL:= lSQL + ',@Selectem=0,@Mnozstvi=' + StringReplace(FloatToStr(mnoz),',','.',[rfReplaceAll]); lSQL:= lSQL + ',@DatPorizeni=NULL,@PovolitDuplicitu=1' + CRLF + 'SELECT @i'; idPZ:= 0; with Helios.OpenSQL(lSQL) do if not VarIsNull(FieldValues(0)) then idPZ:= StrToInt(VarToStr(FieldValues(0))); if (idPZ>0) then try Helios.ExecSQL('UPDATE ' + tblPZ + ' SET DokladPrikazu=' + dokl + ',TypVyrobnihoDokladu=1, IDPrikaz=' + IntToStr(idVPr) + ' WHERE id=' + IntToStr(idPZ)); try Helios.ExecSQL('INSERT ' + tblMzdZmGenPZ + ' (IDMzdy,TypGen,IDPohybu) VALUES (' + IntToStr(idEvidKoop) + ',0,' + IntToStr(idPZ) + ')'); except end; { lSQL:= 'UPDATE ' + tblPrVaz + ' SET '; lSQL:= lSQL + 'Mnoz_skut_realizovane=' + StringReplace(FloatToStr(mnReal),',','.',[rfReplaceAll]); lSQL:= lSQL + 'Mnoz_odv=' + StringReplace(FloatToStr(mnReal),',','.',[rfReplaceAll]); lSQL:= lSQL + ' WHERE id=' + IntToStr(idPrKVaz); Helios.ExecSQL(lSQL); } except on E:Exception do Helios.Error(#1'Nelze uložit položku výdejky.'#1 + CRLF + E.Message + errPlg); end else Helios.Error(#1'Nelze uložit položku výdejky.'#1 + CRLF + lSQL + errPlg); pol.Next; end; Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null,IDPrikaz=' + IntToStr(idVPr) + ' WHERE id=' + IntToStr(idDZ)); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1'); try lSQL:= 'DECLARE @BylaChyba BIT' + CRLF + 'EXEC dbo.hp_Realizuj_Vydej ' + IntToStr(idDZ) + ',NULL,' + IntToStr(Helios.UserId); lSQL:= lSQL + ',0,@BylaChyba OUT' + CRLF + 'SELECT @BylaChyba'; Helios.OpenSQL(lSQL); except on E:Exception do Helios.Error(#1'Nelze realizovat výdejku.'#1 + CRLF + E.Message + errPlg); end; Helios.Info('Hotovo - nová výdejka na skladě ' + stredVPr + ', č.' + rDoklVydMat + ' : ' + IntToStr(iPC)); end; end else Helios.Error(#1'Skladu není přiřazena organizace.'#1 + errPlg); end else Helios.Error(#1'Skladu není přiřazena organizace.'#1 + errPlg); end else Helios.Error(#1'Kmenové středisko Výrobního příkazu nemá určen sklad materiálu.'#1); end else Helios.Error(#1'Na Výrobním příkazu není určeno Kmenové středisko.'#1 + errPlg); end else Helios.Error(#1'Operace není Kooperační, resp. nebyl identifikován Výrobní příkaz.'#1 + errPlg); end; procedure TplgLOVATO.OdpovedPPL (const Helios: IHelios); begin end; procedure TplgLOVATO.ImportNesplObj (const Helios: IHelios); var idx: integer; cObj, rc, sTmp, idDZ, idSS, idKZ, idPZ: string; xls: TXLSReadWriteII5; fs: TFileStream; wSheet: TXLSWorksheet; dat1, dat2: TDate; poz: integer; Mnoz, JCena, kurz: Extended; sql: string; begin sql:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT NULL, Poznamka NVARCHAR(255) NOT NULL )'; Helios.ExecSQL(sql); if OtevriSouborXLS(fName,'') then begin xls:= TXLSReadWriteII5.Create(nil); try wSheet:= xls.Add; if (wSheet.AsString[0,0]<>'CISOBJ') or (wSheet.AsString[7,0]<>'ZBYVYR') then raise Exception.Create('Soubor s nesplněnými objednávkami není v požadovaném formátu.') else if (wSheet.LastRow>0) then begin Helios.ExecSQL('DECLARE @max INT' + CRLF + 'SELECT @max=MAX(id) FROM ' + tblDZ + CRLF + 'DBCC CHECKIDENT(TabDokladyZbozi,reseed,@max)'); Helios.ExecSQL('DECLARE @max INT' + CRLF + 'SELECT @max=MAX(id) FROM ' + tblPZ + CRLF + 'DBCC CHECKIDENT(TabPohybyZbozi,reseed,@max)'); sql:= 'DECLARE @i INT' + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @i OUT,@sklad=N' + QuotedStr(Helios.Sklad); sql:= sql + ',@DruhPohybu=9,@RadaDokladu=N' + QuotedStr(rImpNesplObj) + ',@CisloOrg=1,@Mena=N'; sql:= sql + QuotedStr('EUR') + ',@Insert=1' + CRLF + 'SELECT @i'; idDZ:= ''; with Helios.OpenSQL(sql) do idDZ:= VarToStr(FieldValues(0)); if (idDZ<>'') then begin with Helios.OpenSQL('SELECT Kurz FROM ' + tblDZ + ' WHERE id=' + idDZ) do kurz:= StrToFloat(VarToStr(FieldValues(0))); idx:= 1; cObj:= Trim(wSheet.AsString[0, idx]); while (cObj<>'') do begin poz:= wSheet.AsInteger[1, idx]; rc:= wSheet.AsString[3, idx]; rc:= StringReplace(rc,' ','',[rfReplaceAll]); rc:= StringReplace(rc,'.','',[rfReplaceAll]); rc:= StringReplace(rc,'/','',[rfReplaceAll]); sTmp:= wSheet.AsString[2, idx]; if Pos(' ',sTmp)>0 then begin sTmp:= StringReplace(sTmp,' ','',[rfReplaceAll]); sTmp:= StringReplace(sTmp,'i','',[rfReplaceAll]); dat1:= StrToDate(sTmp); // datum objednavky end else dat1:= wSheet.AsDateTime[2, idx]; // datum objednavky dat2:= wSheet.AsDateTime[8, idx]; // pozadovane datum mnoz:= wSheet.AsFloat[7, idx]; JCena:= wSheet.AsFloat[10, idx]; idSS:= ''; idKZ:= ''; sql:= 'SELECT ss.id,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IDKmenZbozi=kz.id)'; sql:= sql + ' WHERE ss.IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND kz.RegCis=N' + QuotedStr(rc) + ' AND kz.SkupZbo LIKE N''V%'''; with Helios.OpenSQL(sql) do begin idSS:= VarToStr(FieldValues(0)); idKZ:= VarToStr(FieldValues(1)); end; idPZ:= ''; if idSS<>'' then begin sql:= 'DECLARE @i INT, @d DATETIME' + CRLF + 'SET @d=CONVERT(datetime,' + QuotedStr(DateToStr(dat1)) + ',104)'; sql:= sql + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @i OUT,@IDDoklad=' + idDZ; sql:= sql + ',@DruhPohybu=9,@CisloOrg=1,@IDZboSklad=' + idSS + ',@Mena=N' + QuotedStr('EUR'); sql:= sql + ',@JednotkaMeny=1,@Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll]); sql:= sql + ',@VstupniCena=4,@JCbezDaniKC=0,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0,@ZakazanoDPH=1'; sql:= sql + ',@Selectem=0,@Mnozstvi=' + StringReplace(FloatToStr(mnoz),',','.',[rfReplaceAll]); sql:= sql + ',@DatPorizeni=@d,@PovolitDuplicitu=1' + CRLF + 'SELECT @i'; with Helios.OpenSQL(sql) do idPZ:= VarToStr(FieldValues(0)); if idPZ<>'' then begin sql:= 'UPDATE ' + tblPZ + ' SET JCbezDaniKc=' + StringReplace(FloatToStr(JCena*kurz),',','.',[rfReplaceAll]); sql:= sql + ',JCbezDaniKcPoS=' + StringReplace(FloatToStr(JCena*kurz),',','.',[rfReplaceAll]); sql:= sql + ',CCbezDaniKc=' + StringReplace(FloatToStr(mnoz*JCena*kurz),',','.',[rfReplaceAll]); sql:= sql + ',JCbezDaniValPoS=' + StringReplace(FloatToStr(JCena),',','.',[rfReplaceAll]); sql:= sql + ',JCbezDaniVal=' + StringReplace(FloatToStr(JCena),',','.',[rfReplaceAll]); sql:= sql + ',CCbezDaniVal=' + StringReplace(FloatToStr(mnoz*JCena),',','.',[rfReplaceAll]); sql:= sql + ' WHERE id=' + idPZ + CRLF; sql:= sql + 'UPDATE ' + tblPZ + ' SET PozadDatDod=CONVERT(datetime,' + QuotedStr(DateToStr(dat2)) + ',104)'; sql:= sql + ',NazevSozNa1=N' + QuotedStr(cObj) + ',NazevSozNa2=N'; sql:= sql + QuotedStr(StringOfChar('0', 4-Length(IntToStr(poz))) + IntToStr(poz)); sql:= sql + ' WHERE id=' + idPZ; Helios.ExecSQL(sql); end; end else UlozChybu(Helios,'Nenalezena skladová karta: ' + rc,nil); Inc(idx); cObj:= Trim(wSheet.AsString[0, idx]); end; Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + idDZ); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + idDZ + ',@AktualizaceSlev=1'); Helios.Refresh(true); try with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do if RecordCount>0 then Helios.OpenBrowse(541,''); finally end; end; end; finally fs.Free; end; end; end; { // generuj kooperacni objednavku procedure TplgLOVATO.GenerujKoopObjednavku(const Helios: IHelios; idVP: Integer); var pp: IHeQuery; sql: WideString; idKoopObj,idOrg,idZam: integer; cVPrik,radaKoop,cKoopObj,termOdesli: ShortString; dat1: TDateTime; begin cVPrik:= ''; dat1:= Now; with Helios.OpenSQL('SELECT RadaPrikaz,CONVERT(datetime,Plan_zadani,104) FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idVP)) do if RecordCount>0 then begin cVPrik:= VarToStr(FieldValues(0)); dat1:= StrToDateTime(VarToStr(FieldValues(1))); end; radaKoop:= '101'; idOrg:= 0; idZam:= 0; pp:= Helios.OpenSQL('SELECT * FROM ' + tblPrPost + ' WHERE idPrikaz=' + IntToStr(idVP)); if pp.RecordCount>0 then begin cKoopObj:= '1'; sql:= 'SELECT MAX(Cislo)+1 FROM ' + tblKoopObj + ' WHERE Rada=N' + QuotedStr(radaKoop); with Helios.OpenSQL(sql) do if RecordCount>0 then cKoopObj:= VarToStr(FieldValues(0)); cKoopObj:= StringOfChar('0',6-Length(cKoopObj)) + cKoopObj; // zadat na 6 cislic sql:= 'INSERT INTO dbo.TabKoopObj (Rada,Cislo,IDOrganizace,IDZamestnance,TerminOdeslani,PozadTerDod) '; sql:= sql + 'VALUES (N' + QuotedStr(radaKoop) + ',' + cKoopObj + ',' + IntToStr(idOrg) + ',' + IntToStr(idZam) + ','; sql:= sql + 'CONVERT(datetime,' + QuotedStr(DateTimeToStr(dat1)) + ',104),'; sql:= sql + 'CONVERT(datetime,' + QuotedStr(DateTimeToStr(dat1)) + ',104) )' + CRLF; sql:= sql + 'SELECT SCOPE_IDENTITY()'; idKoopObj:= 0; with Helios.OpenSQL(sql) do idKoopObj:= StrToInt(VarToStr(FieldValues(0))); if idKoopObj>0 then begin pp.First; while not(pp.EOF) do begin pp.Next; end; end else Helios.Error(#1'Nepodařilo se uložit Kooperační objednávku' + CRLF + 'pro výrobní příkaz: ' + cVPrik + #1); end; end; } // import polozek objednavky z IT (pokud je v vlastTbl<>'' pak import do jiz existujiciho dokladu procedure TplgLOVATO.ImportEP (const Helios: IHelios; const idDZx: integer; ExpP: boolean); var sql, fName, errMsg: string; testOK, kontrolaCen: Boolean; tStr, rCeniky, cObj, regCis, wCond, cisDZ, skladEP, cOrg, mena, boxik, hmotJg: string; idSS, jCenaSS, sazba, mj, descript, cenik: string; pozice: integer; qty, cena, per, kurz, ccena: Extended; datum: TDateTime; iLoop, iSheet, iX, iY, iPos: integer; pol, obj: IHeQuery; idDZ, idDZShift, idPZ, idKZ, cDokl, idUmist: Integer; pocRadek, idCen, idPolCen, maxRegCis: integer; sCen: string; rDokl: string[3]; tmpTab, szPodm: string; chybka,newKarta: boolean; xls: TXLSReadWriteII5; wSheet1, wSheet2: TXLSWorkSheet; begin sql:= 'IF OBJECT_ID(N''tempDB..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT NULL, Poznamka NVARCHAR(255) NOT NULL )'; Helios.ExecSQL(sql); chybka:= false; if (idDZx>0) then begin with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE Realizovano=1 AND id=' + IntToStr(idDZx)) do if (RecordCount>0) then begin raise Exception.Create('Položky nelze vložit do REALIZOVANÉHO dokladu.'); chybka:= true; end; cOrg:= '0'; if not VarIsNull(Helios.QueryEdit.FieldByNameValues('CisloOrg')) then cOrg:= VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg')); idCen:= 0; sCen:= ''; kontrolaCen:= false; sql:= 'SELECT coe.id FROM ' + tblCOrgE + ' coe INNER JOIN ' + tblCOrg + ' co ON (coe.id=co.id) WHERE'; sql:= sql + ' coe._KontrolaCenPrijem=1 AND co.CisloOrg=' + cOrg; with Helios.OpenSQL(sql) do if (RecordCount>0) then // pri prijmu kontrolovat cenu podle ceniku (Nabidkove sestavy) begin // hleda pokud k dane firme existuje Nabidkova sestava v rade "Ceniky pro kontrolu" pro dany rok podle DatPorizeni // pokud existuje vic Nabidek, bere prvni se razenim podle DatPorizeni DESC datum:= Now; if not VarIsNull(Helios.QueryEdit.FieldByNameValues('DatPorizeni')) then datum:= StrToDateTime(VarToStr(Helios.QueryEdit.FieldByNameValues('DatPorizeni'))); if (ExpP) then begin if (Helios.Sklad='200') then rCeniky:= '210' else begin sql:= 'DruhPohybuZbo=11'; if Helios.Prenos(bidDDZ, 'RadaDokladu', oVar1, sql, 'Řada ceníku podle které bude provedena kontrola ceny', true) then rCeniky:= VarToStr(oVar1) else rCeniky:= '210'; end; sql:= 'SELECT TOP(1) id, ParovaciZnak FROM ' + tblDZ + ' WHERE DruhPohybuZbo=11 AND NabidkaCenik=1 AND RadaDokladu=N'; sql:= sql + QuotedStr(rCeniky) + ' AND CisloOrg=' + cOrg + ' AND GETDATE() BETWEEN ISNULL(Splatnost, CONVERT(datetime,N'; sql:= sql + QuotedStr('1.1.2015') + ',104)) AND ISNULL(DatUhrady, CONVERT(datetime,N' + QuotedStr('31.12.2050') + ',104)) ORDER BY DatPorizeni DESC'; with Helios.OpenSQL(sql) do if (RecordCount>0) then begin idCen:= StrToInt(VarToStr(FieldValues(0))); tStr:= VarToStr(FieldValues(1)); sCen:= tStr; // rCeniky + StringOfChar('0',6 - Length(tStr)) + tStr; kontrolaCen:= true; end; { tStr:= ''; if not VarIsNull(Helios.QueryEdit.FieldByNameValues('Nabidka')) then tStr:= VarToStr(Helios.QueryEdit.FieldByNameValues('Nabidka')); if (tStr<>'') then with Helios.OpenSQL('SELECT ParovaciZnak FROM ' + tblDZ + ' WHERE id=' + tStr) do if RecordCount>0 then tStr:= VarToStr(FieldValues(0)); if (sCen<>tStr) and (idCen>0) then begin raise Exception.Create('Není zadán Ceník, podle kterého se mají kontrolovat ceny.'); chybka:= true; end; } end; end; end; if chybka then Exit; chybka:= false; tmpTab:= ''; if ExpP then tmpTab:= '[dbo].[_TabImportEP]' else tmpTab:= '[dbo].[_TabImportPckLst]'; // tmpTab:= '#' + tmpTab; cOrg:= orgLovatoIT; mena:= orgLovatoITmena; if (idDZx>0) then begin cOrg:= VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg')); if (cOrg='') then cOrg:= orgLovatoIT; mena:= VarToStr(Helios.QueryEdit.FieldByNameValues('Mena')); if (mena='') then mena:= orgLovatoITmena; rDokl:= VarToStr(Helios.QueryEdit.FieldByNameValues('RadaDokladu')); { with Helios.OpenSQL('SELECT Mena,CisloOrg,RadaDokladu FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZx)) do if RecordCount>0 then begin mena:= VarToStr(FieldValues(0)); cOrg:= VarToStr(FieldValues(1)); rDokl:= VarToStr(FieldValues(2)); end; } end; skladEP:= Helios.Sklad; if OtevriSouborXLS(fName,'') then begin Screen.Cursor:= crHourGlass; xls:= TXLSReadWriteII5.Create(nil); try xls.Filename:= fName; xls.Read; if ExpP then begin if (xls.Count<>1) then begin Helios.Error('Soubor s objednávkou ORDER má mít jen 1 list !'); xls.Free; Exit; end; end else begin if (xls.Count<>2) then begin Helios.Error('Soubor s dodávkou PACKING LIST má mít 2 listy !'); xls.Free; Exit; end; end; testOK:= true; if ExpP then begin // format pro objednavku (order) iSheet:= 0; wSheet1:= xls.Sheets[0]; tStr:= LowerCase(wSheet1.AsString[0,0]); if (Pos('purchase',tStr)=0) then testOK:= false; tStr:= LowerCase(wSheet1.AsString[2,0]); if (Pos('code',tStr)=0) then testOK:= false; tStr:= LowerCase(wSheet1.AsString[4,0]); if (Pos('quantity',tStr)=0) then testOK:= false; tStr:= LowerCase(wSheet1.AsString[5,0]); if (Pos('price',tStr)=0) then testOK:= false end else begin // format pro prijemku materialu (Packinglist) iSheet:= 1; wSheet1:= xls.Sheets[1]; wSheet2:= xls.Sheets[0]; // iSheet:= xls.Sheets.Count-1; tStr:= LowerCase(wSheet1.AsString[0,6]); if (Pos('codice',tStr)=0) then testOK:= false; tStr:= LowerCase(wSheet1.AsString[5,6]); if (Pos('nr',tStr)=0) then testOK:= false; tStr:= LowerCase(wSheet1.AsString[7,6]); if (Pos('totale',tStr)=0) then testOK:= false; end; if testOK then begin pocRadek:= 0; if ExpP then begin if not(VarIsNull(wSheet1.AsVariant[0, 1+pocRadek])) then sql:= wSheet1.AsString[0, 1+pocRadek] else sql:= '' end else begin if not(VarIsNull(wSheet1.AsVariant[0, 7+pocRadek])) then sql:= wSheet1.AsString[0, 7+pocRadek] else sql:= ''; end; while (sql<>'') do begin Inc(pocRadek); if ExpP then begin if not(VarIsNull(wSheet1.AsVariant[0, 1+pocRadek])) then sql:= wSheet1.AsString[0, 1+pocRadek] else sql:= '' end else begin if not(VarIsNull(wSheet1.AsVariant[0, 7+pocRadek])) then sql:= wSheet1.AsString[0, 7+pocRadek] else sql:= ''; end; end; if (pocRadek>0) then begin if (idDZx=0) then begin sql:= 'DruhPohybuZbo=9'; if not(ExpP) then sql:= 'DruhPohybuZbo=0'; // iSheet if Helios.Prenos(bidDDZ,'RadaDokladu',oVar1,sql,'Vyberte řadu do které bude vystaven doklad',true) then rDokl:= VarToStr(oVar1) else begin if Helios.YesNo('Nebyla vybrána řada dokladů. Chcete ukončit import ?',false) then begin xls.Free; Exit; end; end; end; maxRegCis:= 15; with Helios.OpenSQL('SELECT TOP(1) DelkaRegCislaZbozi FROM dbo.TabHGlob') do if (RecordCount>0) then maxRegCis:= StrToInt(VarToStr(FieldValues(0))); // sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..' + tmpTab) + ',' + QuotedStr('U') + ') IS NOT NULL '; sql:= 'IF OBJECT_ID(N' + QuotedStr(tmpTab) + ',' + QuotedStr('U') + ') IS NOT NULL '; sql:= sql + 'DROP TABLE ' + tmpTab + CRLF + 'CREATE TABLE ' + tmpTab + '('; sql:= sql + 'cObj NVARCHAR(12), pozice INT, regCis NVARCHAR(' + IntToStr(maxRegCis) + ') NOT NULL,'; sql:= sql + 'mnozstvi NUMERIC(19,6) NOT NULL, cena NUMERIC(19,6), per NUMERIC(19,6),'; sql:= sql + 'datDod DATETIME, popis NVARCHAR(100), boxik NVARCHAR(50), hmotJg NUMERIC(10,2) DEFAULT 0.0)'; Helios.ExecSQL(sql); tStr:= ''; // import polozek z XLS do pomocne tabulky for iLoop:=1 to pocRadek do begin regCis:= ''; qty:= 0; boxik:= ''; if ExpP then // je to objednavka z IT ? begin // ano cObj:= Trim(wSheet1.AsString[0, iLoop]); Pozice:= wSheet1.AsInteger[1, iLoop]; regCis:= UpperCase(Trim(wSheet1.AsString[2, iLoop])); descript:= wSheet1.AsString[3, iLoop]; qty:= wSheet1.AsFloat[4, iLoop]; cena:= wSheet1.AsFloat[5, iLoop]; per:= wSheet1.AsFloat[6, iLoop]; datum:= wSheet1.AsDateTime[7, iLoop]; hmotJg:= '0'; end else begin // ne, je to Packinglist (prijemka) qty:= 0; try if (VarIsNull(wSheet1.AsVariant[5, iLoop+6])) then Break; if not(VarIsNull(wSheet1.AsVariant[5, iLoop+6])) then qty:= wSheet1.AsFloat[5, iLoop+6]; except end; if (qty>0) then begin cObj:= Trim(wSheet1.AsString[1, iLoop+6]); // celni nomenklatura pozice:= 0; regCis:= Trim(wSheet1.AsString[0, iLoop+6]); if not(VarIsNull(wSheet1.AsVariant[4, iLoop])) then begin iX:= 0; // nahrazuje VLOOKUP (SVYHLEDAT) - kouka na odkaz do 1.listu sql:= wSheet2.AsString[0, iX]; while (sql<>'') do begin if (sql=regCis) then begin if not(VarIsNull(wSheet2.AsVariant[1, iX])) then boxik:= wSheet2.AsString[1, iX] else boxik:= ''; Break; end; Inc(iX); if not(VarIsNull(wSheet2.AsVariant[0, iX])) then sql:= wSheet2.AsString[0, iX] else sql:= ''; end; end; if not(VarIsNull(wSheet1.AsVariant[4, iLoop+6])) then boxik:= wSheet1.AsString[4, iLoop+6]; if not(VarIsNull(wSheet1.AsVariant[3, iLoop+6])) then descript:= wSheet1.AsString[3, iLoop+6]; per:= 1; if (VarIsNull(wSheet1.AsVariant[6, iLoop+6])) then begin UlozChybu(Helios, 'Nelze uložit položku z XLS: obj.č. ' + regCis + ' (' + FloatToStr(qty) + ' ks, ' + DateToStr(datum) + ') - není zadána vstupní cena.', nil); qty:= 0; end else cena:= wSheet1.AsFloat[6, iLoop+6]; hmotJg:= '0'; if not(VarIsNull(wSheet1.AsVariant[8, iLoop+6])) then hmotJg:= wSheet1.AsString[8, iLoop+6]; hmotJg:= StringReplace(hmotJg,' ','',[rfReplaceAll]); datum:= Now; end; end; if (qty<>0) then begin sql:= 'INSERT ' + tmpTab + ' (cObj, Pozice, regCis, mnozstvi, cena, per, datDod, popis, boxik, hmotJg)'; sql:= sql + ' SELECT N' + QuotedStr(cObj) + ',' + IntToStr(pozice); sql:= sql + ',N' + QuotedStr(regCis) + ',' + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]); sql:= sql + ',' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ','; sql:= sql + StringReplace(FloatToStr(per),',','.',[rfReplaceAll]); sql:= sql + ',CONVERT(datetime,' + QuotedStr(DateToStr(datum)) + ',104),'; sql:= sql + 'N' + QuotedStr(descript) + ',N' + QuotedStr(boxik) + ', ' + StringReplace(hmotJg,',','.',[rfReplaceAll]); try if (sql<>'') then Helios.ExecSQL(sql); except on E:Exception do UlozChybu(Helios, 'Nelze uložit požadavek XLS: obj.č. ' + regCis + ' (' + FloatToStr(qty) + ', ' + DateToStr(datum) + ')', E); end; end; end; xls.Free; end end else // test OK begin Helios.Error(#1'Importovaný soubor není v definovaném formátu.'#1); Exit; end; except on E:Exception do begin xls.Free; Helios.Error(#1'Chyba při importu XLS souboru (ExpP/Pckg): '#1 + E.Message + CRLF + errMsg); Exit; end; end; sql:= 'IF OBJECT_ID(N''dbo.ep_HDC_PZ_ImportEP'', ''P'') IS NOT NULL EXEC dbo.ep_HDC_PZ_ImportEP @IDDoklad=' + IfThen(idDZx>0, idDZx.ToString, 'NULL') + ', @jeExpPr=' + IfThen(ExpP, '1', '0') + ', @radaDokl=N' + IfThen(rDokl='', 'ULL', QuotedStr(rDokl)) + ', @idDokladCenik=' + idCen.ToString; try try Helios.ExecSQL (sql); except end; finally end; // pro PL (dodaci list) najdi neexistujici polozky, pripadne je zaloz if not(ExpP) then begin sql:= 'SELECT LTRIM(RTRIM(regCis)), popis, cObj FROM ' + tmpTab + ' WHERE LTRIM(RTRIM(regCis)) NOT IN (SELECT LTRIM(RTRIM(RegCis)) FROM ' + tblKZ; sql:= sql + ' WHERE SkupZbo=N' + QuotedStr('MAT') + ')'; with Helios.OpenSQL(sql) do if (RecordCount>0) then begin First; while not(EOF) do begin sql:= 'INSERT ' + tblKZ + ' (SkupZbo,RegCis,Nazev2,DruhSkladu,MJEvidence,CelniNomenklatura) VALUES (N' + QuotedStr('MAT'); sql:= sql + ',N' + QuotedStr(LeftStr(VarToStr(FieldValues(0)),maxRegCis)) + ',N'; sql:= sql + QuotedStr(LeftStr(VarToStr(FieldValues(1)),100)) + ',1,N' + QuotedStr('ks'); sql:= sql + ',N' + QuotedStr(VarToStr(FieldValues(2))) + ')'; sql:= sql + CRLF + 'INSERT #TabExtKom (Poznamka) SELECT N'; sql:= sql + QuotedStr('Založena nová karta: MAT ' + VarToStr(FieldValues(0))); try Helios.ExecSQL(sql); except on E:Exception do UlozChybu(Helios,'Nelze založit novou kartu: MAT ' + VarToStr(FieldValues(0)),E); end; Next; end; end; end; // konec importu XLS do pomocne tabulky // test karta je pro vyrobu sql:= 'SELECT RegCis,Popis FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz'; sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze'; if expP = false then sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0) AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')' else sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0 OR sz.SkupZbo not LIKE N' + QuotedStr('V%') + ') AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')'; // upraveno pol:= Helios.OpenSQL(sql); if (pol.RecordCount>0) then begin pol.First; while not(pol.EOF) do begin regCis:= VarToStr(pol.FieldValues(0)); tStr:= VarToStr(pol.FieldValues(1)); UlozChybu(Helios,'Karta nepatří výrobě nebo je blokována, nebyla importována: ' + regCis + ' - ' + tStr ,nil); pol.Next; end; end; // test karta existuje sql:= 'SELECT RegCis,Popis FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz'; sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze'; if expP = false then sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0) AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')' else sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0 OR sz.SkupZbo not LIKE N' + QuotedStr('V%') + ') AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')'; // upraveno pol:= Helios.OpenSQL(sql); if (pol.RecordCount>0) then begin pol.First; while not(pol.EOF) do begin regCis:= VarToStr(pol.FieldValues(0)); tStr:= VarToStr(pol.FieldValues(1)); UlozChybu(Helios,'Karta nepatří výrobě nebo je blokována, nebyla importována: ' + regCis + ' - ' + tStr ,nil); pol.Next; end; end; // test v PackingListu karta je material if not(ExpP) then begin sql:= 'SELECT RegCis,Popis,Mnozstvi FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz'; sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze'; sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=1 AND kz.SkupZbo<>N' + QuotedStr(szNovyImportMat) + ')'; pol:= Helios.OpenSQL(sql); if (pol.RecordCount>0) then begin pol.First; while not(pol.EOF) do begin regCis:= VarToStr(pol.FieldValues(0)); tStr:= VarToStr(pol.FieldValues(1)); tStr:= tStr + ' (množ. ' + VarToStr(pol.FieldValues(2)) + ' )'; UlozChybu(Helios,'Pozor, karta nebyla importována, není materiál (skupina MAT): ' + regCis + ' - ' + tStr ,nil); pol.Next; end; end; end; // kontrola na existenci karet sql:= 'SELECT RegCis, Popis FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz'; sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze'; //sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=1)'; sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=1 '; // upraveno 7.9.2018 // if ExpP = true then sql := sql + ' AND _JeProImportObjednavkyZItalie = 1'; // přidáno 7.9.2018 if ExpP = true then sql := sql + ' AND sz.SkupZbo LIKE N' + QuotedStr('V%'); // přidáno 7.9.2018 verze skupina na V sql := sql + ')'; // přidáno 7.9.2018 //Helios.Info(sql); pol:= Helios.OpenSQL(sql); //helios.Info((pol.RecordCount.ToString)); if (pol.RecordCount>0) then begin sql:= ''; pol.First; while not(pol.EOF) do begin newKarta:= false; regCis:= VarToStr(pol.FieldValues(0)); sql:= 'SELECT id FROM ' + tblKZ + ' WHERE UPPER(SkupZbo)=N'; if ExpP then tStr:= szNovyImportExpP else tStr:= 'MAT'; sql:= sql + QuotedStr(tStr); sql:= sql + ' AND UPPER(RegCis)=N' + QuotedStr(regCis); with Helios.OpenSQL(sql) do if (RecordCount=0) then begin sql:= 'INSERT ' + tblKZ + ' (SkupZbo, RegCis, Nazev2, DruhSkladu, MJEvidence, Material, Dilec) VALUES (N' + QuotedStr(tStr); sql:= sql + ',N' + QuotedStr(regCis) + ',N' + QuotedStr(VarToStr(pol.FieldValues(1))); sql:= sql + ',1,N' + QuotedStr('ks') + ','; if ExpP then sql:= sql + '0,1' else sql:= sql + '1,0'; sql:= sql + ')' + CRLF + 'SELECT SCOPE_IDENTITY()'; // Helios.Info(sql + CRLF + tstr); try if (tStr<>szNovyImportExpP) and (tStr<>szNovyImportMat) then with Helios.OpenSQL(sql) do if (RecordCount>0) then begin tStr:= VarToStr(FieldValues(0)); Helios.ExecSQL('UPDATE ' + tblKZ + ' SET Blokovano=1 WHERE id=' + tStr); UlozChybu(Helios,'Nová karta (bude blokovaná): ' + tStr + '-' + regCis ,nil); newKarta:= true; end; except on E:Exception do UlozChybu(Helios,'Nelze založit novou kartu ' + regCis + ' : SQL ' + sql, E); end; end; pol.Next; end; end; { tStr:= ''; sql:= 'SELECT RegCis FROM ' + tblKZ + ' WHERE Blokovano=1 AND SkupZbo=N' + QuotedStr('MAT'); sql:= sql + ' AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tmpTab + ')'; with Helios.OpenSQL(sql) do if RecordCount>0 then begin First; while not(EOF) do begin UlozChybu(Helios,'Karta je označena jako ARCHIVNÍ a NEBUDE importována: ' + VarHodnota(FieldValues(0),''), nil);; Next; end; end; } // pokud je to DL, aktualizuj hmotnosti if not(ExpP) then begin sql:= 'UPDATE kz SET kz.Hmotnost=ROUND((t.hmotJg/1000),6) FROM ' + tblKZ + ' kz INNER JOIN ' + tmpTab + ' t ON (t.regCis=kz.RegCis)'; sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (sz.SkupZbo=kz.SkupZbo) INNER JOIN ' + tblSZe; sql:= sql + ' sze ON (sze.Id=sz.Id) WHERE sze._JeVyroba=1'; Helios.ExecSQL(sql); end; sql:= 'SELECT * FROM ' + tmpTab; // + ' WHERE RegCis NOT IN (SELECT RegCis FROM ' + tblKZ + ' WHERE Blokovano=1)'; // sql:= sql + ' AND cObj=N' + QuotedStr(cObj); sql:= sql + ' ORDER BY pozice'; pol:= Helios.OpenSQL(sql); if (pol.RecordCount>0) then begin ReseedTable(Helios,tblDZ); ReseedTable(Helios,tblPZ); ReseedTable(Helios,tblSS); // ReseedTable(Helios,tblNC); ReseedTable(Helios,tblJC); { if idDZx=0 then begin idDZshift:= 0; // posunuti cisla brane z nastaveni TabDruhDokZboDef sql:= 'SELECT dzd.PosledniPC FROM [dbo].[TabDruhDokZboDef] dzd INNER JOIN [dbo].[TabDruhDokZbo] dz'; sql:= sql + ' ON (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(aktObd); sql:= sql + ' AND dz.DruhPohybuZbo=9 AND dz.RadaDokladu=N' + QuotedStr(rDokl); with Helios.OpenSQL(sql) do if not VarIsNull(FieldValues(0)) then if not TryStrToInt(VarToStr(FieldValues(0)),idDZshift) then idDZshift:= 0; wCond:= 'Obdobi=' + IntToStr(aktObd) + ' AND IdSklad=N' + QuotedStr(skladEP); wCond:= wCond + ' AND DruhPohybuZbo=9 AND RadaDokladu=N' + QuotedStr(rDokl); sql:= 'EXEC dbo.hp_NajdiPrvniVolny N' + QuotedStr(tblDZ) + ',N' + QuotedStr('PoradoveCislo'); sql:= sql + ',' + IntToStr(idDZshift) + ',99999999,N' + QuotedStr(wCond) + ',0,1'; idDZ:= 0; with Helios.OpenSQL(sql) do if not VarIsNull(FieldValues(0)) then if not TryStrToInt(VarToStr(FieldValues(0)),idDZ) then idDZ:= 0; if (idDZ=0) or (idDZ=idDZshift) then idDZ:= idDZshift + 1; end; } cisDZ:= IntToStr(idDZ); mena:= UpperCase(mena); if (idDZx=0) then begin sql:= 'DECLARE @Ident INT'+ CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @Ident OUT,@Sklad=N'; sql:= sql + QuotedStr(skladEP)+',@DruhPohybu=9,@RadaDokladu=N' + QuotedStr(rDokl)+',@Insert=1,'; sql:= sql + '@PC=null,@Mena=N' + QuotedStr(mena) + ',@CisloOrg='; // sql:= sql + '@PC=' + cisDZ + ',@Mena=N' + QuotedStr(mena) + ',@CisloOrg='; sql:= sql + cOrg + ',@DatumPorizeni=NULL' + CRLF + 'SELECT @Ident'; idDZ:= 0; try with Helios.OpenSQL(sql) do if (RecordCount>0) then if not VarIsNull(FieldValues(0)) then idDZ:= StrToInt(VarToStr(FieldValues(0))); // zjisti ID vytvorene prijemky except on E:Exception do Helios.Error(#1'Nelze uložit hlavičku Exp.příkazu (objednávky) !'#1 + CRLF + E.Message + CRLF + sql); end; end else begin idDZ:= idDZx; cisDZ:= IntToStr(idDZ); end; // pokud je vytvorena hlavicka dokladu if (idDZ>0) then begin // zmen pripadnou vstupni cenu kurz:= 1; with Helios.OpenSQL('SELECT Kurz FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ)) do kurz:= StrToFloat(VarToStr(FieldValues(0))); { if (mena<>'CZK') then Helios.ExecSQL('UPDATE ' + tblDZ + ' SET VstupniCena=4 WHERE id=' + IntToStr(idDZ)); // uprav defaultni DPH na 0 (podle platnosti v danem obdobi) sql:= 'SELECT d.Sazba FROM ' + tblDPHDef + ' def INNER JOIN ' + tblDPH + ' d ON (def.IdDPH=d.id AND d.Sazba=0)'; sql:= sql + ' WHERE def.IdObdobi=' + IntToStR(aktObd) + ' AND Blokovano=0 AND Platnost=0'; with Helios.OpenSQL(sql) do if RecordCount>0 then begin tStr:= VarToStr(FieldValues(0)); if tStr='' then tStr:= '0'; sql:= 'UPDATE ' + tblDZ + ' SET SazbaDPH=' + StringReplace(tStr,',','.',[rfReplaceAll]); sql:= sql + ' WHERE id=' + IntToStr(idDZ); try Helios.ExecSQL(sql); except on E:Exception do Helios.Error('U dokladu (ExpP) nelze změnit Sazbu DPH.'); end; end; } // import polozek na doklad pol.First; while not(pol.EOF) do begin idKZ:= 0; tStr:= ''; boxik:= ''; regCis:= VarToStr(pol.FieldByNameValues('regCis')); sql:= 'SELECT kz.id, sz.SkupZbo, kz.RegCis, kz.Nazev1, kz.SKP, kz.MJEvidence, kz.SazbaDPHVstup, '; sql:= sql + 'kz.CelniNomenklatura, kze._UmisteniVyroba, kze._UmisteniPrijem FROM ' + tblKZ + ' kz INNER JOIN '; sql:= sql + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze ON (sz.id=sze.id)'; sql:= sql + ' LEFT JOIN ' + tblKZe + ' kze ON (kz.id=kze.id)' ; sql:= sql + ' WHERE kz.Blokovano=0 AND kz.RegCis=N' + QuotedStr(regCis) + ' AND sze._JeVyroba=1'; // if (ExpP = True) then sql := sql + ' AND sze._JeProImportObjednavkyZItalie=1'; // přidáno 7.9.2018 if (ExpP = True) then sql := sql + ' AND sz.SkupZbo LIKE N' + QuotedStr('V%'); // přidáno 7.9.2018 szPodm:= ' AND sz.SkupZbo NOT LIKE N' + QuotedStr('%00'); with Helios.OpenSQL(sql + szPodm) do if (RecordCount>0) then // regulerni karta idKZ:= StrToInt(VarToStr(FieldValues(0))); if (idKZ=0) then with Helios.OpenSQL(sql) do if (RecordCount>0) then idKZ:= StrToInt(VarToStr(FieldValues(0))); // helios.Info((idkz).ToString); if (idKZ>0) then with Helios.OpenSQL(sql) do begin // test na existenci Kusovnikovych vazev a Technologickych postupu { sql:= 'SELECT id FROM ' + tblKZ + ' WHERE Material=1 AND Id=' + IntToStr(idKZ) + ' UNION ALL '; sql:= sql + 'SELECT id FROM ' + tblKVaz + ' WHERE vyssi=' + IntToStr(idKZ); with Helios.OpenSQL(sql) do if (RecordCount>1) then UlozChybu(Helios,'Pozor, karta je výrobek ale nemá definovaný kusovník (' + regCis + ')',nil); sql:= 'SELECT id FROM ' + tblKZ + ' WHERE Material=1 AND Id=' + IntToStr(idKZ) + ' UNION ALL '; sql:= sql + 'SELECT id FROM ' + tblPostup + ' WHERE dilec=' + IntToStr(idKZ); with Helios.OpenSQL(sql) do if (RecordCount>1) then UlozChybu(Helios,'Pozor, karta je výrobek ale nemá definované tech.postupy (' + regCis + ')',nil); } try qty:= StrToFloat(VarToStr(pol.FieldByNameValues('mnozstvi'))); except qty:= 0; end; pozice:= StrToInt(VarToStr(pol.FieldByNameValues('pozice'))); boxik:= VarToStr(pol.FieldByNameValues('boxik')); descript:= VarToStr(pol.FieldByNameValues('popis')); try per:= StrToFloat(VarToStr(pol.FieldByNameValues('per'))); except per:= 1; end; if (per=0) then per:= 1; cena:= 0; cena:= StrToFloat(VarToStr(pol.FieldByNameValues('cena'))); cena:= RoundToEX(cena/per,-6); if kontrolaCen then begin if (mena='CZK') or (mena='') then sql:= 'SELECT pz.JCbezDaniKC' else sql:= 'SELECT pz.JCbezDaniVal'; sql:= sql + ' FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS + ' ss ON (pz.IDZboSklad=ss.id)'; sql:= sql + ' INNER JOIN ' + tblKZ + ' kz ON (ss.IDKmenZbozi=kz.id) WHERE ss.IDSklad=N'; sql:= sql + QuotedStr(Helios.Sklad) + ' AND pz.IDDoklad=' + IntToStr(idCen) + ' AND kz.id=' + IntToStr(idKZ); with Helios.OpenSQL(sql) do begin if (RecordCount=0) then begin sql:= 'Položka nebyla v ceníku nalezena: ' + regCis; if ExpP then sql:= sql + ', pozice ' + IntToStr(pozice); sql:= sql + ', množ. ' + FloatToStr(qty); sql:= sql + ' (cena ' + FloatToStr(cena) + ')'; UlozChybu(Helios, sql, nil); end; if (RecordCount>0) then begin ccena:= StrToFloat(VarToStr(FieldValues(0))); ccena:= RoundToEX(ccena, -4); cena:= RoundToEX(cena, -4); if (ccena<>cena) then begin sql:= 'Rozdílná cena položky: ' + regCis; if ExpP then sql:= sql + ', pozice ' + IntToStr(pozice); sql:= sql + ', množ. ' + FloatToStr(qty); sql:= sql + ' (cena ' + FloatToStr(cena) + ' x ceník ' + FloatToStr(ccena) + ')'; UlozChybu(Helios, sql, nil); end; end; end; end; datum:= StrToDate(VarToStr(pol.FieldByNameValues('datDod'))); idUmist:= 0; if not ExpP then begin tStr:= VarToStr(FieldValues(7)); // celni nomenklatura cObj:= VarToStr(pol.FieldByNameValues('cObj')); // CN ze souboru if newKarta then Helios.ExecSQL('UPDATE ' + tblKZ + ' SET CelniNomenklatura=N' + QuotedStr(LeftStr(cObj,8)) + ' WHERE id=' + IntToStr(idKZ)) else if (cObj<>tStr) then begin Helios.ExecSQL('UPDATE ' + tblKZ + ' SET CelniNomenklatura=N' + QuotedStr(LeftStr(cObj,8)) + ' WHERE id=' + IntToStr(idKZ)); UlozChybu(Helios,'Karta má odlišnou celní nomenklaturu: ' + regCis + ' (stará ' + tStr + ' x nová ' + cObj + ')', nil); end; end; sazba:= VarToStr(FieldValues(6)); if (sazba='') then sazba:= '0'; mj:= VarToStr(FieldValues(5)); idSS:= ''; jCenaSS:= '0'; { // kontrola existence NC sql:= 'SELECT '; if mena<>'CZK' then sql:= sql + 'CenaVal1' else sql:= sql + 'CenaKC'; sql:= sql + ' FROM ' + tblNC + ' WHERE CenovaUroven=1 AND IdKmenZbozi=' + IntToStr(idKZ); if mena<>'CZK' then sql:= sql + ' AND UPPER(Mena1)=N' + QuotedStr(mena); Clipboard.AsText:= sql; ShowMessage('SQL: ' + sql); with Helios.OpenSQL(sql) do if RecordCount>0 then jCenaSS:= VarToStr(FieldValues(0)); // nabidkova cena v dane mene } with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skladEP) + ' AND IDKmenZbozi=' + IntToStr(idKZ)) do if (RecordCount>0) then idSS:= VarToStr(FieldValues(0)); if (idSS='') then begin sql:= 'INSERT ' + tblSS + ' (IDKmenZbozi,IDSklad) VALUES (' + IntToStr(idKZ) + ',N' + QuotedStr(skladEP) + ')'; try Helios.ExecSQL(sql); except on E:Exception do UlozChybu(Helios,'Chyba ins StavSkl pol: ' + regCis + ' : SQL ' + sql,E); end; with Helios.OpenSQL('SELECT SCOPE_IDENTITY()') do if not VarIsNull(FieldValues(0)) then idSS:= VarToStr(FieldValues(0)); end; if (idSS<>'') then begin sql:= 'SELECT id FROM ' + tblPZ + ' WHERE IdZboSklad=' + idSS + ' AND DruhPohybuZbo<5'; with Helios.OpenSQL(sql) do if (RecordCount=0) then UlozChybu(Helios,'Položka ' + regCis + ' nemá žádný minulý pohyb na skladě, zkontrolujte hmotnost/celní nomenklaturu...', nil); sql:= 'DECLARE @Ident INT' + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @Ident OUT,@IDDoklad='; sql:= sql + IntToStr(idDZ) + ',@DruhPohybu='; if ExpP then sql:= sql + '9' else sql:= sql + '0'; sql:= sql + ',@CisloOrg=' + cOrg + ',@IDZboSklad=' + idSS + ',@SazbaDPH=' + sazba + ',@Mnozstvi='; sql:= sql + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]) + ',@MJ=N' + QuotedStr(mj) + ',@JCbezDaniKC='; sql:= sql + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ',@DatPorizeni=NULL'; if mena='CZK' then sql:= sql + ',@VstupniCena=0,@Kurz=1' else sql:= sql + ',@VstupniCena=4,@Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll]); sql:= sql + ',@PovolitDuplicitu=1,@SazbaSD=0,@ZakazanoDPH=0,@KurzEuro=0,@Mena=N' + QuotedStr(mena); sql:= sql + ',@PovolitBlokovane=1,@JednotkaMeny=1,@Selectem=0' + CRLF + 'SELECT @Ident'; idPZ:= 0; try with Helios.OpenSQL(sql) do if (RecordCount>0) then if not VarIsNull(FieldValues(0)) then if not TryStrToInt(VarToStr(FieldValues(0)),idPZ) then idPZ:= 0; except on E:Exception do UlozChybu(Helios,'Nelze uložit položku do dokladu ! SQL ' + sql, E); end; if (idPZ>0) then begin Helios.ExecSQL('UPDATE ' + tblPZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idPZ)); sql:= ''; if (mena<>'CZK') then begin sql:= 'UPDATE ' + tblPZ + ' SET JCbezDaniKc=' + StringReplace(FloatToStr(cena*kurz),',','.',[rfReplaceAll]); sql:= sql + ',JCbezDaniKcPoS=' + StringReplace(FloatToStr(cena*kurz),',','.',[rfReplaceAll]); sql:= sql + ',CCbezDaniKc=' + StringReplace(FloatToStr(qty*cena*kurz),',','.',[rfReplaceAll]); sql:= sql + ',JCbezDaniValPoS=' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]); sql:= sql + ',JCbezDaniVal=' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]); sql:= sql + ',CCbezDaniVal=' + StringReplace(FloatToStr(qty*cena),',','.',[rfReplaceAll]); sql:= sql + ' WHERE id=' + IntToStr(idPZ) + CRLF; try Helios.ExecSQL(sql); except on E:Exception do UlozChybu(Helios,'Nelze upravit cenu položky ExpPř !' + CRLF + sql, E); end; end; if (cena<>0) and not ExpP then begin sql:= 'DECLARE @idZ INT' + CRLF + 'SET @idZ=(SELECT TOP(1) id FROM dbo.TabCZmeny WHERE Rada=N' + QuotedStr('01') + ' AND datum<='; sql:= sql + 'CONVERT(datetime,N' + QuotedStr(DateToStr(datum)) + ',104) ORDER BY datum DESC)' + CRLF; sql:= sql + 'SELECT id,Cena FROM ' + tblKalkCe + ' WHERE ZmenaOd=@idZ AND IdKmenZbozi=' + IntToStr(idKZ); with Helios.OpenSQL(sql) do begin if (RecordCount>0) then begin // if StrToFloat(VarToStr(FieldValues(1)))=0 then try Helios.ExecSQL('UPDATE ' + tblKalkCe + ' SET Cena=' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ' WHERE id=' + VarToStr(FieldValues(0))); except on E:Exception do UlozChybu(Helios,'Nelze aktualizovat kalkulační cenu ! SQL: ' + sql, E); end; end else begin sql:= 'DECLARE @idZ INT' + CRLF + 'SET @idZ=(SELECT TOP(1) id FROM ' + tblCZmen + ' WHERE Rada=N' + QuotedStr('01') + ' AND datum<='; sql:= sql + 'CONVERT(datetime,N' + QuotedStr(DateToStr(datum)) + ',104) ORDER BY datum DESC)' + CRLF; sql:= sql + 'IF @idZ IS NOT NULL INSERT ' + tblKalkCe + ' (IdKmenZbozi,ZmenaOd,Cena) VALUES (' + IntToStr(idKZ) + ',@idZ,'; sql:= sql + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ')'; try Helios.ExecSQL(sql); except on E:Exception do UlozChybu(Helios,'Nelze uložit kalkulační cenu ! SQL: ' + sql, E); end; end; end; end; sql:= 'UPDATE ' + tblPZ + ' SET '; if ExpP then begin // objednavka = ExpPr mj:= IntToStr(pozice); if (Length(mj)>4) then mj:= ReverseString(LeftStr(ReverseString(mj),4)); mj:= StringOfChar('0',4-Length(mj))+mj; sql:= sql + 'NazevSozNa1=N' + QuotedStr(cObj); sql:= sql + ',NazevSozNa2=N' + QuotedStr(mj) + ',NazevSozNa3=N' + QuotedStr(cObj+mj); sql:= sql + ',PozadDatDod=CONVERT(datetime,' + QuotedStr(DateToStr(datum)) + ',104)'; end else begin // packinglist = prijemka tStr:= ''; sql:= sql + 'NazevSozNa1=N' + QuotedStr(boxik); // descript if not VarIsNull(FieldValues(8)) then // umisteni na vyrobu tStr:= VarToStr(FieldValues(8)); if (tStr='') then if not VarIsNull(FieldValues(9)) then // umisteni tStr:= VarToStr(FieldValues(9)); if (tStr<>'') then begin tStr:= 'SELECT id FROM ' + tblUmist + ' WHERE IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND Kod=N' + QuotedStr(tStr); with Helios.OpenSQL(tStr) do if (RecordCount>0) then begin idUmist:= StrToInt(VarToStr(FieldValues(0))); tStr:= 'SELECT id FROM ' + tblStavUm + ' WHERE IDStav=' + idSS + ' AND IDUmisteni=' + IntToStr(idUmist); with Helios.OpenSQL(tStr) do if (RecordCount>0) then sql:= sql + ',IDUmisteni=' + VarToStr(FieldValues(0)); end; end; end; sql:= sql + ',Popis4=N' + QuotedStr(descript); sql:= sql + ' WHERE id=' + IntToStr(idPZ); try Helios.ExecSQL(sql); except on E:Exception do UlozChybu(Helios,'Nelze aktualizovat doplňující údaje na položce dokladu ! SQL: ' + sql, E); end; end; end; end; pol.Next; end; end; Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ)); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1'); { sql:= 'SELECT kz.id FROM ' + tblPZ + ' WHERE kz.Blokovano=1'; with Helios.OpenSQL(sql) do if RecordCount>0 then Helios.OpenBrowse(bidKZ,'TabKmenZbozi.Blokovano=1'); } end; Helios.Refresh(True); try Helios.ExecSQL('TRUNCATE TABLE ' + tmpTab); except end; Helios.Info('Import souboru '#1 + fName + #1' byl ukoncen.'); if not ExpP then with Helios.OpenSQL('SELECT id FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N' + QuotedStr(szNovyImportMat)) do if (RecordCount>0) then begin Helios.Error(#1'Existují nové materiály, je třeba je přeřadit do skupiny MAT,' + CRLF + 'upravit detaily a zaměnit na dokladech'#1); Helios.OpenBrowse(2,'TabKmenZbozi.Blokovano=0 AND TabKmenZbozi.SkupZbo=N' + QuotedStr(szNovyImportMat)); end; end; Screen.Cursor:= crDefault; { try with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do if (RecordCount>0) then Helios.OpenBrowse(541,''); finally end; } end; procedure TplgLOVATO.HromadneOdvedeniEvidKoop(const Helios: IHelios); begin with Helios.OpenSQL('SELECT id FROM dbo._TabPrijemNadvyroby WHERE Zpracovano=0') do if (RecordCount>0) then begin end else Helios.Error(#1'V importní tabulce (_TabPrijemNadvyroby) nejsou žádné záznamy.'#1); end; procedure TplgLOVATO.ImportDL_CHD(const Helios: IHelios); var lSQL, cObj, regC, mnoz, cisDL, dat, dokl, altP, mnCena, cOrgCHD, idKoop: string; idx, poz, idEvid, idKO, idPKO, idVPr, idKZ, idDZ, idDZp, idSS: integer; xls: TXLSReadWriteII5; sheet: TXLSWorksheet; begin lSQL:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT NULL, Poznamka NVARCHAR(255) NOT NULL)' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''tempdb..#TabTempUziv'', ''U'') IS NULL CREATE TABLE #TabTempUziv (Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)'; Helios.ExecSQL(lSQL); if OtevriSouborXLS(fName,'') then begin xls:= TXLSReadWriteII5.Create(nil); try xls.LoadFromFile(fName); // CHD-SPEKTRUM s.r.o. cOrgCHD:= '1118'; with Helios.OpenSQL('SELECT id FROM ' + tblCOrg + ' WHERE NadrizenaOrg IS NULL AND DIC=N' + QuotedStr('CZ26084155')) do if (RecordCount=1) then cOrgCHD:= VarToStr(FieldValues(0)); idKoop:= '7'; with Helios.OpenSQL('SELECT id FROM dbo.TabRadyCKoop WHERE LOWER(LTRIM(RTRIM(nazev)))=N' + QuotedStr('spektrum')) do if (RecordCount=1) then idKoop:= VarToStr(FieldValues(0)); dat:= InputBox('Datum evidence','Datum: ', DateToStr(Now)); sheet:= xls.Sheets[0]; idx:= 1; idDZ:= 0; idDZp:= 0; regC:= sheet.AsString[2,idx]; while (regC<>'') do begin cObj:= ''; poz:= 0; regC:= ''; mnoz:= '0'; cisDL:= ''; if (sheet.CellType[0,idx]<>xctNone) and (sheet.CellType[0,idx]<>xctBlank) then cObj:= Trim(sheet.AsString[0,idx]); if (sheet.CellType[1,idx]<>xctNone) and (sheet.CellType[1,idx]<>xctBlank) then poz:= sheet.AsInteger[1,idx]; if (sheet.CellType[2,idx]<>xctNone) and (sheet.CellType[2,idx]<>xctBlank) then regC:= Trim(sheet.AsString[2,idx]); if (sheet.CellType[3,idx]<>xctNone) and (sheet.CellType[3,idx]<>xctBlank) then mnoz:= Trim(sheet.AsString[3,idx]); if (sheet.CellType[4,idx]<>xctNone) and (sheet.CellType[4,idx]<>xctBlank) then cisDL:= Trim(sheet.AsString[4,idx]); idKO:= 0; idPKO:= 0; idVPr:= 0; idKZ:= 0; if (cObj<>'') then begin with Helios.OpenSQL('SELECT id FROM ' + tblKObj + ' WHERE REPLACE(Objednavka,''/'','''')=N' + QuotedStr(cObj)) do if (RecordCount=1) then idKO:= StrToInt(VarToStr(FieldValues(0))); if (idKO>0) and (poz>0) then with Helios.OpenSQL('SELECT Id, IdPrikaz, DokladPrPostup, AltPrPostup, ROUND(Cena/Kusy,3) FROM ' + tblPKObj + ' WHERE IDObjednavky=' + IntToStr(idKO) + ' AND Polozka=' + IntToStr(poz)) do if (RecordCount=1) then begin idPKO:= StrToInt(VarToStr(FieldValues(0))); idVPr:= StrToInt(VarToStr(FieldValues(1))); dokl:= VarToStr(FieldValues(2)); altP:= VarToStr(FieldValues(3)); mnCena:= VarToStr(FieldValues(4)); end; if (idKO>0) and (idPKO>0) and (idVPr>0) then begin idEvid:= 0; with Helios.OpenSQL('SELECT IdTabKmen FROM ' + tblPrikaz + ' WHERE Id=' + IntToStr(idVPr)) do idKZ:= StrToInt(VarToStr(FieldValues(0))); lSQL:= 'DECLARE @cc NUMERIC(19,6), @idEvid INT, @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dat) + ',104)' + CRLF; lSQL:= lSQL + 'SET @cc=' + StringReplace(mnCena,',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'EXEC @idEvid=dbo.hp_EvidenceOperace @Datum=@dt,@Platit_TBC=0,@Platit_TEC=0,@Kusy_odv='; lSQL:= lSQL + StringReplace(mnoz,',','.',[rfReplaceAll]) + ',@Operace_odv=' + StringReplace(mnoz,',','.',[rfReplaceAll]); lSQL:= lSQL + ',@Mzda=@cc,@Stav=1,@IDPolKoopObj=' + IntToStr(idPKO) + CRLF + 'SELECT @idEvid'; with Helios.OpenSQL(lSQL) do begin idEvid:= StrToInt(VarToStr(FieldValues(0))); Helios.ExecSQL('UPDATE ' + tblMzdZm + ' SET BlokovaniEditoru=NULL WHERE Id=' + IntToStr(idEvid)); lSQL:= 'UPDATE ' + tblMzdZmE + ' SET _DodaciListKooperanta=N' + QuotedStr(cisDL) + ' WHERE id=' + IntToStr(idEvid) + CRLF; lSQL:= lSQL + 'IF (@@ROWCOUNT=0) INSERT ' + tblMzdZmE + ' (ID, _DodaciListKooperanta) VALUES (' + IntToStr(idEvid) + ',N' + QuotedStr(cisDL) + ')'; Helios.ExecSQL(lSQL); end; end; end else if (regC<>'') then begin if (idDZ=0) then begin lSQL:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(sklCHD) + ',@Mena=N' + QuotedStr('CZK'); lSQL:= lSQL + ',@DruhPohybu=4,@RadaDokladu=N' + QuotedStr('450') + ',@Insert=1,@CisloOrg=0,@PC=NULL'; lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ'; try with Helios.OpenSQL(lSQL) do idDZ:= StrToInt(VarToStr(FieldValues(0))); except on E:Exception do begin Clipboard.AsText:= lSQL; Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message); end; end; end; if (idDZ>0) then begin lSQL:= 'SELECT ss.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.Id AND ss.IDSklad=N' + QuotedStr(sklCHD) + ')'; lSQL:= lSQL + ' WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC); with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin lSQL:= 'DECLARE @idOut INT, @ss INT, @m NVARCHAR(3), @k NUMERIC(12,4), @jm INT, @kEUR NUMERIC(15,4), @sSD NUMERIC(5,2), @sDPH NUMERIC(5,2),'; lSQL:= lSQL + '@mn NUMERIC(19,6), @d DATETIME, @pdp BIT, @typSaz TINYINT, @idKZ INT' + CRLF + 'SELECT @jm=1, @sSD=0' + CRLF; lSQL:= lSQL + 'SELECT @mn=' + StringReplace(mnoz,',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SELECT @ss=ss.Id, @idKZ=kz.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD); lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_GetSazbuDPH @sDPH OUT, @typSaz OUT, @pdp OUT, @DruhPohybu=4, @IDKmenZbozi=@idKZ' + CRLF; lSQL:= lSQL + 'SELECT @m=Mena, @k=Kurz, @kEUR=KurzEuro FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ) + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + IntToStr(idDZ) + ',@DruhPohybu=4,@CisloOrg=26,@IDZboSklad=@ss,'; lSQL:= lSQL + '@Mena=@m,@Kurz=@k,@JednotkaMeny=@jm,@KurzEuro=@kEUR,@SazbaSD=@sSD,@SazbaDPH=@sDPH,@ZakazanoDPH=0,'; lSQL:= lSQL + '@VstupniCena=4,@Mnozstvi=@mn,@JCbezDaniKC=0,@PovolitDuplicitu=1,@DatPorizeni=@d,@Selectem=0'; lSQL:= lSQL + CRLF + 'SELECT @idOut'; try with Helios.OpenSQL(lSQL) do begin lSQL:= 'DECLARE @ss INT; SELECT @ss=ss.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD); lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF; lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET JCbezDaniKC=(SELECT Prumer FROM ' + tblSS + ' WHERE id=@ss) WHERE id=' + VarToStr(FieldValues(0)); Helios.ExecSQL(lSQL); end; except on E:Exception do Helios.Error(#1 + E.Message + #1); end; end else Helios.ExecSQL('INSERT #TabExtKom (Poznamka) VALUES (' + QuotedStr('CHYBA: Karta materiálu '#1 + regC + #1' nebyla na skladě ' + sklCHD + ' nalezena, nebude zadána na výdejku/převodku.') + ')'); end; end; Inc(idx); end; if (idDZ>0) then begin lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL, IdSkladPrevodu=N' + QuotedStr(sklVyr); lSQL:= lSQL + ',TypPrevodky=N' + QuotedStr('250') + ',DruhPohybuPrevod=0,PopisDodavky=N' + QuotedStr('Zpětný převod mat.'); lSQL:= lSQL + ' WHERE DruhPohybuZbo=4 AND id=' + IntToStr(idDZ); Helios.ExecSQL(lSQL); { lSQL:= 'DECLARE @dt DATETIME, @idDZp INT' + CRLF + 'SET @dt=GETDATE()' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZp OUT,@Sklad=N' + QuotedStr(sklVyr) + ',@Mena=N' + QuotedStr('CZK'); lSQL:= lSQL + ',@DruhPohybu=0,@RadaDokladu=N' + QuotedStr('250') + ',@Insert=1,@CisloOrg=26,@PC=NULL'; lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZp'; try with Helios.OpenSQL(lSQL) do idDZp:= StrToInt(VarToStr(FieldValues(0))); except on E:Exception do begin Clipboard.AsText:= lSQL; Helios.Error(#1'Nelze uložit hlavičku příjemky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message); end; end; lSQL:= 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZp) + ',@IDDokladSrc=' + IntToStr(idDZ); lSQL:= lSQL + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK'); lSQL:= lSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null'; lSQL:= lSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Zpětný převod mat.'); lSQL:= lSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0'; lSQL:= lSQL + ',@VytvaretDokladovouVazbu=1,@VytvaretPolozkovouVazbu=1'; try Helios.ExecSQL(lSQL); lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE DruhPohybuZbo=0 AND id=' + IntToStr(idDZp); Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error(#1'Chyba generování dokladového řetězu: '#1 + E.Message); end; } end; Helios.Refresh(true); Helios.Info(#1'Import DL ukončen' + IfThen(idDZ>0,' + vygenerována výdejka/převodka CHD -> Lovato','...') +#1); except on E:Exception do Helios.Error(#1'Chyba: ' + #1 + E.Message); end; end; end; // vloženo při číslu palety procedure TplgLOVATO.ImportDL(const Helios: IHelios; const ZpracProcedurou: boolean); var lSQL, cObj, regC, mnoz, cisDL, dat, dokl, altP, mnCena{, cOrgCHD}{, idKoop}: string; idx, poz, idEvid, idKO, idPKO, idVPr, idKZ, idDZ, idDZp, idSS: integer; xls: TXLSReadWriteII5; sheet: TXLSWorksheet; CisloPalety: String; Sql2: String; // přidáno 27.4.2022 { IdOrg: integer; DIC: string; } begin lSQL:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) NOT NULL )' + CRLF; // upraveno 27.7.2022 lSQL:= lSQL + 'TRUNCATE TABLE #TabExtKom;' + CRLF; // přidáno 27.4.2022 lSQL:= lSQL + 'IF OBJECT_ID(N''tempdb..#TabTempUziv'', ''U'') IS NULL CREATE TABLE #TabTempUziv (Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL )'; Helios.ExecSQL(lSQL); // přidáno 27.4.2022 if (ZpracProcedurou = true) then begin Sql2:= 'IF OBJECT_ID(''tempdb..#Tabx_NTS_ImportDoEvidKoop'') IS NULL ' + CRLF;; Sql2:= Sql2 + 'CREATE TABLE #Tabx_NTS_ImportDoEvidKoop ( ' + CRLF; Sql2:= Sql2 + 'ID INT IDENTITY(1,1) PRIMARY KEY, ' + CRLF; Sql2:= Sql2 + 'CisloRadku INT, ' + CRLF; Sql2:= Sql2 + 'Pozice INT, ' + CRLF; Sql2:= Sql2 + 'Mnozstvi NUMERIC(19,6), ' + CRLF; Sql2:= Sql2 + 'Datum DATETIME, ' + CRLF; Sql2:= Sql2 + 'CisloObj NVARCHAR(100), ' + CRLF; Sql2:= Sql2 + 'PoziceChar NVARCHAR(20), ' + CRLF; Sql2:= Sql2 + 'RegCis NVARCHAR(30), ' + CRLF; Sql2:= Sql2 + 'MnozstviChar NVARCHAR(30), ' + CRLF; Sql2:= Sql2 + 'CisDL NVARCHAR(10), ' + CRLF; Sql2:= Sql2 + 'CisloPalety NVARCHAR(30), ' + CRLF; Sql2:= Sql2 + 'DatumChar NVARCHAR(30) ' + CRLF; Sql2:= Sql2 + ' );'; Sql2:= Sql2 + ' TRUNCATE TABLE #Tabx_NTS_ImportDoEvidKoop'; Helios.ExecSQL(Sql2); end ; //konec přidání 27.4.2022 if OtevriSouborXLS(fName,'') then begin xls:= TXLSReadWriteII5.Create(nil); try xls.LoadFromFile(fName); // CHD-SPEKTRUM s.r.o. // cOrgCHD:= '1118'; { with Helios.OpenSQL('SELECT id FROM ' + tblCOrg + ' WHERE NadrizenaOrg IS NULL AND DIC=N' + QuotedStr('CZ26084155')) do if (RecordCount=1) then cOrgCHD:= VarToStr(FieldValues(0)); } {idKoop:= '7'; with Helios.OpenSQL('SELECT id FROM dbo.TabRadyCKoop WHERE LOWER(LTRIM(RTRIM(nazev)))=N' + QuotedStr('spektrum')) do if (RecordCount=1) then idKoop:= VarToStr(FieldValues(0)); } dat:= InputBox('Datum evidence','Datum: ', DateToStr(Now)); sheet:= xls.Sheets[0]; idx:= 1; idDZ:= 0; idDZp:= 0; regC:= sheet.AsString[2,idx]; while (regC<>'') do begin cObj:= ''; poz:= 0; regC:= ''; mnoz:= '0'; cisDL:= ''; CisloPalety:=''; if (sheet.CellType[0,idx]<>xctNone) and (sheet.CellType[0,idx]<>xctBlank) then cObj:= Trim(sheet.AsString[0,idx]); if (sheet.CellType[1,idx]<>xctNone) and (sheet.CellType[1,idx]<>xctBlank) then poz:= sheet.AsInteger[1,idx]; if (sheet.CellType[2,idx]<>xctNone) and (sheet.CellType[2,idx]<>xctBlank) then regC:= Trim(sheet.AsString[2,idx]); if (sheet.CellType[3,idx]<>xctNone) and (sheet.CellType[3,idx]<>xctBlank) then mnoz:= Trim(sheet.AsString[3,idx]); if (sheet.CellType[4,idx]<>xctNone) and (sheet.CellType[4,idx]<>xctBlank) then cisDL:= Trim(sheet.AsString[4,idx]); if (sheet.CellType[5,idx]<>xctNone) and (sheet.CellType[5,idx]<>xctBlank) then CisloPalety:= Trim(sheet.AsString[5,idx]); // přidáno 27.4.2022 if (ZpracProcedurou = true) then begin if (cObj<>'') then begin Sql2 := 'INSERT INTO #Tabx_NTS_ImportDoEvidKoop (CisloRadku, CisloObj, PoziceChar, RegCis, MnozstviChar, CisDL, CisloPalety) VALUES (' ; Sql2 := Sql2 + IntToStr(idx) + ', LEFT(N''' + cObj + ''', 100), LEFT(N''' + IntToStr(poz) + ''', 20), LEFT(N''' + regC + ''', 30), LEFT(N''' + Mnoz; Sql2 := Sql2 + ''', 30), LEFT(N''' + cisDL + ''', 10), LEFT(N''' + CisloPalety + ''', 30)); '; try Helios.ExecSQL(Sql2); except on E:Exception do Helios.Error('Chyba: ' + E.Message); end; end; end else begin //konec přidání 27.4.2022 idKO:= 0; idPKO:= 0; idVPr:= 0; idKZ:= 0; if (cObj<>'') then begin {with Helios.OpenSQL('SELECT id FROM ' + tblCOrg + ' WHERE NadrizenaOrg IS NULL AND DIC=N' + QuotedStr(DIC)) do if (RecordCount=1) then IdOrg:= (FieldValues(0)); } // nastavení organizace podle DIČ z Excelu, kde zatím není nebo to (DIČ a dokonce i id organizace) lze zjistit na kooperační objednávce - ale zatím to není třeba //with Helios.OpenSQL('SELECT id, IDOraganizace, DIC FROM ' + tblKObj + ' WHERE REPLACE(Objednavka,''/'','''')=N' + QuotedStr(cObj)) do with Helios.OpenSQL('SELECT id FROM ' + tblKObj + ' WHERE REPLACE(Objednavka,''/'','''')=N' + QuotedStr(cObj)) do if (RecordCount=1) then idKO:= StrToInt(VarToStr(FieldValues(0))); //IdOrg:= (FieldValues(1)); //DIC := (FieldValues(2)); if (idKO>0) and (poz>0) then with Helios.OpenSQL('SELECT Id, IdPrikaz, DokladPrPostup, AltPrPostup, ROUND(Cena/Kusy,3) FROM ' + tblPKObj + ' WHERE IDObjednavky=' + IntToStr(idKO) + ' AND Polozka=' + IntToStr(poz)) do if (RecordCount=1) then begin idPKO:= StrToInt(VarToStr(FieldValues(0))); idVPr:= StrToInt(VarToStr(FieldValues(1))); dokl:= VarToStr(FieldValues(2)); altP:= VarToStr(FieldValues(3)); mnCena:= VarToStr(FieldValues(4)); end; if (idKO>0) and (idPKO>0) and (idVPr>0) then begin idEvid:= 0; with Helios.OpenSQL('SELECT IdTabKmen FROM ' + tblPrikaz + ' WHERE Id=' + IntToStr(idVPr)) do idKZ:= StrToInt(VarToStr(FieldValues(0))); lSQL:= 'DECLARE @cc NUMERIC(19,6), @idEvid INT, @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dat) + ',104)' + CRLF; lSQL:= lSQL + 'SET @cc=' + StringReplace(mnCena,',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'EXEC @idEvid=dbo.hp_EvidenceOperace @Datum=@dt,@Platit_TBC=0,@Platit_TEC=0,@Kusy_odv='; lSQL:= lSQL + StringReplace(mnoz,',','.',[rfReplaceAll]) + ',@Operace_odv=' + StringReplace(mnoz,',','.',[rfReplaceAll]); lSQL:= lSQL + ',@Mzda=@cc,@Stav=1,@IDPolKoopObj=' + IntToStr(idPKO) + CRLF + 'SELECT @idEvid'; with Helios.OpenSQL(lSQL) do begin idEvid:= StrToInt(VarToStr(FieldValues(0))); Helios.ExecSQL('UPDATE ' + tblMzdZm + ' SET BlokovaniEditoru=NULL WHERE Id=' + IntToStr(idEvid)); lSQL:= 'UPDATE ' + tblMzdZmE + ' SET _DodaciListKooperanta=N' + QuotedStr(cisDL) + ' , _CisloPalety = N' + QuotedStr(CisloPalety) + ' WHERE id=' + IntToStr(idEvid) + CRLF; lSQL:= lSQL + 'IF (@@ROWCOUNT=0) INSERT ' + tblMzdZmE + ' (ID, _DodaciListKooperanta, _CisloPalety) VALUES (' + IntToStr(idEvid) + ',N' + QuotedStr(cisDL) + ',N' + QuotedStr(CisloPalety)+ ')'; Helios.ExecSQL(lSQL); end; end; end ;{ else if (regC<>'') then begin if (idDZ=0) then begin lSQL:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(sklCHD) + ',@Mena=N' + QuotedStr('CZK'); lSQL:= lSQL + ',@DruhPohybu=4,@RadaDokladu=N' + QuotedStr('450') + ',@Insert=1,@CisloOrg=0,@PC=NULL'; lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ'; try with Helios.OpenSQL(lSQL) do idDZ:= StrToInt(VarToStr(FieldValues(0))); except on E:Exception do begin Clipboard.AsText:= lSQL; Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message); end; end; end; if (idDZ>0) then begin lSQL:= 'SELECT ss.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.Id AND ss.IDSklad=N' + QuotedStr(sklCHD) + ')'; lSQL:= lSQL + ' WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC); with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin lSQL:= 'DECLARE @idOut INT, @ss INT, @m NVARCHAR(3), @k NUMERIC(12,4), @jm INT, @kEUR NUMERIC(15,4), @sSD NUMERIC(5,2), @sDPH NUMERIC(5,2),'; lSQL:= lSQL + '@mn NUMERIC(19,6), @d DATETIME, @pdp BIT, @typSaz TINYINT, @idKZ INT' + CRLF + 'SELECT @jm=1, @sSD=0' + CRLF; lSQL:= lSQL + 'SELECT @mn=' + StringReplace(mnoz,',','.',[rfReplaceAll]) + CRLF; lSQL:= lSQL + 'SELECT @ss=ss.Id, @idKZ=kz.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD); lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_GetSazbuDPH @sDPH OUT, @typSaz OUT, @pdp OUT, @DruhPohybu=4, @IDKmenZbozi=@idKZ' + CRLF; lSQL:= lSQL + 'SELECT @m=Mena, @k=Kurz, @kEUR=KurzEuro FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ) + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + IntToStr(idDZ) + ',@DruhPohybu=4,@CisloOrg=26,@IDZboSklad=@ss,'; lSQL:= lSQL + '@Mena=@m,@Kurz=@k,@JednotkaMeny=@jm,@KurzEuro=@kEUR,@SazbaSD=@sSD,@SazbaDPH=@sDPH,@ZakazanoDPH=0,'; lSQL:= lSQL + '@VstupniCena=4,@Mnozstvi=@mn,@JCbezDaniKC=0,@PovolitDuplicitu=1,@DatPorizeni=@d,@Selectem=0'; lSQL:= lSQL + CRLF + 'SELECT @idOut'; try with Helios.OpenSQL(lSQL) do begin lSQL:= 'DECLARE @ss INT; SELECT @ss=ss.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD); lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF; lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET JCbezDaniKC=(SELECT Prumer FROM ' + tblSS + ' WHERE id=@ss) WHERE id=' + VarToStr(FieldValues(0)); Helios.ExecSQL(lSQL); end; except on E:Exception do Helios.Error(#1 + E.Message + #1); end; end else Helios.ExecSQL('INSERT #TabExtKom (Poznamka) VALUES (' + QuotedStr('CHYBA: Karta materiálu '#1 + regC + #1' nebyla na skladě ' + sklCHD + ' nalezena, nebude zadána na výdejku/převodku.') + ')'); end; end; } end; // přidáno 27.4.2022 Inc(idx); end; // přidáno 27.4.2022 if (ZpracProcedurou = true) then begin Sql2 := 'DECLARE @dat NVARCHAR(30) = N''' + dat + ''';' + CRLF; Sql2 := Sql2 + 'BEGIN TRY ' + CRLF; Sql2 := Sql2 + 'EXEC dbo.hpx_NTS_ImportDLDoEvidKoop @SpustenoPluginem = 1, @VychDatum_string = @dat, @VychDatum = NULL;'; Sql2 := Sql2 + 'END TRY ' + CRLF + 'BEGIN CATCH ' + CRLF + 'SELECT ERROR_MESSAGE();' + CRLF + ' END CATCH'; try With Helios.OpenSQL(Sql2) do if recordcount > 0 then Helios.Error(VarToStr(FieldValues(0))); except on E:Exception do begin helios.Info('105'); Helios.Error('Nespecifikovaná chyba - SQL procedura'); Helios.Error('Chyba: ' + E.Message); end; end; end; //konec přidání 27.4.2022 // if (idDZ>0) then // begin // lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL, IdSkladPrevodu=N' + QuotedStr(sklVyr); // lSQL:= lSQL + ',TypPrevodky=N' + QuotedStr('250') + ',DruhPohybuPrevod=0,PopisDodavky=N' + QuotedStr('Zpětný převod mat.'); // lSQL:= lSQL + ' WHERE DruhPohybuZbo=4 AND id=' + IntToStr(idDZ); // Helios.ExecSQL(lSQL); // //{ // lSQL:= 'DECLARE @dt DATETIME, @idDZp INT' + CRLF + 'SET @dt=GETDATE()' + CRLF; // lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZp OUT,@Sklad=N' + QuotedStr(sklVyr) + ',@Mena=N' + QuotedStr('CZK'); // lSQL:= lSQL + ',@DruhPohybu=0,@RadaDokladu=N' + QuotedStr('250') + ',@Insert=1,@CisloOrg=26,@PC=NULL'; // lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZp'; // try // with Helios.OpenSQL(lSQL) do // idDZp:= StrToInt(VarToStr(FieldValues(0))); // except on E:Exception do // begin // Clipboard.AsText:= lSQL; // Helios.Error(#1'Nelze uložit hlavičku příjemky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message); // end; // end; // // lSQL:= 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZp) + ',@IDDokladSrc=' + IntToStr(idDZ); // lSQL:= lSQL + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK'); // lSQL:= lSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null'; // lSQL:= lSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Zpětný převod mat.'); // lSQL:= lSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0'; // lSQL:= lSQL + ',@VytvaretDokladovouVazbu=1,@VytvaretPolozkovouVazbu=1'; // try // Helios.ExecSQL(lSQL); // lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE DruhPohybuZbo=0 AND id=' + IntToStr(idDZp); // Helios.ExecSQL(lSQL); // except on E:Exception do // Helios.Error(#1'Chyba generování dokladového řetězu: '#1 + E.Message); // end; //} // end; Helios.Refresh(true); // Helios.Info(#1'Import DL ukončen' + IfThen(idDZ>0,' + vygenerována výdejka/převodka CHD -> Lovato','...') +#1); Helios.Info(#1'Import DL ukončen' +#1); except on E:Exception do Helios.Error(#1'Chyba: ' + #1 + E.Message); end; end; end; // konec vložení čísla palety procedure TplgLOVATO.Run (const Helios: IHelios); const MinVerzeHelios = $030020260301; var lSQL, contInfo: string; PomHandle: THandle; MinVerze: Int64; Porovnani: TplgPorovnaniVerzi; VerzeDB: String; ZmenyOK: Boolean; SlepaProcName: string; SlepaProcGUID: string; SlepaProcBrowse: string; Browse: TplgBrowse; GUIDAkce: String; Q: IHeQuery; cRec, cntID, l_loop: integer; btnRes: TModalResult; sql, podm, dConv1,dConv2, podmDat, IDcka: string; arrID: TArray; typAkce: Integer; dt: TDateTime; jeTest: boolean; browID, idDZ, idKZ, iTmp: integer; params, paramsBak, vlastTbl, sTmp: string; // impEP : TformImportEP; CRM_akt: TformCRM_Aktivity; // dočasně zakomentováno 26.6.2018 // fDodavky: TformDodavky; fKmenZbozi: TformKartyZbozi; // fVydej: TformVydejka; fBL: TformBaliciListy; fDPVydej: TfrmVydejDPrace; // fPrijemNadvyroba: TformPrijemkaNadvyroba; fOdvedBarCode: TformOdvedeniPrikazu; fStSklHrZmen: TformStavSklHromZmeny; fRozdelMat: TfrmRozdelMat; fPrevPrij: TformPrevPrij; fDemontaz: TformDemontaz; fReklamaceMat: TformReklamaceMat; fMatRozp: TformMaterial; fOdvodRele: TformOdvodRele; fKanbanBox: TformKanbanBox; fKanbanObj: TformKanbanObj; CtvrtyParametr,PatyParametr: String; // přidáno 11.3.2019 SestyParametr, SedmyParametr, OsmyParametr, DevatyParametr, DesatyParametr: String; // přidáno 10.6.2022 IDForm: integer; // přidáno 11.3.2019 TypKooObj: boolean; // přidáno 6.5.2020 NadpisTypuKoopObj: String; // přidáno 6.5.2020 PokusVyjimka: double; // přidáno 10.6.2022 ZobrazitHlasku: Integer ; // přidáno 10.6.2022 SQLZp : string; // přidáno 18.7.2022 Zprava: string; // přidáno 18.7.2022 VerzeS : string; // přidáno 18.7.2022 VerzeCasti: TStringDynArray; // přidáno 18.7.2022 VerzeCislo: long; // přidáno 18.7.2022 begin try FHelios := Helios; SpravceHeliosu.PridejHelios (FHelios); try Application.OnException := Self.OnException; // [RK 10.04.2006] zavedeni PomHandle, problemy s realokaci ikonky // [RK 02.04.2009] doplneno pretypovani na THandle PomHandle := THandle(FHelios.MainApplicationHandle); if PomHandle <> Application.Handle then Application.Handle := PomHandle; PomHandle := THandle(FHelios.MainApplicationIconHandle); if PomHandle <> Application.Icon.Handle then Application.Icon.Handle := PomHandle; // ### INICIALIZACE ### InicializaceJadraPluginu (FHelios); PluginKonfig.VlastniInicializacePluginu (FHelios); // ### O PLUGINU ### if FHelios.BrowseID = BrowseID_PluginInfo then begin case FHelios.ExtKomID of Cplg_ExtKomID_About: begin InformaceOPluginu (FHelios); Exit; end; Cplg_ExtKomID_HlaskyNaWeb: begin plgPresunHlaskyNaWeb (FHelios); Exit; end; Cplg_ExtKomID_HlaskyDoDLL: begin plgStahniZWebuJazykovaDLL (FHelios); Exit; end; // AJ, 14./17.12.2015 - Administrátorská podpora v HeO - Odinstalace Cplg_ExtKomID_Odinstalace: begin PluginKonfig.PluginUninstall (FHelios); Exit; end; end; end; // ### test na verzi SQL Serveru ### if FHelios.SQLVersion < PluginKonfig.PluginMinimalniPozadovanaVerzeSQLServeru then raise Exception.Create( Format('%s (%s)'#13#13+plgCtiOznam(plxJadroPluginVyzadujeMinVerziSQL_X), [PluginKonfig.PluginVerejneJmeno, PluginKonfig.PluginSystemoveJmeno, plgVerzeSQLServeru(PluginKonfig.PluginMinimalniPozadovanaVerzeSQLServeru)])); // ### test na verzi Heliosu ### if plgObecnaVerze(FHelios.HeVersion, jvMajor) >= '3' then begin // Helios 3.x MinVerze := PluginKonfig.PluginMinimalniPozadovanaVerzeHeliosu_ver3; if MinVerze < Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu_ver3 then MinVerze := Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu_ver3; end else begin // Helios 2.x MinVerze := PluginKonfig.PluginMinimalniPozadovanaVerzeHeliosu; if MinVerze < Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu then MinVerze := Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu; end; if FHelios.HeVersion < MinVerze then raise Exception.Create( Format('%s (%s)'#13#13+plgCtiOznam(plxJadroPluginVyzadujeMinVerziX), [PluginKonfig.PluginVerejneJmeno, PluginKonfig.PluginSystemoveJmeno, plgObecnaVerze(MinVerze, jvCela)])); VerzeDB := plgNactiVerziPluginuZDB(FHelios, ZmenyOK); Porovnani := plgPorovnejVerziPluginuSVerziDB(VerzeDB); if Porovnani = pvDBMaVetsi then raise Exception.Create( Format('%s (%s)'#13#13'%s'#13#13'%s: %s'#13'%s: %s', [PluginKonfig.PluginVerejneJmeno, PluginKonfig.PluginSystemoveJmeno, plgCtiOznam(plxJadroVerzePluginuJeNizsiNezVDB), plgCtiOznam(plxJadroVerze_V_DB), VerzeDB, plgCtiOznam(plxJadroVerzePluginu), plgVerzePluginu(jvHexa)])); // ### INSTALACE PLUGINU ### if (FHelios.BrowseID = BrowseID_PluginInfo) and plgExtKomIDInstalace(FHelios) then begin InstalacePluginu(FHelios, (FHelios.ExtKomID = Cplg_ExtKomID_TichaInstalace)); Exit; end; // přidáno 14.6.2022 //Application.Handle := Helios.MainApplicationHandle; //Application.Icon.Handle := Helios.MainApplicationIconHandle; // konec přidání 14.6.2022 with Helios.OpenSQL('SELECT CONVERT(nvarchar(128),CONTEXT_INFO(),2)') do if VarIsNull(FieldValues(0)) then contInfo:= 'NULL' else contInfo:= VarToStr(FieldValues(0)); Helios.ExecSQL('SET CONTEXT_INFO 0x484443344C6F7661746F'); // nastav context v sys.sysprocesses (hexadecimalne HDC4Lovato) {$REGION 'Záznam do TabPlgUse'} dConv1:= '(CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,Datum))))'; dConv2:= '(CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,GETDATE() ))))'; podmDat:= dConv1 + '=' + dConv2; sql:= 'IF OBJECT_ID(N' + QuotedStr('[dbo].[_TabPlgUse]') + ',N' + QuotedStr('U') + ') IS NULL '; sql:= sql + 'CREATE TABLE [dbo].[_TabPlgUse] ([ID] int IDENTITY(1, 1) NOT NULL,'; sql:= sql + '[PlgJmeno] nvarchar(128) COLLATE Czech_CI_AS NOT NULL,'; sql:= sql + '[Uzivatel] nvarchar(128) COLLATE Czech_CI_AS DEFAULT suser_sname() NOT NULL,'; sql:= sql + '[Datum] datetime DEFAULT getdate() NOT NULL, [Status] tinyint DEFAULT 0 NOT NULL,'; sql:= sql + '[Stanice] nvarchar(128) COLLATE Czech_CI_AS DEFAULT host_name() NOT NULL)'; try Helios.ExecSQL(sql); except end; sql:= 'IF NOT EXISTS(SELECT id FROM [dbo].[_TabPlgUse] WHERE Uzivatel=SUSER_SNAME() AND Status=0 AND '; sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat + ')' + CRLF; sql:= sql + ' INSERT [dbo].[_TabPlgUse] (PlgJmeno,Status) VALUES (N' + QuotedStr('plgLOVATO') + ',0)' + CRLF; sql:= sql + 'UPDATE [dbo].[_TabPlgUse] SET Datum=GETDATE() WHERE Uzivatel=SUSER_SNAME() AND Status=0 AND '; sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat; try Helios.ExecSQL(sql); except end; {$ENDREGION} VerzeS := plgType.CVerzePluginu.ToHexString; if LeftStr(VerzeS,4)='0000' then VerzeS := MidStr(VerzeS, 5, 20); if (VerzeS.Length=12) then VerzeS := LeftStr(VerzeS, 2) + '.0.' + MidStr(VerzeS, 5, 4) + '.' + RightStr(VerzeS, 4) else // přidáno 18.7.2022 {$REGION 'Kontrola verze pluginu'} // kontrola verze pluginu VerzeS := GetFileVersion2(GetModuleName(HInstance)); VerzeCasti:= System.StrUtils.SplitString(VerzeS, '.'); SQL := ''; if Length(VerzeCasti) >= 1 then SQL := ', @VerzeDll1 = ' + QuotedStr(VerzeCasti[0]); if Length(VerzeCasti) >= 2 then SQL := SQL + ', @VerzeDll2 = ' + QuotedStr(VerzeCasti[1]); if Length(VerzeCasti) >= 3 then SQL := SQL + ', @VerzeDll3 = ' + QuotedStr(VerzeCasti[2]); if Length(VerzeCasti) >= 4 then SQL := SQL + ', @VerzeDll4 = ' + QuotedStr(VerzeCasti[3]); SQL := 'EXEC dbo.hpx_NTS_KontrolaVerzePluginu @SysJmeno = N' + QuotedStr(plgSysName) + ', @VerzeDll = N' + QuotedStr(VerzeS) + ', @Selectem = 1 ' + SQL; // SQL := 'EXEC dbo.hpx_NTS_KontrolaVerzePluginu @SysJmeno = N' + QuotedStr(plgSysName) + ', @VerzeDll = N' + QuotedStr(GetFileVersion2(GetModuleName(HInstance))) + ', @Selectem = 1'; With Helios.OpenSQL(SQL) do begin if VarToBool(FieldValues(0)) = False then begin Zprava := VarToStr(FieldValues(2)); case StrToInt(VarToStr(FieldValues(1))) of 1: begin Helios.error(Zprava); exit; end ; 2: begin if (Helios.YesNo(Zprava, false)) = false then exit; end; 3: begin Helios.info(Zprava); //exit; end ; end; end; end; //Helios.Info(INTToStr(GetFileVersion(GetModuleName(HInstance)))); //Helios.Info(GetModuleName(HInstance)); {$ENDREGION} // konec přidání 18.7.2022 {$REGION 'Zapis do TabPluginInfo'} { sTmp:= StringReplace(helUtils.GetFileVersion2(GetModuleName(HInstance)),'.','',[rfReplaceAll]); sTmp:= '0200' + MidStr(sTmp,3,8); if Length(sTmp)=11 then sTmp:= LeftStr(sTmp,8) + '0' + RightStr(sTmp,3); sql:= 'IF NOT EXISTS(SELECT id FROM ' + tblPlgInfo + ' WHERE NazevSys=N' + QuotedStr(plgSysName) + ')'; sql:= sql + ' INSERT ' + tblPlgInfo + ' (NazevSys,NazevObjektu,NazevVerejny,VerzePluginu,ZmenyOK) VALUES (N'; sql:= sql + QuotedStr(plgSysName) + ',N' + QuotedStr(plgSysName) + ',N' + QuotedStr('Plugin pro LOVATO electric'); sql:= sql + ',N' + QuotedStr(sTmp) + ',1) ELSE '; sql:= sql + 'UPDATE ' + tblPlgInfo + ' SET VerzePluginu=N' + QuotedStr(sTmp) + ' WHERE'; sql:= sql + ' NazevSys=N' + QuotedStr(plgSysName); try Helios.ExecSQL(sql); except end; } {$ENDREGION} // ### kontrola verze pluginu ### { if Porovnani = pvDBMaMensi then raise Exception.Create( Format('%s (%s)'#13#13'%s'#13#1'%s'#1#13#13'%s: %s'#13'%s: %s', [PluginKonfig.PluginVerejneJmeno, PluginKonfig.PluginSystemoveJmeno, plgCtiOznam(plxJadroVerzePluginuJeVyssiNezVDB), plgCtiOznam(plxJadroJeTrebaSpustitInstalaciPluginu), plgCtiOznam(plxJadroVerze_V_DB), VerzeDB, plgCtiOznam(plxJadroVerzePluginu), plgVerzePluginu(jvHexa)])); } if not ZmenyOK then raise Exception.Create( Format('%s (%s)'#13#13'%s'#13#1'%s'#1, [PluginKonfig.PluginVerejneJmeno, PluginKonfig.PluginSystemoveJmeno, plgCtiOznam(plxJadroMinulaInstalaceNeprobehlaKorektne), plgCtiOznam(plxJadroJeTrebaSpustitInstalaciPluginu)])); if FHelios.ExtKomID = Cplg_ExtKomID_EditorController then SpustControllerEditoru (FHelios) else if FHelios.ExtKomID = Cplg_ExtKomID_Zpravy then PluginKonfig.ExtKomIDJeRovnoNule (FHelios) else if FHelios.ExtKomID = Cplg_ExtKomID_Konfigurace then PluginKonfig.PluginConfiguration (FHelios) else begin // ### nacteni parametru akce ### Q := FHelios.OpenSQL( Format( 'SELECT CAST(CAST(GUID AS UNIQUEIDENTIFIER) AS NVARCHAR(36)) AS GUIDAkce, Parametry'#13+ ' FROM ' + tblExtKom + ' WHERE ID=%d', [FHelios.ExtKomID])); GUIDAkce:= Format('{%s}', [varToStr(Q.FieldValues(0))]); params:= Format('%s', [varToStr(Q.FieldByNameValues('Parametry'))]); paramsBak:= params; // ### SPUSTENI AKCE ### // [JAS 17.8.2015] - moznost spustit externi akci pluginu i z rucne vytvorene definice EA // Postup je nasledujici: // 1. V Heliosu vytvorit rucne externi akci typu plugin, doplnit spravne ProgID COM pluginu. Tato externi akce dostane automaticky prideleny novy GUID // 2. Vytvorit slepou proceduru, jejiz nazev musi byt tvoren maskou: epx__ // Jako GUID se do nazvu dava nove prideleny GUID rucne vytvorene akce z kroku 1. // 3. Slepa procedura musi vracet SELECTem dve hodnoty: // - GUID akce (vcetne slozenych zavorek!!), ktera se ma ve skutecnosti spustit (musi byt soucasti daneho pluginu) // - cislo prehledu nebo systemovy nazev (pokud jde o prehled daneho pluginu), ve kterem je puvodni akce definovana // //Priklad: // CREATE PROC dbo.epx_rpMujPlugin_9549A0D78192439C803255B8AD5484AD // AS // SELECT N'{506E3776-B9F0-4F37-97E3-5CBB78BC67A5}', N'hvw_MujPlugin_DefPrehled' SlepaProcName := 'dbo.epx_' + PluginKonfig.PluginSystemoveJmeno + '_' + plgGUIDBezPomlcek(GUIDAkce); if FHelios.OpenSQL('IF OBJECT_ID(' + plgNQuotedStr(SlepaProcName) + ', N''P'') IS NULL SELECT 0 ELSE SELECT 1').FieldValues(0)=1 then begin with FHelios.OpenSQL('EXEC ' + SlepaProcName) do begin SlepaProcGUID := VarToStr(FieldValues(0)); SlepaProcBrowse := VarToStr(FieldValues(1)); end; if plgJeObecnyPrehled(SlepaProcBrowse) then Browse := plgJmenoView2Browse (SlepaProcBrowse) else Browse := bZadny; if Browse <> bZadny then // akce nad prehledem pluginu SpustAkciPluginu(FHelios, Browse, SlepaProcGUID) else // akce nad tabulkou Heliosu, popr. jinym definovanym prehledem SpustAkciPluginuProTab(FHelios, StrToInt(SlepaProcBrowse), SlepaProcGUID); end else begin if plgJeObecnyPrehled(FHelios.BrowseID) then Browse := plgJmenoView2Browse(FHelios.MainBrowseTable) else Browse := bZadny; if Browse <> bZadny then // akce nad prehledem pluginu SpustAkciPluginu(FHelios, Browse, GUIDAkce) else // akce nad tabulkou Heliosu, popr. jinym definovanym prehledem SpustAkciPluginuProTab (FHelios, FHelios.BrowseID, GUIDAkce); end; {$REGION 'Region - zjistit typAkce, browID, vlastTbl, vytvor #TabExtKom'} typAkce:= 0; CtvrtyParametr :=''; // přidáno 6.5.2020 PatyParametr:= ''; // přidáno 6.5.2020 SestyParametr:= ''; // přidáno 10.6.2022 SedmyParametr:= ''; // přidáno 10.6.2022 OsmyParametr:= ''; // přidáno 10.6.2022 DevatyParametr:= ''; // přidáno 10.6.2022 DesatyParametr:= ''; // přidáno 10.6.2022 with Helios.OpenSQL('SELECT Parametry FROM TabExtKom WHERE ID=' + IntToStr(Helios.ExtKomID)) do begin params:= VarToStr(FieldValues(0)); jeTest:= false; if Pos('test', LowerCase(params))>0 then jeTest:= true; if Pos(';',params)>0 then begin typAkce:= StrToInt(LeftStr(params,Pos(';',params)-1)); params:= MidStr(params,Pos(';',params)+1,255); if Pos(';',params)>0 then browID:= StrToInt(LeftStr(params,Pos(';',params)-1)) else browID:= StrToInt(params); if Pos(';',params)>0 then // zadany 3 parametry (akce, browID, vlastnikID) begin params:= MidStr(params,Pos(';',params)+1,255); // přidáno 11.3.2019 if Pos(';',params)>0 then begin vlastTbl:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); if Pos(';',params)>0 then begin CtvrtyParametr:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); // přidáno 10.6.2022 if Pos(';',params)>0 then begin PatyParametr:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); if Pos(';',params)>0 then begin SestyParametr:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); if Pos(';',params)>0 then begin SedmyParametr:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); if Pos(';',params)>0 then begin OsmyParametr:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); if Pos(';',params)>0 then begin DevatyParametr:=LeftStr(params,Pos(';',params)-1); params:= MidStr(params,Pos(';',params)+1,255); DesatyParametr:= params; end else begin DevatyParametr := params; end; end else begin OsmyParametr := params; end; end else begin SedmyParametr := params; end; end else begin SestyParametr := params; end; end else begin PatyParametr := params; end; // konec přidání 10.6.2022 // PatyParametr:= params; // zakomentováno 10.6.2022 end else begin CtvrtyParametr := params; end; end else begin // konec přidání 11.3.2019 vlastTbl:= params; end end; end else raise Exception.Create('Nemám potřebný počet parametrů !'); end; lSQL:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'', ''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka nvarchar(255))'; Helios.ExecSQL(lSQL); {$ENDREGION} if (Helios.HeVersionbrowID) then begin typAkce := 0; Helios.Error ('Tento plugin lze volat pouze z přehledu: '#1 + IntToStr(browID) + #1'.'); end; IDcka := ''; cRec := 0; if (Helios.SelectedRecordIDs<>'') then IDcka := Helios.SelectedRecordIDs else if not VarIsNull(Helios.CurrentRecordID) then begin cRec:= StrToInt(VarToStr(Helios.CurrentRecordID)); IDcka:= IntToStr(cRec); end; if (IDcka<>'') then begin cntID := 1 + Length(IDcka)-Length(StringReplace(IDcka,',','',[rfReplaceAll])); SetLength (arrID,cntID); for l_loop:=0 to cntID-1 do begin if Pos(',',IDcka)>0 then begin arrID[l_loop] := StrToInt(LeftStr(IDcka,Pos(',',IDcka)-1)); IDcka := MidStr(IDcka,Pos(',',IDcka)+1,65535) end else arrID[l_loop] := StrToInt(IDcka); end; cRec := arrID[0]; end; ReseedTable (Helios, tblDZ); ReseedTable (Helios, tblPZ); case typAkce of 1: begin // import objednavky do ExpPr idDZ:= 0; if (vlastTbl<>'') then idDZ:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('id'))); ImportEP (Helios, idDZ, true); end; 2: begin // import prijemky materialu (packinglist) do Prijmu idDZ:= 0; if (vlastTbl<>'') then idDZ:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('id'))); ImportEP (Helios, idDZ, false); // stejna procedura jako pri importu IT objednavky end; 3: begin CRM_akt:= TformCRM_Aktivity.Create(nil); try CRM_akt.Helios:= Helios; CRM_akt.idAkt:= 0; if (vlastTbl='1') then CRM_akt.idAkt:= cRec; CRM_akt.ShowModal; finally CRM_akt.Free; end; Helios.Refresh (true); // dočasně zakomentováno 26.6.2018 end; 4: begin if (cRec>0) then begin params:= ''; sTmp:= ''; idKZ:= cRec; // id nad prehledem Zbozi a sluzby if (Helios.BrowseID=bidSS) then with Helios.OpenSQL('SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + IntToStr(cRec)) do idKZ:= StrToInt(VarToStr(FieldValues(0))); if (Helios.BrowseID=bidPZ) then begin sql:= 'SELECT kze.id FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS; sql:= sql + ' ss ON (pz.IDZboSklad=ss.id) INNER JOIN ' + tblKZ + ' kz ON (ss.idKmenZbozi=kz.id)'; sql:= sql + ' INNER JOIN ' + tblKZe + ' kze ON (kz.id=kze.id) WHERE pz.id=' + IntToStr(cRec); with Helios.OpenSQL(sql) do if (RecordCount=1) then idKZ:= StrToInt(VarToStr(FieldValues(0))); end; with Helios.OpenSQL('SELECT ISNULL(_UmisteniPrijem,N'''') FROM ' + tblKZe + ' WHERE id=' + IntToStr(idKZ)) do if (RecordCount=1) then begin if not VarIsNull(FieldValues(0)) then begin sTmp:= InputBoxOkCancel('Umístění materiálu','Umístění: ', VarToStr(FieldValues(0)),btnRes); if (btnRes=mrCancel) then Exit; params:= 'UPDATE ' + tblKZe + ' SET _UmisteniPrijem='; if (sTmp='') then params:= params + 'null' else params:= params + 'N' + QuotedStr(sTmp); params:= params + ' WHERE id=' + IntToStr(idKZ); end end else begin sTmp:= InputBoxOkCancel('Umístění materiálu','Umístění: ', '',btnRes); if (btnRes<>mrCancel) then begin if (sTmp<>'') then begin params:= 'IF NOT EXISTS(SELECT id FROM ' + tblKZe + ' WHERE id=' + IntToStr(idKZ) + ')'; params:= params + ' INSERT ' + tblKZe + ' (id,_UmisteniPrijem) VALUES (' + IntToStr(idKZ); params:= params + ',N' + QuotedStr(sTmp) + ')'; end; end; end; if (params<>'') then Helios.ExecSQL(params); Helios.Refresh(true); end else Helios.Error(#1'Změna umístění lze udělat pouze nad jednou kartou.'#1); { fDodavky:= TformDodavky.Create(nil); try fDodavky.Helios:= Helios; fDodavky.idOrg:= cRec; fDodavky.ShowModal; finally fDodavky.Free; end; } end; 5: begin fKmenZbozi:= TformKartyZbozi.Create(nil); try fKmenZbozi.Helios:= Helios; fKmenZbozi.idKZ:= 0; if (vlastTbl='edit') then begin case (Helios.BrowseID) of bidSS: fKmenZbozi.idKZ:= StrToInt(VarToStr(Helios.QueryBrowse.FieldByNameValues('idKmenZbozi'))); bidKZ: fKmenZbozi.idKZ:= cRec; end; end; fKmenZbozi.ShowModal; finally fKmenZbozi.Free; end; end; 6: begin if Helios.YesNo(#1'VÝDEJKA KOOPERANTOVI' + CRLF + 'Přejete si vygenerovat položky podle požadavků kooperanta ?'#1,false) then begin if (cRec=0) then // tvorim to z ulozeneho Dokladu? NE pak vezmi ID dokladu z QueryEditu cRec:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('id'))); // sql:= 'EXEC dbo.ep_NTS_VydejkaKooperantovi NULL,' + IntToStr(cRec); // sql:= sql + ',' + VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg')); // Helios.ExecSQL(sql); // Helios.Refresh(true); // Helios.Info('Položky byly uloženy na doklad.'); end; end; 7: begin // nesplnene objednavky ImportNesplObj(Helios); end; 8: begin // editace vydejky zjednodusene, viz bod 9 + edit end; 9: begin fBL:= TformBaliciListy.Create(nil); try fBL.idDZ:= 0; if (vlastTbl='edit') then fBL.idDZ:= cRec; fBL.typ:= 3; fBL.Helios:= Helios; fBL.ShowModal; finally fBL.Free; end; end; { 10: begin GenerujVydejMatZPrikazu(Helios, cRec); end; } 10: begin if (cRec>0) then begin // if TestKoopObjVydejMat(Helios,cRec) then begin { fPrijemNadvyroba:= TformPrijemkaNadvyroba.Create(nil); try fPrijemNadvyroba.idPKObj:= cRec; fPrijemNadvyroba.Helios:= Helios; fPrijemNadvyroba.ShowModal; finally fPrijemNadvyroba.Free; end; } end // else // Helios.Error(#1'Na příkaz nebyl vydán žádný materiál.'#1); end; end; 11: begin with Helios.OpenSQL('SELECT id FROM ' + tblKObj + ' WHERE realizovano=0 AND id=' + IntToStr(cRec)) do if (RecordCount=0) then begin TypKooObj := (CtvrtyParametr = 'TypObj=1'); // přidáno 6.5.2020 if (PatyParametr='') then NadpisTypuKoopObj := ' ' else NadpisTypuKoopObj := PatyParametr; // přidáno 6.5.2020 // ExportKoopObj(Helios, cRec, TypKooObj, NadpisTypuKoopObj, vlastTbl) ; // přidáno 6.5.2020 // zakomentováno 10.6.2022 ExportKoopObjXls (Helios, cRec, TypKooObj, NadpisTypuKoopObj, vlastTbl, '', '', 1) ; // přidáno 10.6.2022 // ExportKoopObj(Helios, cRec) ; //zakomentováno 6.5.2020 end else Helios.Error(#1'Kooperační objednávka není realizována, nelze exportovat.'#1 + CRLF + 'Realizujte jí a zkuste to znovu.'); end; 12: begin // Hromadna uprava Pozadovany termin dodani na polozkach kooperacni objednavky sql := 'SELECT ko.id FROM ' + tblPKObj + ' pko INNER JOIN ' + tblKObj + ' ko ON (pko.IDObjednavky=ko.id)'; sql := sql + ' WHERE ko.Realizovano=1 AND pko.id=' + IntToStr(arrID[0]); with Helios.OpenSQL(sql) do if (RecordCount=0) then begin if FormDatum('Zadejte datum','Požadovaný termín dodání:',dt) then for l_loop:=0 to Length(arrID)-1 do begin sql := 'UPDATE ' + tblPKObj + ' SET PozadTerDod=CONVERT(datetime,N' + QuotedStr(DateToStr(dt)) + ',104)'; sql := sql + ' WHERE id=' + IntToStr(arrID[l_loop]); try Helios.ExecSQL (sql); Helios.ExecSQL ('EXEC dbo.ep_DoplnKooperacniCeny ' + IntToStr(arrID[l_loop])); except on E:Exception do Helios.Error ('Nelze upravit datum pro položku kooperační objednávky.'); end; Helios.Refresh (true); end; end else Helios.Error(#1'Tato kooperační objednávka byla již realizována,' + CRLF + 'požadované termíny nejdou změnit.'#1); end; 13: begin if (vlastTbl='del') and (cRec>0) then begin if Helios.YesNo('Opravdu chcete zrušit objednávku Nadvýroby ?',false) then SmazObjNadvyroby(Helios,cRec) end else begin fDPVydej := TfrmVydejDPrace.Create(nil); try fDPVydej.Helios := Helios; fDPVydej.ShowModal; finally fDPVydej.Free; end; end; end; 14: begin if (vlastTbl='del') and (cRec>0) then begin if Helios.YesNo('Opravdu chcete smazat tento záznam?',false) then begin try lSQL := 'BEGIN TRAN x' + CRLF + 'UPDATE ' + tblEvidNadvyr + ' SET Zaevidovano=Zaevidovano-'; with Helios.OpenSQL('SELECT Mnozstvi FROM ' + tblEvidOp + ' WHERE id=' + IntToStr(cRec)) do if (RecordCount=0) then lSQL := lSQL + '0' else lSQL := lSQL + StringReplace(VarToStr(FieldValues(0)),',','.',[rfReplaceAll]); lSQL := lSQL + ' WHERE id=' + IntToStr(cRec) + CRLF; lSQL := lSQL + 'DELETE FROM ' + tblEvidOp + ' WHERE id=' + IntToStr(cRec) + CRLF; lSQL := lSQL + 'DELETE FROM ' + tblEvidNadvyrVPr + ' WHERE IdEvidOpBarcode=' + IntToStr(cRec) + CRLF; lSQL := lSQL + 'DELETE FROM ' + tblEvidOpVPr + ' WHERE IdEvidOper=' + IntToStR(cRec) + CRLF; lSQL := lSQL + 'IF (@@ERROR>0) ROLLBACK TRAN x ELSE COMMIT TRAN x'; Helios.ExecSQL (lSQL); except on E:Exception do Helios.Error(#1'Chyba při mazání záznamu.'#1 + CRLF + E.Message); end; end; end else begin fOdvedBarCode:= TformOdvedeniPrikazu.Create(nil); try if CtvrtyParametr = 'tisk' then begin // přidáno 11.3.2019 fOdvedBarCode.TiskListku := true; idForm := StrToInt(PatyParametr); fOdvedBarCode.idTiskForm := idForm; end else begin fOdvedBarCode.TiskListku := false end; // konec přidání 11.3.2019 fOdvedBarCode.Helios := Helios; fOdvedBarCode.typOdvodu := 2; // podle vyrobku fOdvedBarCode.jeTest:= (LowerCase(Trim(vlastTbl))='test'); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Start plugin - Odvedení práce')); fOdvedBarCode.ShowModal; finally fOdvedBarCode.Free; end; // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Konec plugin - Odvedení práce')); end; Helios.Refresh (true); end; 15: begin // z odvedeni daneho vyrobniho prikazu "preved" dilec na vydejku vyvozu, zachova se vazba na ExpPr + aktualizuje se odebrane mnozstvi ZadejPolPrijemkyNaVydejku(Helios,cRec); end; 16: begin fStSklHrZmen:= TformStavSklHromZmeny.Create(nil); try fStSklHrZmen.Helios := Helios; fStSklHrZmen.arrID := arrID; fStSklHrZmen.ShowModal; finally fStSklHrZmen.Free; end; end; 17: begin // z vyrobniho prikazu "preved" dilec na vydejku vyvozu, zachova se vazba na ExpPr + aktualizuje se odebrane mnozstvi ZadejVyrPrikazNaVydejku(Helios,cRec); end; 18: begin StavSkladuDoZadVyp(Helios); // vybrane karty ze Stavu skladu (vc.mnozstvi) do Predbezneho planu + smazani stareho end; 19: begin ImportZClipboardu(Helios, 1); //typ=1 -> import Min/Max do TabStavSkladuImp end; 20: begin PrevodStavSkladuImp(Helios,1); //typ=1 -> import Min/Max do TabStavSkladuImp end; 21: begin VyrabeneDilceDoZadVyp(Helios); // vybrane dilce do Predbezneho planu + smazani stareho (mnozstvi 1) end; 22: begin if Length(arrID)>0 then begin try fRozdelMat:= TfrmRozdelMat.Create(nil); fRozdelMat.Helios:= Helios; if Helios.BrowseID=bidSS then fRozdelMat.aIdSS:= myUtils.ArrayIntToStr(arrID) else fRozdelMat.aIdDZ:= myUtils.ArrayIntToStr(arrID); fRozdelMat.ShowModal; finally fRozdelMat.Free; end; end; { sql:= 'IF OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ') IS NOT NULL DROP TABLE ' + tblRozpPrijStav; sql:= sql + CRLF + 'CREATE TABLE ' + tblRozpPrijStav + '(IdKmenZbozi INT NOT NULL, Mnozstvi NUMERIC(19,6)'; sql:= sql + ' NOT NULL DEFAULT 0.0, CisloZbozi NVARCHAR(33), Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())'; Helios.ExecSQL(sql); for l_loop:=0 to Length(arrID)-1 do begin RozpadPrijStavNaKooperanty(Helios,arrID[l_loop],0); end; with Helios.OpenSQL('SELECT Autor FROM ' + tblRozpPrijStav + ' WHERE Autor=SUSER_SNAME()') do if RecordCount>0 then begin podm:= 'SELECT r.*,kz.SkupZbo,kz.RegCis,kz.Nazev1 FROM _TabRozpadPrijStav r INNER JOIN ' + tblKZ; podm:= podm + ' kz ON (r.IdKmenZbozi=kz.id) WHERE r.Autor=SUSER_SNAME()'; sql:= 'IF OBJECT_ID(N' + QuotedStr('dbo.hvw_RozpadPrijStav') + ',N''V'') IS NOT NULL'; sql:= sql + ' DROP VIEW [dbo].[hvw_RozpadPrijStav]' + CRLF; Helios.ExecSQL(sql); sql:= 'CREATE VIEW dbo.hvw_RozpadPrijStav AS ' + podm + CRLF; Helios.ExecSQL(sql); sql:= 'UPDATE dbo.TabObecnyPrehled SET DefView=N' + QuotedStr(podm) + ' WHERE NazevSys=N' + QuotedStr('hvw_RozpadPrijStav'); Helios.ExecSQL(sql); Helios.OpenBrowse(100038,'Autor=SUSER_SNAME()'); end; end; } end; 23: begin sql:= 'SELECT dz.id,odz.id FROM ' + tblDZ + ' dz LEFT JOIN ' + tblDZ + ' odz ON (dz.id=odz.NavaznyDoklad)'; sql:= sql + ' WHERE (dz.Realizovano=1 OR odz.Realizovano=1) AND dz.id=' + IntToStr(cRec); with Helios.OpenSQL(sql) do if (RecordCount>0) then Helios.Error(#1'Tento doklad nebo zdrojový doklad jsou realizované - nelze opravovat.'#1) else begin fPrevPrij:= TformPrevPrij.Create(nil); try fPrevPrij.idDZold:= 0; with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE NavaznyDoklad=' + IntToStr(cRec)) do fPrevPrij.idDZold:= VarHodnota(FieldValues(0),0); fPrevPrij.idDZ:= cRec; fPrevPrij.Helios:= Helios; fPrevPrij.ShowModal; finally fPrevPrij.Free; end; end; end; 24: begin // presun kooperace na prikazech do polozek koop.objednavky ! se seskupenim dle vyrobku a data dodani ! KooperaceniPolozkySeSeskupenim(Helios); end; 25: begin fDemontaz:= TformDemontaz.Create(nil); try if (Length(arrID)>1) then fDemontaz.idPols:= arrID; fDemontaz.jeTest:= jeTest; fDemontaz.Helios:= Helios; fDemontaz.ShowModal; finally fDemontaz.Free; end; end; 26: begin Screen.Cursor:= crHourGlass; UpdateWindow(hInstance); ImportStavuInventur(Helios); Screen.Cursor:= crDefault; Helios.Refresh(true); end; 27: begin fMatRozp:= TformMaterial.Create(nil); try fMatRozp.idMat:= cRec; fMatRozp.Helios:= Helios; fMatRozp.ShowModal; finally fMatRozp.Free; end; end; 28: begin { fOdvodRele:= TformOdvodRele.Create(nil); try fOdvodRele.Helios:= Helios; fOdvodRele.ShowModal; finally fOdvodRele.Free; end; } fOdvedBarCode:= TformOdvedeniPrikazu.Create(nil); try if CtvrtyParametr = 'tisk' then begin // přidáno 11.3.2019 fOdvedBarCode.TiskListku := true; idForm:= StrToInt(PatyParametr); fOdvedBarCode.idTiskForm := idForm; end else begin fOdvedBarCode.TiskListku := false end; // konec přidání 11.3.2019 fOdvedBarCode.Helios:= Helios; fOdvedBarCode.typOdvodu:= 1; // podle prikazu fOdvedBarCode.ShowModal; finally fOdvedBarCode.Free; end; Helios.Refresh(true); end; 29: begin if (cRec>0) then ExportKoopObjHQL(Helios, cRec); end; 30: begin fReklamaceMat:= TformReklamaceMat.Create(nil); try fReklamaceMat.Helios:= Helios; fReklamaceMat.ShowModal; finally fReklamaceMat.Free; end; end; 31: ImportDL_CHD(Helios); 32: begin if (vlastTbl='del') then begin if Helios.YesNo('Opravdu chcete smazat tento kanban box ?', false) then begin with Helios.OpenSQL('SELECT id FROM dbo._TabKanbanPohyby WHERE IdKanbanBox=' + IntToStr(cRec)) do if (RecordCount=0) then Helios.ExecSQL('DELETE FROM dbo._TabKanbanBox WHERE id=' + IntToStr(cRec)) else Helios.Error(#1'Box byl použit při objednávkách, nelze smazat.'#1); end; end else begin try fKanbanBox:= TformKanbanBox.Create(nil); if (vlastTbl='edit') then fKanbanBox.idBox:= cRec else fKanbanBox.idBox:= 0; fKanbanBox.Helios:= Helios; fKanbanBox.ShowModal; finally fKanbanBox.Free; end; end; end; 33: begin if (vlastTbl='del') then begin with Helios.OpenSQL('SELECT id FROM dbo._TabKanbanObj WHERE Id=' + IntToStr(cRec) + ' AND IdKoopObj IS NULL AND IdVydejObalu IS NULL') do if (RecordCount=1) then begin // přidáno 18.3.2021 with Helios.OpenSQL('SELECT COUNT(1) FROM dbo._TabKanbanPohyby WHERE IdKanbanObj = ' + IntToStr(cRec) + ' AND IDPrikaz IS NOT NULL' ) do begin if not VarIsNull(FieldValues(0)) and (VarToStr(FieldValues(0))<>'0') and (VarToStr(FieldValues(0))<>'') then begin Helios.Error(#1'Z objednávky byla vygenerována Kooperační objednávka nebo výrobní příkazy, nelze jí tedy smazat.'#1); exit; end; end; // konec přidání 18.3.2021 if Helios.YesNo('Opravdu smazat tuto kanban objednávku ?',false) then begin Helios.ExecSQL('DELETE FROM dbo._TabKanbanPohyby WHERE IdKanbanObj=' + IntToStr(cRec)); Helios.ExecSQL('DELETE FROM dbo._TabKanbanObj WHERE id=' + IntToStr(cRec)); Helios.Refresh(true); end end else Helios.Error(#1'Z objednávky byla vygenerována výdejka obalů nebo Kooperační objednávka, nelze jí smazat.'#1); end else begin fKanbanObj:= TformKanbanObj.Create(nil); try if (vlastTbl='edit') then fKanbanObj.idObj:= cRec else fKanbanObj.idObj:= 0; // přidáno 10.6.2022 if (CtvrtyParametr <> '') and (trim(CtvrtyParametr) = '1') then fKanbanObj.PoslatEmail:= 1 {StrToInt(VarToStr(CtvrtyParametr))} else fKanbanObj.PoslatEmail:= 0; // přidáno 10.6.2022 if PatyParametr = 'TypObj=1' then TypKooObj:= true else TypKooObj:= false; // přidáno 6.5.2020 if SestyParametr = '' then NadpisTypuKoopObj:= ' ' else NadpisTypuKoopObj:= SestyParametr; // přidáno 6.5.2020 fKanbanObj.TypKooObj := TypKooObj; fKanbanObj.NadpisTypuKoopObj := NadpisTypuKoopObj; fKanbanObj.Zarovnani := SedmyParametr; fKanbanObj.Cesta := OsmyParametr ; fKanbanObj.Nazev := DevatyParametr; // Helios.Info('ID: "' + IntToStr(fKanbanObj.idObj) + '", ZobrTypKooObj:"' + BoolToStr(TypKooObj) + '", NadpisTypuKoopObj"' + NadpisTypuKoopObj + '", Zarovnani: "' + fKanbanObj.Zarovnani + '", cesta: "' + fKanbanObj.Cesta + '", Nazev: "' + fKanbanObj.Nazev + '"'); // konec přidání 10.6.2022 fKanbanObj.Helios:= Helios; fKanbanObj.ShowModal; finally fKanbanObj.Free; end; end; end; 34: KontrolaExistVsechObj (Helios); 35: ImportZClipboardu (Helios, 2); 36: ImportObjMaterialu (Helios, 0); // sdileny material = 1 37: ImportObjMatEdit (Helios, cRec); //38: ImportDL(Helios); // import dodacího listu včetně čísla palety // zakomentováno 27.4.2022 38: if (vlastTbl<>'zpracPluginem') then ImportDL (Helios, true) else ImportDL(Helios, false); // přidáno 27.4.2022 // přidáno 10.6.2022 39: begin with Helios.OpenSQL ('SELECT id FROM ' + tblKObj + ' WHERE realizovano=0 AND id=' + cRec.ToString) do if (RecordCount=0) then begin TypKooObj := (CtvrtyParametr='TypObj=1'); // přidáno 6.5.2020 if (PatyParametr='') then NadpisTypuKoopObj := ' ' else NadpisTypuKoopObj := PatyParametr; // přidáno 6.5.2020 if (OsmyParametr<>'1') then ZobrazitHlasku := 0 else ZobrazitHlasku := 1; // Helios.Info('ID: "' + IntToStr(cRec) + '", ZobrTypKooObj:"' + BoolToStr(TypKooObj) + '", NadpisTypuKoopObj"' + NadpisTypuKoopObj + '", Zarovnani: "' + vlastTbl + '", cesta: "' + SestyParametr + '", Nazev: "' + SedmyParametr + '", ZobrazInfoKonec: "'+ IntToStr(ZobrazitHlasku) + '"'); ExportKoopObjXls (Helios, cRec, TypKooObj, NadpisTypuKoopObj, vlastTbl, SestyParametr, SedmyParametr, ZobrazitHlasku) ; // přidáno 6.5.2020 // ExportKoopObj(Helios, cRec) ; //zakomentováno 6.5.2020 end else Helios.Error(#1'Kooperační objednávka není realizována, nelze exportovat.'#1 + CRLF + 'Realizujte jí a zkuste to znovu.'); end; // konec přidání 10.6.2022 40: begin ImportReklamace (Helios); end; 255: begin // ReseedTable(Helios,'[dbo].[]'); ReseedTable (Helios, tblDZ); ReseedTable (Helios, tblPZ); ReseedTable (Helios, tblSZ); ReseedTable (Helios, '[dbo].[TabParametryKmeneZbozi]'); ReseedTable (Helios, tblKZ); ReseedTable (Helios, tblBCode); ReseedTable (Helios, tblSS); ReseedTable (Helios, tblOrg); ReseedTable (Helios, tblCZam); ReseedTable (Helios, tblJC); ReseedTable (Helios, tblNC); ReseedTable (Helios, '[dbo].[TabMJ]'); ReseedTable (Helios, tblStrom); ReseedTable (Helios, '[dbo].[TabParKmZ]'); ReseedTable (Helios, '[dbo].[TabKVazby]'); ReseedTable (Helios, '[dbo].[TabPostup]'); ReseedTable (Helios, '[dbo].[TabPrKVazby]'); ReseedTable (Helios, tblPrikaz); ReseedTable (Helios, '[dbo].[TabPrikazP]'); ReseedTable (Helios, '[dbo].[TabKalkCe]'); ReseedTable (Helios, '[dbo].[TabInvPolozka]'); ReseedTable (Helios, tblPrPost); ReseedTable (Helios, tblCPrac); end; 997: begin Helios.Info ('Test Výjimky'); // Helios.ExecSQL('Select * fro'); Helios.Info ('Prošlo to'); end; 998: begin Helios.Info ('Test Výjimky'); PokusVyjimka := 5/0; raise Exception.Create('Error Message'); Helios.Info ('Prošlo to'); end; 999: begin Helios.Info ('Test Výjimky'); //PokusVyjimka := 5/0; raise Exception.Create ('Error Message'); Helios.Info ('Prošlo to'); end; end; if (contInfo='NULL') then Helios.ExecSQL ('SET CONTEXT_INFO 0x') else Helios.ExecSQL ('SET CONTEXT_INFO 0x' + contInfo); // vymaz context v sys.sysprocesses (hexadecimalne NTSmodulLOV) try with Helios.OpenSQL ('IF OBJECT_ID(''tempdb..#TabExtKom'', ''U'') IS NOT NULL SELECT Poznamka FROM #TabExtKom') do if (RecordCount>0) then Helios.OpenBrowse (541,''); finally end; Helios.Refresh (true); end; finally SpravceHeliosu.OdeberHelios (FHelios); end; {$REGION 'Záznam do TabPlgUse'} sql:= 'IF NOT EXISTS(SELECT id FROM [dbo].[_TabPlgUse] WHERE Uzivatel=SUSER_SNAME() AND Status=1 AND '; sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat + ')' + CRLF; sql:= sql + ' INSERT [dbo].[_TabPlgUse] (PlgJmeno,Status) VALUES (N' + QuotedStr('plgLOVATO') + ',1)' + CRLF; sql:= sql + 'UPDATE [dbo].[_TabPlgUse] SET Datum=GETDATE() WHERE Uzivatel=SUSER_SNAME() AND Status=1 AND '; sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat; try Helios.ExecSQL(sql); except end; {$ENDREGION} // Helios.Refresh(true); except // neni to pres Application.HandleException() kvuli probublani vyjimky // do Heliosu (konkretni pouziti napr. v Automatu) on E: EExternal do begin LockWindowUpdate(0); // jistota, kdyby nekde zustalo viset raise EExternal.Create(E.Message); end; on E: Exception do begin LockWindowUpdate(0); // jistota, kdyby nekde zustalo viset E.Message := plgPrelozException(E.Message); raise; end; end; end; INITIALIZATION dxCore.dxInitialize; // dxUnitsLoader.Initialize; // hdl:= LoadPackage('HeLib.bpl'); // SetThreadLocale(LOCALE_USER_DEFAULT); // GetFormatSettings; TComObjectFactory.Create(ComServer, TplgLOVATO, Class_LOVATO, 'runMe', '', ciMultiInstance, tmSingle); finalization // dxUnitsLoader.Finalize; dxCore.dxFinalize; END.