Files
Polanskych-plgPolanskych/frmPrijem.pas
2025-09-05 12:22:48 +02:00

1005 lines
34 KiB
ObjectPascal

unit frmPrijem;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Types, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, System.ImageList, Vcl.ImgList, Vcl.StdCtrls, Vcl.Buttons,
Vcl.ComCtrls, ddPlugin_TLB, TBPackageU, Vcl.WinXPickers, Vcl.Mask, RxToolEdit, Vcl.NumberBox, Vcl.Grids, VirtualTrees,
NxGridView6, NxColumns6, NxControls6, NxCustomGrid6, NxVirtualGrid6, NxGrid6, NxEdit6, MemTableDataEh, Data.DB,
DBGridEhGrouping, ToolCtrlsEh, DBGridEhToolCtrls, DynVarsEh, EhLibVCL, GridsEh, EhLibMTE, DBAxisGridsEh, DBGridEh, MemTableEh,
System.MaskUtils;
type
{
TWideStringHelper = record helper for WideString
function QuotedString: string; overload;
end;
TMaskedTextHelper = record helper for TMaskedText
function QuotedString: string; overload;
function Replace(oldStr, newStr: string): string; overload;
end;
}
TSortiment = record
nazev, k1, poleDodav: string;
dodavatel: integer;
typSort: byte;
end;
TformPrijem = class(TForm)
gbDodavatel: TGroupBox;
gbPolozky: TGroupBox;
Label1: TLabel;
dtZavoz: TDateTimePicker;
btnOK: TButton;
Label2: TLabel;
lblDodAdresa: TLabel;
lblDodMisto: TLabel;
cbxSortiment: TComboBox;
Label3: TLabel;
edtCisloObj: TNumberBox;
Label4: TLabel;
btnTisk: TButton;
btnRozbalit: TButton;
btnSbalit: TButton;
btnZavrit: TButton;
Panel1: TPanel;
Panel2: TPanel;
edtNumEditor: TNxEdit6;
vTab: TMemTableEh;
ds: TDataSource;
polGrd: TDBGridEh;
cbxDodavatel: TComboBox;
lblDodICO: TLabel;
lblDodDIC: TLabel;
vTabPoradiSort: TSingleField;
vTabPoradi: TSmallintField;
vTabPoradiSortNazev: TStringField;
vTabNazev1: TStringField;
vTabRegCis: TStringField;
vTabSkupZbo: TStringField;
vTabIDZboSklad: TIntegerField;
vTabMnozstvi: TFloatField;
vTabIDPohybZboziObj: TIntegerField;
vTabSortiment: TStringField;
vTabK2: TStringField;
vTabK1: TStringField;
btnNactiObj: TButton;
vTabTypZavozu: TStringField;
cbZavoz: TComboBox;
Label5: TLabel;
vTabPoradiExt: TSingleField;
vTabK1K2: TStringField;
btnNuluj: TButton;
vTabJCbezDaniKc: TSingleField;
edtDodFak: TEdit;
Label6: TLabel;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cbxSortimentChange(Sender: TObject);
procedure edtNumEditorClick(Sender: TObject);
procedure btnRozbalitClick(Sender: TObject);
procedure btnSbalitClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure polGrdKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btnZavritClick(Sender: TObject);
procedure btnTiskClick(Sender: TObject);
procedure vTabRanoValidate(Sender: TField);
procedure vTabPoledneValidate(Sender: TField);
procedure edtCisloObjExit(Sender: TObject);
procedure btnNactiObjClick(Sender: TObject);
procedure vTabMnozstviValidate(Sender: TField);
procedure polGrdDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure vTabFilterRecord(DataSet: TDataSet; var Accept: Boolean);
procedure cbZavozChange(Sender: TObject);
procedure polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string);
procedure btnNulujClick(Sender: TObject);
private
cOrg: integer;
function ZjistiBranchID: Integer;
function MnozstviKPrijmuSum: Single;
procedure NactiObjednavku(const idObj: integer); safecall;
procedure WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
public
Helios: IHelios;
jeTest: boolean;
idDZ: integer;
end;
var
formPrijem: TformPrijem;
sortim: TArray<TSortiment>;
cOrgs: TArray<Integer>;
cOrgDod, idDZ: integer;
branchID: integer;
compName, tabExtOrdInfo, cisloDokl, rDokl: string;
bidHDCObj: integer;
implementation
uses System.StrUtils, System.DateUtils, helUtils;
{$R *.dfm}
{$IF CompilerVersion>=34} // Sydney a vys
{$ENDIF}
{
function TWideStringHelper.QuotedString: string;
begin
Result:= string(Self).QuotedString;
end;
function TMaskedTextHelper.QuotedString: string;
var s: string;
begin
s:= Self;
Result:= s.QuotedString;
end;
function TmaskedTextHelper.Replace(oldStr: string; newStr: string): string;
var s: string;
begin
s:= Self;
Result:= s.Replace(oldStr, newStr);
end;
}
procedure TformPrijem.WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo);
begin
inherited;
with msg.MinMaxInfo^.ptMaxTrackSize Do
begin
X:= GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth);
Y:= GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight);
end;
end;
function TformPrijem.MnozstviKPrijmuSum: Single;
var i: integer;
begin
result:= 0;
if (vTab.RecordCount>0) then
begin
i:= vTab.RecNo;
vTab.DisableControls;
vTab.First;
while not(vTab.Eof) do
begin
result:= result + vTab.FieldByName('Mnozstvi').AsSingle;
vTab.Next;
end;
vTab.RecNo:= i;
vTab.EnableControls;
end;
end;
function TformPrijem.ZjistiBranchID: Integer;
var s: string;
begin
result:= -1;
s:= Helios.Sklad;
if (LeftStr(s, 3)='005') then
result:= RightStr(s, 1).ToInteger;
end;
procedure TformPrijem.btnNactiObjClick(Sender: TObject);
var lSQL, zavoz, k1, k2: string;
poradiSort, poradiSort2: Single;
begin
if (edtCisloObj.Value>0) then
begin
if not(vTab.Active) then
vTab.Open;
lSQL:= 'SELECT TOP(1) CisloOrg FROM ' + tblDZ + ' WHERE RadaDokladu LIKE N''9%0'' AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND PoradoveCislo=' + edtCisloObj.ValueInt.ToString + ' ORDER BY DatPorizeni DESC';
cOrgDod:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
lSQL:= 'SELECT p.ID, p.IDZboSklad, p.Nazev1, (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno) AS Mnozstvi, p.SkupZbo, p.RegCis, p.Poradi, s.K1, s.K2';
lSQL:= lSQL + ', s.Nazev AS NazevSortim, p.JCbezDaniKC, ISNULL(pe._typzavozu,0) AS TypZavozu, ISNULL(sore.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(sore._priorita, 999)) AS Poradi FROM ' + tblDZ + ' d INNER JOIN ' + tblPZ;
lSQL:= lSQL + ' p ON (p.IDDoklad=d.ID) INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)' + ' LEFT JOIN ' + tblSortim;
lSQL:= lSQL + ' sor ON (sor.ID=k.IDSortiment) LEFT JOIN ' + tblSortimE + ' sore ON (sore.ID=sor.ID) LEFT JOIN ' + tblPZe + ' pe ON (pe.ID=p.ID) WHERE d.DruhPohybuZbo=6';
lSQL:= lSQL + ' AND d.Splneno=0 AND d.PoradoveCislo=' + edtCisloObj.ValueInt.ToString;
lSQL:= lSQL + ' AND d.IDSklad=N' + Helios.Sklad.QuotedString + ' AND (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno)>0 ORDER BY';
lSQL:= lSQL + ' p.Poradi';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
k1:= VarToStr(FieldByName('K1').Value);
k2:= VarToStr(FieldByName('K2').Value);
lSQL:= 'SELECT ISNULL(se.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString + ' AND s.K2 IS NULL';
poradiSort:= helUtils.getHeliosFloatVal(Helios, 0, lSQL);
lSQL:= 'SELECT ISNULL(se.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString;
lSQL:= lSQL + ' AND s.K2=N' + k2.QuotedString + ' AND s.K3 IS NULL';
poradiSort2:= helUtils.getHeliosFloatVal(Helios, 0, lSQL);
vTab.Append;
vTab.FieldByName('IDPohybZboziObj').AsInteger:= VarToStr(FieldByNameValues('ID')).ToInteger;
vTab.FieldByName('IDZboSklad').AsInteger:= VarToStr(FieldByNameValues('IDZboSklad')).ToInteger;
if (VarIsNull(FieldByNameValues('Poradi'))) then
vTab.FieldByName('Poradi').AsSingle:= 1
else
vTab.FieldByName('Poradi').AsSingle:= VarToStr(FieldByNameValues('Poradi')).ToSingle;
vTab.FieldByName('JCbezDaniKc').AsSingle:= VarToStr(FieldByNameValues('JCbezDaniKC')).ToSingle;
vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo'));
vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis'));
vTab.FieldByName('Nazev1').AsString:= VarToStr(FieldByNameValues('Nazev1'));
vTab.FieldByName('Mnozstvi').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended;
vTab.FieldByName('K1').AsString:= k1;
vTab.FieldByName('K2').AsString:= k2;
vTab.FieldByName('K1K2').AsString:= k1 + k2;
vTab.FieldByName('Sortiment').AsString:= VarToStr(FieldByNameValues('NazevSortim'));
vTab.FieldByName('PoradiSortNazev').AsString:= k1 + k2 + VarToStr(FieldByNameValues('NazevSortim'));
if (VarIsNull(FieldByNameValues('PoradiObj'))) then
vTab.FieldByName('PoradiExt').AsSingle:= 1
else
vTab.FieldByName('PoradiExt').AsSingle:= VarToStr(FieldByNameValues('PoradiObj')).ToSingle;
zavoz:= VarToStr(FieldByNameValues('TypZavozu'));
if (zavoz='1') then
vTab.FieldByName('TypZavozu').AsString:= 'R';
if (zavoz='2') then
vTab.FieldByName('TypZavozu').AsString:= 'P';
vTab.Post;
Next;
end;
vTab.SortByFields('PoradiSortNazev,PoradiExt,K1,SkupZbo,RegCis');
end;
end
else
begin
Helios.Error(#1'Zadejte číslo objednávky'#1);
if (edtCisloObj.CanFocus) then
edtCisloObj.SetFocus;
end;
end;
procedure TformPrijem.btnNulujClick(Sender: TObject);
var i: integer;
begin
if (vTab.RecordCount>0) then
begin
i:= vTab.RecNo;
vTab.DisableControls;
vTab.First;
while not(vTab.Eof) do
begin
vTab.Edit;
vTab.FieldByName('Mnozstvi').AsInteger:= 0;
vTab.Post;
vTab.Next;
end;
vTab.RecNo:= i;
vTab.EnableControls;
end;
end;
procedure TformPrijem.btnOKClick(Sender: TObject);
var oldRec, idHlava, idTiskForm: integer;
lSQL: string;
begin
cisloDokl:= '';
idTiskForm:= -25;
if (vTab.RecordCount>0) then
begin
lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabPrijemH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabPrijemH WHERE Autor=SUSER_SNAME()' + CRLF;
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabPrijemR'') IS NOT NULL' + CRLF + ' IF OBJECT_ID(N''dbo._temp_TabPrijemH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabPrijemR';
lSQL:= lSQL + ' WHERE IDHlava NOT IN (SELECT ID FROM dbo._temp_TabPrijemH)' + CRLF;
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabPrijemH'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT ID FROM dbo._temp_TabPrijemH)' + CRLF + ' DROP TABLE dbo._temp_TabPrijemH' + CRLF;
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabPrijemR'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT ID FROM dbo._temp_TabPrijemR)' + CRLF + ' DROP TABLE dbo._temp_TabPrijemR';
Helios.ExecSQL(lSQL);
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabPrijemH'') IS NOT NULL DROP TABLE #TabPrijemH' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #TabPrijemH (ID INT IDENTITY(1,1) NOT NULL, Sklad NVARCHAR(30), CisloOrg INT NOT NULL, Datum DATETIME, DodFak NVARCHAR(20), Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())';
if (jeTest) then
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP');
Helios.ExecSQL(lSQL);
lSQL:= 'INSERT #TabPrijemH (CisloOrg, Sklad, Datum, DodFak) SELECT ISNULL(TRY_PARSE(N' + cOrgDod.ToString.Replace(';', '').Replace('-','').Replace(' ', '').QuotedString;
lSQL:= lSQL + ' AS INT), 0), N' + Helios.Sklad.QuotedString + ', CONVERT(datetime, N' + FormatDateTime('d.m.yyyy', dtZavoz.Date).QuotedString + ', 104), N' + edtDodFak.Text.Trim.QuotedString;
lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
if (jeTest) then
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP');
with Helios.OpenSQL(lSQL) do
idHlava:= VarToStr(FieldValues(0)).ToInteger;
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabPrijemR'') IS NOT NULL' + CRLF + ' DROP TABLE #TabPrijemR' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #TabPrijemR (ID INT IDENTITY(1,1) NOT NULL, IDHlava INT NOT NULL, IDZboSklad INT NOT NULL, Mnozstvi NUMERIC(12,2) NOT NULL DEFAULT 0.0';
lSQL:= lSQL + ', JCbezDaniKc NUMERIC(19,6) NOT NULL DEFAULT 0.0, IDPohybZbozi INT NOT NULL, Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())';
if (jeTest) then
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP');
Helios.ExecSQL(lSQL);
oldRec:= vTab.RecNo;
vTab.DisableControls;
vTab.First;
while not(vTab.Eof) do
begin
if (vTab.FieldByName('Mnozstvi').AsSingle>0) then
begin
lSQL:= 'INSERT #TabPrijemR (IDHlava, IDZboSklad, Mnozstvi, IDPohybZbozi, JCbezDaniKc)' + CRLF + ' SELECT ' + idHlava.ToString + ', ' + vTab.FieldByName('IDZboSklad').AsString + ', ';
lSQL:= lSQL + vTab.FieldByName('Mnozstvi').AsSingle.ToString.Replace(',', '.') + ', ' + vTab.FieldByName('IDPohybZboziObj').AsSingle.ToString;
lSQL:= lSQL + ', ROUND(' + vTab.FieldByName('JCbezDaniKc').AsSingle.ToString.Replace(',', '.') + ', 3)';
if (jeTest) then
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP');
Helios.ExecSQL(lSQL);
end;
vTab.Next;
end;
vTab.RecNo:= oldRec;
vTab.EnableControls;
idDZ:= 0;
if not(jeTest) and (MnozstviKPrijmuSum>0) then
begin
helUtils.waitStart(nil, 'Generování příjemky...', 0, 0);
lSQL:= 'DECLARE @i INT=0' + CRLF + 'IF OBJECT_ID(N''dbo.ep_HDC_App_Prijemka'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_HDC_App_Prijemka @idDZ=@i OUT, @Sklad=N' + Helios.Sklad.QuotedString;
lSQL:= lSQL + CRLF + 'SELECT @i';
try
with Helios.OpenSQL(lSQL) do
idDZ:= VarToStr(FieldValues(0)).ToInteger;
cisloDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PoradoveCislo FROM ' + tblDZ + ' WHERE ID=' + idDZ.ToString);
idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TiskovyForm FROM ' + tblDDZ + ' WHERE ID=' + idDZ.ToString);
except on E:Exception do
Helios.Error(#1'Chyba generování příjemky' + #1 + CRLF + E.Message);
end;
helUtils.waitEnd;
end;
end;
lSQL:= '';
if (Sender.ToString='TButton') then
lSQL:= (Sender as TButton).Name;
if (lSQL='btnOK') then
Close;
if (lSQL='btnTisk') and (idDZ>0) then
begin
Helios.Info(#1'Byla uložena příjemka - č. ' + cisloDokl + #1);
Helios.PrintForm2(idTiskForm, 'ID=' + idDZ.ToString);
end;
end;
procedure TformPrijem.btnRozbalitClick(Sender: TObject);
begin
polGrd.DataGrouping.ActiveGroupLevels[0].ExpandNodes;
end;
procedure TformPrijem.btnSbalitClick(Sender: TObject);
begin
polGrd.DataGrouping.ActiveGroupLevels[0].CollapseNodes;
end;
procedure TformPrijem.btnTiskClick(Sender: TObject);
var lSQL: string;
i: integer;
begin
btnOKClick(Sender);
end;
procedure TformPrijem.btnZavritClick(Sender: TObject);
begin
if (Helios.YesNo('Ukončit bez uložení příjemky ?', false)) then
Close;
end;
procedure TformPrijem.NactiObjednavku(const idObj: integer);
var lSQL, sort, k1, k2, cZbo, flt: string;
idSort, idx: integer;
mnR, mnP: Single;
extOrdInfo: boolean;
poradiSort, poradiSort2: Single;
begin
if not(vTab.Active) then
vTab.Open;
lSQL:= '';
idx:= cbxSortiment.ItemIndex;
cOrgDod:= -1;
if (idObj>0) then
begin
btnNactiObj.Enabled:= false;
k1:= sortim[idx].k1;
lSQL:= 'SELECT o.Nazev, o.UliceSCisly, o.PSC, o.Misto FROM ' + tblDZ + ' d INNER JOIN ' + tblCOrg + ' o ON (o.CisloOrg=d.CisloOrg) WHERE d.ID=' + idObj.ToString;
cbxDodavatel.Items.Clear;
cbxDodavatel.Items.Add(helUtils.getHeliosStrVal(Helios, '', lSQL));
cbxDodavatel.ItemIndex:= 0;
lSQL:= 'SELECT o.UliceSCisly, o.PSC, o.Misto, o.ICO, o.DIC, d.CisloOrg, d.Splatnost FROM ' + tblDZ + ' d INNER JOIN ' + tblCOrg + ' o ON (o.CisloOrg=d.CisloOrg) WHERE d.ID=' + idObj.ToString;
with Helios.OpenSQL(lSQL) do
begin
First;
cOrgDod:= VarToStr(FieldByNameValues('CisloOrg')).ToInteger;
lblDodAdresa.Caption:= VarToStr(FieldByNameValues('UliceSCisly'));
lblDodICO.Caption:= 'IČ ' + VarToStr(FieldByNameValues('ICO'));
lblDodDIC.Caption:= 'DIČ ' + VarToStr(FieldByNameValues('DIC'));
lblDodMisto.Caption:= Trim(VarToStr(FieldByNameValues('PSC')) + ' ' + VarToStr(FieldByNameValues('Misto')));
dtZavoz.DateTime:= StrToDate(VarToStr(FieldByNameValues('Splatnost')))
end;
lSQL:= 'SELECT p.*, ISNULL(so.Nazev,N'''') AS NazevSort, ISNULL(so.K1, N'''') AS K1, ISNULL(so.K2, N'''') AS K2, (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno) AS MnozstviZustatek';
lSQL:= lSQL + ', ISNULL(pe._typzavozu, 0) AS TypZavozu, p.JCbezDaniKC, ISNULL(soe.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(soe._priorita, 999)) AS PoradiSort, ISNULL(ke._poradivsortimentu, 999) AS PoradiVSort FROM ' + tblPZ + ' p LEFT JOIN ' + tblPZe + ' pe ON (pe.ID=p.ID) INNER JOIN ';
lSQL:= lSQL + tblDZ + ' d ON (d.ID=p.IDDoklad) INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)';
lSQL:= lSQL + ' LEFT JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID)';
lSQL:= lSQL + ' LEFT JOIN ' + tblSortim + ' so ON (so.ID=k.IdSortiment) LEFT JOIN ' + tblSortimE + ' soe ON (soe.ID=so.ID)';
lSQL:= lSQL + ' WHERE d.ID=' + idObj.ToString + ' AND (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno)>0 AND d.Splneno=0 AND d.DruhPohybuZbo=6';
lSQL:= lSQL + ' AND d.RadaDokladu=N' + ('9' + branchID.ToString + '0').QuotedString;
lSQL:= lSQL + ' AND ISNULL(pe._typzavozu,0)=' + (1+cbZavoz.ItemIndex).ToString;
end
else
if (edtCisloObj.ValueInt>0) then
begin
k1:= sortim[idx].k1;
lSQL:= 'SELECT p.*, ISNULL(so.Nazev,N'''') AS NazevSort, ISNULL(so.K1, N'''') AS K1, ISNULL(so.K2, N'''') AS K2, (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno) AS MnozstviZustatek';
lSQL:= lSQL + ', ISNULL(pe._typzavozu, 0) AS TypZavozu, p.JCbezDaniKC, ISNULL(soe.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(soe._priorita, 999)) AS PoradiSort, ISNULL(ke._poradivsortimentu, 999) AS PoradiVSort FROM ' + tblPZ + ' p LEFT JOIN ' + tblPZe + ' pe ON (pe.ID=p.ID) INNER JOIN ';
lSQL:= lSQL + tblDZ + ' d ON (d.ID=p.IDDoklad) INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)';
lSQL:= lSQL + ' LEFT JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID)';
lSQL:= lSQL + ' LEFT JOIN ' + tblSortim + ' so ON (so.ID=k.IdSortiment) LEFT JOIN ' + tblSortimE + ' soe ON (soe.ID=so.ID)';
lSQL:= lSQL + ' WHERE d.RadaDokladu=N' + ('9' + branchID.ToString + '0').QuotedString;
lSQL:= lSQL + ' AND (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno)>0 AND d.Splneno=0 AND d.DruhPohybuZbo=6 AND d.PoradoveCislo=' + edtCisloObj.ValueInt.ToString;
lSQL:= lSQL + ' AND d.IDSklad=N' + Helios.Sklad.QuotedString;
lSQL:= lSQL + ' AND ISNULL(pe._typzavozu,0)=' + (1+cbZavoz.ItemIndex).ToString;
end;
if (lSQL<>'') then
begin
vTab.EmptyTable;
vTab.DisableControls;
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
k1:= VarToStr(FieldByNameValues('K1'));
k2:= VarToStr(FieldByNameValues('K2'));
lSQL:= 'SELECT ISNULL(se.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString + ' AND s.K2 IS NULL';
poradiSort:= helUtils.getHeliosFloatVal(Helios, 0, lSQL);
lSQL:= 'SELECT ISNULL(se.';
case branchID of
1: lSQL:= lSQL + '_PoradiObj_Klas1';
2: lSQL:= lSQL + '_PoradiObj_MozPi';
3: lSQL:= lSQL + '_PoradiObj_MozVod';
else
lSQL:= lSQL + '_priorita';
end;
lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString;
lSQL:= lSQL + ' AND s.K2=N' + k2.QuotedString + ' AND s.K3 IS NULL';
poradiSort2:= helUtils.getHeliosFloatVal(Helios, 0, lSQL);
vTab.Append;
vTab.FieldByName('Poradi').AsString:= VarToStr(FieldByNameValues('Poradi'));
vTab.FieldByName('PoradiSort').AsSingle:= VarToStr(FieldByNameValues('PoradiVSort')).ToSingle;
vTab.FieldByName('JCbezDaniKc').AsSingle:= VarToStr(FieldByNameValues('JCbezDaniKC')).ToSingle;
if (VarIsNull(FieldByNameValues('Poradi'))) then
vTab.FieldByName('PoradiExt').AsExtended:= 1
else
vTab.FieldByName('PoradiExt').AsExtended:= VarToStr(FieldByNameValues('Poradi')).ToExtended;
vTab.FieldByName('IDPohybZboziObj').AsString:= VarToStr(FieldByNameValues('ID'));
vTab.FieldByName('IDZboSklad').AsString:= VarToStr(FieldByNameValues('IDZboSklad'));
vTab.FieldByName('Sortiment').AsString:= VarToStr(FieldByNameValues('NazevSort'));
vTab.FieldByName('K1').AsString:= k1;
vTab.FieldByName('K2').AsString:= k2;
vTab.FieldByName('K1K2').AsString:= k1 + k2;
vTab.FieldByName('PoradiSortNazev').AsString:= ((poradiSort*1000.0)+poradiSort2).ToString.Replace(',', '.') + ' ' + VarToStr(FieldByNameValues('NazevSort'));
vTab.FieldByName('TypZavozu').AsString:= '';
if (VarToStr(FieldByNameValues('TypZavozu'))='1') then
vTab.FieldByName('TypZavozu').AsString:= 'R';
if (VarToStr(FieldByNameValues('TypZavozu'))='2') then
vTab.FieldByName('TypZavozu').AsString:= 'P';
vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo'));
vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis'));
vTab.FieldByName('Nazev1').AsString:= VarToStr(FieldByNameValues('Nazev1'));
vTab.FieldByName('Mnozstvi').AsString:= VarToStr(FieldByNameValues('MnozstviZustatek'));
vTab.Post;
Next;
end;
end;
vTab.EnableControls;
end;
helUtils.waitEnd;
polGrd.Options:= polGrd.Options + [dgEditing];
if not(vTab.Active) then
polGrd.Options:= polGrd.Options - [dgEditing]
else
if (vTab.RecordCount=0) then
polGrd.Options:= polGrd.Options - [dgEditing];
vTab.SortByFields('PoradiSortNazev,PoradiSort,SkupZbo,RegCis');
if (idObj=0) and (k1='001') then
vTab.Locate('K1;K2', VarArrayOf(['001','']), [])
else
vTab.First;
end;
procedure TformPrijem.polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string);
var s, s2: string;
i: integer;
errReverse: boolean;
begin
errReverse:= false;
s2:= '(123)';
s2:= ReverseString(s2);
if (s2.EndsWith('(')) then
errReverse:= true;
s:= GroupRowText.Replace('PoradiSortNazev: ', '');
if (s.IndexOf(' ')>-1) then
s:= MidStr(s, s.IndexOf(' ')+1, s.Length).Trim;
if (s.EndsWith(')')) then
begin
s:= ReverseString(s);
if (errReverse) then
i:= s.IndexOf('(')
else
i:= s.IndexOf(')');
if (i>-1) then
s:= MidStr(s, i+2, s.Length);
s:= ReverseString(s).Trim;
end;
s2:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) KatAllTecky FROM ' + tblSortim + ' WHERE Nazev=N' + s.QuotedString);
GroupRowText:= IfThen(s2<>'', s2 + ' ', '') + s;
end;
procedure TformPrijem.polGrdDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
{
if (Column.FieldName='Mnozstvi') then
if (vTab.FieldByName('TypZavozu').AsString='P') then
polGrd.Canvas.Brush.Color:= $00F7EE8A;
if (Column.FieldName='Mnozstvi') then
polGrd.DefaultDrawColumnCell(Rect, DataCol, Column, State);
}
end;
procedure TformPrijem.polGrdKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var i, i2: integer;
lSQL: string;
begin
if (Key=Ord('p')) or (Key=Ord('P')) then
begin
i:= polGrd.DataSource.DataSet.FieldByName('IDKZ').AsInteger;
if (i>0) then
begin
lSQL:= 'TabPohybyZbozi.IDZboSklad=(SELECT ID FROM ' + tblSS + ' WHERE IDKmenZbozi=' + i.ToString + ' AND IDSklad=N' + Helios.Sklad.QuotedString + ')';
Helios.OpenBrowse(66, lSQL);
end;
end;
if (Key=Ord('o')) or (Key=Ord('O')) then
begin
i:= polGrd.DataSource.DataSet.FieldByName('IDKZ').AsInteger;
i2:= 0;
with Helios.OpenSQL('SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_HDC_StareProdeje_Pol''') do
if (RecordCount=1) then
i2:= VarToStr(FieldValues(0)).ToInteger;
if (i2>0) then
begin
lSQL:= 'hvw_HDC_StareProdeje_Pol.IDSklad=N' + Helios.Sklad.QuotedString + ' AND hvw_HDC_StareProdeje_Pol.SkupZbo=N';
lSQL:= lSQL + polGrd.DataSource.DataSet.FieldByName('SkupZbo').AsString.QuotedString + ' AND hvw_HDC_StareProdeje_Pol.RegCis=N';
lSQL:= lSQL + polGrd.DataSource.DataSet.FieldByName('RegCis').AsString.QuotedString;
lSQL:= lSQL + ' AND hvw_HDC_StareProdeje_Pol.DruhPohybuZbo IN (2,4)';
Helios.OpenBrowse(i2, lSQL);
end;
end;
end;
procedure TformPrijem.vTabFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var t: string;
begin
if (vTab.RecordCount>0) then
begin
t:= vTab.FieldByName('TypZavozu').AsString;
case cbZavoz.ItemIndex of
0: Accept:= (t='R');
1: Accept:= (t='P');
end;
end;
end;
procedure TformPrijem.vTabMnozstviValidate(Sender: TField);
var canCont: Boolean;
mv, mm: Single;
begin
canCont:= true;
mv:= TField(Sender).AsFloat;
if (mv<0) then
canCont:=false;
if not(canCont) then
TField(Sender).DataSet.Cancel;
end;
procedure TformPrijem.vTabPoledneValidate(Sender: TField);
var canCont: Boolean;
mv, mm: Single;
begin
canCont:= true;
mv:= TField(Sender).AsFloat;
mm:= TField(Sender).DataSet.FieldByName('Minimum').AsSingle;
if (TField(Sender).AsInteger<>0) and (TField(Sender).DataSet.FieldByName('JenRano').AsInteger=1) then
begin
TField(Sender).DataSet.Cancel;
Helios.Error(#1'Položka "' + TField(Sender).DataSet.FieldByName('RegCis').AsString +'" je určena jen pro ranní závoz.'#1);
canCont:= false;
end;
if (canCont) and (TField(Sender).AsInteger<0) then
begin
canCont:= false;
Helios.Error(#1'Položka "' + TField(Sender).DataSet.FieldByName('RegCis').AsString +'" je určena jen pro ranní závoz.'#1);
end;
if (canCont) and (mv<mm) then
begin
canCont:= false;
Helios.Error(#1'Minimální množství je ' + FormatFloat('#,##0.###', mm) + #1);
end;
if not(canCont) then
TField(Sender).DataSet.Cancel;
end;
procedure TformPrijem.vTabRanoValidate(Sender: TField);
var canCont: Boolean;
mv, mm: Single;
begin
canCont:= true;
mv:= TField(Sender).AsFloat;
mm:= TField(Sender).DataSet.FieldByName('Minimum').AsSingle;
if (TField(Sender).AsInteger<0) then
begin
canCont:= false;
Helios.Error(#1'Lze zadávat jen kladná čísla.'#1);
end;
if (canCont) and (mv<mm) then
begin
canCont:= false;
Helios.Error(#1'Minimální množství je ' + FormatFloat('#,##0.###', mm) + #1);
end;
if not(canCont) then
TField(Sender).DataSet.Cancel;
end;
procedure TformPrijem.cbxSortimentChange(Sender: TObject);
var lSQL: string;
idx: integer;
begin
lblDodAdresa.Caption:='';
lblDodMisto.Caption:= '';
idx:= cbxSortiment.ItemIndex;
cbxDodavatel.Items.Clear;
lSQL:= 'SELECT CisloOrg, Nazev, UliceSCisly, Misto, ICO, DIC FROM ' + tblCOrg + ' c INNER JOIN ' + tblCOrgE + ' ce ON (ce.ID=c.ID) WHERE ce.';
lSQL:= lSQL + sortim[idx].poleDodav + '=1';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
SetLength(cOrgs, RecordCount);
First;
idx:= 0;
while not(EOF) do
begin
cbxDodavatel.Items.Add(VarToStr(FieldValues(1)));
cOrgs[idx]:= VarToStr(FieldValues(0)).ToInteger;
Inc(idx);
Next;
end;
end;
cbxDodavatel.ItemIndex:= helUtils.IfThenInt(cbxDodavatel.Items.Count=1, 0, -1);
polGrd.Enabled:= (cbxDodavatel.ItemIndex>-1);
{
polGrd.Options:= polGrd.Options + [dgEditing];
if not(vTab.Active) then
polGrd.Options:= polGrd.Options - [dgEditing]
else
if (vTab.RecordCount=0) then
polGrd.Options:= polGrd.Options - [dgEditing];
}
end;
procedure TformPrijem.cbZavozChange(Sender: TObject);
begin
NactiObjednavku(idDZ);
end;
procedure TformPrijem.edtCisloObjExit(Sender: TObject);
begin
if (edtCisloObj.Value>0) then
NactiObjednavku(0);
end;
procedure TformPrijem.edtNumEditorClick(Sender: TObject);
begin
edtNumEditor.Visible:= true;
end;
procedure TformPrijem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (vTab.Active) then
vTab.Close;
if (tabExtOrdInfo<>'') and not(jeTest) then
Helios.ExecSQL('IF OBJECT_ID(N' + tabExtOrdInfo.QuotedString + ', N''U'') IS NOT NULL DROP TABLE ' + tabExtOrdInfo);
Action:= caFree;
end;
procedure TformPrijem.FormShow(Sender: TObject);
var rHeight, i: integer;
lSQL: string;
rct: TRect;
begin
compName:= GetEnvironmentVariable('COMPUTERNAME');
UseLatestCommonDialogs:= true;
self.SetBounds(Screen.WorkAreaRect.Left, 0, Screen.WorkAreaRect.Width, Screen.WorkAreaRect.Height);
// rct.Create(0, 0, 0, 0);
// rct:= BoundsRect;
SetBounds( Left - ClientOrigin.X,
Top - ClientOrigin.Y,
GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth),
GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight ));
// BoundsRect:= rct;
edtNumEditor.Height:= polGrd.RowHeight+2;
dtZavoz.DateTime:= IncDay(Now,1);
{
grd.RowCount:= 2;
grd.FixedRows:= 1;
rHeight:= grd.Canvas.TextHeight('Áý');
grd.DefaultRowHeight:= grd.Font.Size + 18;
// grd.RowHeights[1]:= grd.Canvas.TextHeight('Akce') + 4;
grd.Cells[0, 0]:= 'Akce';
grd.Cells[1, 0]:= 'Číslo';
grd.Cells[2, 0]:= 'Název';
grd.Cells[3, 0]:= 'Doporučeno';
grd.Cells[4, 0]:= 'Ráno';
grd.Cells[5, 0]:= 'Poledne';
}
branchID:= ZjistiBranchID;
cOrgDod:= -1;
lblDodAdresa.Caption:= '';
lblDodMisto.Caption:= '';
lblDodICO.Caption:= '';
lblDodDIC.Caption:= '';
cbxSortiment.Items.Clear;
lSQL:= 'SELECT DISTINCT(s.K1) FROM ' + tblSortim + ' s INNER JOIN ' + tblSortimE + ' e ON (e.ID=s.ID) WHERE e._Objednavky_Zobrazit=1 GROUP BY s.K1';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
SetLength(sortim, RecordCount);
i:= 0;
First;
while not(EOF) do
begin
cbxSortiment.Items.Add(helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblSortim + ' WHERE K2 IS NULL AND K1=N' + VarToStr(FieldValues(0)).QuotedString));
sortim[i].k1:= VarToStr(FieldValues(0));
sortim[i].nazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblSortim + ' WHERE K2 IS NULL AND K1=N' + VarToStr(FieldValues(0)).QuotedString);
sortim[i].poleDodav:= '';
sortim[i].typSort:= 255;
if (sortim[i].k1='001') then
begin
sortim[i].typSort:= 0;
sortim[i].poleDodav:= '_dodpek';
end;
if (sortim[i].k1='003') then
begin
sortim[i].typSort:= 1;
sortim[i].poleDodav:= '_dodlah';
end;
if (sortim[i].k1='004') then
begin
sortim[i].typSort:= 2;
sortim[i].poleDodav:= '_dodvelko';
end;
Inc(i);
Next;
end;
cbxSortiment.ItemIndex:= 0;
end;
edtCisloObj.Enabled:= (idDZ=0);
cbxSortiment.Enabled:= (idDZ=0);
cbxDodavatel.Enabled:= (idDZ=0);
bidHDCObj:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_DokladyZbozi''');
bidHDCObj:= 22;
btnNactiObj.Visible:= not(Helios.BrowseID=bidHDCObj);
if (Helios.BrowseID=bidHDCObj) then
begin
edtCisloObj.Value:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT PoradoveCislo FROM ' + tblDZ + ' WHERE ID=' + idDZ.ToString);
NactiObjednavku(idDZ);
end
else
cbxSortimentChange(Sender);
btnNuluj.Visible:= (Helios.LoginName='hdc') or (compName='NTB-T');
end;
end.