2053 lines
74 KiB
ObjectPascal
2053 lines
74 KiB
ObjectPascal
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<integer>;
|
|
|
|
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 (idx<cnt) do
|
|
begin
|
|
lSQL:= 'SELECT op.idPostup, op.Mnozstvi, op.Operace, op.Popis, op.NormCas_S, op.SkutCas_S, p.typ, op.id FROM ' + tblEvidOpPolozky;
|
|
lSQL:= lSQL + ' op LEFT JOIN ' + tblPrPost + ' p ON (op.IdPostup=p.id) WHERE op.id=' + IntTOStr(idOperaci[idx]);
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount=1) then
|
|
begin
|
|
gridOperEvid.Cell[0,idx].AsString:= Trim(VarToStr(FieldValues(2))); // Operace
|
|
gridOperEvid.Cell[1,idx].AsString:= Trim(VarToStr(FieldValues(3))); // Popis
|
|
gridOperEvid.Cell[2,idx].AsFloat:= RoundToEx(StrToFloat(VarToStr(FieldValues(4)))/60/edtKusy.Value,-2); // NormCas(v min)
|
|
gridOperEvid.Cell[3,idx].AsFloat:= RoundToEx(StrToFloat(VarToStr(FieldValues(4)))/edtKusy.Value,-2); // NormCas(v sek)
|
|
gridOperEvid.Cell[4,idx].AsInteger:= StrToInt(VarToStr(FieldValues(0))); // IdPostup
|
|
gridOperEvid.Cell[5,idx].AsFloat:= StrToFloat(VarToStr(FieldValues(5))); // SkutCas(s)
|
|
gridOperEvid.Cell[6,idx].AsInteger:= StrToInt(VarToStr(FieldValues(7))); // idEvidOperPol
|
|
if VarIsNull(FieldValues(6)) then // neni provazanost mezi zaevidovanym IdPostup a IdPostup v TPV -> typ=null
|
|
gridOperEvid.Cell[1,idx].AsString:= '! Operace byla v TPV smazána !';
|
|
end;
|
|
Inc(idx);
|
|
end;
|
|
if (gridOperPrikaz.RowCount>0) 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<AColumn.Tag) then
|
|
AColumn.Width:= AColumn.Tag;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TformHrOdvOper.NactiJizEvidOperace;
|
|
var sql: string;
|
|
idx: integer;
|
|
begin
|
|
if (edtOsCislo.Text<>'') 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<TOper>;
|
|
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 (i<Self.ComponentCount-1) do
|
|
begin
|
|
if (Self.Components[i] is TEdit) then
|
|
(Self.Components[i] AS TEdit).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TRzEdit) then
|
|
(Self.Components[i] AS TRzEdit).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TRzButtonEdit) then
|
|
(Self.Components[i] AS TRzButtonEdit).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TComboEdit) then
|
|
(Self.Components[i] AS TComboEdit).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TEdit) then
|
|
(Self.Components[i] AS TEdit).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TLabel) then
|
|
(Self.Components[i] AS TLabel).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TNextGrid6) then
|
|
(Self.Components[i] AS TNextGrid6).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TNxTextColumn6) then
|
|
(Self.Components[i] AS TNxTextColumn6).Font.Name:= Helios.Font;
|
|
if (Self.Components[i] is TNxNumberColumn6) then
|
|
(Self.Components[i] AS TNxNumberColumn6).Font.Name:= Helios.Font;
|
|
Inc(i);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TformHrOdvOper.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if (Button=mbLeft) and (ssShift in Shift) then
|
|
Helios.Info(#1'Rozmìry formu (w/h): '#1 + IntToStr(Self.Width) + 'px / ' + IntToStr(Self.Height) + 'px');
|
|
end;
|
|
|
|
|
|
|
|
procedure TformHrOdvOper.FormResize(Sender: TObject);
|
|
begin
|
|
FixGridCols(gridOperPrikaz);
|
|
FixGridCols(gridOperEvid);
|
|
FixGridCols(gridAllEvid);
|
|
end;
|
|
|
|
|
|
|
|
procedure TformHrOdvOper.FormShow(Sender: TObject);
|
|
var lSQL: WideString;
|
|
koef: extended;
|
|
i: integer;
|
|
begin
|
|
Application.Handle:= Helios.MainApplicationHandle;
|
|
Application.Icon.Handle:= Helios.MainApplicationIconHandle;
|
|
Application.OnMessage:= OnMsg;
|
|
|
|
// DefFontData.CharSet:= Helios.Charset;
|
|
DefFontData.Name:= Helios.Font;
|
|
// DefFontData.Height:= Helios.FontHeight;
|
|
|
|
// Screen.MenuFont.CharSet:= DefFontData.CharSet;
|
|
Screen.MenuFont.Name:= DefFontData.Name;
|
|
// Screen.MenuFont.Height:= DefFontData.Height;
|
|
|
|
ReseedTable(Helios,tblMzdZm);
|
|
with Helios.OpenSQL('SELECT IDObdobi FROM ' + tblMzdObd + ' WHERE Stav=1') do
|
|
if (RecordCount>0) 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.
|