unit frmHrOdvOper; { 28.11.2023 - lze skenovat poradove cislo dokladu prijemky, davka se bude postupne rusit kvuli zmene odvadeni P12 z vosku primo na sklad obalovny } interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Mask, ddPlugin_TLB, // KControls, KGrids, Buttons, RzEdit, RzBtnEdt, RxToolEdit, NxCustomGrid6, NxGrid6, NxColumns6, NxTypes6, NxGridView6, NxControls6, NxVirtualGrid6; const errPlg = 'plgKdynium'; tblEvidOper = '[dbo].[_hdc_TabHromEvidOper]'; tblEvidOpPolozky = '[dbo].[_hdc_TabHromEvidOperPol]'; tblDavky = '[dbo].[_hdc_TabDavky]'; type TOper = record Operace: shortString; Koef: extended; IdPostup: integer; NormCas: Extended; SkutCas: Extended; zmetky: integer; end; TformHrOdvOper = class(TForm) grpZam: TGroupBox; edtOsCislo: TComboEdit; edtJmeno: TComboEdit; lbl1: TLabel; lbl2: TLabel; lbl3: TLabel; lblUvazek: TLabel; grpPrikaz: TGroupBox; edtPrikaz: TComboEdit; edtNazevZbozi: TEdit; grpSmena: TGroupBox; edtSmena: TComboEdit; lbl12: TLabel; lblVyrobeneKs: TLabel; edtKusy: TRzNumericEdit; lbl14: TLabel; lbl15: TLabel; lblZbyvCas: TLabel; lbl18: TLabel; lbl19: TLabel; btnOpAdd1: TButton; btnOpAddVse: TButton; btnOpDel1: TButton; btnOpDelVse: TButton; lblCasNormVP: TLabel; lblCasNormEvid: TLabel; dtDatum: TRzDateTimeEdit; btnOK: TBitBtn; btnQuit: TBitBtn; Label1: TLabel; lblEvid: TLabel; Label2: TLabel; lblKmenStred: TLabel; edtCasHod: TRzNumericEdit; edtCasMin: TRzNumericEdit; Label5: TLabel; Label4: TLabel; btnDalsiPrikaz: TBitBtn; Label3: TLabel; gridOperEvid: TNextGrid6; colOpEvidCislo: TNxNumberColumn6; colOpEvidPopis: TNxTextColumn6; colOpEvidCasM: TNxNumberColumn6; gridOperPrikaz: TNextGrid6; gridAllEvid: TNextGrid6; colEvidOdlitek: TNxTextColumn6; colEvidPopis: TNxTextColumn6; colEvidKs: TNxNumberColumn6; colEvidCasM: TNxNumberColumn6; colEvidPlneni: TNxNumberColumn6; colOpCasS: TNxNumberColumn6; colOpCasM: TNxNumberColumn6; colOpEvidCasS: TNxNumberColumn6; colOpIdPostup: TNxNumberColumn6; colOpEvidIdPostup: TNxNumberColumn6; lblPlneni: TLabel; colOpSkutCasS: TNxDateColumn6; colOpEvidSkutCasS: TNxDateColumn6; colOpEvidIdEvidOp: TNxNumberColumn6; colOpIdEvidOp: TNxNumberColumn6; view1: TNxReportGridView6; view2: TNxReportGridView6; view3: TNxReportGridView6; colOpEvidZmetky: TNxNumberColumn6; colOpPopis: TNxTextColumn6; colOpCislo: TNxNumberColumn6; btnClearVP: TBitBtn; lblZbytekKs: TLabel; lblZbyvaKs: TLabel; colOpMnoz: TNxNumberColumn6; colOpEvidMnoz: TNxNumberColumn6; colOpEvidZive: TNxNumberColumn6; colOpEvidMnozOrig: TNxNumberColumn6; lblNormaKs: TLabel; colOpNormaMin: TNxNumberColumn6; colOpEvidNormaMin: TNxNumberColumn6; btnDalsiClovek: TBitBtn; colOpEvidKodZavady: TNxNumberColumn6; grpDavka: TGroupBox; edtDavka: TComboEdit; grpMnozCas: TGroupBox; edtObalovna: TEdit; Label6: TLabel; edtObalovnaDavka: TEdit; Label7: TLabel; colOpMnozZive: TNxNumberColumn6; procedure btnQuitClick (Sender: TObject); procedure FormShow (Sender: TObject); procedure edtOsCisloButtonClick (Sender: TObject); procedure edtSmenaButtonClick (Sender: TObject); procedure btnOpAdd1Click (Sender: TObject); procedure btnOpAddVseClick (Sender: TObject); procedure gridOperPrikazMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure gridOperPrikazDragOver (Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure gridOperPrikazDragDrop (Sender, Source: TObject; X, Y: Integer); procedure gridOperPrikazChanged (Sender: TObject; ACol, ARow: Integer); procedure gridOperEvidDragOver (Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure gridOperEvidDragDrop (Sender, Source: TObject; X, Y: Integer); procedure gridOperEvidMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure gridOperEvidResize (Sender: TObject); procedure btnOpDel1Click (Sender: TObject); procedure btnUkazOperClick (Sender: TObject); procedure btnOpDelVseClick (Sender: TObject); procedure edtKusyExit (Sender: TObject); procedure edtPrikazButtonClick (Sender: TObject); procedure edtVyrobekClick (Sender: TObject); procedure edtPrikazExit (Sender: TObject); procedure edtPrikazKeyUp (Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtOsCisloExit (Sender: TObject); procedure dtDatumChange (Sender: TObject); procedure btnOKClick (Sender: TObject); procedure edtOsCisloKeyPress (Sender: TObject; var Key: Char); procedure btnDalsiPrikazClick (Sender: TObject); procedure FormMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormActivate (Sender: TObject); procedure gridOperPrikazResize (Sender: TObject); procedure FormResize(Sender: TObject); procedure gridOperPrikazCellDblClick(Sender: TObject; ACol, ARow: Integer); procedure gridOperEvidCellDblClick(Sender: TObject; ACol, ARow: Integer); procedure edtCasHodExit(Sender: TObject); procedure edtCasMinExit(Sender: TObject); procedure edtJmenoButtonClick(Sender: TObject); procedure gridOperPrikazSelect(Sender: TObject; ACol, ARow: Integer); procedure gridOperEvidSelect(Sender: TObject; ACol, ARow: Integer); procedure btnClearVPClick(Sender: TObject); procedure gridOperEvidCellChange(Sender: TObject; ACol, ARow: Integer); procedure gridOperEvidCellClick(Sender: TObject; ACol, ARow: Integer; Button: TMouseButton); procedure gridOperPrikazCellChange(Sender: TObject; ACol, ARow: Integer); procedure edtKusyChange(Sender: TObject); procedure btnDalsiClovekClick(Sender: TObject); procedure edtDavkaExit(Sender: TObject); procedure edtDavkaButtonClick(Sender: TObject); private procedure OnMsg (var Msg: TMsg; var Handled: Boolean); function CasDleTPV (var casS,casM,casH: Extended): boolean; function NactiOperace: boolean; procedure FixGridCols (const grid: TNextGrid6); procedure VyplnDataDleKZ; procedure VyplnDataDleVPr; procedure PrepoctiCasVP; procedure PrepoctiCasEvid; procedure NastavGridy; procedure UdajeZamest (cZam,idZamest: integer; zbytekUvaz: boolean); procedure NactiJizEvidOperace; procedure NactiEvidenci; public Helios: IHelios; filtrRada: string; jeTest: Boolean; jeEditace: boolean; idHromEvidOp: integer; // ID z tabulky _TabEvidOperaci (pro editaci) end; var verText, evidMJ: ShortString; formHrOdvOper: TformHrOdvOper; oVar1, oVar2: OleVariant; bidDavky, bidHDCLog: integer; evidDavka: boolean; radaPrikP12Vosk, sklP12Obal, radaOdvP12Vosk: string; idZam, idVPr, idVPrOld, idKZ, idMObd, idDavka, idDokladOZ: integer; vicPrikazu, davkaObal, dataUlozena: boolean; sumCas_S, sumCas_M, sumCas_H, odvKs, zmetKs, zbytekKs, ksDavka: Extended; casSk_S, casSk_M, casSk_H: extended; opVPsel,opEvidsel: integer; // cislo vybraneho radku novyVyr, novyClovek, hromAkce: Boolean; idOperaci: TArray; dragRow,dragCol: integer; implementation uses System.StrUtils, System.DateUtils, System.RegularExpressions, frmInputNum, frmHrOdvOperZmetky, myUtils, helUtils; {$R *.dfm} procedure TformHrOdvOper.OnMsg (var Msg: tagMSG; var Handled: Boolean); begin if (Msg.hwnd=edtJmeno.Handle) and (Msg.message=WM_KEYDOWN) then case Msg.wParam of VK_TAB: begin edtJmeno.Text:= Trim(edtJmeno.Text); edtJmenoButtonClick(nil); end; end; end; procedure TformHrOdvOper.NactiEvidenci; var lSQL, idOps: string; i,idx,cnt: integer; begin idKZ:= 0; lSQL:= 'SELECT IdKmenZbozi, CisloZamest, Mnozstvi, Datum, CasHod, CasMin, ISNULL(IDDavka,0) FROM ' + tblEvidOper + ' WHERE ID=' + IntToStR(idHromEvidOp); with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin edtDavka.Text:= ''; idDavka:= StrToInt(VarToStr(FieldValues(6))); if (idDavka>0) then edtDavka.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT KodDavky FROM ' + tblDavky + ' WHERE ID=' + idDavka.ToString); edtOsCislo.Text:= VarToStr(FieldValues(1)); idKZ:= StrToInt(VarToStr(FieldValues(0))); with Helios.OpenSQL('SELECT ID FROM ' + tblCZam + ' WHERE Cislo=' + edtOsCislo.Text) do if not(VarIsNull(FieldValues(0))) then idZam:= StrToInt(VarToStr(FieldValues(0))); edtOsCisloExit(nil); edtKusy.Value:= StrToFloat(VarToStr(FieldValues(2))); dtDatum.Date:= StrToDateTime(VarToStr(FieldValues(3))); edtCasHod.Value:= StrToFloat(VarToStr(FieldValues(4))); edtCasMin.Value:= StrToFloat(VarToStr(FieldValues(5))); VyplnDataDleKZ; cnt:= 0; SetLength(idOperaci,0); idOps:= ''; with Helios.OpenSQL('SELECT ID FROM ' + tblEvidOpPolozky + ' WHERE IdEvidOper=' + IntToStr(idHromEvidOp)) do if (RecordCount>0) then begin SetLength(idOperaci, RecordCount); cnt:= 1; First; while not(EOF) do begin idOperaci[cnt-1]:= StrToInt(VarToStr(FieldValues(0))); Inc(i); Next; end; idOps:= ArrayIntToStr(idOperaci); end; if (cnt>0) then begin idx:= 0; gridOperEvid.ClearRows; gridOperEvid.RowCount:= cnt; while (idx0) then begin for idx:=0 to gridOperEvid.RowCount-1 do begin for i:=0 to gridOperPrikaz.RowCount-1 do if (gridOperEvid.Cell[4,idx]=gridOperPrikaz.Cell[4,i]) then begin gridOperPrikaz.DeleteRow(i); Break; end; end; PrepoctiCasVP; end; PrepoctiCasEvid; end; end; end; procedure TformHrOdvOper.FixGridCols(const grid: TNextGrid6); var i : integer; TotWidth : integer; VarWidth : integer; ResizableColumnCount : integer; AColumn : TNxColumn6; begin //total width of all columns before resize TotWidth := 0; //how to divide any extra space in the grid VarWidth := 0; //how many columns need to be auto-resized ResizableColumnCount:= 0; for i:=0 to -1 + grid.Columns.Count do begin TotWidth := TotWidth + grid.Columns[i].Width; if grid.Columns[i].Tag <> 0 then Inc(ResizableColumnCount); end; //add 1px for the column separator line // if dgColLines in grid.Options then TotWidth:= TotWidth + grid.Columns.Count; //add indicator column width // if dgIndicator in grid.Options then // TotWidth:= TotWidth + IndicatorWidth; //width vale "left" VarWidth:= grid.ClientWidth - TotWidth; //Equally distribute VarWidth //to all auto-resizable columns if (ResizableColumnCount>0) then VarWidth:= varWidth div ResizableColumnCount; for i:=0 to -1 + grid.Columns.Count do begin AColumn := grid.Columns[i]; if (AColumn.Tag<>0) then begin AColumn.Width:= AColumn.Width + VarWidth; if (AColumn.Width'') then begin gridAllEvid.ClearRows; sql:= 'SELECT kz.RegCis, kz.Nazev1, e.Mnozstvi, (e.CasHod*60)+e.CasMin, ROUND(ep.Plneni,1) FROM ' + tblEvidOper; sql:= sql + ' e INNER JOIN ' + tblKZ + ' kz ON (e.IdKmenZbozi=kz.id) INNER JOIN '; sql:= sql + '(SELECT IdEvidOper, AVG(Plneni) As [Plneni] FROM ' + tblEvidOpPolozky; sql:= sql + ' GROUP BY IdEvidOper) ep ON (e.id=ep.IdEvidOper) WHERE e.CisloZamest=' + edtOsCislo.Text; sql:= sql + ' AND CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,e.Datum)))=CONVERT(datetime,N'; sql:= sql + QuotedStr(DateTimeToStr(dtDatum.Date)) + ',104) ORDER BY e.DatPorizeni DESC'; with Helios.OpenSQL(sql) do if RecordCount>0 then begin gridAllEvid.RowCount:= RecordCount; idx:= 0; First; while not(EOF) do begin gridAllEvid.Cell[colEvidOdlitek.Index, idx].AsString:= VarHodnota(FieldValues(0),''); // odlitek gridAllEvid.Cell[colEvidPopis.Index, idx].AsString:= VarHodnota(FieldValues(1),''); // nazev odlitku gridAllEvid.Cell[colEvidKs.Index, idx].AsFloat:= VarHodnota(FieldValues(2),0.0); // ks gridAllEvid.Cell[colEvidCasM.Index, idx].AsInteger:= VarHodnota(FieldValues(3),0); // cas min gridAllEvid.Cell[colEvidPlneni.Index, idx].AsFloat:= VarHodnota(FieldValues(4),0.0); // plneni Inc(idx); Next; end; end; end; end; procedure TformHrOdvOper.btnClearVPClick(Sender: TObject); begin idKZ:= 0; idVPr:= 0; lblKmenStred.Caption:= ''; edtKusy.Value:= 0; lblZbytekKs.Caption:= ''; edtCasHod.Value:= 0; edtCasMin.Value:= 0; edtPrikaz.Text:= ''; edtNazevZbozi.Text:= ''; gridOperPrikaz.ClearRows; gridOperEvid.ClearRows; lblCasNormVP.Caption:= '0.0 min)'; lblCasNormEvid.Caption:= '0.0 min)'; lblNormaKs.Caption:= ''; edtPrikaz.SetFocus; end; procedure TformHrOdvOper.btnDalsiClovekClick(Sender: TObject); begin novyClovek:= true; btnDalsiPrikazClick(Sender); end; procedure TformHrOdvOper.btnDalsiPrikazClick (Sender: TObject); var i: integer; begin idHromEvidOp:= 0; novyVyr:= true; if (novyClovek) then novyVyr:= false; btnOKClick(Sender); if not(dataUlozena) then Exit; if (novyVyr) then begin edtPrikaz.Text:= ''; edtNazevZbozi.Text:= ''; lblKmenStred.Caption:= ''; edtObalovna.Text:= ''; edtObalovnaDavka.Text:= ''; edtDavka.Text:= ''; edtDavka.SetFocus; end else begin edtPrikazExit(Sender); edtOsCislo.SetFocus; end; novyVyr:= false; novyClovek:= false; gridOperPrikaz.ClearRows; gridOperEvid.ClearRows; gridAllEvid.ClearRows; NastavGridy; NactiOperace; lblCasNormVP.Caption:= '0.0 min)'; lblNormaKs.Caption:= ''; lblCasNormEvid.Caption:= '0.0 min)'; i:= 0; while (i<=Self.ComponentCount-1) do begin if (Self.Components[i] is TRzNumericEdit) then (Self.Components[i] as TRzNumericEdit).Text:= '0'; Inc(i); end; end; procedure TformHrOdvOper.btnOKClick (Sender: TObject); var pIdx, oIdx, idx, ppIdx, idx2, idPMZ, iDokl: integer; lSQL, msg: string; Vpr: IHeQuery; dt, doklad: string; zbytek, opZbytek, OpCas, AllCas, CCas, EvidCas, odvOp, koefKS, ks, ksOdv, AllKsOdv: Extended; mn, mnZ: Extended; chyba, jeNovaEvid: boolean; Operace: TArray; idEvidOperPol: string; begin edtPrikaz.Text:= Trim(edtPrikaz.Text); if (idZam=0) then begin Helios.Error(#1'Chybně zadán zaměstnanec.'#1); edtOsCislo.SetFocus; Exit; end; with Helios.OpenSQL('SELECT Cislo FROM ' + tblCZam + ' WHERE Cislo=' + edtOsCislo.Text) do if (RecordCount=0) then begin Helios.Error(#1'Chybně zadán zaměstnanec.'#1); edtOsCislo.SetFocus; Exit; end; if (edtOsCislo.Text='') then begin Helios.Error(#1'Pro evidenci není zadán zaměstnanec.'#1); edtOsCislo.SetFocus; Exit; end; if (edtPrikaz.Text='') then begin Helios.Error(#1'Pro evidenci není zadán Výrobní příkaz.'#1); edtPrikaz.SetFocus; Exit; end; { if (edtCasHod.Value=0) and (edtCasMin.Value=0) then begin Helios.Error(#1'Není zadán čas evidovaných operací.'#1); edtCasHod.SetFocus; Exit; end; } if (gridOperEvid.RowCount=0) then begin Helios.Error(#1'K evidenci nejsou vybrány žádné operace.'#1); Exit; end; // if (gridOperEvid.RowCount=0) and not(novyVyr) then // btnQuitClick(Sender); if (idVPr>0) or (idDavka>0) then begin ReseedTable(Helios,tblEvidOper); ReseedTable(Helios,tblEvidOpPolozky); jeNovaEvid:= (idHromEvidOp=0); if (idHromEvidOp=0) then begin lSQL:= 'INSERT ' + tblEvidOper + ' (IdKmenZbozi, IdPrikaz, Mnozstvi, CisloZamest, Datum, CasHod, CasMin, Poznamka, ' + IfThen(evidDavka, 'IdDavka', 'IDDokladOZ') + ') SELECT '; if (idKZ>0) and (idDavka=0) then lSQL:= lSQL + IntToStr(idKZ) else lSQL:= lSQL + 'null'; lSQL:= lSQL + ', ' + IfThen(idVPr>0, idVPr.ToString, 'NULL'); lSQL:= lSQL + ', ' + StringReplace(FloatToStr(edtKusy.Value),',','.',[rfReplaceAll]) + ','; if (idZam>0) then lSQL:= lSQL + edtOsCislo.Text else lSQL:= lSQL + 'null'; lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(DateToStr(dtDatum.Date) + ' ' + TimeToStr(Now)) + ',104)'; lSQL:= lSQL + ', ' + StringReplace(FloatToStr(edtCasHod.Value),',','.',[rfReplaceAll]); lSQL:= lSQL + ', ' + StringReplace(FloatToStr(edtCasMin.Value),',','.',[rfReplaceAll]); lSQL:= lSQL + ', N'+ QuotedStr(verText) + ', ' + IfThen(idDavka>0, idDavka.ToString, idDokladOZ.ToString); lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; try with Helios.OpenSQL(lSQL) do if not TryStrToInt(VarToStr(FieldValues(0)),idHromEvidOp) then idHromEvidOp:= 0; if (idHromEvidOp>0) then begin if (davkaObal) then begin edtObalovna.Text:= TRegEx.Replace(Trim(edtObalovna.Text), '\D', ''); edtObalovnaDavka.Text:= TRegEx.Replace(Trim(edtObalovnaDavka.Text), '\D', ''); Helios.ExecSQL('UPDATE ' + tblEvidOper + ' SET Obalovna=N' + QuotedStr(edtObalovna.Text) + ' WHERE ID='+ idHromEvidOp.ToString); Helios.ExecSQL('UPDATE ' + tblEvidOper + ' SET ObalovnaDavka=' + edtObalovnaDavka.Text + ' WHERE ID='+ idHromEvidOp.ToString); end; end; except on E:Exception do begin Helios.Error(#1'Nelze uložit hlavičku Hromadné evidence operací.'#1 + CRLF + E.Message); Exit; end; end; if (idHromEvidOp=0) then begin Helios.Error(#1'Nelze uložit hlavičku Hromadné evidence operací.'#1); Exit; end; end else begin if (jeEditace) then begin // zkus nejdriv pred updatem smazat neplatne evidovane operace (ty co jsem pri oprave zrusil) idEvidOperPol:= ''; for pIdx:=0 to gridOperEvid.RowCount-1 do if (gridOperEvid.Cell[colOpEvidIdEvidOp.Index, pIdx].AsInteger<>0) then idEvidOperPol:= idEvidOperPol + gridOperEvid.Cell[colOpEvidIdEvidOp.Index, pIdx].AsString + ','; if (RightStr(idEvidOperPol,1)=',') then idEvidOperPol:= LeftStr(idEvidOperPol, Length(idEvidOperPol)-1); lSQL:= 'DELETE FROM ' + tblEvidOpPolozky + ' WHERE IdEvidOper=' + IntToStr(idHromEvidOp) + ' AND id NOT IN (' + idEvidOperPol + ')'; try Helios.ExecSQL(lSQL); except on E:Exception do begin Helios.Error(#1'Chyba při mazání neplatných položkek Hromadné evidence operací.'#1 + CRLF + E.Message); Exit; end; end; end; lSQL:= 'UPDATE ' + tblEvidOper + ' SET Mnozstvi=' + StringReplace(FloatToStr(edtKusy.Value),',','.',[rfReplaceAll]); if (idZam>0) then lSQL:= lSQL + ', CisloZamest=' + edtOsCislo.Text; lSQL:= lSQL + ', Datum=CONVERT(datetime, N' + QuotedStr(DateToStr(dtDatum.Date) + ' ' + TimeToStr(Now)) + ', 104)'; lSQL:= lSQL + ', CasHod=' + StringReplace(FloatToStr(edtCasHod.Value),',','.',[rfReplaceAll]); lSQL:= lSQL + ', CasMin=' + StringReplace(FloatToStr(edtCasMin.Value),',','.',[rfReplaceAll]); lSQL:= lSQL + ', Poznamka=N' + QuotedStr(verText); lSQL:= lSQL + ' WHERE ID=' + idHromEvidOp.ToString; try Helios.ExecSQL(lSQL); except on E:Exception do begin Helios.Error(#1'Nelze změnit hlavičku Hromadné evidence operací.'#1 + CRLF + E.Message); Exit; end; end; end; SetLength(Operace, gridOperEvid.RowCount); CCas:= 0; for pIdx:=0 to gridOperEvid.RowCount-1 do CCas:= CCas + gridOperEvid.Cell[colOpEvidCasS.Index, pIdx].AsFloat; // cas operace v sekundach za 1 ks/str AllCas:= edtCasHod.Value * 3600 + edtCasMin.Value * 60; for pIdx:=0 to gridOperEvid.RowCount-1 do begin mn:= gridOperEvid.Cell[colOpEvidMnoz.Index, pIdx].AsFloat; mnZ:= gridOperEvid.Cell[colOpEvidZmetky.Index, pIdx].AsFloat; Operace[pIdx].NormCas:= gridOperEvid.Cell[colOpEvidNormaMin.Index, pIdx].asFloat; // norma v min na 1 ks/str Operace[pIdx].IdPostup:= gridOperEvid.Cell[colOpEvidIdPostup.Index, pIdx].AsInteger; Operace[pIdx].Operace:= Trim(gridOperEvid.Cell[colOpEvidCislo.Index, pIdx].AsString); if (CCas>0) then Operace[pIdx].Koef:= RoundToEx((Operace[pIdx].NormCas*60)/CCas,-4) else Operace[pIdx].Koef:= 0; lSQL:= ''; if (jeNovaEvid) then begin lSQL:= 'INSERT ' + tblEvidOpPolozky + ' (Mnozstvi, MnozstviZmetku, KodZmetku, IdPostup, Operace, Popis, NormCas_S, SkutCas_S, IdEvidOper) SELECT '; lSQL:= lSQL + mn.ToString.Replace(',', '.') + ', '; lSQL:= lSQL + mnZ.ToString.Replace(',', '.') + ', N'; lSQL:= lSQL + QuotedStr(gridOperEvid.Cell[colOpEvidKodZavady.Index, pIdx].AsString) + ', '; lSQL:= lSQL + gridOperEvid.Cell[colOpEvidIdPostup.Index, pIdx].AsString + ', N' + QuotedStr(gridOperEvid.Cell[colOpEvidCislo.Index, pIdx].AsString) + ',N'; lSQL:= lSQL + QuotedStr(gridOperEvid.Cell[colOpEvidPopis.Index, pIdx].AsString) + ', '; lSQL:= lSQL + StringReplace(FloatToStr(edtKusy.Value * Operace[pIdx].NormCas),',','.',[rfReplaceAll]) + ', '; lSQL:= lSQL + StringReplace(FloatToStr(AllCas * Operace[pIdx].Koef),',','.',[rfReplaceAll]) + ', '; lSQL:= lSQL + IntToStr(idHromEvidOp); end else begin lSQL:= 'UPDATE ' + tblEvidOpPolozky + ' SET Mnozstvi=' + gridOperEvid.Cell[colOpEvidMnoz.Index, pIdx].AsFloat.ToString.Replace(',', '.'); lSQL:= lSQL + ', MnozstviZmetku=' + gridOperEvid.Cell[colOpEvidZmetky.Index, pIdx].AsFloat.ToString.Replace(',', '.'); lSQL:= lSQL + ', KodZmetku=N' + QuotedStr(gridOperEvid.Cell[colOpEvidKodZavady.Index, pIdx].AsString); lSQL:= lSQL + ', NormCas_S=' + StringReplace(FloatToStr((mn+mnZ) * Operace[pIdx].NormCas),',','.',[rfReplaceAll]); lSQL:= lSQL + ', SkutCas_S=' + StringReplace(FloatToStr(AllCas * Operace[pIdx].Koef),',','.',[rfReplaceAll]); lSQL:= lSQL + ' WHERE IdEvidOper=' + IntToStr(idHromEvidOp) + ' AND ID=' + gridOperEvid.Cell[colOpEvidIdEvidOp.Index ,pIdx].AsString; end; try if (lSQL<>'') then Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error(#1'Chyba při ukládání položky Hromadné evidence operací.'#1 + CRLF + E.Message); end; end; dataUlozena:= false; if not(jeTest) then begin lSQL:= 'IF OBJECT_ID(N''dbo.ep_HDC_EvidOper_Hromadna'') IS NOT NULL EXEC dbo.ep_HDC_EvidOper_Hromadna @IdEvidOper=' + IntToStr(idHromEvidOp); try Helios.ExecSQL(lSQL); dataUlozena:= true; except on E:Exception do Helios.Error(#1'Chyba při evidenci operace Hromadné evidence.'#1 + CRLF + E.Message); end; end; end; with Helios.OpenSQL('SELECT * FROM dbo._hdc_TabLog WHERE Typ=10 AND IDPomoc=' + idHromEvidOp.ToString) do if (RecordCount>0) and (bidHDCLog>0) then Helios.OpenBrowse(bidHDCLog, 'hvw_HDCLog.Typ=10 AND hvw_HDCLog.IDPomoc='+ idHromEvidOp.ToString); if (dataUlozena) then begin if not(novyVyr or novyClovek) then btnQuitClick(Sender) else begin idHromEvidOp:= 0; if (novyVyr) then begin edtPrikaz.Text:= ''; idVPr:= 0; lblKmenStred.Caption:= ''; lblZbytekKs.Caption:= ''; edtKusy.Value:= 0; edtCasHod.Value:= 0; edtCasMin.Value:= 0; novyClovek:= true; gridOperEvid.ClearRows; gridOperPrikaz.ClearRows; gridAllEvid.ClearRows; end; if (novyClovek) then begin edtOsCislo.Text:= ''; edtJmeno.Text:= ''; lblUvazek.Caption:= '0,00'; lblZbyvCas.Caption:= '0h 00m'; lblCasNormVP.Caption:= '0.0 min)'; idZam:= 0; end; if (novyVyr) then edtPrikaz.SetFocus else if (novyClovek) then begin edtPrikazExit(Sender); edtOsCislo.SetFocus; end; end; end; end; procedure TformHrOdvOper.btnOpAdd1Click(Sender: TObject); var i: Integer; begin if (opVPsel>=0) then begin if (gridOperPrikaz.Cells[colOpCislo.Index, opVPsel]<>'') then begin hromAkce:= true; gridOperEvid.RowCount:= gridOperEvid.RowCount + 1; i:= gridOperEvid.RowCount -1; gridOperEvid.Cell[colOpEvidCislo.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpCislo.Index, opVPsel].AsInteger; gridOperEvid.Cell[colOpEvidPopis.Index, i].AsString:= gridOperPrikaz.Cell[colOpPopis.Index, opVPsel].AsString; gridOperEvid.Cell[colOpEvidIdPostup.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpIdPostup.Index, opVPsel].AsInteger; gridOperEvid.Cell[colOpEvidCasM.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpCasM.Index, opVPsel].AsFloat; gridOperEvid.Cell[colOpEvidCasS.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpCasS.Index, opVPsel].AsFloat; gridOperEvid.Cell[colOpEvidIdEvidOp.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpIdEvidOp.Index, opVPsel].AsInteger; gridOperEvid.Cell[colOpEvidSkutCasS.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpSkutCasS.Index, opVPsel].AsFloat; gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, opVPsel].AsFloat; gridOperEvid.Cell[colOpEvidZive.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, opVPsel].AsFloat; gridOperEvid.Cell[colOpEvidMnozOrig.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, opVPsel].AsFloat; gridOperEvid.Cell[colOpEvidNormaMin.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpNormaMin.Index, opVPsel].AsFloat; // norma v min gridOperEvid.Cell[colOpEvidZmetky.Index, i].AsFloat:= 0; gridOperEvid.Cell[colOpEvidKodZavady.Index, i].AsString:= ''; gridOperPrikaz.DeleteRow(opVPsel); gridOperEvid.Sort(colOpEvidCislo.Index, skAscending); hromAkce:= false; opVPsel:= -1; end; end; PrepoctiCasVP; PrepoctiCasEvid; end; procedure TformHrOdvOper.btnOpDel1Click(Sender: TObject); var lSQL: string; i: Integer; ksZad, ksEvid: Extended; begin if (opEvidSel>=0) then begin if (gridOperEvid.Cell[colOpEvidCislo.Index,opEvidSel].AsString<>'') then begin gridOperPrikaz.RowCount:= gridOperPrikaz.RowCount + 1; i:= gridOperPrikaz.RowCount-1; gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= edtKusy.Value; gridOperPrikaz.Cell[colOpNormaMin.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidNormaMin.Index, opEvidSel].AsFloat; // norma v min gridOperPrikaz.Cell[colOpCislo.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidCislo.Index, opEvidSel].AsInteger; gridOperPrikaz.Cell[colOpPopis.Index, i].AsString:= gridOperEvid.Cell[colOpEvidPopis.Index, opEvidSel].AsString; gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidIdPostup.Index, opEvidSel].AsInteger; gridOperPrikaz.Cell[colOpCasM.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidCasM.Index, opEvidSel].AsFloat; gridOperPrikaz.Cell[colOpCasS.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidCasS.Index, opEvidSel].AsFloat; gridOperPrikaz.Cell[colOpIdEvidOp.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidIdEvidOp.Index, opEvidSel].AsInteger; gridOperPrikaz.Cell[colOpSkutCasS.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidSkutCasS.Index, opEvidSel].AsFloat; ksZad:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT kusy_zad FROM ' + tblPrPost + ' WHERE ID=' + gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsString); lSQL:= 'SELECT SUM(pmz.kusy_odv+pmz.kusy_zmet_neopr) FROM ' + tblPMZ + ' pmz INNER JOIN ' + tblPrPost + ' pp ON (pp.Alt=pmz.AltPrPostup'; lSQL:= lSQL + ' AND pp.Doklad=pmz.DokladPrPostup AND pp.IDPrikaz=pmz.IDPrikaz) WHERE pp.ID=' + gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsString; ksEvid:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat:= ksZad - ksEvid; if (gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat < gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat) then gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat; gridOperEvid.DeleteRow(opEvidSel); gridOperPrikaz.Sort(colOpCislo.Index, skAscending); opEvidSel:= -1; end; end; PrepoctiCasVP; PrepoctiCasEvid; end; procedure TformHrOdvOper.btnOpDelVseClick(Sender: TObject); var i, vpRadek, evRadek: integer; lSQL: string; ksZad, ksEvid: Extended; begin edtKusy.Enabled:= true; for evRadek:=0 to gridOperEvid.RowCount-1 do begin gridOperPrikaz.RowCount:= gridOperPrikaz.RowCount + 1; i:= gridOperPrikaz.RowCount-1; gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= edtKusy.Value; gridOperPrikaz.Cell[colOpNormaMin.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidNormaMin.Index, evRadek].AsFloat; // norma v min gridOperPrikaz.Cell[colOpCislo.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidCislo.Index, evRadek].AsInteger; gridOperPrikaz.Cell[colOpPopis.Index, i].AsString:= gridOperEvid.Cell[colOpEvidPopis.Index, evRadek].AsString; gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidIdPostup.Index, evRadek].AsInteger; gridOperPrikaz.Cell[colOpCasM.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidCasM.Index, evRadek].AsFloat; gridOperPrikaz.Cell[colOpCasS.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidCasS.Index, evRadek].AsFloat; gridOperPrikaz.Cell[colOpIdEvidOp.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidIdEvidOp.Index, evRadek].AsInteger; gridOperPrikaz.Cell[colOpSkutCasS.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidSkutCasS.Index, evRadek].AsFloat; ksZad:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT kusy_zad FROM ' + tblPrPost + ' WHERE ID=' + gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsString); lSQL:= 'SELECT SUM(pmz.kusy_odv+pmz.kusy_zmet_neopr) FROM ' + tblPMZ + ' pmz INNER JOIN ' + tblPrPost + ' pp ON (pp.Alt=pmz.AltPrPostup'; lSQL:= lSQL + ' AND pp.Doklad=pmz.DokladPrPostup AND pp.IDPrikaz=pmz.IDPrikaz) WHERE pp.ID=' + gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsString; ksEvid:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat:= ksZad - ksEvid; if (gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat < gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat) then gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat; end; gridOperEvid.ClearRows; NastavGridy; gridOperPrikaz.Sort(colOpCislo.Index, skAscending); PrepoctiCasVP; PrepoctiCasEvid; opEvidSel:= -1; end; procedure TformHrOdvOper.btnOpAddVseClick(Sender: TObject); var i, vpRadek, evRadek: integer; begin hromAkce:= true; edtKusy.Enabled:= false; for vpRadek:=0 to gridOperPrikaz.RowCount-1 do begin gridOperEvid.RowCount:= gridOperEvid.RowCount + 1; i:= gridOperEvid.RowCount-1; gridOperEvid.Cell[colOpEvidCislo.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpCislo.Index, vpRadek].AsInteger; gridOperEvid.Cell[colOpEvidPopis.Index, i].AsString:= gridOperPrikaz.Cell[colOpPopis.Index, vpRadek].AsString; gridOperEvid.Cell[colOpEvidIdPostup.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpIdPostup.Index, vpRadek].AsInteger; gridOperEvid.Cell[colOpEvidCasM.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpCasM.Index, vpRadek].AsFloat; gridOperEvid.Cell[colOpEvidNormaMin.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpNormaMin.Index, vpRadek].AsFloat; gridOperEvid.Cell[colOpEvidCasS.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpCasS.Index, vpRadek].AsFloat; gridOperEvid.Cell[colOpEvidIdEvidOp.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpIdEvidOp.Index, vpRadek].AsInteger; gridOperEvid.Cell[colOpEvidSkutCasS.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpSkutCasS.Index, vpRadek].AsFloat; gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, vpRadek].AsFloat; // gridOperEvid.Cell[colOpEvidZive.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, vpRadek].AsFloat; gridOperEvid.Cell[colOpEvidMnozOrig.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, vpRadek].AsFloat; gridOperEvid.Cell[colOpEvidZmetky.Index, i].AsFloat:= 0; gridOperEvid.Cell[colOpEvidKodZavady.Index, i].AsString:= ''; end; gridOperPrikaz.ClearRows; NastavGridy; gridOperEvid.Sort(colOpEvidCislo.Index, skAscending); PrepoctiCasVP; PrepoctiCasEvid; opVPsel:= -1; hromAkce:= false; end; procedure TformHrOdvOper.btnQuitClick(Sender: TObject); begin Close; end; procedure TformHrOdvOper.btnUkazOperClick(Sender: TObject); begin if (idZam>0) then Helios.OpenBrowse(bidEvidOp,'Datum=CONVERT(datetime,N' + QuotedStr(DateToStr(dtDatum.Date)) + ',104) AND Zamestnanec=' + IntToStr(idZam)); end; procedure TformHrOdvOper.edtCasHodExit(Sender: TObject); begin PrepoctiCasVP; // PrepoctiCasEvid; end; procedure TformHrOdvOper.edtCasMinExit(Sender: TObject); begin PrepoctiCasVP; // PrepoctiCasEvid; end; procedure TformHrOdvOper.edtDavkaButtonClick(Sender: TObject); var podm, lSQL, oldSkl: string; begin idDokladOZ:= 0; if (Helios.YesNo('Vybíráte doklad PŘEVODKY (Př) ?', true)) then begin oVar1:= edtDavka.Text; oldSkl:= Helios.Sklad; Helios.SetSklad(sklP12Obal); podm:= 'TabDokladyZbozi.DruhPohybuZbo=0 AND TabDokladyZbozi.RadaDokladu=N' + radaOdvP12Vosk.QuotedString + ' AND TabDokladyZbozi.IDSklad=N' + sklP12Obal.QuotedString; podm:= podm + ' AND DATEDIFF(day, TabDokladyZbozi.DatPorizeni, GETDATE())<8 AND TabDokladyZbozi.Realizovano=1 AND TabDokladyZbozi.Uctovano=0'; if Helios.Prenos2(bidDZPrij, 'TabDokladyZbozi.ID', 'TabDokladyZbozi.DatPorizeni', oVar1, oVar2, podm, 'Vyberte příjemku P12', true, false, false, 1) then begin evidDavka:= false; idDokladOZ:= VarToStr(oVar1).ToInteger; edtDavka.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PoradoveCislo FROM ' + tblDZ + ' WHERE ID=' + idDokladOZ.ToString); edtDavkaExit(Sender); end; Helios.SetSklad(oldSkl); end else begin oVar2:= edtDavka.Text; if Helios.Prenos2(bidDavky, 'hvw_Davky.ID', 'hvw_Davky.KodDavky', oVar1, oVar2, '', 'Vyberte výrobní Dávku', true, false, false, 1) then begin evidDavka:= true; edtDavka.Text:= VarToStr(oVar2); edtDavkaExit(Sender); end; end; end; procedure TformHrOdvOper.edtDavkaExit (Sender: TObject); var idDavkaRodic, i: integer; lSQL: string; begin idDavka:= 0; idVPr:= 0; idVPrOld:= 0; davkaObal:= false; edtDavka.Text:= Trim(edtDavka.Text); edtDavka.Text:= TRegEx.Replace(edtDavka.Text, '\D', ''); if (edtDavka.Text<>'') then begin if (edtDavka.Text.Length=6) or (idDokladOZ>0) then begin i:= 0; vicPrikazu:= false; if not(TryStrToInt(edtDavka.Text, i)) then i:= 0; if (i>0) then begin if (idDokladOZ=0) then begin lSQL:= 'SELECT ID FROM ' + tblDZ + ' WHERE IDSklad=N' + sklP12Obal.QuotedString + ' AND RadaDokladu=N' + radaOdvP12Vosk.QuotedString + ' AND PoradoveCislo=' + i.ToString; idDokladOZ:= helUtils.getHeliosIntVal(Helios, 0, lSQL); end; if (idDokladOZ>0) then lSQL:= 'SELECT IDPrikaz FROM ' + tblDZ + ' WHERE ID=' + idDokladOZ.ToString else begin lSQL:= 'SELECT d.IDPrikaz FROM ' + tblDZ + ' d INNER JOIN ' + tblVPr + ' vpr ON (vpr.ID=d.IDPrikaz) INNER JOIN ' + tblPrikazRada + ' rvpr ON (rvpr.Rada=vpr.Rada)'; lSQL:= lSQL + ' WHERE rvpr.RadaDokl_OdvedeniPrikazu=d.RadaDokladu AND rvpr.PrijemVyrDil_SkladProGenHlavDZ=d.IDSklad AND rvpr.Rada=N' + radaPrikP12Vosk.QuotedString; lSQL:= lSQL + ' AND d.PoradoveCislo=' + i.ToString; end; idVPrOld:= helUtils.getHeliosIntVal (Helios, 0, lSQL); idVPr:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDPrikazVyssi FROM ' + tblVPr + ' WHERE ID=' + idVPrOld.ToString); end; end else begin idVPr:= 0; vicPrikazu:= false; idDavkaRodic:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDRodic FROM ' + tblDavky + ' WHERE KodDavky=' + edtDavka.Text); if (idDavkaRodic=0) then idDavka:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblDavky + ' WHERE KodDavky=' + edtDavka.Text); if (LeftStr(edtDavka.Text,3)='120') then begin davkaObal:= true; with Helios.OpenSQL('SELECT ID FROM ' + tblDavky + ' WHERE IDRodic=' + idDavka.ToString) do if (RecordCount=0) then idVPr:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDPrikazVyssi FROM ' + tblDavky + ' WHERE ID=' + idDavka.ToString) else begin vicPrikazu:= true; idVPr:= 0; idVPrOld:= 0; end; end; end; if not(vicPrikazu) and (idVPr>0) then begin edtPrikaz.Text:= helUtils.getHeliosStrVal (Helios, '', 'SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); edtPrikazExit (Sender); end else if (edtPrikaz.CanFocus) then edtPrikaz.SetFocus; end else begin edtPrikaz.Text:= ''; edtNazevZbozi.Text:= ''; lblKmenStred.Caption:= ''; lblZbytekKs.Caption:= ''; idVPr:= 0; idVPrOld:= 0; end; end; procedure TformHrOdvOper.edtJmenoButtonClick (Sender: TObject); var z: integer; podm: ShortString; begin podm:= ''; if (edtJmeno.Text<>'') and (edtOsCislo.Text='') then podm:= 'TabCisZam.Prijmeni LIKE N' + QuotedStr(Trim(edtJmeno.Text) + '%'); if Helios.Prenos(bidCisZam, 'Cislo', oVar1, podm, 'Vyberte zaměstnance', true) then begin z:= VarToStr(oVar1).ToInteger; edtOsCislo.Text:= StringOfChar('0',6-Length(IntToStr(z))) + IntToStr(z); idZam:= 0; with Helios.OpenSQL('SELECT id FROM TabCisZam WHERE Cislo=' + edtOsCislo.Text) do if (RecordCount>0) then idZam:= StrToInt(VarToStr(FieldValues(0))); if (idZam>0) then begin UdajeZamest(0,idZam,true); if (edtKusy.CanFocus) then edtKusy.SetFocus; end; end else begin edtOsCislo.Text:= ''; edtJmeno.Text:= ''; idZam:= 0; Helios.Error('Nebyl vybrán žádný zaměstnanec.'); end; end; procedure TformHrOdvOper.edtKusyChange(Sender: TObject); var zb: extended; begin if (lblZbytekKs.Caption<>'') then begin if not(TryStrToFloat(lblZbytekKs.Caption, zb)) then zb:= 0; if (edtKusy.Value>zb) or (edtKusy.Value<0) then begin Helios.Error(#1'Chybně zadané odváděné množství.'#1); edtKusy.SetFocus; edtKusy.SelectAll; end; end; end; procedure TformHrOdvOper.edtKusyExit(Sender: TObject); var i: integer; begin if (edtKusy.Modified) then begin if (gridOperEvid.RowCount=0) and (gridOperPrikaz.RowCount>0) then begin for i:=0 to gridOperPrikaz.RowCount-1 do begin gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= edtKusy.Value; if (gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat > gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat) then gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnozZive.Index, i].AsFloat; end; end; if (gridOperEvid.RowCount>0) then Helios.Error(#1'Změna množství není možná pokud máte vybrány evidované operace'#1); PrepoctiCasVP; end; end; function ZiskejCasMin(txt: ShortString): Extended; var h,m: ShortString; begin h:= LeftStr(txt,Pos('h',txt)-1); m:= MidStr(txt,Pos(' ',txt)+1,255); m:= LeftStr(m,Pos('m',m)-1); result:= (StrToInt(h)*60) + StrToInt(m); end; procedure TformHrOdvOper.UdajeZamest(cZam, idZamest: integer; zbytekUvaz: boolean); var prjm: string; lSQL: string; cas: Extended; casH: integer; begin prjm:= ''; if (cZam>0) then with Helios.OpenSQL('SELECT PrijmeniJmeno,id FROM ' + tblCZam + ' WHERE Cislo=' + IntToStr(cZam)) do if (RecordCount=1) then begin if (idZamest=0) then begin idZamest:= StrToInt(VarToStr(FieldValues(1))); idZam:= idZamest; end; prjm:= VarToStr(FieldValues(0)); end; if (idZamest>0) then begin with Helios.OpenSQL('SELECT ISNULL(DenniUvazek,0) FROM ' + tblZamMzd + ' WHERE IdObdobi=' + IntToStr(idMObd) + ' AND ZamestnanecID=' + IntToStr(idZamest)) do if (RecordCount=1) then lblUvazek.Caption:= FormatFloat('#0.00',StrToFloat(VarToStr(FieldValues(0)))); with Helios.OpenSQL('SELECT PrijmeniJmeno FROM ' + tblCZam + ' WHERE id=' + IntToStr(idZamest)) do if (RecordCount=1) then prjm:= VarToStr(FieldValues(0)); end; if (idZamest>0) or (cZam>0) then edtJmeno.Text:= prjm; if (zbytekUvaz) and (idZam>0) and (dtDatum.Text<>'') and (edtOsCislo.Text<>'') then begin lblEvid.Caption:= '0h 00m'; lSQL:= 'SELECT ISNULL(SUM(CasHod*60+CasMin),0) FROM ' + tblEvidOper + ' WHERE CisloZamest=' + edtOsCislo.Text; lSQL:= lSQL + ' AND CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,Datum)))=CONVERT(datetime,N'; lSQL:= lSQL + QuotedStr(DateTimeToStr(dtDatum.Date)) + ',104)'; with Helios.OpenSQL(lSQL) do if RecordCount>0 then if not VarIsNull(FieldValues(0)) then begin cas:= StrToFloat(VarToStr(FieldValues(0))); casH:= Trunc(cas/60); lblEvid.Caption:= IntToStr(casH) + 'h ' + IntToStr(Trunc(cas-casH*60)) + 'm'; cas:= StrToFloat(lblUvazek.Caption)*60 - ZiskejCasMin(lblEvid.Caption); casH:= Trunc(cas/60); lblZbyvCas.Caption:= IntToStr(casH) + 'h ' + IntToStr(Trunc(cas-casH*60)) + 'm'; end; end; NactiJizEvidOperace; end; procedure TformHrOdvOper.edtOsCisloButtonClick(Sender: TObject); var z: integer; begin if Helios.Prenos(bidCisZam, 'Cislo', oVar1, '', 'Vyberte zaměstnance', True) then begin z:= VarToStr(oVar1).ToInteger; edtOsCislo.Text:= StringOfChar('0', 6-Length(IntToStr(z))) + IntToStr(z); idZam:= 0; with Helios.OpenSQL('SELECT id FROM TabCisZam WHERE Cislo=' + edtOsCislo.Text) do if (RecordCount>0) then idZam:= StrToInt(VarToStr(FieldValues(0))); if (idZam>0) then UdajeZamest(0,idZam,true); end else Helios.Error('Nebyl vybrán žádný zaměstnanec.'); end; procedure TformHrOdvOper.edtOsCisloExit(Sender: TObject); var z: integer; begin edtOsCislo.Text:= Trim(edtOsCislo.Text); if (edtOsCislo.Text<>'') then begin try z:= StrToInt(edtOsCislo.Text); edtOsCislo.Text:= StringOfChar('0', 6-Length(IntToStr(z))) + IntToStr(z); if (edtOsCislo.Text<>'') then UdajeZamest(StrToInt(edtOsCislo.Text), 0, true); except end; end else begin idZam:= 0; end; end; procedure TformHrOdvOper.edtOsCisloKeyPress(Sender: TObject; var Key: Char); begin if not(Key in ['0'..'9',Chr(VK_BACK),Chr(VK_PRIOR),Chr(VK_NEXT)]) then Key:= #0; end; procedure TformHrOdvOper.edtSmenaButtonClick(Sender: TObject); begin if Helios.Prenos(bidCSmen, 'kod', oVar1, '', 'Vyberte Směnu', True) then begin edtSmena.Text:= VarToStr(oVar1); end; end; function TformHrOdvOper.CasDleTPV(var casS,casM,casH: Extended): boolean; var lSQL: WideString; begin Result:= false; lSQL:= 'ISNULL(SUM(p.TAC_P_S+p.TBC_P_S+p.TEC_P_S),0), ISNULL(SUM(p.TAC_P_N+p.TBC_P_N+p.TEC_P_N),0), '; lSQL:= lSQL + 'ISNULL(SUM(p.TAC_P_H+p.TBC_P_H+p.TEC_P_H),0)'; lSQL:= 'SELECT ' + lSQL + ' FROM ' + tblPrikaz + ' p WHERE '; if (idKZ>0) then begin lSQL:= lSQL + 'p.IDTabKmen=' + IntToStr(idKZ); lSQL:= lSQL + ' AND p.StavPrikazu IN (30,40) AND p.kusy_zive>0'; end else lSQL:= ''; if (lSQL<>'') then with Helios.OpenSQL(lSQL) do begin casS:= StrToFloat(VarToStr(FieldValues(0))); casM:= StrToFloat(VarToStr(FieldValues(1))); casH:= StrToFloat(VarToStr(FieldValues(2))); result:= true; end; end; procedure TformHrOdvOper.dtDatumChange(Sender: TObject); var sql: WideString; begin sql:= 'SELECT IdObdobi FROM ' + tblMzdObd + ' WHERE Rok=' + IntToStr(YearOf(dtDatum.Date)); sql:= sql + ' AND Mesic=' + IntToStr(MonthOf(dtDatum.Date)); with Helios.OpenSQL(sql) do if RecordCount=1 then idMObd:= StrToInt(VarToStr(FieldValues(0))); if (idZam>0) then UdajeZamest(0,idZam,true); end; procedure TformHrOdvOper.PrepoctiCasVP; var c: Extended; i: integer; begin c:= 0; if (gridOperPrikaz.RowCount>0) and (gridOperPrikaz.Columns.Count>0) then for i:=0 to gridOperPrikaz.RowCount-1 do c:= c + gridOperPrikaz.Cell[colOpNormaMin.Index, i].AsFloat; lblCasNormVP.Caption:= FormatFloat('##,##0.##',c * edtKusy.Value) + ' min = ' + FormatFloat('##,##0.##', helUtils.RoundToEX(((c * edtKusy.Value)/60),-2)) + ' hod)'; end; procedure TformHrOdvOper.PrepoctiCasEvid; var c, norma, normaEvid: extended; i, ksRadek: integer; begin c:= 0; norma:= 0; normaEvid:= 0; if (gridOperEvid.RowCount>0) and (gridOperEvid.Columns.Count>0) then for i:=0 to gridOperEvid.RowCount-1 do begin c:= c + gridOperEvid.Cell[colOpEvidNormaMin.Index, i].AsFloat; // norma v min norma:= norma + gridOperEvid.Cell[colOpEvidCasS.Index, i].AsFloat; // norma v sek ksRadek:= gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsInteger + gridOperEvid.Cell[colOpEvidZmetky.Index, i].AsInteger; normaEvid:= normaEvid + (gridOperEvid.Cell[colOpEvidNormaMin.Index, i].AsFloat * ksRadek); end; norma:= norma * edtKusy.Value; lblCasNormEvid.Caption:= FormatFloat('##,##0.##', normaEvid) + ' min = ' + FormatFloat('##,##0.##', helUtils.RoundToEX(((normaEvid)/60),-2)) + ' hod)'; if (edtCasHod.Value<>0) or (edtCasMin.Value<>0) then lblPlneni.Caption:= FloatToStr(RoundToEx((normaEvid/((edtCasHod.Value*3600) + (edtCasMin.Value)*60))*100,0)) + ' %'; end; function TformHrOdvOper.NactiOperace; var lSQL: string; tStr: string; idx, vpOper, idPrP: integer; casMJMin, prumSazba, mzdaNorm, n, ksEvid, operMin, ksZiv, ksZad: Extended; begin result:= false; if (idVPr=0) then Exit; lblCasNormVP.Caption:= '0.0 min = 0.0 hod)'; { if CasDleTPV(sumCas_S,sumCas_M,sumCas_H) then begin if (sumCas_H<=0.1) then begin if (sumCas_M<=0.1) then begin edtCasCelkemMJ.Value:= RoundToEX(sumCas_S, -2); lbl8.Caption:= 'sek'; end else begin edtCasCelkemMJ.Value:= RoundToEX(sumCas_M, -2); lbl8.Caption:= 'min'; end end else begin edtCasCelkemMJ.Value:= RoundToEX(sumCas_H, -2); lbl8.Caption:= 'hod'; end; end; } mzdaNorm:= 0; n:= 0; lSQL:= 'SELECT LTRIM(RTRIM(pp.Operace)), pp.Nazev, pp.TAC_N, pp.TAC_Obsluhy_S, pp.ID, pp.kusy_zive, pp.kusy_zad FROM ' + tblPrPost + ' pp INNER JOIN ' + tblPostup; lSQL:= lSQL + ' p ON (p.Operace=pp.Operace AND pp.typ=p.typ AND pp.Nazev=p.Nazev AND pp.dilec=p.dilec AND p.ZmenaDo IS NULL)'; lSQL:= lSQL + ' WHERE pp.IDOdchylkyDo IS NULL AND pp.dilec=' + idKZ.ToString + ' AND pp.IDPrikaz=' + idVPr.ToString; lSQL:= lSQL + ' AND pp.kusy_zad>ISNULL( (SELECT SUM(pmz.kusy_odv+pmz.kusy_zmet_neopr) FROM ' + tblPMZ + ' pmz WHERE pmz.IDPrikaz=' + idVPr.ToString; lSQL:= lSQL + ' AND pmz.DokladPrPostup=pp.Doklad AND pmz.AltPrPostup=pp.Alt), 0)'; lSQL:= lSQL + ' ORDER BY TRY_PARSE(LTRIM(RTRIM(pp.Operace)) AS INT)'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin gridOperPrikaz.ClearRows; gridOperPrikaz.RowCount:= RecordCount; First; vpOper:= 0; while not(EOF) do begin idPrP:= VarHodnota(FieldValues(4), 0); ksZiv:= VarHodnota(FieldValues(5), 0.0); ksZad:= VarHodnota(FieldValues(6), 0.0); operMin:= VarHodnota(FieldValues(2), 0.0); if (idDavka>0) then begin if (ksZiv>ksDavka) then ksZiv:= ksDavka; if (ksZad>ksDavka) then ksZad:= ksDavka; end; gridOperPrikaz.Cell[colOpMnoz.Index, vpOper].AsFloat:= ksZiv; // ks zive na operaci gridOperPrikaz.Cell[colOpCislo.Index, vpOper].AsString:= VarHodnota(FieldValues(0), ''); // cislo operace gridOperPrikaz.Cell[colOpPopis.Index, vpOper].AsString:= VarHodnota(FieldValues(1), ''); // nazev gridOperPrikaz.Cell[colOpCasM.Index, vpOper].AsFloat:= operMin; // cas za operaci v min gridOperPrikaz.Cell[colOpNormaMin.Index, vpOper].AsFloat:= operMin; // cas za operaci v min n:= n + gridOperPrikaz.Cell[colOpCasM.Index, vpOper].AsFloat; gridOperPrikaz.Cell[colOpCasS.Index, vpOper].AsFloat:= VarHodnota(FieldValues(3), 0.0); // cas za operaci v sec gridOperPrikaz.Cell[colOpIdPostup.Index, vpOper].AsInteger:= idPrP; // idPostup v TPV gridOperPrikaz.Cell[colOpIdEvidOp.Index, vpOper].AsInteger:= 0; // idEvidOperPol=0 pri importu operaci z TPV lSQL:= 'SELECT SUM(pmz.kusy_odv+pmz.kusy_zmet_neopr) FROM ' + tblPMZ + ' pmz INNER JOIN ' + tblPrPost + ' pp ON (pp.Alt=pmz.AltPrPostup'; lSQL:= lSQL + ' AND pp.Doklad=pmz.DokladPrPostup AND pp.IDPrikaz=pmz.IDPrikaz) WHERE pp.ID=' + gridOperPrikaz.Cell[colOpIdPostup.Index, vpOper].AsString; if (idDavka>0) then lSQL:= lSQL + ' AND pmz.ID IN (SELECT ID FROM ' + tblPMZE + ' WHERE _Davka=N' + QuotedStr(edtDavka.Text) + ')'; ksEvid:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); gridOperPrikaz.Cell[colOpMnozZive.Index, vpOper].AsFloat:= ksZad - ksEvid; if (gridOperPrikaz.Cell[colOpMnozZive.Index, vpOper].AsFloat < gridOperPrikaz.Cell[colOpMnoz.Index, vpOper].AsFloat) then gridOperPrikaz.Cell[colOpMnoz.Index, vpOper].AsFloat:= gridOperPrikaz.Cell[colOpMnozZive.Index, vpOper].AsFloat; if (gridOperPrikaz.Cell[colOpMnozZive.Index, vpOper].AsFloat>0) then Inc(vpOper); Next; end; gridOperPrikaz.RowCount:= vpOper-1; result:= true; gridOperPrikaz.Visible:= true; lblNormaKs.Caption:= '(norma ' + FormatFloat('##,##0.###', n) + ' min / ' + helUtils.getHeliosStrVal(Helios, '', 'SELECT MJevidence FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString) + ')'; end; // edtKusy.SelStart:= 0; // edtKusy.SelLength:= Length(edtKusy.Text); // edtKusy.SetFocus; end; procedure TformHrOdvOper.edtPrikazButtonClick(Sender: TObject); var podm: string; begin idKZ:= 0; podm:= 'TabPrikaz.StavPrikazu=30'; if (filtrRada<>'') then podm:= podm + ' AND TabPrikaz.Rada=N' + filtrRada.QuotedString; if (idDavka>0) and (davkaObal) then begin podm:= podm + ' AND TabPrikaz.ID'; if not(vicPrikazu) then podm:= podm + '=' + idVPr.ToString else podm:= podm + ' IN (SELECT IDPrikazVyssi FROM ' + tblDavky + ' WHERE ID=' + idDavka.ToString + ' OR IDRodic=' + idDavka.ToString + ')'; end; idVPr:= 0; if Helios.Prenos(bidVyrPrik,'ID', oVar1, podm, 'Vyberte Výrobní příkaz',True) then begin idVPr:= VarToStr(oVar1).ToInteger; edtPrikaz.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); idKZ:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); VyplnDataDleKZ; end; if (edtOsCislo.CanFocus) then edtOsCislo.SetFocus; end; procedure TformHrOdvOper.edtVyrobekClick(Sender: TObject); begin edtPrikazButtonClick(Sender); end; procedure TformHrOdvOper.VyplnDataDleKZ; var lSQL,msg: string; tStr: ShortString; idx,idx2,i: integer; begin msg:= ''; if (idKZ>0) then begin gridOperPrikaz.ClearRows; gridOperEvid.ClearRows; NastavGridy; lSQL:= 'SELECT SkupZbo, RegCis, Nazev1, ISNULL(KmenoveStredisko,' + QuotedStr('') + ') FROM ' + tblKZ; lSQL:= lSQL + ' WHERE id=' + IntToStr(idKZ); with Helios.OpenSQL(lSQL) do begin edtNazevZbozi.Text:= VarToStr(FieldValues(0)) + ' ' + VarToStr(FieldValues(1)) + ' ' + VarToStr(FieldValues(2)); lblKmenStred.Caption:= VarToStr(FieldValues(3)); end; NactiOperace; end; end; procedure TformHrOdvOper.VyplnDataDleVPr; var lSQL,msg: string; tStr: ShortString; idx,idx2,i: integer; begin msg:= ''; if (idVPr>0) then begin idKZ:= helUtils.getHeliosIntVal(Helios, 0 ,'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); gridOperPrikaz.ClearRows; gridOperEvid.ClearRows; NastavGridy; lSQL:= 'SELECT RegCis, Nazev1, ISNULL(KmenoveStredisko, N'''') FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString; with Helios.OpenSQL(lSQL) do begin edtNazevZbozi.Text:= VarToStr(FieldValues(0)) + ' / ' + VarToStr(FieldValues(1)); lblKmenStred.Caption:= VarToStr(FieldValues(2)); end; NactiOperace; end; end; procedure TformHrOdvOper.edtPrikazExit (Sender: TObject); var sql: string; begin idVPr:= 0; edtPrikaz.Text:= Trim(edtPrikaz.Text); edtPrikaz.Text:= UpperCase(edtPrikaz.Text); if (edtPrikaz.Text<>'') then begin if (IsNumeric(edtPrikaz.Text)) then idVPr:= StrToInt(edtPrikaz.Text); if (Pos('-',edtPrikaz.Text)>0) and (idVPr=0) then idVPr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblPrikaz + ' WHERE RadaPrikaz=N' + QuotedStr(edtPrikaz.Text)); if (LeftStr(edtPrikaz.Text,1).ToUpper='P') and (filtrRada<>'') then if (IsNumeric(MidStr(edtPrikaz.Text,2,25))) then idVPr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblPrikaz + ' WHERE ID=' + MidStr(edtPrikaz.Text,2,25) + ' AND Rada=N' + filtrRada.QuotedString); if (idVPr>0) and (helUtils.HeliosExistsTest(Helios, tblPrikaz, 'ID=' + idVPr.ToString + IfThen(filtrRada<>'', ' AND Rada=N' + filtrRada.QuotedString, ''))) then begin if (idVPr<>idVPrOld) then edtKusy.Value:=0; idVPrOld:= idVPr; edtPrikaz.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); zbytekKs:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT kusy_zive FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); ksDavka:= 0; if (idDavka>0) then ksDavka:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT Mnozstvi FROM ' + tblDavky + ' WHERE ID=' + idDavka.ToString); if (idDokladOZ>0) and (radaOdvP12Vosk<>'') then begin idVPrOld:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDPrikaz FROM ' + tblDZ + ' WHERE ID=' + idDokladOZ.ToString); idVPr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDPrikazVyssi FROM ' + tblVPr + ' WHERE ID=' + idVPrOld.ToString); sql:= 'SELECT ISNULL(SUM(p.Mnozstvi),0) FROM ' + tblPZ + ' p INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad) WHERE d.DruhPohybuZbo=0 AND p.IDPrikaz=' + idVPrOld.ToString; sql:= sql + ' AND d.IDSklad=N' + sklP12Obal.QuotedString + ' AND d.RadaDokladu=N' + radaOdvP12Vosk.QuotedString + ' AND d.Realizovano=1 AND p.TypVyrobnihoDokladu=0'; sql:= 'SELECT ISNULL(SUM(Mnozstvi),0) FROM ' + tblEvidOper + ' WHERE IDPrikaz=' + idVPr.ToString; ksDavka:= helUtils.getHeliosFloatVal(Helios, 0, sql); end; if (zbytekKs>ksDavka) and (ksDavka>0) then zbytekKs:= ksDavka; lblZbytekKs.Caption:= FormatFloat('##,##0.#', zbytekKs); gridOperPrikaz.ClearRows; gridOperEvid.ClearRows; NastavGridy; PrepoctiCasEvid; idKZ:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); edtNazevZbozi.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString); evidMJ:= helUtils.getHeliosStrVal(Helios, '', 'SELECT MJevidence FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString); lblZbyvaKs.Caption:= 'Zbývá (' + evidMJ + ')'; lblVyrobeneKs.Caption:= 'Vyrobené ' + evidMJ + ' vč. zmetků:'; colOpEvidMnoz.Header.Caption:= evidMJ + ' Dobré'; VyplnDataDleVPr; end; if (edtOsCislo.CanFocus) then edtOsCislo.SetFocus; // SendMessage(Handle, WM_NEXTDLGCTL, WPARAM(edtOsCislo.Handle), MakeLParam(Ord(True), 0)); end; end; procedure TformHrOdvOper.edtPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_RETURN then edtPrikazExit(Sender); end; procedure TformHrOdvOper.NastavGridy; var i:integer; begin { gridOperPrikaz.Font.Name:= Helios.Font; gridOperPrikaz.Font.Size:= lbl1.Font.Size; for i:=0 to gridOperPrikaz.Columns.Count-1 do begin gridOperPrikaz.Columns[i].Font.Name:= Helios.Font; gridOperPrikaz.Columns[i].Font.Size:= lbl1.Font.Size; end; gridOperEvid.Font.Name:= Helios.Font; gridOperEvid.Font.Size:= lbl1.Font.Size; for i:=0 to gridOperEvid.Columns.Count-1 do begin gridOperEvid.Columns[i].Font.Name:= Helios.Font; gridOperEvid.Columns[i].Font.Size:= lbl1.Font.Size; end; gridAllEvid.Font.Name:= Helios.Font; gridAllEvid.Font.Size:= lbl1.Font.Size; for i:=0 to gridAllEvid.Columns.Count-1 do begin gridAllEvid.Columns[i].Font.Name:= Helios.Font; gridAllEvid.Columns[i].Font.Size:= lbl1.Font.Size; end; } end; procedure TformHrOdvOper.FormActivate(Sender: TObject); var i:integer; begin // Self.Width:= Round(Self.Width*1.12); if (idHromEvidOp>0) then begin edtPrikaz.Enabled:= false; Self.Caption:= Self.Caption + ' (EDITACE)'; end; dtDatum.Date:= Now; verText:= GetFileVersion2(GetModuleName(HInstance)); if Length(verText)=12 then verText:= LeftStr(verText,9) + '0' + RightStr(verText,3); if (edtDavka.CanFocus) then edtDavka.SetFocus; edtJmeno.Text:= ''; Self.Caption:= Self.Caption + ' (verze ' + verText + ')'; i:= 0; while (i0) then idMObd:= StrToInt(VarToStr(FieldValues(0))) else begin raise Exception.Create('Nelze zjistit aktuální mzdové období.'); Exit; end; for i:=0 to gridOperPrikaz.Columns.Count-1 do gridOperPrikaz.Columns[i].Tag:= gridOperPrikaz.Columns[i].Width; for i:=0 to gridOperEvid.Columns.Count-1 do gridOperEvid.Columns[i].Tag:= gridOperEvid.Columns[i].Width; for i:=0 to gridAllEvid.Columns.Count-1 do gridAllEvid.Columns[i].Tag:= gridAllEvid.Columns[i].Width; idDokladOZ:= 0; radaOdvP12Vosk:= ''; bidDavky:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Davky'''); bidHDCLog:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_HDCLog'''); NastavGridy; edtJmeno.Text:= ''; opVPsel:= 0; opEvidsel:= 0; novyVyr:= false; novyClovek:= false; radaPrikP12Vosk:= '221-12'; radaOdvP12Vosk:= '712'; sklP12Obal:= '00100100222200'; lSQL:= 'SELECT RadaDokl_OdvedeniPrikazu, PrijemVyrDil_SkladProGenHlavDZ FROM ' + tblPrikazRada + ' WHERE Rada=N' + radaPrikP12Vosk.QuotedString; with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin radaOdvP12Vosk:= VarTOStr(FieldByNameValues('RadaDokl_OdvedeniPrikazu')); sklP12Obal:= VarTOStr(FieldByNameValues('PrijemVyrDil_SkladProGenHlavDZ')); end; // SQL2012 with Helios.OpenSQL('SELECT FORMAT(GETDATE(),''d.M.yyyy'',''cs-CZ'')') do try // with Helios.OpenSQL('SELECT (CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,dbo.ef_GetPreviousWeekDay(GETDATE())))))') do lSQL:= 'DECLARE @dt DATETIME' + CRLF; lSQL:= lSQL + 'SET @dt=CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,dbo.ef_GetPreviousWeekDay(GETDATE()))))' + CRLF; lSQL:= lSQL + 'IF EXISTS(SELECT IsWorkDay FROM dbo._hdc_TabKalendar WHERE isWorkDay=1 AND Datum=@dt) SELECT @dt ELSE '; lSQL:= lSQL + 'SELECT TOP(1) CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,CONVERT(datetime,Datum,104)))) FROM'; lSQL:= lSQL + ' dbo._hdc_TabKalendar WHERE IsWorkDay=1 AND Datum<@dt ORDER BY Datum DESC'; with Helios.OpenSQL(lSQL) do dtDatum.Date:= StrToDate(VarToStr(FieldValues(0))) except on E:Exception do begin // Helios.Error(#1'Chyba při získávání datumu ze serveru...'#1 + CRLF + E.ClassName + CRLF + E.Message); raise Exception.Create('Chyba při získávání data ze serveru...' + CRLF + E.ClassName + CRLF + E.Message); Close; end; end; with Helios.OpenSQL('SELECT kod FROM ' + tblCSmen + ' WHERE Blokovano=0') do if (RecordCount>0) then begin First; edtSmena.Text:= VarToStr(FieldValues(0)); end; if (idHromEvidOp>0) then NactiEvidenci; end; procedure TformHrOdvOper.gridOperEvidCellChange(Sender: TObject; ACol, ARow: Integer); var i: integer; m: Extended; begin if (ACol=colOpEvidMnoz.Index) and not(hromAkce) then begin m:= gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat; if (gridOperEvid.RowCount>=ARow+1) and (gridOperEvid.Cell[colOpEvidZive.Index, ARow].AsFloat>=m) then for i:=ARow+1 to gridOperEvid.RowCount-1 do gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= m; PrepoctiCasEvid; end; end; procedure TformHrOdvOper.gridOperEvidCellClick(Sender: TObject; ACol, ARow: Integer; Button: TMouseButton); var x, y: Extended; f: TformInputNum; i,kodZav: integer; zmenaMnoz: boolean; begin zmenaMnoz:= false; if (ACol=colOpEvidMnoz.Index) then begin f:= TformInputNum.Create(nil); try f.titulek:= 'Evidence operace'; f.edtPopis:= 'Dobrých stromků:'; f.edtNum2.Enabled:=false; f.ShowModal; x:= f.value; if (x>=0) then begin hromAkce:= true; y:= gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat; gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat:= x; // gridOperEvid.Cell[colOpEvidZmetky.Index, ARow].AsFloat:= y-x; if (gridOperEvid.RowCount>=ARow+1) and (gridOperEvid.Cell[colOpEvidMnozOrig.Index, ARow].AsFloat>=x) then for i:=ARow+1 to gridOperEvid.RowCount-1 do gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= x; hromAkce:= false; zmenaMnoz:= true; end; finally f.Free; end; end; if (ACol=colOpEvidZmetky.Index) then begin f:= TformInputNum.Create(nil); try f.titulek:= 'Evidence operace'; f.edtPopis:= 'Počet zmetků:'; f.edtNum.Alignment:= TAlignment.taCenter; f.edtPopis2:= 'Kód závady:'; f.edtNum2.Alignment:= TAlignment.taCenter; f.ShowModal; x:= f.value; if (x>=0) then begin hromAkce:= true; kodZav:= f.value2.ToString.ToInteger; gridOperEvid.Cell[colOpEvidZmetky.Index, ARow].AsFloat:= x; gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat:= gridOperEvid.Cell[colOpEvidMnozOrig.Index, ARow].AsFloat - x; gridOperEvid.Cell[colOpEvidKodZavady.Index, ARow].AsInteger:= kodZav; if (gridOperEvid.RowCount>=ARow+1) then for i:=ARow+1 to gridOperEvid.RowCount-1 do if (i<=gridOperEvid.RowCount) then if (gridOperEvid.Cell[colOpEvidMnozOrig.Index, i].AsFloat>=x) then gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidMnozOrig.Index, i].AsFloat - x; // if (gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat-x>=0) then // gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat:= gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat - x; // if (gridOperEvid.Cell[colOpEvidZive.Index, ARow].AsFloat>=x) then // gridOperEvid.Cell[colOpEvidZive.Index, ARow].AsFloat:= gridOperEvid.Cell[colOpEvidZive.Index, ARow].AsFloat - x; // if (gridOperEvid.RowCount>=ARow+1) and (gridOperEvid.Cell[colOpEvidMnoz.Index, ARow].AsFloat>=x) then // for i:=ARow+1 to gridOperEvid.RowCount-1 do // if (gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat-x>=0) then // gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat - x; hromAkce:= false; zmenaMnoz:= true; end; finally f.Free; end; end; if (zmenaMnoz) then PrepoctiCasEvid; end; procedure TformHrOdvOper.gridOperEvidCellDblClick(Sender: TObject; ACol, ARow: Integer); begin btnOpDel1Click(Sender); end; procedure TformHrOdvOper.gridOperPrikazCellChange(Sender: TObject; ACol, ARow: Integer); begin if (ACol=colOpMnoz.Index) then gridOperPrikaz.Cell[colOpCasM.Index, ARow].AsFloat:= gridOperPrikaz.Cell[colOpNormaMin.Index, ARow].AsFloat * gridOperPrikaz.Cell[colOpMnoz.Index, ARow].AsFloat; end; procedure TformHrOdvOper.gridOperPrikazCellDblClick(Sender: TObject; ACol, ARow: Integer); begin btnOpAdd1Click(Sender); end; procedure TformHrOdvOper.gridOperPrikazChanged(Sender: TObject; ACol, ARow: Integer); var i: integer; c: extended; begin c:= 0; if (ARow>0) and (ACol>0) then for i:=0 to gridOperEvid.RowCount-1 do c:= c + gridOperEvid.Cell[3,i].AsFloat; lblCasNormEvid.Caption:= FloatToStr(c) + '0.0 min)'; end; procedure TformHrOdvOper.gridOperEvidDragDrop(Sender, Source: TObject; X, Y: Integer); var i, maxRad, r, c: integer; p: TPoint; begin Exit; p:= TPoint.Create(x,y); r:= gridOperEvid.SelectedCell.RowIndex; // .GetRowAtPos(x,y); c:= gridOperEvid.SelectedCell.ColIndex; // .GetColumnAtPos(p).Index; if (gridOperPrikaz.Cells[1,r]='') or (r=0) then Exit; { maxRad:= 0; while not (gridOperEvid.Cells[0,maxRad]='') do Inc(maxRad); if maxRad=gridOperEvid.RowCount then } gridOperEvid.RowCount:= gridOperEvid.RowCount + 1; i:= gridOperEvid.RowCount-1; gridOperEvid.Cell[colOpEvidCislo.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpCislo.Index, r].AsInteger; gridOperEvid.Cell[colOpEvidPopis.Index, i].AsString:= gridOperPrikaz.Cell[colOpPopis.Index, r].AsString; gridOperEvid.Cell[colOpEvidIdPostup.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpIdPostup.Index, r].AsInteger; gridOperEvid.Cell[colOpEvidCasM.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpCasM.Index, r].AsFloat; gridOperEvid.Cell[colOpEvidCasS.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpCasS.Index, r].AsFloat; gridOperEvid.Cell[colOpEvidIdEvidOp.Index, i].AsInteger:= gridOperPrikaz.Cell[colOpIdEvidOp.Index, r].AsInteger; gridOperEvid.Cell[colOpEvidSkutCasS.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpSkutCasS.Index, r].AsFloat; gridOperEvid.Cell[colOpEvidMnoz.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, r].AsFloat; gridOperEvid.Cell[colOpEvidZive.Index, i].AsFloat:= gridOperPrikaz.Cell[colOpMnoz.Index, r].AsFloat; gridOperEvid.Cell[colOpEvidZmetky.Index, i].AsFloat:= 0; gridOperEvid.Cell[colOpEvidKodZavady.Index, i].AsString:= ''; gridOperPrikaz.DeleteRow(r); gridOperEvid.Sort(colOpEvidCislo.Index, skAscending); PrepoctiCasEvid; PrepoctiCasVP; end; procedure TformHrOdvOper.gridOperPrikazDragDrop(Sender, Source: TObject; X, Y: Integer); var i, maxRad, r, c: integer; p: TPoint; begin Exit; p:= TPoint.Create(x,y); r:= gridOperPrikaz.SelectedCell.RowIndex; // GetRowAtPos(x,y); c:= gridOperPrikaz.SelectedCell.ColIndex; // GetColumnAtPos(p).Index; if (gridOperEvid.Cells[1,r]='') or (r=0) then Exit; { maxRad:= 0; while not (gridOperPrikaz.Cells[0,maxRad]='') do Inc(maxRad); if maxRad=gridOperPrikaz.RowCount then } gridOperPrikaz.RowCount:= gridOperPrikaz.RowCount + 1; i:= gridOperPrikaz.RowCount-1; gridOperPrikaz.Cell[colOpCislo.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidCislo.Index, r].AsInteger; gridOperPrikaz.Cell[colOpPopis.Index, i].AsString:= gridOperEvid.Cell[colOpEvidPopis.Index, r].AsString; gridOperPrikaz.Cell[colOpIdPostup.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidIdPostup.Index, r].AsInteger; gridOperPrikaz.Cell[colOpCasM.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidCasM.Index, r].AsFloat; gridOperPrikaz.Cell[colOpCasS.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidCasS.Index, r].AsFloat; gridOperPrikaz.Cell[colOpIdEvidOp.Index, i].AsInteger:= gridOperEvid.Cell[colOpEvidIdEvidOp.Index, r].AsInteger; gridOperPrikaz.Cell[colOpSkutCasS.Index, i].AsFloat:= gridOperEvid.Cell[colOpEvidSkutCasS.Index, r].AsFloat; gridOperPrikaz.Cell[colOpMnoz.Index, i].AsFloat:= edtKusy.Value; gridOperEvid.DeleteRow(r); gridOperPrikaz.Sort(colOpCislo.Index, skAscending); PrepoctiCasVP; PrepoctiCasEvid; end; procedure TformHrOdvOper.gridOperEvidDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:= Source is TNextGrid6; Accept:= false; end; procedure TformHrOdvOper.gridOperPrikazDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:= Source is TNextGrid6; Accept:= false; end; procedure TformHrOdvOper.gridOperEvidMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p: TPoint; begin { p:= TPoint.Create(x,y); dragRow:= gridOperEvid.SelectedRow; // GetRowAtPos(x,y); dragCol:= gridOperEvid.SelectedCol; // GetColumnAtPos(p).Index; if (dragCol>0) and (dragRow>0) then gridOperEvid.BeginDrag(False,3); } end; procedure TformHrOdvOper.gridOperEvidResize(Sender: TObject); begin // gridOperEvid.Font.Size:= lbl1.Font.Size; end; procedure TformHrOdvOper.gridOperPrikazMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var c,r: integer; p: TPoint; begin { p:= TPoint.Create(x,y); dragRow:= gridOperPrikaz.SelectedRow; // GetRowAtPos(x,y); dragCol:= gridOperPrikaz.SelectedCol; // GetColumnAtPos(p).Index; if (dragCol>0) and (dragRow>0) then gridOperPrikaz.BeginDrag(False,3); } end; procedure TformHrOdvOper.gridOperPrikazResize(Sender: TObject); begin // gridOperPrikaz.Font.Size:= lbl1.Font.Size; end; procedure TformHrOdvOper.gridOperPrikazSelect(Sender: TObject; ACol, ARow: Integer); begin opVPsel:= ARow; end; procedure TformHrOdvOper.gridOperEvidSelect(Sender: TObject; ACol, ARow: Integer); begin opEvidsel:= ARow; end; end.