unit frmEvidOper; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.StdCtrls, TBPackageU, Vcl.ExtCtrls, Data.DB, MemDS, VirtualTable, NxGridView6, NxColumns6, NxControls6, NxCustomGrid6, NxVirtualGrid6, NxDBGrid6, NxDBColumns6, NxTypes6, Vcl.Mask, RzEdit, System.ImageList, Vcl.ImgList, Vcl.ComCtrls, frmVstupDat, AdvTouchKeyboard, RxToolEdit, RzButton, RzRadChk; const CRLF = #13#10; tblDavky = '[dbo].[_hdc_TabDavky]'; KLF_ACTIVATE = $00000001; KLF_SETFORPROCESS = $00000100; type TTBVirtualTable = class helper for TVirtualTable published function IsFirstRecord: boolean; function IsLastRecord: boolean; end; TOperace = record id, idPrikaz: Integer; doklad: Integer; alt, skupzbo, regcis, operace, nazev, idEvidence: string; ksZadane, ksZive, ksZmetky: extended; odvadeci: boolean; end; TformEvidOper = class(TForm) edtBarCode: TLabeledEdit; lblDavka: TLabel; selBarCode: TButtonedEdit; tbl: TVirtualTable; dsZavady: TDataSource; tblKodZavady: TStringField; tblPopis: TStringField; tblMnozstvi: TFloatField; grd: TNextDBGrid6; view: TNxReportGridView6; edtCisZam: TLabeledEdit; selCisZam: TButtonedEdit; lblZamest: TLabel; edtDobreKs: TRzNumericEdit; Label2: TLabel; colKod: TNxDBTextColumn6; colPopis: TNxDBTextColumn6; colMnozstvi: TNxDBNumberColumn6; btnOK: TButton; btnZrusit: TButton; btnAdd: TButton; imgList: TImageList; lblOperace: TLabel; edtBarCode2: TLabeledEdit; selBarCode2: TButtonedEdit; pgCtrlZavady: TPageControl; shNeopravitelne: TTabSheet; shInterneOpravitelne: TTabSheet; tblZavadyIO: TVirtualTable; StringField1: TStringField; StringField2: TStringField; FloatField1: TFloatField; tblNeodvadet: TBooleanField; dsZavadyIO: TDataSource; grdIO: TNextDBGrid6; viewIO: TNxReportGridView6; colKod2: TNxDBTextColumn6; colPopis2: TNxDBTextColumn6; colMnozstvi2: TNxDBNumberColumn6; btnAddIO: TButton; lblZapisDat: TLabel; pnlCalc: TPanel; tKeyb: TAdvTouchKeyboard; edtNumVal: TRzNumericEdit; btnCalcClose: TButton; lblPnl: TLabel; lblMaloOperaci: TLabel; lblZmetky: TLabel; cbOpakTrideni: TRzCheckBox; shEvid: TTabSheet; tblEvid: TVirtualTable; dsEvid: TDataSource; tblEvidDatum: TDateField; tblEvidZamest: TStringField; tblEvidMnoz: TFloatField; grdEvid: TNextDBGrid6; colEvidDatum: TNxDBDateColumn6; colEvidZamest: TNxDBTextColumn6; colEvidMnoz: TNxDBNumberColumn6; viewEvid: TNxReportGridView6; procedure FormShow(Sender: TObject); procedure btnAddClick(Sender: TObject); procedure edtBarCodeExit(Sender: TObject); procedure selBarCodeClick(Sender: TObject); procedure edtCisZamExit(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure grdCellClick(Sender: TObject; ACol, ARow: Integer; Button: TMouseButton); procedure btnZrusitClick(Sender: TObject); procedure edtBarCode2Exit(Sender: TObject); procedure selBarCode2Click(Sender: TObject); procedure btnAddIOClick(Sender: TObject); procedure grdIOCellClick(Sender: TObject; ACol, ARow: Integer; Button: TMouseButton); procedure colKodDrawBackground(Sender: TObject; ACol, ARow: Integer; CellRect: TRect; State: TNxCellPaintingState); procedure tKeybKeyClick(Sender: TObject; Index: Integer); procedure tKeybKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure btnCalcCloseClick(Sender: TObject); procedure edtDobreKsEnter(Sender: TObject); procedure edtCisZamKeyPress(Sender: TObject; var Key: Char); procedure edtNumValKeyPress(Sender: TObject; var Key: Char); procedure edtBarCode2KeyPress(Sender: TObject; var Key: Char); procedure edtBarCodeKeyPress(Sender: TObject; var Key: Char); procedure edtDobreKsChange(Sender: TObject); procedure tblAfterPost(DataSet: TDataSet); procedure tblZavadyIOAfterPost(DataSet: TDataSet); procedure tblAfterDelete(DataSet: TDataSet); procedure tblZavadyIOAfterDelete(DataSet: TDataSet); procedure cbOpakTrideniClick(Sender: TObject); private procedure VypocetKs; public Helios: IHelios; jeTest: boolean; filtrRada: string; end; var formEvidOper: TformEvidOper; fVstDat: TformVstupDat; oVar: OleVariant; operace: TOperace; evidID, pomText: string; idVOp, idDavky, druhDavky: integer; idZavadaLouh: integer; VPrDavky: string; kodZavady, popisZavady, podm: string; exitKeyb: boolean; calcAkce: byte; // 1 - edit Dobre ks / 2 - Neopravitelne / 3 - Interne Opravitelne calcMnozEdit: boolean; aktRowNum: integer; davkaZbytekOp, origChciEvid, zmetky, zmetkyIO, zmetkyNeodv: Extended; chciEvidVic: boolean; implementation uses System.StrUtils, helUtils; {$R *.dfm} function TTBVirtualTable.IsFirstRecord: Boolean; begin result:= False; if (recNo=1) then result:= true; end; function TTBVirtualTable.IsLastRecord: Boolean; begin result:= False; if (recNo=RecordCount) then result:= true; end; procedure TformEvidOper.btnAddClick(Sender: TObject); var i: integer; begin podm:= 'TabCZavad.Blokovano=0 AND LEFT(TabCZavad.kod,1)<>N''V'''; if (tbl.RecordCount>0) then begin podm:= podm + ' AND TabCZavad.Kod NOT IN ('; i:= tbl.RecNo; grd.DataSource.DataSet.DisableControls; tbl.First; while not(tbl.Eof) do begin podm:= podm + 'N' + QuotedStr(tbl.FieldByName('KodZavady').AsString) + ','; tbl.Next; end; tbl.RecNo:= i; grd.DataSource.DataSet.EnableControls; SetLength(podm, Length(podm)-1); podm:= podm + ')'; end; { if (filtrRada<>'') then begin podm:= podm + ' AND CONVERT(nvarchar(200), TabCZavad.Poznamka) LIKE '; if (LeftStr(filtrRada,3)='224') then podm:= podm + 'N''%KONEČNÁ%'''; end; } kodZavady:= ''; popisZavady:= ''; if Helios.Prenos(11015, 'kod', oVar, podm, 'Vyberte typ ZÁVADY', true) then kodZavady:= VarToStr(oVar); { kodZavady:= ''; pnlCalc.Visible:= true; btnOK.Enabled:= false; btnZrusit.Enabled:= false; lblPnl.Caption:= 'Kód závady'; calcAkce:= 4; calcMnozEdit:= false; tKeyb.Visible:= true; tKeyb.Width:= 330; tKeyb.Height:= 305; edtNumVal.SetFocus; pnlCalc.Repaint; } // kod:= Trim(InputBox('Zadejte kód ZÁVADY', 'Kód:', '')); if (kodZavady<>'') then begin if (tbl.Locate('KodZavady', VarArrayOf([kodZavady]), [loCaseInsensitive])) then Helios.Error(#1'Tuto závadu jste již zadali.'#1) else with Helios.OpenSQL('SELECT nazev FROM ' + tblCZavad + ' WHERE kod=N' + QuotedStr(kodZavady)) do if (RecordCount<>1) then Helios.Error(#1'Nebyl nalezen zadaný kód ZÁVADY'#1) else begin popisZavady:= VarToStr(FieldValues(0)); pnlCalc.Visible:= true; btnOK.Enabled:= false; btnZrusit.Enabled:= false; lblPnl.Caption:= 'Množství závady ' + kodZavady; calcAkce:= 2; calcMnozEdit:= false; edtNumVal.Value:= 0; edtNumVal.SelectAll; tKeyb.Visible:= true; tKeyb.Width:= 330; tKeyb.Height:= 305; edtNumVal.SetFocus; pnlCalc.Repaint; end; end; end; procedure TformEvidOper.btnAddIOClick(Sender: TObject); var i: integer; begin podm:= 'TabCZavad.Blokovano=0 AND LEFT(TabCZavad.kod,1)=N''V'''; if (tblZavadyIO.RecordCount>0) then begin podm:= podm + ' AND TabCZavad.Kod NOT IN ('; i:= tblZavadyIO.RecNo; grd.DataSource.DataSet.DisableControls; tblZavadyIO.First; while not(tblZavadyIO.Eof) do begin podm:= podm + 'N' + QuotedStr(tblZavadyIO.FieldByName('KodZavady').AsString) + ','; tblZavadyIO.Next; end; tblZavadyIO.RecNo:= i; grd.DataSource.DataSet.EnableControls; SetLength(podm, Length(podm)-1); podm:= podm + ')'; end; { if (filtrRada<>'') then begin podm:= podm + ' AND CONVERT(nvarchar(200), TabCZavad.Poznamka) LIKE '; if (LeftStr(filtrRada,3)='224') then podm:= podm + 'N''%KONEČNÁ%'''; end; } kodZavady:= ''; if Helios.Prenos(11015, 'kod', oVar, podm, 'Vyberte typ ZÁVADY', true) then kodZavady:= VarToStr(oVar); // kod:= Trim(InputBox('Zadejte kód ZÁVADY', 'Kód:', '')); if (kodZavady<>'') then begin if (tblZavadyIO.Locate('KodZavady', VarArrayOf([kodZavady]), [loCaseInsensitive])) then Helios.Error(#1'Tuto závadu jste již zadali.'#1) else with Helios.OpenSQL('SELECT nazev FROM ' + tblCZavad + ' WHERE kod=N' + QuotedStr(kodZavady)) do if (RecordCount<>1) then Helios.Error(#1'Nebyl nalezen zadaný kód ZÁVADY'#1) else begin popisZavady:= VarToStr(FieldValues(0)); pnlCalc.Visible:= true; btnOK.Enabled:= false; btnZrusit.Enabled:= false; lblPnl.Caption:= 'Množství závady ' + kodZavady; calcAkce:= 3; calcMnozEdit:= false; edtNumVal.Value:= 0; edtNumVal.SelectAll; tKeyb.Visible:= true; tKeyb.Width:= 330; tKeyb.Height:= 305; edtNumVal.SetFocus; pnlCalc.Repaint; end; end; end; procedure TformEvidOper.btnOKClick(Sender: TObject); var lSQL, compName, zmetkyAll: string; ksOK, koefDavkaOK: extended; pomNum, allNum: Integer; begin if (edtCisZam.Text='') then begin Helios.Error(#1'Není zadán zaměstnanec.'#1); edtCisZam.SelectAll; edtCisZam.SetFocus; Exit; end; if (idVOp>0) then begin lblZapisDat.Visible:= true; self.Repaint; lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabEvidPracePlg'') IS NOT NULL DELETE FROM dbo._temp_TabEvidPracePlg WHERE Stanice=HOST_NAME()' + CRLF; lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabEvidPraceZavadyPlg'') IS NOT NULL DELETE FROM dbo._temp_TabEvidPraceZavadyPlg WHERE Stanice=HOST_NAME()' + CRLF; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabEvidPracePlg'') IS NOT NULL IF NOT EXISTS(SELECT * FROM dbo._temp_TabEvidPracePlg) DROP TABLE dbo._temp_TabEvidPracePlg' + CRLF; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabEvidPraceZavadyPlg'') IS NOT NULL IF NOT EXISTS(SELECT * FROM dbo._temp_TabEvidPraceZavadyPlg) DROP TABLE dbo._temp_TabEvidPraceZavadyPlg' + CRLF; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N''tempdb..#TabEvidPracePlg'') IS NOT NULL DROP TABLE #TabEvidPracePlg' + CRLF + 'CREATE TABLE #TabEvidPracePlg (TypOdvodu TINYINT, IDDavky INT, IDOperace INT'; lSQL:= lSQL + ', IDPrikaz INT, kusy_dobre NUMERIC(19,6) DEFAULT 0.0 NOT NULL, kusy_zavada NUMERIC(19,6) DEFAULT 0.0 NOT NULL, OpakovanaOperace BIT DEFAULT 0, CisloZam INT NOT NULL'; lSQL:= lSQL + ', CilovePrikazy NVARCHAR(2000) DEFAULT N'''', Autor NVARCHAR(80) DEFAULT SUSER_SNAME(), Stanice NVARCHAR(100) DEFAULT HOST_NAME())' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''tempdb..#TabEvidPraceZavadyPlg'') IS NOT NULL DROP TABLE #TabEvidPraceZavadyPlg' + CRLF + 'CREATE TABLE #TabEvidPraceZavadyPlg (KodZavady'; lSQL:= lSQL + ' NVARCHAR(15) NOT NULL, Mnozstvi NUMERIC(19,6) DEFAULT 0.0 NOT NULL, JeInterneOprav BIT DEFAULT 0, Neodvadet BIT DEFAULT 0, Autor NVARCHAR(80) DEFAULT SUSER_SNAME()'; lSQL:= lSQL + ', Stanice NVARCHAR(100) DEFAULT HOST_NAME())'; if (jeTest) then begin lSQL:= StringReplace(lSQL, '#TabEvidPrace', 'dbo._temp_TabEvidPrace', [rfReplaceAll]); lSQL:= StringReplace(lSQL, 'tempdb..', '', [rfReplaceAll]); end; Helios.ExecSQL(lSQL); { ksOK:= edtDobreKs.Value; if (zmetky<=edtDobreKs.Value) then ksOK:= edtDobreKs.Value - zmetky; if (zmetky>edtDobreKs.Value) then ksOK:= 0; if (edtDobreKs.Value-zmetky>0) then } ksOK:= edtDobreKs.Value - zmetky - zmetkyNeodv; koefDavkaOK:= 1; if (davkaZbytekOp0) then begin if (koefDavkaOK<>1) then begin pomNum:= Trunc(pomNum * koefDavkaOK); if (tbl.RecNo=tbl.RecordCount) then pomNum:= allNum else allNum:= allNum - pomNum; end; if (pomNum>0) then begin lSQL:= 'INSERT #TabEvidPraceZavadyPlg (KodZavady, Mnozstvi, JeInterneOprav) SELECT N' + QuotedStr(tbl.FieldByName('KodZavady').AsString) + ', '; lSQL:= lSQL + StringReplace(pomNum.ToString, ',', '.' ,[rfReplaceAll]) + ', 0'; if (jeTest) then lSQL:= StringReplace(lSQL, '#TabEvidPrace', 'dbo._temp_TabEvidPrace', [rfReplaceAll]); Helios.ExecSQL(lSQL); end; end; tbl.Next; end; tblZavadyIO.First; allNum:= Trunc(zmetkyIO); while not(tblZavadyIO.Eof) do begin pomNum:= tblZavadyIO.FieldByName('Mnozstvi').AsInteger; if (pomNum>0) then begin if (koefDavkaOK<>1) then begin pomNum:= Trunc(pomNum * koefDavkaOK); if (tblZavadyIO.RecNo=tblZavadyIO.RecordCount) then pomNum:= allNum else allNum:= allNum - pomNum; end; if (pomNum>0) then begin lSQL:= 'INSERT #TabEvidPraceZavadyPlg (KodZavady, Mnozstvi, JeInterneOprav, Neodvadet) SELECT N' + QuotedStr(tblZavadyIO.FieldByName('KodZavady').AsString) + ', '; lSQL:= lSQL + StringReplace(pomNum.ToString, ',', '.' ,[rfReplaceAll]) + ', 1, ' + IfThen(tblZavadyIO.FieldByName('Neodvadet').AsBoolean, '1', '0'); if (jeTest) then lSQL:= StringReplace(lSQL, '#TabEvidPrace', 'dbo._temp_TabEvidPrace', [rfReplaceAll]); Helios.ExecSQL(lSQL); end; end; tblZavadyIO.Next; end; lSQL:= 'UPDATE #TabEvidPracePlg SET kusy_zavada=' + StringReplace(FloatToStr(zmetky + zmetkyIO + zmetkyNeodv), ',', '.', [rfReplaceAll]) + ' WHERE Stanice=HOST_NAME()'; if (jeTest) then lSQL:= StringReplace(lSQL, '#TabEvidPrace', 'dbo._temp_TabEvidPrace', [rfReplaceAll]); Helios.ExecSQL(lSQL); if not(jeTest) then begin lSQL:= 'IF OBJECT_ID(N''dbo.ep_Vyroba_EvidPracePlg'') IS NOT NULL EXEC dbo.ep_Vyroba_EvidPracePlg'; try Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error(#1 + E.Message + #1); end; end; Close; end else begin Helios.Error(#1'Není načtena Dávka nebo Operace.'#1); if (idVOp=0) then edtBarCode2.SetFocus; if (idDavky=0) then edtBarCode.SetFocus; end; end; procedure TformEvidOper.btnZrusitClick(Sender: TObject); begin Close; end; procedure TformEvidOper.cbOpakTrideniClick(Sender: TObject); var ksLouh, ksLouhEvid: extended; begin if (cbOpakTrideni.Checked) and (operace.id>0) and (operace.skupzbo.ToUpper='P41') and (AnsiContainsText(operace.nazev, 'tříděn')) then begin lSQL:= 'SELECT SUM(Mnozstvi) FROM dbo._hdc_TabZmetkyPredpoklad WHERE IDMzdy IN (' + operace.idEvidence + ') AND IDZavady=' + idZavadaLouh.ToString; ksLouh:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); operace.ksZive:= ksLouh; lSQL:= 'SELECT SUM(z.kusy_odv) FROM ' + tblMzdZm + ' z LEFT JOIN ' + tblMzdZmE + ' e ON (e.ID=z.ID) INNER JOIN ' + tblPrPost + ' p ON (p.Doklad=z.DokladPrPostup'; lSQL:= lSQL + ' AND p.Alt=z.AltPrPostup AND p.IDPrikaz=z.IDPrikaz) WHERE z.IDPrikaz=' + operace.idPrikaz.ToString + ' AND p.Odvadeci=1'; lSQL:= lSQL + ' AND e._OpakovanaKontrola=1'; ksLouhEvid:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); davkaZbytekOp:= ksLouh - ksLouhEvid; lblOperace.Caption:= Trim(operace.operace) + ' / ' + operace.nazev + ' *** ' + operace.skupzbo + ' ' + operace.nazev; lblOperace.Caption:= lblOperace.Caption + ' / v dávce zbývá ' + StringReplace(davkaZbytekOp.ToString, ',', '.', [rfReplaceAll]) + ' oper.'; if (davkaZbytekOp=0) then lblOperace.Font.Color:= clRed else lblOperace.Font.Color:= clWindowText; edtCisZam.SetFocus; end; end; procedure TformEvidOper.colKodDrawBackground(Sender: TObject; ACol, ARow: Integer; CellRect: TRect; State: TNxCellPaintingState); var lSQL: string; begin if (ARow=0) then lSQL:= ''; end; procedure TformEvidOper.edtBarCode2Exit(Sender: TObject); var lSQL, dokl, alt: string; ksZive: Extended; begin edtBarcode2.Text:= Trim(edtBarcode2.Text); edtBarcode2.Text:= helUtils.StripChars(edtBarcode2.Text, ['''', '"', '-', ';', ' ', '=']); if (edtBarCode2.Text='') then Exit; if (LeftStr(edtBarCode2.Text,1).ToLower<>'a') then begin Helios.Error(#1 + 'Kód Operace musí začínat písmenem A' + #1); edtBarCode2.Text:= ''; edtBarCode2.SetFocus; end else begin operace.id:= 0; operace.doklad:= 0; operace.alt:= ''; operace.operace:= ''; operace.nazev:= ''; operace.ksZadane:= 0; operace.ksZive:= 0; operace.ksZmetky:= 0; operace.idEvidence:= '0'; operace.odvadeci:= false; idVOp:= 0; lblOperace.Caption:= ''; idVOp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND BarCode=N' + edtBarcode2.Text.QuotedString); if (idVOp>0) then begin operace.id:= idVOp; lSQL:= 'SELECT o.operace, o.Nazev, k.SkupZbo, k.RegCis FROM ' + tblPrPost + ' o INNER JOIN ' + tblPrikaz + ' p ON (p.ID=o.IDPrikaz) INNER JOIN '; lSQL:= lSQL + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE o.IDOdchylkyDo IS NULL AND (o.ID=' + idVOp.ToString + ' OR o.ID1=' + idVOp.ToString + ')'; with Helios.OpenSQL(lSQL) do begin operace.operace:= VarToStr(FieldValues(0)); operace.nazev:= Trim(VarToStr(FieldValues(1))); operace.skupzbo:= VarToStr(FieldValues(2)); operace.regcis:= VarToStr(FieldValues(3)); lblOperace.Caption:= Trim(operace.operace) + ' / ' + operace.nazev + ' *** ' + operace.skupzbo + ' ' + operace.nazev; if (AnsiContainsText(operace.nazev, 'tříděn')) and (operace.skupzbo.ToUpper='P41') then cbOpakTrideni.Visible:= true; end; with Helios.OpenSQL('SELECT Kusy_zad, Doklad, Alt, IDPrikaz, Odvadeci FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND (ID=' + idVOp.ToString + ' OR ID1=' + idVOp.ToString + ')') do begin operace.ksZadane:= StrToFloat(StringReplace(VarToStr(FieldValues(0)),',','.',[rfReplaceAll])); operace.doklad:= StrToInt(VarToStr(FieldValues(1))); operace.alt:= VarToStr(FieldValues(2)); operace.idPrikaz:= StrToInt(VarToStr(FieldValues(3))); operace.odvadeci:= StrToBool(VarToStr(FieldValues(4))); lSQL:= 'SELECT STRING_AGG(ID, '','') FROM ' + tblMzdZm + ' WHERE IDPrikaz=' + operace.idPrikaz.ToString + ' AND DokladPrPostup=' + operace.doklad.ToString; lSQL:= lSQL + ' AND AltPrPostup=N' + QuotedStr(operace.alt); operace.idEvidence:= helUtils.getHeliosStrVal(Helios, '0', lSQL); end; if (VPrDavky='') then begin lSQL:= 'SELECT STRING_AGG(IDPrikaz, N'','') FROM ' + tblDavky + ' WHERE ID=' + idDavky.ToString + ' OR IDRodic=' + idDavky.ToString; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); if (VPrDavky<>'') then begin podm:= 'TabPrPostup.IDPrikaz IN (SELECT IDPrikazVyssi FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + '))'; lSQL:= 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + ')'; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); end; end; if (druhDavky=4) and (VPrDavky<>'') then begin lSQL:= 'SELECT TOP(1) k.SkupZbo FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID IN (' + VPrDavky + ')'; lSQL:= helUtils.getHeliosStrVal(Helios, '', lSQL); if (lSQL='P41') and (operace.skupZbo='P42') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); if ((lSQL='P42') or (lSQL='P41')) and (operace.skupZbo='P43') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); if (lSQL='P41') and (operace.skupZbo='VOD') then begin VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); lSQL:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); if (lSQL<>'') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); end; end; if (VPrDavky='') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT IDPrikaz FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND ID=' + idVOp.ToString); lSQL:= 'SELECT SUM(Kusy_zive) FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND Doklad=' + operace.doklad.ToString + ' AND Alt=N' + operace.alt.QuotedString; if (VPrDavky<>'') then lSQL:= lSQL + ' AND IDPrikaz IN (' + VPrDavky + ')'; davkaZbytekOp:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); operace.ksZive:= davkaZbytekOp; pgCtrlZavady.Pages[shEvid.PageIndex].TabVisible:= false; pgCtrlZavady.Invalidate; tblEvid.Clear; lSQL:= 'SELECT e.Datum_X, z.PrijmeniJmeno, SUM(e.kusy_odv) FROM ' + tblMzdZm + ' e INNER JOIN ' + tblCZam + ' z ON (z.ID=e.Zamestnanec)'; if (cbOpakTrideni.Checked) then lSQL:= lSQL + ' INNER JOIN ' + tblMzdZmE + ' ee ON (ee.ID=e.ID AND ee._OpakovanaKontrola=1)'; lSQL:= lSQL + ' WHERE e.IDPrikaz IN (' + VPrDavky + ') AND e.DokladPrPostup=' + operace.doklad.ToString + ' AND e.AltPrPostup=N' + QuotedStr(operace.alt); lSQL:= lSQL + ' GROUP BY e.Datum_X, z.PrijmeniJmeno ORDER BY e.Datum_X DESC'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin tblEvid.Append; tblEvid.FieldByName('Datum').AsDateTime:= StrToDate(VarToStr(FieldValues(0))); tblEvid.FieldByName('Zamest').AsString:= VarToStr(FieldValues(1)); tblEvid.FieldByName('Mnoz').AsFloat:= StrToFloat(VarToStr(FieldValues(2))); tblEvid.Post; Next; end; grdEvid.Sort(0, skDescending); pgCtrlZavady.Pages[shEvid.PageIndex].TabVisible:= true; end; lblOperace.Caption:= lblOperace.Caption + ' / v dávce zbývá ' + StringReplace(davkaZbytekOp.ToString, ',', '.', [rfReplaceAll]) + ' oper.'; if (davkaZbytekOp=0) then lblOperace.Font.Color:= clRed else lblOperace.Font.Color:= clWindowText; edtCisZam.SetFocus; end else Helios.Error(#1'Zadaný kód Operace nebyl nalezen.'#1); end; end; procedure TformEvidOper.edtBarCode2KeyPress(Sender: TObject; var Key: Char); begin if (Ord(key)=VK_RETURN) then edtBarCode2Exit(Sender); end; procedure TformEvidOper.edtBarCodeExit(Sender: TObject); var lSQL: string; begin edtBarcode.Text:= Trim(edtBarcode.Text); edtBarcode.Text:= helUtils.StripChars(edtBarcode.Text, ['''', '"', '-', ';', ' ']); idDavky:= 0; if (edtBarcode.Text<>'') then begin edtBarCode2.Text:= ''; lblOperace.Caption:= ''; lblZmetky.Caption:= ''; lblMaloOperaci.Visible:= false; cbOpakTrideni.Checked:= false; cbOpakTrideni.Visible:= false; tbl.Clear; tblZavadyIO.Clear; tblEvid.Clear; druhDavky:= -1; lblDavka.Caption:= ''; idDavky:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ISNULL(IDRodic, ID) FROM ' + tblDavky + ' WHERE KodDavky2=N' + edtBarCode.Text.QuotedString); if (idDavky=0) then idDavky:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ISNULL(IDRodic, ID) FROM ' + tblDavky + ' WHERE KodDavky=' + edtBarcode.Text); if (idDavky>0) then begin lSQL:= 'SELECT DruhDavky, Rok, Cislo FROM ' + tblDavky + ' WHERE ID=' + idDavky.ToString; with Helios.OpenSQL(lSQL) do begin druhDavky:= StrToInt(VarToStr(FieldValues(0))); lblDavka.Caption:= 'Dávka '; case druhDavky of 1: lblDavka.Caption:= lblDavka.Caption + 'VOSK'; 2: lblDavka.Caption:= lblDavka.Caption + 'OBALOVNA'; 3: lblDavka.Caption:= lblDavka.Caption + 'TAVÍRNA'; 4: lblDavka.Caption:= lblDavka.Caption + 'KONEČNÁ'; 5: lblDavka.Caption:= lblDavka.Caption + 'KONEČNÁ interní'; 6: lblDavka.Caption:= lblDavka.Caption + 'OBROBNA'; end; lblDavka.Caption:= lblDavka.Caption + ' - ' + VarToStr(FieldValues(1)) + ' / ' + VarToStr(FieldValues(2)); end; lSQL:= 'SELECT STRING_AGG(IDPrikaz, N'','') FROM ' + tblDavky + ' WHERE ID=' + idDavky.ToString + ' OR IDRodic=' + idDavky.ToString; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); if (VPrDavky<>'') then begin podm:= 'TabPrPostup.IDPrikaz IN (SELECT IDPrikazVyssi FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + '))'; lSQL:= 'SELECT STRING_AGG(p.IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen)'; lSQL:= lSQL + ' WHERE p.IDPrikazVyssi IS NOT NULL AND p.ID IN (' + VPrDavky + ')'; // if (druhDavky=4) then // lSQL:= lSQL + ' AND k.SkupZbo=N''P41'''; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); end; { if (druhDavky=4) and (VPrDavky<>'') then begin lSQL:= 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + ')'; lSQL:= lSQL + ' AND EXISTS(SELECT k.ID FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID IN (' + VPrDavky + ')'; lSQL:= lSQL + ' AND k.SkupZbo=N''P41'')'; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); end; } edtBarCode2.SetFocus; end else Helios.Error(#1'Zadaný kód Dávky nebyl nalezen.'#1); end; end; procedure TformEvidOper.edtBarCodeKeyPress(Sender: TObject; var Key: Char); begin if (Ord(key)=VK_RETURN) then edtBarCodeExit(Sender); end; procedure TformEvidOper.edtCisZamExit(Sender: TObject); begin lblZamest.Caption:= ''; edtCisZam.Text:= StringReplace(Trim(edtCisZam.Text), ' ', '', [rfReplaceAll]); edtCisZam.Text:= helUtils.StripChars(edtCisZam.Text, ['''', '"', '-', ';', ' ']); edtCisZam.Text:= helUtils.RemoveWords(edtCisZam.Text, ['null']); edtCisZam.Text:= helUtils.RemoveAlphas(edtCisZam.Text); if not(IsNumeric(edtCisZam.Text)) then begin Helios.Error(#1'Kód zaměstnance musí být číselný'#1); edtCisZam.Text:= ''; edtCisZam.SetFocus; end else if (edtCisZam.Text<>'') then begin if (helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblCZam + ' WHERE Cislo=' + edtCisZam.Text)=0) then begin Helios.Error(#1'Osobní číslo zaměstnance nebylo nalezeno.'#1 + CRLF + edtCisZam.Text); edtCisZam.Text:= ''; lblZamest.Caption:= ''; edtCisZam.SetFocus; end else begin edtCisZam.Text:= StringOfChar('0', 6-Length(edtCisZam.Text)) + edtCisZam.Text; lblZamest.Caption:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PrijmeniJmeno FROM ' + tblCZam + ' WHERE Cislo=' + edtCisZam.Text); edtDobreKs.SelectAll; edtDobreKs.SetFocus; end; end; end; procedure TformEvidOper.edtCisZamKeyPress(Sender: TObject; var Key: Char); begin if (Ord(key)=VK_RETURN) then edtCisZamExit(Sender); end; procedure TformEvidOper.edtDobreKsChange(Sender: TObject); begin origChciEvid:= edtDobreKs.Value; if (davkaZbytekOp0) and (ACol=0) then if Helios.YesNo('Chcete smazat závadu ' + grd.Cell[ACol, ARow].AsString + ' ?', false) then begin tbl.Edit; tbl.Delete; grd.Refresh; end; if (tbl.RecordCount>0) and (ACol=colMnozstvi.Index) then begin calcMnozEdit:= true; calcAkce:= 2; aktRowNum:= tbl.RecNo; lblPnl.Caption:= 'Množství závady ' + grd.Cells[0, ARow]; pnlCalc.Visible:= true; edtNumVal.Value:= grd.Cell[2, ARow].AsFloat; edtNumVal.SelectAll; tKeyb.Visible:= True; tKeyb.Width:= 330; tKeyb.Height:= 305; edtNumVal.SetFocus; pnlCalc.Repaint; end; end; procedure TformEvidOper.grdIOCellClick(Sender: TObject; ACol, ARow: Integer; Button: TMouseButton); var mn: Extended; t: string; i: integer; begin if (tblZavadyIO.RecordCount>0) and (ACol=0) then if Helios.YesNo('Chcete smazat závadu ' + grdIO.Cell[ACol, ARow].AsString + ' ?', false) then begin tblZavadyIO.Edit; tblZavadyIO.Delete; grdIO.Refresh; end; if (tblZavadyIO.RecordCount>0) and (ACol=colMnozstvi.Index) then begin calcMnozEdit:= true; calcAkce:= 3; aktRowNum:= tblZavadyIO.RecNo; lblPnl.Caption:= 'Množství závady ' + grdIO.Cells[0,ARow]; pnlCalc.Visible:= true; edtNumVal.Value:= grd.Cell[2, ARow].AsFloat; edtNumVal.SelectAll; tKeyb.Visible:= true; tKeyb.Width:= 330; tKeyb.Height:= 305; edtNumVal.SetFocus; pnlCalc.Repaint; end; end; procedure TformEvidOper.selBarCode2Click(Sender: TObject); var lSQL, podm: string; bid: integer; begin { if (filtrRada<>'') then podm:= 'TabPrPostup.IDPrikaz IN (SELECT ID FROM ' + tblPrikaz + ' WHERE Rada LIKE N' + QuotedStr(filtrRada + '%') + ')'; } VPrDavky:= ''; podm:= ''; if (idDavky>0) then begin lSQL:= 'SELECT STRING_AGG(IDPrikaz, N'','') FROM ' + tblDavky + ' WHERE ID=' + idDavky.ToString + ' OR IDRodic=' + idDavky.ToString; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); podm:= 'TabPrPostup.IDPrikaz IN (SELECT IDPrikazVyssi FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + '))'; lSQL:= 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + ')'; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); { if (VPrDavky='') then begin lSQL:= 'SELECT STRING_AGG(IDPrikaz, N'','') FROM ' + tblDavky + ' WHERE ID=' + idDavky.ToString + ' OR IDRodic=' + idDavky.ToString; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); if (VPrDavky<>'') then begin podm:= 'TabPrPostup.IDPrikaz IN (SELECT IDPrikazVyssi FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + '))'; lSQL:= 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE IDPrikazVyssi IS NOT NULL AND ID IN (' + VPrDavky + ')'; VPrDavky:= helUtils.getHeliosStrVal(Helios, '', lSQL); end; end; if (druhDavky=4) and (VPrDavky<>'') then begin lSQL:= 'SELECT TOP(1) k.SkupZbo FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID IN (' + VPrDavky + ')'; lSQL:= helUtils.getHeliosStrVal(Helios, '', lSQL); if (lSQL='P41') and (operace.skupZbo='P42') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); if ((lSQL='P42') or (lSQL='P41')) and (operace.skupZbo='P43') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); if (lSQL='P41') and (operace.skupZbo='VOD') then begin VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); lSQL:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); if (lSQL<>'') then VPrDavky:= helUtils.getHeliosStrVal(Helios, '', 'SELECT STRING_AGG(IDPrikazVyssi, N'','') FROM ' + tblPrikaz + ' WHERE ID IN (' + VPrDavky + ')'); end; end; } end; if Helios.Prenos(bidVyrOper, 'TabPrPostup.BarCode', oVar, podm, 'Vyberte operaci', true) then begin edtBarCode2.Text:= Trim(VarToStr(oVar)); edtBarCode2Exit(Sender); end; end; procedure TformEvidOper.selBarCodeClick(Sender: TObject); var podm: string; bid: integer; begin podm:= ''; bid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Davky'''); if (bid>0) then begin if Helios.Prenos(100000+bid, 'KodDavky', oVar, '', 'Vyberte dávku', true) then begin edtBarCode.Text:= Trim(VarToStr(oVar)); edtBarCodeExit(Sender); end; end; end; procedure TformEvidOper.tblAfterDelete(DataSet: TDataSet); begin tblAfterPost(DataSet); VypocetKs; end; procedure TformEvidOper.tblAfterPost(DataSet: TDataSet); var i: integer; begin zmetky:= 0; if (tbl.RecordCount>0) then begin i:= tbl.RecNo; grd.DataSource.DataSet.DisableControls; tbl.First; while not(tbl.Eof) do begin zmetky:= zmetky + tbl.FieldByName('Mnozstvi').AsFloat; tbl.Next; end; tbl.RecNo:= i; grd.DataSource.DataSet.EnableControls; end; if (zmetky+zmetkyIO+zmetkyNeodv>0) then begin lblZmetky.Caption:= 'Celkem opr+neopr: ' + (zmetky+zmetkyIO+zmetkyNeodv).ToString; lblZmetky.Visible:= true; end else lblZmetky.Visible:= false; shNeopravitelne.Caption:= ' Neopravitelné ' + IfThen(zmetky>0, '(' + Trunc(zmetky).ToString +')', ''); end; procedure TformEvidOper.tblZavadyIOAfterDelete(DataSet: TDataSet); begin tblZavadyIOAfterPost(Dataset); VypocetKs; end; procedure TformEvidOper.tblZavadyIOAfterPost(DataSet: TDataSet); var i: integer; begin zmetkyIO:= 0; zmetkyNeodv:= 0; if (tblZavadyIO.RecordCount>0) then begin i:= tblZavadyIO.RecNo; grdIO.DataSource.DataSet.DisableControls; tblZavadyIO.First; while not(tblZavadyIO.Eof) do begin if (tblZavadyIO.FieldByName('Neodvadet').AsBoolean) then zmetkyNeodv:= zmetkyNeodv + tblZavadyIO.FieldByName('Mnozstvi').AsFloat else zmetkyIO:= zmetkyIO + tblZavadyIO.FieldByName('Mnozstvi').AsFloat; tblZavadyIO.Next; end; tblZavadyIO.RecNo:= i; grdIO.DataSource.DataSet.EnableControls; end; if (zmetky+zmetkyIO+zmetkyNeodv>0) then begin lblZmetky.Caption:= 'Celkem opr+neopr: ' + (zmetky+zmetkyIO+zmetkyNeodv).ToString; lblZmetky.Visible:= true; end else lblZmetky.Visible:= false; shInterneOpravitelne.Caption:= ' Interně opravit. ' + IfThen((zmetkyIO+zmetkyNeodv)>0, '(' + Trunc(zmetkyIO+zmetkyNeodv).ToString +')', ''); end; procedure TformEvidOper.VypocetKs; begin { if (davkaZbytekOporigChciEvid) then edtDobreKs.Value:= origChciEvid; end; } { if (edtDobreKs.Value+zmetky+zmetkyIO>davkaZbytekOp) then lblMaloOperaci.Visible:= true else lblMaloOperaci.Visible:= false; } end; procedure TformEvidOper.tKeybKeyClick(Sender: TObject; Index: Integer); var i: integer; lSQL, sql1, sql2: string; begin if (Index=9) and (calcAkce=1) and (calcMnozEdit) then begin edtDobreKs.Value:= 0; exitKeyb:= false; end; if (tKeyb.Visible) and not(exitKeyb) then begin exitKeyb:= false; tKeyb.SetFocus; i:= -1; case Index of 0: i:= 7; 1: i:= 8; 2: i:= 9; 3: i:= 4; 4: i:= 5; 5: i:= 6; 6: i:= 1; 7: i:= 2; 8: i:= 3; 9: edtNumVal.Value:= 0; 10: i:= 0; 11: begin if (calcMnozEdit) then case calcAkce of 2: begin tbl.Edit; tbl.FieldByName('Mnozstvi').AsFloat:= edtNumVal.Value; tbl.Post; VypocetKs; end; 3: begin tblZavadyIO.Edit; tblZavadyIO.FieldByName('Mnozstvi').AsFloat:= edtNumVal.Value; tblZavadyIO.Post; VypocetKs; end; end else case calcAkce of 1: begin edtDobreKs.Value:= edtNumVal.Value; if (edtDobreKs.Value>operace.ksZive) then edtDobreKs.Value:= operace.ksZive; // btnOK.SetFocus; end; 2: begin if (edtNumVal.Value>0) then begin tbl.Append; tbl.FieldByName('KodZavady').AsString:= kodZavady; tbl.FieldByName('Popis').AsString:= popisZavady; tbl.FieldByName('Mnozstvi').AsFloat:= edtNumVal.Value; tbl.Post; VypocetKs; btnAdd.SetFocus; end; end; 3: begin if (edtNumVal.Value>0) then begin tblZavadyIO.Append; tblZavadyIO.FieldByName('KodZavady').AsString:= kodZavady; tblZavadyIO.FieldByName('Popis').AsString:= popisZavady; tblZavadyIO.FieldByName('Mnozstvi').AsFloat:= edtNumVal.Value; lSQL:= 'SELECT ISNULL(e._Neodvadet, 0) FROM ' + tblCZavad + ' z LEFT JOIN ' + tblCZavadE + ' e ON (e.ID=z.ID) WHERE z.Kod=N' + QuotedStr(kodZavady); tblZavadyIO.FieldByName('Neodvadet').AsBoolean:= getHeliosBoolVal(Helios, false, lSQL); tblZavadyIO.Post; VypocetKs; btnAddIO.SetFocus; end; end; end; grd.Refresh; grdIO.Refresh; calcMnozEdit:= false; btnOK.Enabled:= true; btnZrusit.Enabled:= true; pnlCalc.Visible:= false; tKeyb.Visible:= false; exitKeyb:= true; end; end; if (i>=0) then begin if (edtNumVal.Value=0) then edtNumVal.Value:= i else edtNumVal.Value:= StrToInt(Trim(StringReplace(StringReplace(edtNumVal.Text,#160,'',[rfReplaceAll]),' ','',[rfReplaceAll])) + IntToStr(i)); end else end; end; procedure TformEvidOper.tKeybKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i: integer; begin i:= -1; case Key of 13: i:= 11; 46: i:= 9; 48: i:= 10; // 0 49: i:= 6; 50: i:= 7; 51: i:= 8; 52: i:= 3; 53: i:= 4; 54: i:= 5; 55: i:= 0; 56: i:= 1; 57: i:= 9; end; tKeybKeyClick(Sender, i); end; procedure TformEvidOper.btnCalcCloseClick(Sender: TObject); begin numPadVal:= 0; pnlCalc.Visible:= false; tKeyb.Visible:= false; btnOK.Enabled:= true; btnZrusit.Enabled:= true; if (calcAkce=1) and (edtDobreKs.Value>0) then btnOK.SetFocus; end; end.