unit frmOdvedPrikaz; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, RzEdit, RzBtnEdt, ddPlugin_TLB, Vcl.ComCtrls, NxGrid6, NxCustomGrid6, NxColumns6, Vcl.Buttons, Vcl.Menus, RzDTP, NxGridView6, NxControls6, NxVirtualGrid6, Vcl.WinXCtrls; const clYellowLight = $0078F8E8; DesignTimePixelsPerInch = 120; KLF_ACTIVATE = $00000001; KLF_SETFORPROCESS = $00000100; radaVPNadvyroba = '400'; radaVPRekl = '090'; radaVPVyroba = '100'; sklVyr = '200'; sklFin = '210'; sklObch = '100'; sklDP = '20000105'; // nadvyroba bidHrOdvod = 100053; bidFrontaPrace = 11109; radaOdved = '220'; radaOdvedO = '150'; radaOdvedNad = '240'; rDoklVydMat = '400'; rDoklVydMatO = '350'; tblEvidOp = '[dbo].[_TabEvidOperaci_Barcode]'; tblEvidOpPol = '[dbo].[_TabEvidOpPolozky]'; tblEvidOpVPr = '[dbo].[_TabEvidOpPrikazy]'; tblEvidNadvyr = '[dbo].[_TabEvidNadvyroby]'; tblEvidNadPrij = '[dbo].[_TabEvidNadvyrPrijmy]'; tblEvidNadvyrVPr = '[dbo].[_TabEvidNadvyrPrikaz]'; errPlg = #13#10 + '(plgLOVATO.u10)'; sklVyroba = '200'; // přidáno 8.11.2018 type TidVPs = record id: integer; radaPrikaz: string[20]; idKZ: integer; ks: Extended; end; TOperace = record idVP: integer; doklad: integer; operace: integer; casS: extended; ks: extended; koef: extended; end; TcasKoef = record operace: ShortString; koef: extended; end; TformOdvedeniPrikazu = class(TForm) selPrikaz: TRzButtonEdit; lblDilec: TLabel; Label2: TLabel; Label3: TLabel; lblZadane: TLabel; lblZive: TLabel; selBarCode: TRzButtonEdit; edtKusu: TRzNumericEdit; Label1: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; edtCasMin: TRzNumericEdit; selZamest: TRzButtonEdit; lblZamest: TLabel; cbCasMzda: TCheckBox; edtCasHod: TRzNumericEdit; Label7: TLabel; Label8: TLabel; Label9: TLabel; lblEvid: TLabel; GroupBox2: TGroupBox; selDilec: TRzButtonEdit; Label10: TLabel; selSmena: TRzButtonEdit; gOperace: TNextGrid6; colOper: TNxNumberColumn6; colPopis: TNxTextColumn6; colEvid: TNxCheckBoxColumn6; btnSave: TBitBtn; btnCancel: TBitBtn; pOperace: TPopupMenu; pOdznacVse: TMenuItem; pVyberVse: TMenuItem; Label11: TLabel; Label12: TLabel; colIdPostup: TNxNumberColumn6; colNormCasS: TNxNumberColumn6; Label13: TLabel; cbSklad: TComboBox; dtDatum: TRzDateTimePicker; grpTampo: TGroupBox; grpNadvyroba: TGroupBox; Label14: TLabel; selVydejMat: TRzButtonEdit; Label15: TLabel; selFronta: TRzButtonEdit; gView: TNxReportGridView6; procedure selPrikazButtonClick(Sender: TObject); procedure selBarCodeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormShow(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure selZamestButtonClick(Sender: TObject); procedure selZamestKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtCasMinKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selZamestExit(Sender: TObject); procedure Label6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure edtCasHodKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selDilecButtonClick(Sender: TObject); procedure selDilecKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selDilecExit(Sender: TObject); procedure edtKusuExit(Sender: TObject); procedure edtKusuKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure pOdznacVseClick(Sender: TObject); procedure pVyberVseClick(Sender: TObject); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selDilecKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selVydejMatButtonClick(Sender: TObject); procedure selVydejMatExit(Sender: TObject); procedure selPrikazExit(Sender: TObject); procedure selBarCodeExit(Sender: TObject); procedure selFrontaExit(Sender: TObject); procedure selFrontaButtonClick(Sender: TObject); procedure selPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormResize(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure selZamestEnter(Sender: TObject); procedure edtKusuEnter(Sender: TObject); procedure selDilecEnter(Sender: TObject); procedure ZadejVyrPrikazNaVydejku(const Helios: IHelios; idVPr: Integer; MnozstviNaVydejku: double); // přidáno 8.11.2018 procedure UlozChybu(const Helios: IHelios; msg: string; E:Exception); // přidáno 8.11.2018 private // procedure WMNCLBUTTONDOWN(var msg: TMessage); message WM_NCLBUTTONDOWN; function TestFormulareOK: Boolean; function VlastniSkladySQL(const datum: string): string; procedure VyplnPrikaz; procedure VyplnDleDilce; procedure VyplnFrontuPrace; procedure NastavGrid; public Helios: IHelios; typOdvodu: byte; jeTest: boolean; end; var verText: string; formOdvedeniPrikazu: TformOdvedeniPrikazu; idPrikaz, idKZ, idDZ, idPZ, idVydej, idNadvyr, idPrPostup: integer; sklProOdvod, dokl, kmen, cZam, idZam, operaceFP: string; vOle1,vOle2: OleVariant; casTPVs,casTPVm: Extended; canCont, nadvyroba: boolean; layName: array[0..KL_NAMELENGTH+1] of Char; implementation uses Vcl.Clipbrd, System.StrUtils, System.Threading, helUtils, myUtils; {$R *.dfm} { procedure TformOdvedeniPrikazu.WMNCLBUTTONDOWN(var msg: TMessage); var txt: string; begin if (msg.WParam=HTCAPTION) and (HiWord(GetKeyState(VK_SHIFT))<>0) then begin txt:= 'Scr ' + IntToStr(Screen.Width) + ' w / ' + IntToStr(Screen.Height) + ' h' + CRLF; txt:= txt + 'Frm ' + IntToStr(Self.Width) + ' w / ' + IntToStr(Self.Height) + ' h' + CRLF; txt:= txt + IntToStr(Screen.PixelsPerInch) + ' PPI mon / ' + IntToStr(Self.PixelsPerInch) + ' PPI frm' + CRLF; Helios.Info(txt); end; end; } function TformOdvedeniPrikazu.VlastniSkladySQL(const datum: string): string; var sql: string; begin result:= 'N' + QuotedStr(''); sql:= 'DECLARE @dt DATETIME; DECLARE @i INT;'; if (datum<>'') then sql:= sql + ' SET @dt=CONVERT(datetime,N' + QuotedStr(datum) + ',104); EXEC @i=dbo.hp_GetObdobiDleDatumu @Datum=@dt, @JakyDatum=1' else sql:= sql + ' SET @i=' + IntToStr(Helios.Obdobi); sql:= sql + '; SELECT s.Cislo FROM ' + tblStrom + ' s INNER JOIN dbo.TabStromDef d ON (d.IdStrom=s.Id) WHERE d.Blokovano=0 AND d.Zakazano=0'; sql:= sql + ' AND s.Cislo LIKE N' + QuotedStr('2%') + ' AND s.Nazev LIKE N' + QuotedStr('%LOV') + ' AND d.IdObdobi=@i ORDER BY s.Cislo'; with Helios.OpenSQL(sql) do if (RecordCount>0) then begin First; result:= ''; while not(EOF) do begin result:= result + 'N' + QuotedStr(FieldValues(0)) + ','; Next; end; if (RightStr(result,1)=',') then result:= LeftStr(Result, Length(Result)-1); end; end; procedure TformOdvedeniPrikazu.NastavGrid; begin // gOperace.HeaderSize:= Screen.PixelsPerInch if (gOperace.RowCount<1) then gOperace.ClearRows; gOperace.Width:= Self.Width - 30; gOperace.Height:= btnSave.Top - gOperace.Top - 10; gOperace.Left:= 10; gOperace.RowHeight:= 24; // gOperace.RowSize:= 24; gOperace.Columns.Item[0].Width:= Round(gOperace.Width*0.12); gOperace.Columns.Item[1].Width:= Round(gOperace.Width*0.12); gOperace.Columns.Item[2].Width:= gOperace.Width - gOperace.Columns.Item[0].Width - gOperace.Columns.Item[1].Width - 20; btnSave.Top:= Self.Height - 2*btnSave.Height - Round(Self.Height*0.03); btnCancel.Top:= btnSave.Top; end; procedure TformOdvedeniPrikazu.pOdznacVseClick(Sender: TObject); var i: Integer; begin for i:=0 to gOperace.RowCount-1 do gOperace.Cell[1,i].AsBoolean:= false; end; function TformOdvedeniPrikazu.TestFormulareOK; var lSQL: string; begin result:= false; if (Pos('%',selDilec.Text)>0) and (typOdvodu=2) then Exit; result:= true; if (edtKusu.Value<=0) or (edtKusu.Value>StrToFloat(lblZive.Caption)) then begin Helios.Error(#1'Chybné množství odváděných kusů.'#1); edtKusu.SetFocus; result:= false; end; if (idVydej>0) and (result) then begin lSQL:= 'SELECT id FROM ' + tblEvidNadvyr + ' WHERE IdVydejkaMat=' + IntToStr(idVydej) + ' AND Mnozstvi0) then begin Helios.Error(#1'Zadané množství by přesáhlo množství zbývající (objednáno-zaevidováno).'#1); edtKusu.Value:= 0; edtKusu.SetFocus; result:= false; end; end; { if (edtCasHod.Value<0) then begin Helios.Error(#1'Chybný evidovaný čas (v hodinách).'#1); result:= false; end; if (edtCasMin.Value<0) then begin Helios.Error(#1'Chybný evidovaný čas (v minutách).'#1); result:= false; end; if (edtCasHod.Value<=0) and (edtCasMin.Value<=0) and (not nadvyroba) then begin Helios.Error(#1'Chybný evidovaný čas.'#1); result:= false; end; } if ((idZam='') or (idZam='0')) and (result) then begin Helios.Error(#1'Nebyl vybrán zaměstnanec.'#1); result:= false; end; { if (nadvyroba) then begin Helios.Error(#1'Nebyla vybrána materiálový výdejka ("Objednávka nadvýroby").'#1); result:= false; end; } end; procedure TformOdvedeniPrikazu.VyplnFrontuPrace; var lSQL: string; r: integer; begin if (idPrPostup>0) then begin gOperace.RowCount:= gOperace.RowCount + 1; r:= gOperace.RowCount-1; with Helios.OpenSQL('SELECT Operace,Nazev FROM ' + tblPrPost + ' WHERE id=' + IntToStr(idPrPostup)) do if (gOperace.Cells[3,r]<>IntToStr(idPrPostup)) then begin gOperace.Cell[0,r].AsString:= VarToStr(FieldValues(0)); gOperace.Cell[1,r].AsBoolean:= true; gOperace.Cell[2,r].AsString:= VarToStr(FieldValues(1)); gOperace.Cell[3,r].AsInteger:= idPrPostup; end; end; end; procedure TformOdvedeniPrikazu.VyplnPrikaz; var lSQL, podm: string; begin selPrikaz.Text:= Trim(selPrikaz.Text); selPrikaz.Text:= StringReplace(selPrikaz.Text,' ','',[rfReplaceAll]); if (selPrikaz.Text<>'') then begin podm:= 'p.Rada=N' + QuotedStr(LeftStr(selPrikaz.Text, Pos('-', selPrikaz.Text)-1)); podm:= podm + ' AND p.Prikaz=' + MidStr(selPrikaz.Text,Pos('-', selPrikaz.Text)+1,255); lSQL:= 'SELECT kz.SkupZbo,kz.RegCis,kz.Nazev1,p.kusy_zad,p.kusy_zive,p.kusy_odved,kz.id,pp.Doklad FROM ' + tblPrikaz + ' p INNER JOIN '; lSQL:= lSQL + tblKZ + ' kz ON (p.IdTabKmen=kz.id) INNER JOIN ' + tblPrPost + ' pp ON (p.id=pp.IDPrikaz AND pp.Odvadeci=1)'; lSQL:= lSQL + ' WHERE ' + podm; with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin lblDilec.Caption:= VarToStr(FieldValues(0)) + ' ' + VarToStr(FieldValues(1)) + ' ' + VarToStr(FieldValues(2)); lblZadane.Caption:= VarToStr(FieldValues(3)); lblZive.Caption:= VarToStr(FieldValues(4)); if (lblZive.Caption='0') then lblZive.Font.Color:= clRed else lblZive.Font.Color:= clWindowText; lblEvid.Caption:= VarToStr(FieldValues(5)); idKZ:= StrToInt(VarToStr(FieldValues(6))); dokl:= VarToStr(FieldValues(7)); with Helios.OpenSQL('SELECT VychoziSklad FROM ' + tblParKZ + ' WHERE IdKmenZbozi=' + IntToStr(idKZ)) do if (RecordCount>0) then sklProOdvod:= VarToStr(FieldValues(0)); end; if (idPrikaz>0) then begin if (selBarCode.Text='') then begin with Helios.OpenSQL('SELECT TOP(1) BarCode FROM ' + tblPrPost + ' WHERE idPrikaz=' + IntToStr(idPrikaz) + ' AND Odvadeci=1') do if RecordCount>0 then selBarCode.Text:= VarToStr(FieldValues(0)); selZamest.SetFocus; end; with Helios.OpenSQL('SELECT ISNULL(SUM(TAC_S),0),ISNULL(SUM(TAC_N),0) FROM ' + tblPrPost + ' WHERE IdPrikaz=' + IntToStr(idPrikaz)) do if (RecordCount>0) then begin casTPVs:= RoundToEX(StrToFloat(VarToStr(FieldValues(0))),-1); casTPVm:= RoundToEX(StrToFloat(VarToStr(FieldValues(1))),-1); with Helios.OpenSQL('SELECT id,Operace,nazev,TAC_Obsluhy_S FROM ' + tblPrPost + ' WHERE IdPrikaz=' + IntToStr(idPrikaz)) do begin First; gOperace.ClearRows; while not(EOF) do begin gOperace.AddRow; gOperace.Cell[0,gOperace.RowCount-1].AsString:= VarToStr(FieldValues(1)); gOperace.Cell[1,gOperace.RowCount-1].AsBoolean:= true; gOperace.Cell[2,gOperace.RowCount-1].AsString:= VarToStr(FieldValues(2)); gOperace.Cell[3,gOperace.RowCount-1].AsInteger:= StrToInt(VarToStr(FieldValues(0))); gOperace.Cell[4,gOperace.RowCount-1].AsFloat:= StrToFloat(VarToStr(FieldValues(3))); Next; end; end; end; end; end; end; procedure TformOdvedeniPrikazu.btnSaveClick(Sender: TObject); var lSQL, podm, SQLko: string; idx, idx2, idx3, idDZshift, idPMZ, idDZV, idDZP,idKJ,idxTPV,idOdv: integer; GidSS,Gdokl,lDokl,sTemp: string; GidKZ,idPrKVaz: integer; mnoz, mnReal, kszbyt, kszive, VPcas, Pcas, NormCasAll, SkCas, koef: Extended; genVO, realVyd, realPrij, cont: boolean; ks, ks2, dt, smena, regC, radaVPr, sklOdv, sklMat, rOdv, rPri, rPrik: string; idVPs: TArray; operace: TArray; casKoef: TArray; tblOdv, tblOdvPr, tblOdvOp: string; idVPr: integer; // přidáno 8.11.2018 MnozzstviOdvadene: double; // přidáno 8.11.2018 begin ReseedTable(Helios, tblMzdZm); ReseedTable(Helios, tblDZ); ReseedTable(Helios, tblPZ); ReseedTable(Helios, tblEvidOp); ReseedTable(Helios, tblEvidOpPol); ReseedTable(Helios, tblEvidOpVPr); ReseedTable(Helios, tblEvidNadPrij); genVO:= false; tblOdv:= 'dbo._TabNTSEvidOpBC'; tblOdvPr:= 'dbo._TabNTSOdvodPrikazu'; tblOdvOp:= 'dbo._TabNTSOdvodOperaci'; Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(tblOdv) + ') IS NOT NULL DROP TABLE ' + tblOdv); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(tblOdvPr) + ') IS NOT NULL DROP TABLE ' + tblOdvPr); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(tblOdvOp) + ') IS NOT NULL DROP TABLE ' + tblOdvOp); if not(jeTest) then // pokud je test, udelej tabulky typu dbo._TabNTS..... begin tblOdv:= StringReplace(tblOdv,'dbo._','#',[rfReplaceAll]); tblOdvPr:= StringReplace(tblOdvPr,'dbo._','#',[rfReplaceAll]); tblOdvOp:= StringReplace(tblOdvOp,'dbo._','#',[rfReplaceAll]); end; if (TestFormulareOK) then begin // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - klik OK uloz')); edtKusu.Color:= clWindow; lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ',N' + QuotedStr('U') + ') IS NULL' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(250) NOT NULL)'; try Helios.ExecSQL(lSQL); except end; lSQL:= 'IF OBJECT_ID(N' + QuotedStr(IfThen(jeTest,tblOdv, 'tempdb..' + tblOdv)) + ') IS NOT NULL DROP TABLE ' + tblOdv + CRLF; lSQL:= lSQL + 'CREATE TABLE ' + tblOdv + ' (IdPrikaz INT, IdKmenZbozi INT, CisloZbozi NVARCHAR(33),'; lSQL:= lSQL + 'Datum DATETIME, Mnozstvi NUMERIC(19,6), CisloZamest INT, CasHod NUMERIC(9,4), CasMin NUMERIC(9,4),'; lSQL:= lSQL + 'IdNadvyroba INT NULL, Poznamka NTEXT, Sklad NVARCHAR(30) NOT NULL, IDUziv INT NOT NULL, IdVydejMat INT)'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N' + QuotedStr(IfThen(jeTest,tblOdvPr,'tempdb..' + tblOdvPr)) + ') IS NOT NULL DROP TABLE ' + tblOdvPr + CRLF; lSQL:= lSQL + 'CREATE TABLE ' + tblOdvPr + ' (idPrikaz INT, RadaPrikaz NVARCHAR(20), idKmenZbozi INT, Datum DATETIME DEFAULT GETDATE(),'; lSQL:= lSQL + 'Mnozstvi NUMERIC(19,6) DEFAULT 0, CisloZamest INT, CasHod TINYINT, CasMin TINYINT, SkladOdv NVARCHAR(30), SkladMat NVARCHAR(30))'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N' + QuotedStr(IfThen(jeTest,tblOdvOp,'tempdb..' + tblOdvOp)) + ') IS NOT NULL DROP TABLE ' + tblOdvOp + CRLF; lSQL:= lSQL + 'CREATE TABLE ' + tblOdvOp + ' (Operace NVARCHAR(4), idPostup INT NOT NULL, IDPrikaz INT NULL, Mnozstvi NUMERIC(19,6), NormCasS NUMERIC(10,2))'; Helios.ExecSQL(lSQL); if (LeftStr(selPrikaz.Text,3)='010') then //cbSklad.ItemIndex:= GetItemIndexStartingWith(cbSklad,'100'); cbSklad.ItemIndex:= 3;//GetItemIndexStartingWith(cbSklad,'100'); //upraveno 26.6.2018 sklProOdvod:= StringReplace(cbSklad.Text,'.','',[rfReplaceAll]); if (nadvyroba) then sklProOdvod:= sklFin; regC:= ''; idOdv:= 0; // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - info o porizene evidenci')); // ReseedTable(Helios, tblEvidOp); lSQL:= 'INSERT ' + tblOdv + ' (IdPrikaz,IdKmenZbozi,CisloZbozi,Datum,Mnozstvi,CisloZamest,CasHod,CasMin,Sklad'; lSQL:= lSQL + ',IdNadvyroba,Poznamka,IDUziv,IdVydejMat) VALUES ('; if (selPrikaz.Text<>'') then lSQL:= lSQL + IntToStr(idPrikaz) else lSQL:= lSQL + 'NULL'; lSQL:= lSQL + ','; if (selDilec.Text<>'') or (idPrikaz>0) then begin lSQL:= lSQL + IntToStr(idKZ); with Helios.OpenSQL('SELECT CisloZbozi FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do if (RecordCount>0) and not VarIsNull(FieldValues(0)) then begin lSQL:= lSQL + ',N' + QuotedStr(VarToStr(FieldValues(0))); regC:= VarToStr(FieldValues(0)); end else lSQL:= lSQL + ',NULL' end else lSQL:= lSQL + 'NULL,NULL'; podm:= DateToStr(dtDatum.Date) + ' ' + TimeToStr(Now); lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(podm) + ',104),'; lSQL:= lSQL + StringReplace(FloatToStr(edtKusu.Value),',','.',[rfReplaceAll]) + ',' + selZamest.Text + ','; lSQL:= lSQL + StringReplace(IfThen(edtCasHod.Text<>'',edtCasHod.Text,'0'),',','.',[rfReplaceAll]) + ','; lSQL:= lSQL + StringReplace(IfThen(edtCasMin.Text<>'',edtCasMin.Text,'0'),',','.',[rfReplaceAll]) + ',N'; lSQL:= lSQL + QuotedStr(sklProOdvod) + ','; if (nadvyroba) then lSQL:= lSQL + IntToStr(idNadvyr) else lSQL:= lSQL + 'NULL'; lSQL:= lSQL + ',N' + QuotedStr('') + ',' + IntToStr(Helios.UserId) + ',' + IntToStr(idVydej) + ')'; // QuotedStr(verText) try Helios.ExecSQL(lSQL) except on E:Exception do begin Helios.Error(#1'Informace - nelze uložit údaj o pořizované evidenci.'#1 + CRLF + errPlg + CRLF + E.Message + CRLF + lSQL); Exit; end; end; // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - zapis operaci')); // zapis operaci do nove tabulky podm:= StringReplace(FloatToStr(edtKusu.Value),',','.',[rfReplaceAll]); // evidovane kusy for idx:=0 to gOperace.RowCount-1 do try if (gOperace.Cell[1,idx].AsBoolean=true) then begin lSQL:= 'INSERT ' + tblOdvOp + ' (Operace, idPostup, Mnozstvi, NormCasS) VALUES (N'; lSQL:= lSQL + QuotedStr(gOperace.Cell[0,idx].AsString) + ','; lSQL:= lSQL + gOperace.Cell[3,idx].AsString + ',' + podm + ','; lSQL:= lSQL + StringReplace(FloatToStr(gOperace.Cell[4,idx].AsFloat*edtKusu.Value),',','.',[rfReplaceAll]) + ')'; Helios.ExecSQL(lSQL); end; except on E:Exception do begin // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba insertu operaci: ' + E.Message)); Helios.Error(#1'CHYBA: '#1 + E.Message + CRLF + lSQL); Exit; end; end; Helios.ExecSQL('MERGE ' + tblOdvOp + ' AS T USING dbo.TabPrPostup AS S ON (S.ID=T.IdPostup) WHEN MATCHED THEN UPDATE SET T.IdPrikaz=S.IdPrikaz;'); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - nacitani udaju o prikazech')); // ziskej data o prikazu/prikazech SetLength(idVPs,1); if (idPrikaz>0) then begin idVPs[0].id:= idPrikaz; with Helios.OpenSQL('SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idPrikaz)) do idVPs[0].radaPrikaz:= VarToStr(FieldValues(0)); idVPs[0].idKZ:= idKZ; idVPs[0].ks:= edtKusu.Value; end else begin lSQL:= 'SELECT id, kusy_zive, IDTabKmen, RadaPrikaz FROM ' + tblPrikaz + ' WHERE kusy_zive>0 AND StavPrikazu IN (30,40) AND '; if (nadvyroba) then lSQL:= lSQL + 'Rada IN (N' + QuotedStr('400') + ',N' + QuotedStr(radaVPVyroba) + ') AND KmenoveStredisko=N' + QuotedStr(sklDP) else lSQL:= lSQL + 'Rada IN (N' + QuotedStr(radaVPRekl) + ',N' + QuotedStr(radaVPVyroba) + ')'; lSQL:= lSQL + ' AND IDTabKmen=' + IntTOStr(idKZ) + ' ORDER BY Rada DESC,Plan_ukonceni'; // RadaPrikaz with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin SetLength(idVPs,RecordCount); idx:= 0; ksZbyt:= edtKusu.Value; First; while (not(EOF)) and (kszbyt>0) do begin ksZive:= StrToFloat(VarToStr(FieldValues(1))); if (ksZive>=kszbyt) then begin ksZive:= kszbyt; ksZbyt:= 0; end; if (ksZive>0) then begin idVPs[idx].id:= StrToInt(VarToStr(FieldValues(0))); idVPs[idx].radaPrikaz:= VarToStr(FieldValues(3)); idVPs[idx].ks:= ksZive; idVPs[idx].idKZ:= StrToInt(VarToStr(FieldValues(2))); ksZbyt:= ksZbyt - ksZive; end; Inc(idx); Next; end; end; end; // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - prikazy do pomocne tabulky')); // zapis prikazy do pracovni tabulky for idx:=Low(idVPs) to High(idVPs) do begin idPrikaz:= idVPs[idx].id; if (idPrikaz=0) then Continue; with Helios.OpenSQL('SELECT Rada FROM dbo.TabPrikaz WHERE Id=' + IntToStr(idPrikaz)) do radaVPr:= VarToStr(FieldValues(0)); sklOdv:= ''; ks:= StringReplace(FloatToStr(idVPs[idx].ks),',','.',[rfReplaceAll]); if (radaVPr='010') then begin if (sklOdv='') then sklOdv:= sklObch; end else begin if (sklOdv='') then sklOdv:= sklVyr; end; if (nadvyroba) then sklOdv:= sklFin; { lSQL:= 'SELECT ISNULL(PrijemVyrDil_SkladProGenHlavDZ,N'''') /*, ISNULL(VydejMatPol_SkladProGenHlavDZ,N'''')*/ FROM dbo.TabRadyPrikazu'; lSQL:= lSQL + ' WHERE Rada=N' + QuotedStr(radaVPr); with Helios.OpenSQL(lSQL) do if (VarToStr(FieldValues(0))<>'') then sklOdv:= VarToStr(FieldValues(0)); } lSQL:= 'INSERT ' + tblOdvPr + ' (IdPrikaz,RadaPrikaz,IdKmenZbozi,Mnozstvi,Datum,CisloZamest,CasHod,CasMin,SkladOdv) SELECT '; lSQL:= lSQL + IntToStr(idPrikaz) + ',N' + QuotedStr(idVPs[idx].radaPrikaz) + ',' + IntToStr(idKZ) + ',' + StringReplace(ks,',','.',[rfReplaceAll]); lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(DateToStr(dtDatum.Date)) + ',104),' + IfThen(selZamest.Text<>'', Trim(selZamest.Text) ,'NULL'); lSQL:= lSQL + ',0,0,N' + QuotedStr(sklOdv); Helios.ExecSQL(lSQL); end; if not(jeTest) then begin try // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - start procedury ep_NTS_plgOdvedeniPrikazu')); Helios.ExecSQL('EXEC dbo.ep_NTS_plgOdvedeniPrikazu'); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - konec procedury ep_NTS_plgOdvedeniPrikazu')); with Helios.OpenSQL('SELECT * FROM #TabExtKom') do if (RecordCount>0) then begin Helios.OpenBrowse(541,''); exit; end; //přidáno 8.11.2018 SQLko := 'Select IdPrikaz,Mnozstvi/*,RadaPrikaz,IdKmenZbozi,Datum,CisloZamest,CasHod,CasMin,SkladOdv*/ from ' + tblOdvPr ; with Helios.OpenSQL(SQLko) do begin if (RecordCount>0) then begin First; while (not(EOF)) do begin idVPr:= FieldValues(0) ; MnozzstviOdvadene:= FieldValues(1) ; ZadejVyrPrikazNaVydejku(Helios, idVPr, MnozzstviOdvadene); //Helios.Info(idVPr.tostring); Next; end; end; // Helios.Info(recordcount.ToString) end; // Helios.Info('Dnešní verze 8.11.2018'); //konec přidání 8.11.2018 with Helios.OpenSQL('SELECT * FROM #TabExtKom') do if (RecordCount>0) then Helios.OpenBrowse(541,''); except on E:Exception do Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba pri spusteni procedury dbo.ep_NTS_plgOdvedeniPrikazu: ' + E.Message)); end; end else Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - test, procedura dbo.ep_NTS_plgOdvedeniPrikazu nebude spustena')); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - mazu temp tabulky')); try Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen'); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabOdved') + ') IS NOT NULL DROP TABLE #TabOdved'); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenPrijem') + ') IS NOT NULL DROP TABLE #TabGenPrijem'); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenRezVyd') + ') IS NOT NULL DROP TABLE #TabGenRezVyd'); except on E:Exception do Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba pri mazani temp tabulek: ' + E.Message)); end; Helios.Refresh(true); end; // sBar.SimpleText:= ''; if not(jeTest) then begin try // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - mazu temp tabulky 2')); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(IfThen(jeTest,tblOdv,'tempdb..' + tblOdv)) + ') IS NOT NULL DROP TABLE ' + tblOdv); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(IfThen(jeTest,tblOdvPr,'tempdb..' + tblOdvPr)) + ') IS NOT NULL DROP TABLE ' + tblOdvPr); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(IfThen(jeTest,tblOdvOp,'tempdb..' + tblOdvOp)) + ') IS NOT NULL DROP TABLE ' + tblOdvOp); except on E:Exception do Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba pri mazani temp tabulek 2: ' + E.Message)); end; // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - test podminky tisku: ' + LeftStr(selDilec.Text,3) + ' ' + lblDilec.Caption)); // pokud je to Rele a zbytek je >0, tiskni novou pruvodku end; if ((LeftStr(selDilec.Text,3)='PRF') or (LeftStr(selDilec.Text,3)='VRF') or (LeftStr(lblDilec.Caption,3)='PRF') or (LeftStr(lblDilec.Caption,3)='VRF')) and (StrToFloat(lblZive.Caption)-edtKusu.Value>0) then // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - podminka splnena, tisk by byl proveden')); begin // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - tisk')); try Helios.PrintForm3(bidFrontaPrace,31,'TabPrPostup.IdPrikaz=' + IntToStr(idPrikaz)); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - konec tisku')); except on E:Exception do begin Helios.Error(#1'Chyba'#1 + E.Message); end; end; end; // else // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - podminka tisku nesplnena')); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - konec pluginu')); Close; { try Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - nove form activate')); FormActivate(Sender); Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - nove form show')); FormShow(Sender); Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - po form show')); except on E:Exception do Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba: ' + E.Message)); end; } end; procedure TformOdvedeniPrikazu.edtCasHodKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then edtCasMin.SetFocus; end; procedure TformOdvedeniPrikazu.edtCasMinKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then btnSave.SetFocus; end; procedure TformOdvedeniPrikazu.edtKusuEnter(Sender: TObject); begin if (selZamest.Text<>'') and (lblZamest.Caption='') then selZamestExit(Sender); selDilec.Color:= clWindow; selZamest.Color:= clWindow; edtKusu.Color:= clYellowLight; end; procedure TformOdvedeniPrikazu.edtKusuExit(Sender: TObject); begin edtKusu.Color:= clWindow; if (edtKusu.Value>0) then begin if (edtKusu.Value>StrToFloat(lblZive.Caption)) then begin Helios.Error(#1'Nelze odvést víc kusů než zbývá na příkaze.'#1); edtKusu.Value:= 0; edtKusu.Color:= clYellowLight; edtKusu.SelectAll; edtKusu.SetFocus; end else btnSave.SetFocus; end else if (gOperace.RowCount>1) then Helios.Error(#1'Zadejte počet kusů'#1); end; procedure TformOdvedeniPrikazu.edtKusuKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then btnSave.SetFocus; end; procedure TformOdvedeniPrikazu.FormActivate(Sender: TObject); begin canCont:= false; verText:= GetFileVersion2(GetModuleName(HInstance)); if (Length(verText)=12) then verText:= LeftStr(verText,9) + '0' + RightStr(verText,3); selDilec.SetFocus; Self.Caption:= Self.Caption + ' (verze ' + verText + ')'; btnSave.Top:= Self.Height - 2*btnSave.Height - Round(13/(Screen.Height/Self.Width)); btnCancel.Top:= btnSave.Top; gOperace.Height:= btnSave.Top - gOperace.Top - 15; case typOdvodu of 1: begin // podle prikazu selDilec.Enabled:= false; selFronta.Enabled:= false; selPrikaz.Enabled:= true; selPrikaz.SetFocus; end; 2: begin // podle vyrobku selPrikaz.Enabled:= false; selFronta.Enabled:= false; selDilec.Enabled:= true; selDilec.SetFocus; end; 3: begin // podle fronty prace selDilec.Enabled:= false; selPrikaz.Enabled:= false; selFronta.Enabled:= true; selFronta.SetFocus; end; end; selDilec.Left:= Label12.Left + Label12.Width + 13; selPrikaz.Left:= Label11.Left + Label11.Width + 8; dtDatum.Left:= Label4.Left + Label4.Width + 8; Label5.Left:= dtDatum.Left + dtDatum.Width + 8; selZamest.Left:= Label5.Left + Label5.Width + 8; lblZamest.Left:= selZamest.Left + selZamest.Width + 8; edtKusu.Left:= Label1.Left + Label1.Width + 10; // Self.Width:= Round(320/(Screen.Height/Screen.Width)); end; procedure TformOdvedeniPrikazu.FormClose(Sender: TObject; var Action: TCloseAction); begin if (layName[0]<>'') then LoadKeyboardLayout(@layName, KLF_ACTIVATE or KLF_SETFORPROCESS); Action:= caFree; end; procedure TformOdvedeniPrikazu.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin // if Key=VK_RETURN then // Key:= 0; end; procedure TformOdvedeniPrikazu.FormResize(Sender: TObject); begin NastavGrid; end; procedure TformOdvedeniPrikazu.FormShow(Sender: TObject); var lSQL: string; idx, x: integer; begin if GetKeyboardLayoutName(@layName) then LoadKeyboardLayout('00020409', KLF_ACTIVATE or KLF_SETFORPROCESS); { Application.Handle:= Helios.MainApplicationHandle; Application.Icon.Handle:= Helios.MainApplicationIconHandle; DefFontData.CharSet:= Helios.Charset; DefFontData.Name:= Helios.Font; DefFontData.Height:= Helios.FontHeight; Screen.MenuFont.CharSet:= DefFontData.CharSet; Screen.MenuFont.Name:= DefFontData.Name; Screen.MenuFont.Height:= DefFontData.Height; Self.Font.Name:= Helios.Font; Self.Font.Size:= Helios.FontHeight; } // ignore changed DPI and keep dialog in originaly designed size // if (Screen.PixelsPerInch<>PixelsPerInch) then // ScaleBy(Screen.PixelsPerInch, PixelsPerInch); idx:= 0; x:= Helios.FontHeight-3; while (idx0) then begin // Nadvyroba nadvyroba:= true; Label11.Visible:= false; selPrikaz.Visible:= false; grpTampo.Visible:= false; grpNadvyroba.Visible:= true; cbSklad.ItemIndex:= 2; cbSklad.Enabled:= false; // edtCasHod.Enabled:= false; // edtCasMin.Enabled:= false; selSmena.Enabled:= false; gOperace.PopupMenu:= nil; selVydejMat.SetFocus; Self.Caption:= 'Odvedení Nadvýroby'; end; with Helios.OpenSQL('SELECT kod FROM ' + tblCSmen + ' WHERE Blokovano=0') do if (RecordCount>0) then begin First; selSmena.Text:= VarToStr(FieldValues(0)); end; end; procedure TformOdvedeniPrikazu.Label6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer); begin if (ssShift in Shift) then ShowMessage('Čas dle TPV: sek. ' + FloatToStr(casTPVs*edtKusu.Value) + ' / min. ' + FloatToStr(casTPVm*edtKusu.Value)); end; procedure TformOdvedeniPrikazu.selBarCodeExit(Sender: TObject); begin selPrikazExit(Sender); end; procedure TformOdvedeniPrikazu.selBarCodeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin selBarCode.Text:= Trim(selBarCode.Text); if (selBarCode.Text<>'') then begin selDilec.Text:= ''; idKZ:= 0; end; if (Key=VK_RETURN) then begin with Helios.OpenSQL('SELECT idPrikaz FROM ' + tblPrPost + ' WHERE BarCode=N' + QuotedStr(selBarCode.Text)) do // and Odvadeci=1 if (RecordCount>0) then begin idPrikaz:= StrToInt(VarToStr(FieldValues(0))); with Helios.OpenSQL('SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idPrikaz)) do selPrikaz.Text:= VarToStr(FieldValues(0)); VyplnPrikaz; selZamest.SetFocus; end; end; end; procedure TformOdvedeniPrikazu.pVyberVseClick(Sender: TObject); var i: Integer; begin for i:=0 to gOperace.RowCount-1 do gOperace.Cell[1,i].AsBoolean:= true; end; procedure TformOdvedeniPrikazu.VyplnDleDilce; var lSQL: string; idx: integer; begin if (idKZ>0) then begin with Helios.OpenSQL('SELECT SkupZbo,RegCis,Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStR(idKZ)) do begin selDilec.Text:= VarToStr(FieldValues(0)) + ' ' + VarToStr(FieldValues(1)); lblDilec.Caption:= VarHodnota(FieldValues(2),''); end; lSQL:= 'SELECT SUM(kusy_zad), SUM(kusy_odved), SUM(kusy_zive) FROM ' + tblPrikaz; lSQL:= lSQL + ' WHERE StavPrikazu=30 AND IDTabKmen=' + IntToStr(idKZ); if (nadvyroba) then lSQL:= lSQL + ' AND KmenoveStredisko=N' + QuotedStr(sklDP); with Helios.OpenSQL(lSQL) do if RecordCount>0 then begin if not VarIsNull(FieldValues(0)) then lblZadane.Caption:= VarToStr(FieldValues(0)); if not VarIsNull(FieldValues(1)) then lblEvid.Caption:= VarToStr(FieldValues(1)); if not VarIsNull(FieldValues(2)) then lblZive.Caption:= VarToStr(FieldValues(2)); end; with Helios.OpenSQL('SELECT CONVERT(int,operace),nazev,id,TAC_S FROM ' + tblPostup + ' WHERE dilec=' + IntToStr(idKZ)) do if (RecordCount>0) then begin gOperace.ClearRows; NastavGrid; gOperace.RowCount:= RecordCount; First; idx:= -1; while not(EOF) do begin Inc(idx); gOperace.Cell[0,idx].AsInteger:= VarHodnota(FieldValues(0),0); gOperace.Cell[1,idx].AsBoolean:= true; gOperace.Cell[2,idx].AsString:= VarHodnota(FieldValues(1),''); gOperace.Cell[3,idx].AsInteger:= VarHodnota(FieldValues(2),0); gOperace.Cell[4,idx].AsFloat:= VarHodnota(FieldValues(3),0.0); // normovany cas v sek Next; end; end; selZamest.SetFocus; end; end; procedure TformOdvedeniPrikazu.selDilecButtonClick(Sender: TObject); var podm: string; begin idKZ:= 0; podm:= 'TabKmenZbozi.id IN (SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE StavPrikazu=30 GROUP BY IDTabKmen)'; if Helios.Prenos(bidKZ,'id',vOle1,podm,'Vyráběné dílce',true) then idKZ:= StrToInt(VarToStr(vOle1)); VyplnDleDilce; end; procedure TformOdvedeniPrikazu.selDilecEnter(Sender: TObject); begin selDilec.Color:= clYellowLight; end; procedure TformOdvedeniPrikazu.selDilecExit(Sender: TObject); var podm: string; begin selDilec.Color:= clWindow; selDilec.Text:= UpperCase(Trim(selDilec.Text)); // selDilec.Text:= StringReplace() if (selDilec.Text<>'') then begin if Pos('%',selDilec.Text)>0 then selDilec.Text:= StringReplace(selDilec.Text,'%','_',[rfReplaceAll]); podm:= 'SELECT id FROM ' + tblKZ + ' WHERE UPPER(CisloZbozi) LIKE N' + QuotedStr('%' + StringReplace(selDilec.Text,' ','',[rfReplaceAll]) + '%' ); if (selDilec.Text<>'') and (idKZ=0) then with Helios.OpenSQL(podm) do begin if (RecordCount>1) then begin podm:= 'TabKmenZbozi.id IN (' + podm + ')'; if Helios.Prenos(bidKZ,'id',vOle1,podm,'Vyráběné dílce',true) then idKZ:= StrToInt(VarToStr(vOle1)); end; if (RecordCount=1) then idKZ:= StrToInt(VarToStr(FieldValues(0))); if (RecordCount=0) then begin idKZ:= 0; Helios.Error(#1'Zadaný dílec nebyl nalezen.'#1); selDilec.Color:= clYellowLight; selDilec.SelectAll; selDilec.SetFocus; end; { with Helios.OpenSQL('SELECT id FROM ' + tblPostup + ' WHERE dilec=' + IntTOStr(idKZ)) do if RecordCount>1 then begin if not Helios.YesNo(#1'Pozor, tento dílec obsahuje více jak 1 operaci na kus.'#1 + CRLF + 'Chcete jej i přesto evidovat ?',true) then Exit; end; } if (idKZ>0) then begin VyplnDleDilce; selZamest.Color:= clYellowLight; selZamest.Text:= ''; selZamest.SelectAll; end; end; end; end; procedure TformOdvedeniPrikazu.selDilecKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // if (Key=VK_RETURN) then // Key:= 0; end; procedure TformOdvedeniPrikazu.selDilecKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin selDilec.Text:= Trim(selDilec.Text); if (selDilec.Text<>'') then begin selBarCode.Text:= ''; selPrikaz.Text:= ''; idPrikaz:= 0; end; if (Key=VK_RETURN) then begin selDilec.Width:= Self.Canvas.TextWidth(selDilec.Text); selDilecExit(Sender); end; end; procedure TformOdvedeniPrikazu.selFrontaButtonClick(Sender: TObject); var podm: string; begin idPrPostup:= 0; idPrikaz:= 0; operaceFP:= ''; podm:= 'TabPrPostup.Kusy_zive>0 AND TabPrPostup.Pracoviste IN (SELECT id FROM ' + tblCPrac + ' WHERE Pracoviste LIKE N'; podm:= podm + QuotedStr('RF%') + ')'; if Helios.Prenos(bidVyrOper,'Id',vOle1,podm,'Fronta práce',true) then begin idPrPostup:= StrToInt(VarToStr(vOle1)); podm:= 'SELECT vp.RadaPrikaz,pp.idPrikaz,pp.Operace FROM ' + tblPrPost + ' pp INNER JOIN ' + tblPrikaz; podm:= podm + ' vp ON (vp.Id=pp.IdPrikaz) WHERE pp.id=' + IntToStr(idPrPostup); with Helios.OpenSQL(podm) do begin selPrikaz.Text:= VarToStr(FieldValues(0)); idPrikaz:= StrToInt(VarToStr(FieldValues(1))); operaceFP:= Trim(VarToStr(FieldValues(2))); end; selFronta.Text:= IntToStr(idPrPostup); VyplnPrikaz; VyplnFrontuPrace; end; end; procedure TformOdvedeniPrikazu.selFrontaExit(Sender: TObject); begin selFronta.Text:= Trim(selFronta.Text); if (selFronta.Text<>'') and IsNumeric(selFronta.Text) then begin if (idPrPostup=0) then with Helios.OpenSQL('SELECT Id,IdPrikaz,Operace FROM ' + tblPrPost + ' WHERE id=' + selFronta.Text) do if (RecordCount=1) then begin idPrPostup:= StrToInt(VarToStr(FieldValues(0))); idPrikaz:= StrToInt(VarToStr(FieldValues(1))); operaceFP:= Trim(VarToStr(FieldValues(2))); VyplnPrikaz; VyplnFrontuPrace; end; end else begin idPrPostup:= 0; idPrikaz:= 0; operaceFP:= ''; Helios.Error(#1'Chybně zadané identifikační číslo operace.'#1); end; end; procedure TformOdvedeniPrikazu.selPrikazButtonClick(Sender: TObject); var podm: string; begin podm:= 'TabPrikaz.StavPrikazu=30 AND TabPrikaz.KmenoveStredisko IN (N' + QuotedStr(sklVyr) + ',N'; podm:= podm + QuotedStr(sklDP) +')'; if Helios.Prenos(bidVyrPrik,'RadaPrikaz',vOle1,podm,'Výrobní příkazy',true) then begin selPrikaz.Text:= VarToStr(vOle1); with Helios.OpenSQL('SELECT id FROM ' + tblPrikaz + ' WHERE RadaPrikaz=N' + QuotedStr(selPrikaz.Text)) do idPrikaz:= StrToInt(VarToStr(FieldValues(0))); VyplnPrikaz; end; end; procedure TformOdvedeniPrikazu.selPrikazExit(Sender: TObject); var podm, r: string; begin r:= ''; selPrikaz.Text:= Trim(selPrikaz.Text); selPrikaz.Text:= StringReplace(selPrikaz.Text,' ','',[rfReplaceAll]); // if not IsNumeric(selPrikaz.Text) then if (LeftStr(selPrikaz.Text,1)='A') then Helios.Error(#1'Výrobní příkaz může mít jen numerické označení.' + #1 + CRLF + '(zadáváte opravdu příkaz ?]') else if (selPrikaz.Text<>'') then begin r:= LeftStr(selPrikaz.Text, Pos('-', selPrikaz.Text)-1); podm:= 'Rada=N' + QuotedStr(r); podm:= podm + ' AND Prikaz=' + MidStr(selPrikaz.Text,Pos('-', selPrikaz.Text)+1,255); with Helios.OpenSQL('SELECT id,IdTabKmen FROM ' + tblPrikaz + ' WHERE StavPrikazu IN (30,40) AND ' + podm) do if (RecordCount>0) then begin idPrikaz:= StrToInt(VarToStr(FieldValues(0))); idKZ:= StrToInt(VarToStr(FieldValues(1))); VyplnPrikaz; selZamest.SetFocus; end else begin idPrikaz:= 0; idKZ:= 0; Helios.Error(#1'Nebyl nalezen odpovídající Výrobní příkaz'#1 + CRLF + '(může být již uzavřen nebo je neplatný)'); selPrikaz.SetFocus; end; if (r='010') then begin cbSklad.ItemIndex:= 2; grpTampo.Visible:= true; end; end else begin idPrikaz:= 0; idKZ:= 0; end; end; procedure TformOdvedeniPrikazu.selPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (selPrikaz.Text<>'') then idKZ:= 0; if (Key=VK_RETURN) then selZamest.SetFocus; end; procedure TformOdvedeniPrikazu.selVydejMatButtonClick(Sender: TObject); var podm: string; begin if (selZamest.Text='') then begin Helios.Error(#1'Před výběrem nejprve zadejte zaměstnance.'#1); Exit; end; podm:= 'TabDokladyZbozi.DruhPohybuZbo=4 AND TabDokladyZbozi.Realizovano=1 AND TabDokladyZbozi.CisloZam=' + selZamest.Text; if Helios.Prenos(bidDZVydej,'id',vOle1,podm,'Výdejky',true) then idVydej:= StrToInt(VarToStr(vOle1)) else idVydej:= 0; with Helios.OpenSQL('SELECT RadaDokladu,PoradoveCislo FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydej)) do if (RecordCount>0) then selVydejMat.Text:= VarToStr(FieldValues(0)) + '-' + StringOfChar('0', 6-Length(VarToStr(FieldValues(1)))) + VarToStr(FieldValues(1)) else selVydejMat.Text:= ''; selVydejMatExit(Sender); end; procedure TformOdvedeniPrikazu.selVydejMatExit(Sender: TObject); var lSQL: string; begin selVydejMat.Text:= Trim(selVydejMat.Text); if (selVydejMat.Text<>'') and (Pos('-',selVydejMat.Text)>0) then begin lSQL:= 'SELECT id FROM ' + tblDZ + ' WHERE RadaDokladu=N' + QuotedStr(LeftStr(selVydejMat.Text,Pos('-',selVydejMat.Text)-1)); lSQL:= lSQL + ' AND PoradoveCislo=CONVERT(int,N' + QuotedStr(MidStr(selVydejMat.Text,Pos('-',selVydejMat.Text)+1,20)); lSQL:= lSQL + ') AND DruhPohybuZbo=4 AND CisloOrg=2 AND IDSklad=N' + QuotedStr(sklFin); // IN (' + VlastniSkladySQL(DateToStr(dtDatum.Date)) + ')'; if (selZamest.Text<>'') then lSQL:= lSQL + ' AND CisloZam=' + selZamest.Text; with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin if not(VarIsNull(FieldValues(0))) then idVydej:= StrToInt(VarToStr(FieldValues(0))) else idVydej:= 0; end; if (idVydej=0) then Helios.Error(#1'Nelze dohledat zadanou výdejku na Nadvýrobu.'#1) else begin if (selDilec.Text='') then begin lSQL:= 'SELECT CisloZam,IdKmenZbozi,Mnozstvi-Zaevidovano,id FROM ' + tblEvidNadvyr + ' WHERE idVydejkaMat=' + IntToStr(idVydej); with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin if not(VarIsNull(FieldValues(0))) then selZamest.Text:= StringOfChar('0',6-Length(VarToStr(FieldValues(0)))) + VarToStr(FieldValues(0)); idKZ:= StrToInt(VarToStr(FieldValues(1))); with Helios.OpenSQL('SELECT PrijmeniJmeno, Id FROM ' + tblCZam + ' WHERE Cislo=' + VarToStr(FieldValues(0))) do if (RecordCount=1) then begin lblZamest.Caption:= VarToStr(FieldValues(0)); idZam:= VarToStr(FieldValues(1)); end; with Helios.OpenSQL('SELECT RegCis, Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do if (RecordCount=1) then begin selDilec.Text:= VarToStr(FieldValues(0)); lblDilec.Caption:= VarToStr(FieldValues(1)); end; VyplnDleDilce; edtKusu.Value:= StrToFloat(VarToStr(FieldValues(2))); idNadvyr:= StrToInt(VarToStr(FieldValues(3))); edtKusu.SetFocus; end else Helios.Error(#1'Dle zadané výdejky nelze dohledat údaje k evidenci Nadvýroby.'#1 + CRLF + 'Zadejte je ručně.'); end; end; end; end; procedure TformOdvedeniPrikazu.selZamestButtonClick(Sender: TObject); begin if Helios.Prenos2(bidCisZam,'PrijmeniJmeno','Cislo',vOle1,vOle2,'','Zaměstnanci',true,false,false,1) then begin lblZamest.Caption:= VarToStr(vOle1); cZam:= VarToStr(vOle2); with Helios.OpenSQL('SELECT id FROM ' + tblCZam + ' WHERE Cislo=' + cZam) do idzam:= VarToStr(FieldValues(0)); selZamest.Text:= StringOfChar('0',6-Length(cZam)) + cZam; edtKusu.SetFocus; end else begin lblZamest.Caption:= ''; cZam:= '0'; end; end; procedure TformOdvedeniPrikazu.selZamestEnter(Sender: TObject); begin selZamest.Color:= clYellowLight; end; procedure TformOdvedeniPrikazu.selZamestExit(Sender: TObject); begin if (selZamest.Text<>'') then begin selZamest.Text:= GetNumbersFromString(selZamest.Text); selZamest.Text:= Trim(selZamest.Text); cZam:= selZamest.Text; with Helios.OpenSQL('SELECT PrijmeniJmeno,id FROM ' + tblCZam + ' WHERE Cislo=' + selZamest.Text) do if (RecordCount>0) then begin lblZamest.Caption:= VarToStr(FieldValues(0)); idZam:= VarToStr(FieldValues(1)); selZamest.Text:= StringOfChar('0',6-Length(cZam)) + cZam; // lblZamest.Left:= selZamest.Left + selZamest.Width + 5; end else begin Helios.Error(#1'Zadaný zaměstnanec nebyl nalezen, zkuste jej zadat znovu.'#1); cZam:= '0'; idZam:= '0'; selZamest.SetFocus; selZamest.Text:= ''; lblZamest.Caption:= ''; end; end; selZamest.Color:= clWindow; end; procedure TformOdvedeniPrikazu.selZamestKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then begin if (selZamest.Text<>'') then begin selZamest.Width:= Self.Canvas.TextWidth(selZamest.Text) + 5; lblZamest.Left:= selZamest.Left + selZamest.Width + 8; selZamestExit(Sender); edtKusu.SetFocus; end; end; end; // přidáno 8.11.2018 procedure TformOdvedeniPrikazu.ZadejVyrPrikazNaVydejku(const Helios: IHelios; idVPr: Integer; MnozstviNaVydejku: double); var lSQL, SQL, SQLko: string; pz,mu: IHeQuery; idVydej,idPolExpP,idExpPr,idNPol,sMU,sNO: string; idx: Integer; mn: extended; PoloZkaVydejkyExistuje:boolean; IdPolozkaVydeky:integer; Zprava : string; RegCis : string; begin if (idVPr>0) then begin lSQL:= 'SELECT kz.id, kz.RegCis 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 begin if RecordCount=0 then begin //Helios.Error(#1'Výrobní příkaz není na finální výrobek.'#1); // zakomentováno 8.11.2018 Exit; end; regcis:= FieldValues(1); 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'; // výběr výdejky pz.First; idPolExpP:= VarToStr(pz.FieldValues(0)); // ID polozky v ExpPr SQLko:= ''; sNO:= ''; SQLko:= 'SELECT dz.NavaznaObjednavka FROM ' + tblPZ + ' pz INNER JOIN ' + tblDZ + ' dz ON (pz.idDoklad=dz.id)'; SQLko:= SQLko + ' WHERE pz.DruhPohybuZbo=9 AND pz.id=' + idPolExpP; // jen Exp.prikazy with Helios.OpenSQL(SQLko) do if (RecordCount>0) then begin sNO:= LeftStr(VarToStr(FieldValues(0)),2); end else begin Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku, protože není zadána návazná objednávka na expedičním příkaze. '; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); exit; // a když nebude zadáno? end; SQLko:= 'Select id from TabDokladyZbozi where '; SQLko:= SQLko + 'TabDokladyZbozi.CisloOrg=1 AND TabDokladyZbozi.IDSklad=N' + QuotedStr(sklVyroba) + ' AND TabDokladyZbozi.DruhPohybuZbo IN (2,3,4)'; SQLko:= SQLko + ' AND TabDokladyZbozi.RadaDokladu IN (N' + QuotedStr('420') + ') AND TabDokladyZbozi.Realizovano=0 AND TabDokladyZbozi.MistoUrceni= ' ; if sNo='52' then SQLko:= SQLko + '3' else begin if sNo='45' then SQLko:= SQLko + '1' else begin //Helios.OpenSQL('SELECT * FROM #TabExtKom') Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku, protože zadána návazná objednávka na expedičním příkaze nezačíná na 45 nebo 52. '; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce='' Chyba při ukládání položky na výdejku: zadána návazná objednávka na expedičním příkaze nezačíná na 45 nebo 52. '''); exit; end; end; // kontrola na návaznpou objednávku na výdejce: // SQLko:= SQLko + ' AND TabDokladyZbozi.NavaznaObjednavka like ' + QuotedStr(sNo + '%'); // helios.Info('3 ' + sNo + CRLF + SQLko); with Helios.OpenSQL(SQLko) do if (RecordCount>0) then begin if (RecordCount=1) then idVydej:= FieldValues(0) else begin Helios.Info('Položka nebude uložena na výdejku. Bylo nalezeno více odpovídajících nerealizovaných výdejek.'); Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Bylo nalezeno více odpovídajících nerealizovaných výdejek. '; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); exit; end; end else begin helios.Info('Položka nebude uložena na výdejku. Nebyla nalezena žádná odpovídající nerealizovaná výdejka.'); Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Nebyla nalezena žádná odpovídající nerealizovaná výdejka. '; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); // Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce='' Položka nebude uložena na výdejku. Nebyla nalezena žádná odpovídající nerealizovaná výdejka. '''); exit; end; // konec výběru výdejky // 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 Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku, protože místo určení na výdejce není určeno pro tuto řadu objednávek. '; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); 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 mn:= MnozstviNaVydejku; // změněno 8.11.2018 // 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; // úpravy 8.11.2018 try SQL:= 'DECLARE @n1 NVARCHAR(30),@n2 NVARCHAR(30),@jc NUMERIC(19,6),@jcV NUMERIC(19,6),@k NUMERIC(12,5), @idP INT,@idRez INT,@d DATETIME,@idDok INT' + CRLF; SQL:= SQL + 'SELECT @n1=NazevSozNa1,@n2=NazevSozNa2,@d=PozadDatDod,@jc=JCbezDaniKC,@jcV=JCbezDaniVal,@idDok=IDDoklad FROM ' + tblPZ; SQL:= SQL + ' WHERE id=' + idPolExpP + CRLF; SQL:= SQL + 'Select id from ' + tblPZ + ' where NazevSozNa1=@n1 and NazevSozNa2=@n2 and idDoklad = ' + idVydej ; with Helios.OpenSQL(SQL) do begin if recordcount=1 then begin PoloZkaVydejkyExistuje := true; IdPolozkaVydeky := FieldValues(0); end else begin PoloZkaVydejkyExistuje := false ; end; end; except on E4:Exception do begin helios.Info('Chyba - položka nebude uložena na výdejku ' + CRLF + 'Detail chyby: ' + E4.ToString); Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. ' + CRLF + 'Detail chyby: ' + E4.ToString; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); end; end; // Helios.Info('1'); if PoloZkaVydejkyExistuje then begin lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET Mnozstvi = Mnozstvi + @mn where id = ' + IdPolozkaVydeky.ToString; lSQL:= lSQL + CRLF + 'SELECT ' + IdPolozkaVydeky.ToString + ' as idout'; idNPol:= ''; end else begin 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:= ''; end; 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 begin // 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) Zprava := 'Odvod BC: Chyba - Nelze aktualizovat kalkulační cenu ! SQL: ' + lsql; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); end; end; end; end; except on E:Exception do begin Helios.Error(#1'Nelze uložit položku na doklad.'#1 + CRLF + E.Message + CRLF + lSQL + errPlg); Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Nelze uložit položku na doklad' + CRLF + 'Detail chyby: ' + E.ToString; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); end; end; end else begin Helios.Error(#1'Zadané množství je nulové, převod dílce na výdejku NEBUDE proveden.'#1); Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Zadané množství je nulové, převod dílce na výdejku NEBUDE proveden.' ; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); end; 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); // helios.Info('Položka uložena na výdejku č. '); end else begin Helios.Error(#1'Doklad je blokován jiným uživatelem.'#1); Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Doklad je blokován jiným uživatelem.' ; Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava)); end; end; // end; end; end; end; // přidáno 8.11.2018 procedure TformOdvedeniPrikazu.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) VALUES (N' + QuotedStr(msg) + ')'); end; end.