Files
Kdynium-plgKdynium/frmOdvLisX.pas
2025-05-21 21:19:51 +02:00

459 lines
16 KiB
ObjectPascal
Raw Blame History

unit frmOdvLisX;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.StrUtils,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, RzEdit, TBPackageU, ddPlugin_TLB, Vcl.ExtCtrls,
Vcl.ComCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, VirtualDataSet, MemDS, VirtualTable, NxGridView6, NxColumns6,
NxControls6, NxCustomGrid6, NxTypes6, NxVirtualGrid6, NxDBCells6, NxDBGrid6, NxDBColumns6, NxIntf6, NxEdit6,
Vcl.Menus, XDBGrids;
const
tblPlan = '[dbo].[_hdc_TabPlanNasazeniLisu]';
tblPlanR = '[dbo].[_hdc_TabPlanNasazeniLisuR]';
tblOdlitky = '[dbo].[_hdc_TabOdlitky]';
type
TZavady = record
poz: integer;
kod: string;
popis: string;
end;
TformOdvLisX = class(TForm)
btnOK: TButton;
btnStorno: TButton;
lblZapisDat: TLabel;
edtBarcode: TLabeledEdit;
selBarcode: TButtonedEdit;
edtCisZam: TLabeledEdit;
selCisZam: TButtonedEdit;
edtVstriku: TRzNumericEdit;
Label1: TLabel;
tbl: TVirtualTable;
ds: TDataSource;
grd: TNextDBGrid6;
view: TNxReportGridView6;
colRegCis: TNxDBTextColumn6;
colNazev: TNxDBTextColumn6;
colKsDobre: TNxDBNumberColumn6;
tblIDPrPostup: TIntegerField;
tblRegCis: TStringField;
tblNazev: TStringField;
tblKsDobre: TSmallintField;
lblPrijmeni: TLabel;
lblPlan: TLabel;
tblIDVyrCS: TIntegerField;
tblFormaSN: TStringField;
tblIDradek: TIntegerField;
tblIDnaradi: TIntegerField;
tblKsZmetky1: TIntegerField;
tblKsZmetky2: TIntegerField;
tblKsZmetky3: TIntegerField;
tblKsNaPlate: TIntegerField;
colFormaSN: TNxDBTextColumn6;
colZmetky1: TNxDBNumberColumn6;
colZmetky2: TNxDBNumberColumn6;
colZmetky3: TNxDBNumberColumn6;
colKsVeForme: TNxDBNumberColumn6;
Label2: TLabel;
tblForma: TStringField;
tblcolZakazka: TStringField;
colZakazka: TNxDBTextColumn6;
dsForma: TDataSource;
tblFormaX: TVirtualTable;
tblFormaXRegCis: TStringField;
tblFormaXForma: TStringField;
colForma: TNxDBComboBoxColumn6;
grdX: TXDBGrid;
procedure FormShow(Sender: TObject);
procedure btnStornoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnOKClick(Sender: TObject);
procedure edtBarcodeExit(Sender: TObject);
procedure selBarcodeClick(Sender: TObject);
procedure selCisZamClick(Sender: TObject);
procedure selCisZamExit(Sender: TObject);
procedure edtCisZamExit(Sender: TObject);
procedure viewGetCellColor(Sender: TObject; ACol, ARow: Integer;
var CellColor: TColor; State: TNxCellPaintingState);
procedure edtVstrikuExit(Sender: TObject);
procedure colFormaSetCell(Sender: TObject; ACol, ARow: Integer;
Cell: INxBaseCell);
procedure grdCellClick(Sender: TObject; ACol, ARow: Integer;
Button: TMouseButton);
private
public
Helios: IHelios;
jeTest: Boolean;
end;
var
formOdvLis: TformOdvLisX;
idPlan, bidPlan: integer;
oVar: OleVariant;
zavady: TArray<TZavady>;
implementation
uses System.DateUtils, helUtils;
{$R *.dfm}
procedure TformOdvLisX.btnOKClick(Sender: TObject);
var lSQL, idcko: string;
begin
lblZapisDat.Visible:= true;
Self.Repaint;
btnOK.Enabled:= false;
btnStorno.Enabled:= false;
if (tbl.RecordCount>0) then
begin
lSQL:= 'INSERT #TabOdvodLis (IDPlan, CisZam, PocetVstriku) VALUES (' + idPlan.ToString + ', ' + edtCisZam.Text + ', ';
lSQL:= lSQL + StringReplace(FloatToStr(edtVstriku.Value), ',', '.', [rfReplaceAll]) + ')' + CRLF + 'SELECT SCOPE_IDENTITY()';
if (jeTest) then
begin
lSQL:= StringReplace(lSQL, '#TabOdv', 'dbo._temp_TabOdv', [rfReplaceAll]);
// lSQL:= StringReplace(lSQL, 'tempdb..', '', [rfReplaceAll]);
end;
with Helios.OpenSQL(lSQL) do
idcko:= VarToStr(FieldValues(0));
tbl.First;
while not(tbl.Eof) do
begin
lSQL:= 'INSERT #TabOdvodLisR (IDHlava, IDRadek, IDVyrCis, KsDobre, KsZmetky1, KodZav1, KsZmetky2, KodZav2, KsZmetky3, KodZav3, KsVeForme, IDPrPostup) VALUES (';
lSQL:= lSQL + idcko + ', ' + tbl.FieldByName('IDradek').AsString;
lSQL:= lSQL + ', NULL'; // IDVyrCis
lSQL:= lSQL + ', ' + StringReplace(tbl.FieldByName('KsDobre').AsString, '', '', [rfReplaceAll]);
lSQL:= lSQL + ', ' + StringReplace(tbl.FieldByName('KsZmetky1').AsString, '', '', [rfReplaceAll]) + ', N' + QuotedStr(IfThen(Length(zavady)>0, zavady[0].kod, ''));
lSQL:= lSQL + ', ' + StringReplace(tbl.FieldByName('KsZmetky2').AsString, '', '', [rfReplaceAll]) + ', N' + QuotedStr(IfThen(Length(zavady)>1, zavady[1].kod, ''));
lSQL:= lSQL + ', ' + StringReplace(tbl.FieldByName('KsZmetky3').AsString, '', '', [rfReplaceAll]) + ', N' + QuotedStr(IfThen(Length(zavady)>2, zavady[2].kod, ''));
lSQL:= lSQL + ', ' + StringReplace(tbl.FieldByName('KsVeForme').AsString, '', '', [rfReplaceAll]) + ', ' + tbl.FieldByName('IDPostup').AsString + ')';
if (jeTest) then
begin
lSQL:= StringReplace(lSQL, '#TabOdv', 'dbo._temp_TabOdv', [rfReplaceAll]);
// lSQL:= StringReplace(lSQL, 'tempdb..', '', [rfReplaceAll]);
end;
Helios.ExecSQL(lSQL);
tbl.Next;
end;
end;
if not(jeTest) then
Helios.ExecSQL('IF OBJECT_ID(''dbo.ep_Vosk_PlanLisu_Odvod'') IS NOT NULL EXEC dbo.ep_Vosk_PlanLisu_Odvod');
lblZapisDat.Visible:= false;
Self.Repaint;
btnOK.Enabled:= true;
btnStorno.Enabled:= true;
Close;
end;
procedure TformOdvLisX.btnStornoClick(Sender: TObject);
begin
Close;
end;
procedure TformOdvLisX.colFormaSetCell(Sender: TObject; ACol, ARow: Integer; Cell: INxBaseCell);
var lSQL: string;
begin
end;
procedure TformOdvLisX.edtBarcodeExit(Sender: TObject);
var lSQL, formy, sncka, nDokl, sVPr: string;
idPrikaz: integer;
begin
edtBarcode.Text:= Trim(edtBarcode.Text);
edtBarcode.Text:= helUtils.StripChars(edtBarcode.Text, ['''', '"', '-', ';', ' ']);
if (edtBarcode.Text<>'') then
begin
lblPlan.Caption:= '';
idPlan:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblPlan + ' WHERE BarCode=N' + QuotedStr(edtBarcode.Text));
if (idPlan>0) then
begin
if not(tblFormaX.Active) then
tblFormaX.Open;
tblFormaX.Clear;
lSQL:= 'SELECT Lis + N'' / '' + CONVERT(nvarchar, DATEPART(day,Datum)) + N''.'' + CONVERT(nvarchar, DATEPART(month,Datum)) + N''.''';
lSQL:= lSQL + ' + CONVERT(nvarchar, DATEPART(year,Datum)) + N'' / '' + Smena FROM ' + tblPlan + ' WHERE ID=' + idPlan.ToString;
lblPlan.Caption:= helUtils.getHeliosStrVal(Helios, '', lSQL);
lSQL:= 'SELECT r.IDPrPostup, k.RegCis, k.Nazev1, r.IDvyrcis, vc.Nazev1, r.ID, nv.Naradi, ISNULL(o.KsVeForme,0), nvk.RegCis, nv.Doklad, vp.ID, z.CisloZakazky FROM ' + tblPlanR;
lSQL:= lSQL + ' r INNER JOIN ' + tblPrPost + ' p ON (p.ID=r.IDPrPostup) INNER JOIN ' + tblPrikaz + ' vp ON (p.IDPrikaz=vp.ID) INNER JOIN ' + tblKZ;
lSQL:= lSQL + ' k ON (k.ID=vp.IdTabKmen) LEFT JOIN ' + tblOdlitky + ' o ON (o.Odlitek=k.RegCis) LEFT JOIN ' + tblPrNVazby;
lSQL:= lSQL + ' nv ON (p.IDPrikaz=nv.IDPrikaz AND p.Doklad=nv.Doklad) LEFT JOIN dbo.TabVyrCS vc ON (vc.ID=r.IDvyrcis) LEFT JOIN ' + tblKZ;
lSQL:= lSQL + ' nvk ON (nv.Naradi=nvk.Id) LEFT JOIN ' + tblZak + ' z ON (z.ID=vp.IDZakazka) WHERE r.IDHlava=' + idPlan.ToString + ' ORDER BY r.ID';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
if not(tbl.Active) then
tbl.Open;
tbl.Edit;
tbl.Clear; //Fields;
First;
while not(Eof) do
begin
tbl.Append;
tbl.FieldByName('IDPostup').AsString:= VarToStr(FieldValues(0));
tbl.FieldByName('RegCis').AsString:= VarToStr(FieldValues(1));
tbl.FieldByName('Nazev').AsString:= VarToStr(FieldValues(2));
tbl.FieldByName('KsDobre').AsExtended:= 0;
tbl.FieldByName('IDVyrCS').AsInteger:= StrToInt(IfThen(VarToStr(FieldValues(3))='', '-1', VarToStr(FieldValues(3))));
tbl.FieldByName('IDradek').AsInteger:= StrToInt(VarToStr(FieldValues(5)));
tbl.FieldByName('IDnaradi').AsInteger:= StrToInt(IfThen(VarToStr(FieldValues(6))='', '-1', VarToStr(FieldValues(6))));
tbl.FieldByName('Forma').AsString:= tbl.FieldByName('RegCis').AsString; //VarToStr(FieldValues(8));
tblFormaX.Append;
tblFormaX.FieldByName('RegCis').AsString:= tbl.FieldByName('RegCis').AsString;
tblFormaX.FieldByName('Forma').AsString:= 'Forma1';
tblFormaX.Post;
tblFormaX.Append;
tblFormaX.FieldByName('RegCis').AsString:= tbl.FieldByName('RegCis').AsString;
tblFormaX.FieldByName('Forma').AsString:= 'Forma2';
tblFormaX.Post;
sncka:= '';
nDokl:= VarToStr(FieldValues(9));
sVPr:= VarToStr(FieldValues(10));
if (nDokl<>'') then
begin
lSQL:= 'SELECT STRING_AGG(ne._VyrobniCislo, N'','') FROM ' + tblPrNVazby + ' n INNER JOIN ' + tblPrNVazbyE + ' ne ON (ne.ID=n.ID) WHERE n.Doklad=';
lSQL:= lSQL + nDokl + ' AND n.IDPrikaz=' + sVPr;
sncka:= helUtils.getHeliosStrVal(Helios, '', lSQL);
end;
tbl.FieldByName('FormaSN').AsString:= VarToStr(FieldValues(4));
if (tbl.FieldByName('FormaSN').AsString='') and (tbl.FieldByName('IDnaradi').AsInteger>0) then
tbl.FieldByName('FormaSN').AsString:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev1 FROM ' + tblKZ + ' WHERE ID=' + tbl.FieldByName('IDnaradi').AsInteger.ToString);
tbl.FieldByName('KsZmetky1').AsExtended:= 0;
tbl.FieldByName('KsZmetky2').AsExtended:= 0;
tbl.FieldByName('KsZmetky3').AsExtended:= 0;
tbl.FieldByName('KsVeForme').AsInteger:= StrToInt(VarToStr(FieldValues(7)));
tbl.FieldByName('Zakazka').AsString:= VarToStr(FieldValues(11));
tbl.Post;
Next;
end;
tbl.RecNo:= 1;
grd.Repaint;
end;
end;
edtCisZam.SetFocus;
end;
end;
procedure TformOdvLisX.edtCisZamExit(Sender: TObject);
var c: integer;
begin
lblPrijmeni.Caption:= '';
edtCisZam.Text:= Trim(edtCisZam.Text);
edtCisZam.Text:= helUtils.StripChars(edtCisZam.Text, ['''', '"', '-', ';', ' ']);
if (edtCisZam.Text<>'') then
if TryStrToInt(edtCisZam.Text, c) then
begin
if (helUtils.HeliosExistsTest(Helios, tblCZam, 'Cislo=' + c.ToString)) then
begin
lblPrijmeni.Caption:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Prijmeni FROM ' + tblCZam + ' WHERE Cislo=' + c.ToString);
edtCisZam.Text:= StringOfChar('0', 6-Length(edtCisZam.Text)) + edtCisZam.Text;
edtVstriku.SetFocus;
end
else
begin
Helios.Error(#1'Zadan<61> osobn<62> <20><>slo nebylo nalezeno !'#1);
edtCisZam.SetFocus;
edtCisZam.SelectAll;
end;
end
else
begin
Helios.Error(#1'Zadan<61> znaky nejsou <20><>slo'#1);
edtCisZam.SetFocus;
edtCisZam.SelectAll;
end;
end;
procedure TformOdvLisX.edtVstrikuExit(Sender: TObject);
var cell: TGridCoord;
begin
if (grd.RowCount>0) then
begin
end;
end;
procedure TformOdvLisX.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (tbl.Active) then
tbl.Close;
Action:= caFree;
end;
procedure TformOdvLisX.FormShow(Sender: TObject);
var lSQL: string;
i, i2: integer;
begin
self.ParentWindow:= Helios.MainApplicationHandle;
self.Icon.Handle:= Helios.MainApplicationIconHandle;
for i:=0 to Self.ComponentCount-1 do
begin
if (Self.Components[i] is TButton) then
begin
(Self.Components[i] as TButton).Font.Name:= Helios.Font;
(Self.Components[i] as TButton).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[i] is TButtonedEdit) then
begin
// (Self.Components[i] as TTB_3Button).Width:= 30;
// (Self.Components[i] as TTB_3Button).Height:= 30;
end;
end;
Helios.ExecSQL('IF OBJECT_ID(N''dbo._temp_TabOdvodLis'') IS NOT NULL DELETE FROM dbo._temp_TabOdvodLis WHERE Autor=SUSER_SNAME()');
Helios.ExecSQL('IF OBJECT_ID(N''dbo._temp_TabOdvodLisR'') IS NOT NULL DELETE FROM dbo._temp_TabOdvodLisR WHERE IDHlava NOT IN (SELECT ID FROM dbo._temp_TabOdvodLis)');
Helios.ExecSQL('IF OBJECT_ID(N''dbo._temp_TabOdvodLis'') IS NOT NULL IF NOT EXISTS(SELECT * FROM dbo._temp_TabOdvodLis) DROP TABLE dbo._temp_TabOdvodLis');
Helios.ExecSQL('IF OBJECT_ID(N''dbo._temp_TabOdvodLisR'') IS NOT NULL IF NOT EXISTS(SELECT * FROM dbo._temp_TabOdvodLisR) DROP TABLE dbo._temp_TabOdvodLisR');
Helios.ExecSQL('IF OBJECT_ID(N''tempdb..#TabOdvodLis'') IS NOT NULL DROP TABLE #TabOdvodLis');
Helios.ExecSQL('IF OBJECT_ID(N''tempdb..#TabOdvodLisR'') IS NOT NULL DROP TABLE #TabOdvodLisR');
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabOdvodLis'') IS NULL CREATE TABLE #TabOdvodLis (ID INT IDENTITY(1,1) NOT NULL, IDPlan INT NOT NULL, CisZam INT NOT NULL,';
lSQL:= lSQL +' PocetVstriku SMALLINT NOT NULL DEFAULT 0, Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())' + CRLF;
lSQL:= lSQL + 'IF OBJECT_ID(N''tempdb..#TabOdvodLisR'') IS NULL CREATE TABLE #TabOdvodLisR (IDHlava INT NOT NULL, IDRadek INT, KsDobre SMALLINT NOT NULL DEFAULT 0,';
lSQL:= lSQL + ' IDVyrCis INT, IDNaradi INT, IDPrPostup INT, KsZmetky1 INT NOT NULL DEFAULT 0, KodZav1 NVARCHAR(15) DEFAULT N'''', KsZmetky2 INT NOT NULL DEFAULT 0,';
lSQL:= lSQL + ' KodZav2 NVARCHAR(15) DEFAULT N'''', KsZmetky3 INT NOT NULL DEFAULT 0, KodZav3 NVARCHAR(15) DEFAULT N'''', KsVeForme SMALLINT DEFAULT 1,';
lSQL:= lSQL + ' FormaSN NVARCHAR(100) DEFAULT N'''')';
if (jeTest) then
begin
lSQL:= StringReplace(lSQL, '#TabOdv', 'dbo._temp_TabOdv', [rfReplaceAll]);
lSQL:= StringReplace(lSQL, 'tempdb..', '', [rfReplaceAll]);
end;
Helios.ExecSQL(lSQL);
SetLength(zavady, 0);
lSQL:= 'SELECT TOP(3) z.kod, e._PopisEvidence, e._PoziceEvidence FROM ' + tblCZavadE + ' e INNER JOIN ' + tblCZavad + ' z ON (z.ID=e.ID)';
lSQL:= lSQL + ' WHERE CHARINDEX(N''- VOSK'', CONVERT(nvarchar,Poznamka))>0 AND e._PoziceEvidence IS NOT NULL ORDER BY e._PoziceEvidence';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
SetLength(zavady, RecordCount);
i:= 0;
First;
while not(EOF) do
begin
zavady[i].kod:= VarToStr(FieldValues(0));
zavady[i].popis:= VarToStr(FieldValues(1));
zavady[i].poz:= StrToInt(VarToStr(FieldValues(2)));
Inc(i);
Next;
end;
end;
if (Length(zavady)>0) then
begin
for i:=0 to Length(zavady)-1 do
begin
i2:= grd.Columns.ItemBy['colZmetky' + (i+1).ToString].Index;
grd.Columns.Item[i2].Header.Caption:= 'Z ' + zavady[i].popis;
grd.Columns.Item[i2].Enabled:= true;
end;
end;
grd.Repaint;
end;
procedure TformOdvLisX.grdCellClick(Sender: TObject; ACol, ARow: Integer; Button: TMouseButton);
var lSQL: string;
begin
if (ACol=colForma.Index) then
begin
end;
end;
procedure TformOdvLisX.selBarcodeClick(Sender: TObject);
begin
edtBarcode.Text:= Trim(edtBarcode.Text);
oVar:= edtBarcode.Text;
bidPlan:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_PlanNasazeniLisu''');
if (bidPlan>0) then
if Helios.Prenos(bidPlan, 'hvw_PlanNasazeniLisu.Barcode', oVar, 'hvw_PlanNasazeniLisu.Ukonceno=0', 'Vyberte pl<70>n', true) then
begin
edtBarcode.Text:= VarToStr(oVar);
edtBarcodeExit(Sender);
end;
edtCisZam.SetFocus;
end;
procedure TformOdvLisX.selCisZamClick(Sender: TObject);
begin
if Helios.Prenos(bidCisZam, 'TabCisZam.Cislo', oVar, '', 'Vyberte zam<61>stnance', true) then
begin
edtCisZam.Text:= VarToStr(oVar);
selCisZamExit(Sender);
end;
end;
procedure TformOdvLisX.selCisZamExit(Sender: TObject);
begin
edtCisZam.Text:= helUtils.StripChars(edtCisZam.Text, ['''', '"', '-', ';', ' ']);
edtCisZamExit(Sender);
edtVstriku.SetFocus;
end;
procedure TformOdvLisX.viewGetCellColor(Sender: TObject; ACol, ARow: Integer; var CellColor: TColor; State: TNxCellPaintingState);
begin
if (grd.RowCount>=ARow+1) then
if (ACol=colKsVeForme.Index) then
if (grd.Cells[ACol, ARow]='0') then
begin
CellColor:= clRed;
grd.Cell[ACol, ARow].Enabled:= true;
end
else
begin
// CellColor:= clWindow;
grd.Cell[ACol, ARow].Enabled:= false;
end;
end;
end.