Files
LOVATO-plugin/frmBaliciListy.pas
2026-04-07 18:23:56 +02:00

2083 lines
70 KiB
ObjectPascal
Raw Blame History

unit frmBaliciListy;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.StdCtrls, Vcl.Mask, RzEdit,
RzBtnEdt, DB, helUtils, Vcl.Buttons, RzCmboBx, Vcl.Menus, FireDAC.Comp.Client, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
FireDAC.Comp.DataSet, Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid, JvExComCtrls, JvStatusBar;
const errPlg = #13#10 + '(plgLovato.frmBalListy)';
tblBL = '[dbo].[_TabBL]';
tblBLPol = '[dbo].[_TabBLPolozky]';
cOrgFinaly = '3';
VyrSkl = '200';
VyrFin = '210';
VyrRekl = '20000001';
type
Tkooperanti = record
Nazev, Sklad: string;
CisloOrg: Integer;
ItemIndex: Integer;
end;
TformBaliciListy = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
selSZ: TRzButtonEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
selRegCis: TRzButtonEdit;
edtKS: TRzNumericEdit;
Label7: TLabel;
Label9: TLabel;
edtBox: TRzNumericEdit;
vTabBL: TFDMemTable;
dsBL: TDataSource;
btnOK: TButton;
btnCancel: TButton;
lblKarta: TLabel;
btnAddPol: TBitBtn;
Label4: TLabel;
edtDat: TRzDateTimeEdit;
Label5: TLabel;
cbOrg: TRzComboBox;
pMenu: TPopupMenu;
pmDelPol: TMenuItem;
cbVratka: TCheckBox;
Label6: TLabel;
edtPrikaz: TRzNumericEdit;
pmObnovNeulozene: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
pmSmazNeulozene: TMenuItem;
N3: TMenuItem;
pmImpReader: TMenuItem;
cbTypDokl: TRzComboBox;
cbReklamace: TCheckBox;
lblVerze: TLabel;
vTabBLidKZ: TIntegerField;
vTabBLidSS: TIntegerField;
vTabBLidPZ: TIntegerField;
vTabBLSkupZbo: TStringField;
vTabBLRegCis: TStringField;
vTabBLBox: TStringField;
vTabBLMnoz: TFloatField;
vTabBLCelkHmot: TFloatField;
vTabBLPrikaz: TIntegerField;
vTabBLIdBLPol: TIntegerField;
vTabBLIDSklad: TStringField;
vTabBLidSSCil: TIntegerField;
vTabBLIDSkladCil: TStringField;
grd: TJvDBGrid;
statBar: TJvStatusBar;
procedure FormShow(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure selSZButtonClick(Sender: TObject);
procedure selRegCisButtonClick(Sender: TObject);
procedure selRegCisExit(Sender: TObject);
procedure selRegCisKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure selSZKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure edtKSExit(Sender: TObject);
procedure btnAddPolClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure pmDelPolClick(Sender: TObject);
procedure cbOrgChange(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure cbVratkaClick(Sender: TObject);
procedure viewPolKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure pmObnovNeulozeneClick(Sender: TObject);
procedure pmSmazNeulozeneClick(Sender: TObject);
procedure pmImpReaderClick(Sender: TObject);
procedure cbTypDoklChange(Sender: TObject);
procedure btnOKMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure cbTypDoklEnter(Sender: TObject);
procedure cbOrgEnter(Sender: TObject);
procedure vTabBLAfterPost(DataSet: TDataSet);
procedure grdDblClick(Sender: TObject);
private
helParams: THeliosParams;
cfMnozBLDef: TFieldDef;
cfMnozBL: TField;
function JeLovato: boolean;
function JePrevodka: boolean;
function VratVyrFin: string;
function VratSumu (FieldName: string): Extended;
procedure VytvorTabulkyAGrid;
procedure TestRC;
procedure NastavEdity;
procedure NastavFonty;
procedure NactiBalList;
procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
procedure FocusRegCis;
procedure FocusKS;
procedure NajdiZdrojCil;
public
idDZ: integer;
edit: Boolean;
typ: byte; // 1=BL, 2=Prevodka, 3=Prijemka
Helios: IHelios;
end;
var
formBaliciListy: TformBaliciListy;
koop: TArray<Tkooperanti>;
oVar1,oVar2: OleVariant;
rDokl, cDokl, sIdSS, sIdSSCil, verText, sklZdroj, sklCil: string;
idPZDZ, idBL, idPZBL, idKZ: integer;
mnoz, hmotZ, hmotC: Extended;
iOdb: integer;
selVyber, jsemLov, jsemPrev, insData: boolean;
oldCBTyp, oldCBOdb: integer;
implementation
uses System.StrUtils, Vcl.Clipbrd;
{$R *.dfm}
function GetAveCharSize(Canvas: TCanvas): TPoint;
const Buffer: PChar = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var tm: TTextMetric;
begin
GetTextMetrics(Canvas.Handle, tm);
GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
Result.X := (Result.X div 26 + 1) div 2;
Result.Y := tm.tmHeight;
end;
function FormMnozstviBox(const Helios: IHelios; Title: string; var mnoz: extended; var box: string): boolean;
var frm: TForm;
lbl1,lbl2: TLabel;
eMnoz,eBox: TEdit;
btnOK,btnCancel: TButton;
DialogUnits: TPoint;
ButtonWidth, ButtonHeight: Integer;
begin
result:= false;
frm:= TForm.Create(nil);
with frm do
try
Canvas.Font:= Font;
DialogUnits:= GetAveCharSize(Canvas);
BorderStyle:= bsDialog;
Caption:= Title;
ClientWidth:= MulDiv(180, DialogUnits.X, 4);
ClientHeight:= 150;
Position:= poScreenCenter;
lbl1:= TLabel.Create(frm);
with lbl1 do
begin
Parent:= frm;
Caption:= 'Mno<6E>stv<74>: ';
Left:= MulDiv(8, DialogUnits.X, 4);
Top:= MulDiv(8, DialogUnits.X, 4);
Constraints.MaxWidth:= MulDiv(164, DialogUnits.X, 4);
WordWrap:= True;
end;
lbl2:= TLabel.Create(frm);
with lbl2 do
begin
Parent:= frm;
Caption:= '<27><>slo boxu/krabice: ';
Left:= MulDiv(8, DialogUnits.X, 4);
Top:= lbl1.Top + lbl1.Height + 10;
Constraints.MaxWidth:= MulDiv(164, DialogUnits.X, 4);
WordWrap:= True;
end;
eMnoz:= TFloatEdit.Create(frm);
with eMnoz do
begin
Parent:= frm;
Left:= lbl2.Left + lbl2.Width + 25;
Top:= lbl1.Top;
Alignment:= taRightJustify;
Text:= FloatToStr(Mnoz);
end;
eBox:= TEdit.Create(frm);
with eBox do
begin
Parent:= frm;
Left:= lbl2.Left + lbl2.Width + 25;
Top:= lbl2.Top;
Alignment:= taRightJustify;
Text:= Box;
end;
ButtonWidth := MulDiv(50, DialogUnits.X, 4);
ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(frm) do
begin
Parent:= frm;
Caption:= 'OK';
ModalResult:= mrOK;
Default:= true;
SetBounds(MulDiv(20, DialogUnits.X, 4), 100, ButtonWidth, ButtonHeight);
end;
with TButton.Create(frm) do
begin
Parent:= frm;
Caption:= 'Zru<72>it';
ModalResult:= mrCancel;
Cancel:= True;
SetBounds(MulDiv(100, DialogUnits.X, 4), 100, ButtonWidth, ButtonHeight);
end;
if ShowModal=mrOK then
begin
result:= true;
mnoz:= StrToFloat(Trim(eMnoz.Text));
box:= Trim(eBox.Text);
end;
finally
frm.Free;
end;
end;
function NajdiVKoop(vrat,podle: byte; fHodn: Variant): Variant;
var i: integer;
begin
case vrat of
1,3: result:= '';
else result:= -1;
end;
for i:=0 to Length(koop)-1 do
begin
case vrat of
// vrat Nazev
1: case podle of
2: if koop[i].CisloOrg=fHodn then
begin
result:= koop[i].Nazev;
Exit;
end;
3: if koop[i].Sklad=fHodn then
begin
result:= koop[i].Nazev;
Exit;
end;
4: if koop[i].ItemIndex=fHodn then
begin
result:= koop[i].Nazev;
Exit;
end;
end;
// vrat CisloOrg
2: case podle of
1: if koop[i].Nazev=fHodn then
begin
result:= koop[i].CisloOrg;
Exit;
end;
3: if koop[i].Sklad=fHodn then
begin
result:= koop[i].CisloOrg;
Exit;
end;
4: if koop[i].ItemIndex=fHodn then
begin
result:= koop[i].CisloOrg;
Exit;
end;
end;
// vrat Cislo skladu
3: case podle of
1: if koop[i].Nazev=fHodn then
begin
result:= koop[i].Sklad;
Exit;
end;
2: if koop[i].CisloOrg=fHodn then
begin
result:= koop[i].Sklad;
Exit;
end;
4: if koop[i].ItemIndex=fHodn then
begin
result:= koop[i].Sklad;
Exit;
end;
end;
// vrat ItemIndex
4: case podle of
1: if koop[i].Nazev=fHodn then
begin
result:= koop[i].ItemIndex;
Exit;
end;
2: if koop[i].CisloOrg=fHodn then
begin
result:= koop[i].ItemIndex;
Exit;
end;
3: if koop[i].Sklad=fHodn then
begin
result:= koop[i].ItemIndex;
Exit;
end;
end;
end;
end;
end;
function TformBaliciListy.VratVyrFin: string;
begin
result:= VyrFin;
with Helios.OpenSQL('SELECT Cislo FROM ' + tblStrom + ' WHERE Cislo LIKE N''2%'' AND TypStrediska=0') do
if (RecordCount=1) then
result:= VarToStr(FieldValues(0));
end;
function TformBaliciListy.VratSumu(FieldName: string): Extended;
var bmk: TBookmark;
begin
result:= 0;
if (Assigned(grd.DataSource)) then
if (grd.DataSource.DataSet.Active) then
begin
bmk:= vTabBL.GetBookmark;
vTabBL.DisableControls;
try
vTabBL.First;
while not(vTabBL.Eof) do
begin
if (vTabBL.FindField(FieldName)<>nil) then
if not(vTabBL.FieldByName(FieldName).IsNull) then
result:= result + vTabBL.FieldByName(FieldName).AsExtended;
vTabBL.Next;
end;
finally
if (vTabBL.BookmarkValid (bmk)) then
vTabBL.GotoBookmark (bmk);
vTabBL.FreeBookmark (bmk);
vTabBL.EnableControls;
end;
end;
end;
procedure TformBaliciListy.vTabBLAfterPost (DataSet: TDataSet);
begin
statBar.Panels.Items[1].Text:= FormatFloat('#,##0.##', self.VratSumu('Mnoz'));
statBar.Panels.Items[3].Text:= FormatFloat('#,##0.###', self.VratSumu('CelkHmot'));
end;
procedure TformBaliciListy.NajdiZdrojCil;
begin
sklZdroj:= Helios.Sklad;
if (jsemLov) and (cbTypDokl.ItemIndex=3) then
sklZdroj:= VyrRekl;
if not(jsemLov) then
sklCil:= NajdiVKoop(3, 4, cbOrg.ItemIndex);
if (cbVratka.Checked) then
begin
sklZdroj:= NajdiVKoop(3, 4, cbOrg.ItemIndex);
sklCil:= VratVyrFin;
end;
if (cbTypDokl.Text='REKLAMACE') then
sklCil:= VyrRekl;
end;
function TformBaliciListy.JePrevodka: boolean;
var i: integer;
begin
result:= false;
for i:=0 to Length(koop)-1 do
if (koop[i].itemIndex=cbOrg.ItemIndex) then
if (koop[i].CisloOrg=0) then
result:= true;
jsemPrev:= result;
end;
function TformBaliciListy.JeLovato: boolean;
begin
result:= false;
if (Pos('it<69>lie',LowerCase(cbOrg.Text))>0) then
result:= true;
jsemLov:= result;
end;
procedure TformBaliciListy.FocusRegCis;
begin
selRegCis.SetFocus;
if Length(selRegCis.Text)=0 then
selRegCis.Text:= '%';
selRegCis.SelStart:= Length(selRegCis.Text);
selRegCis.SelLength:= 0;
end;
procedure TformBaliciListy.FocusKS;
begin
edtKS.SetFocus;
edtKS.SelStart:= 0;
edtKS.SelLength:= Length(edtKS.Text);
end;
procedure TformBaliciListy.NactiBalList;
var pol: IHeQuery;
lSQL, tStr: string;
iTmp: integer;
begin
if (idDZ>0) then
begin
cbOrg.Enabled:= false;
edtDat.Enabled:= false;
edit:= false;
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE Realizovano=1 AND ID=' + IntToStr(idDZ)) do
if RecordCount>0 then
begin
edit:= true;
btnAddPol.Enabled:= False;
pMDelPol.Enabled:= false;
Helios.Error('Doklad byl realizov<6F>n, nelze editovat.');
btnOK.Enabled:= false;
end;
{
with Helios.OpenSQL('SELECT IDHlavicky FROM TabDokZboDodatek WHERE DatumTisku IS NOT NULL AND IDHlavicky=' + IntToStr(idDZ)) do
if RecordCount>0 then
begin
edit:= true;
btnAddPol.Enabled:= False;
pMDelPol.Enabled:= false;
Helios.Error('Doklad byl vytisknut<75>, nelze editovat.');
btnOK.Enabled:= false;
end;
}
lSQL:= 'SELECT co.CisloOrg,dz.DatPorizeni,dz.MistoUrceni FROM ' + tblDZ + ' dz INNER JOIN ' + tblCOrg + ' co ON (dz.CisloOrg=co.CisloOrg)';
lSQL:= lSQL + ' WHERE dz.id=' + IntToStr(idDZ);
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
begin
tStr:= VarToStr(FieldValues(1));
tStr:= LeftStr(tStr,Pos(' ',tStr)-1);
edtDat.Date:= StrToDate(tStr);
iTmp:= StrToInt(VarToStr(FieldValues(0)));
if (iTmp=1) then
cbOrg.ItemIndex:= 0
else
cbOrg.ItemIndex:= NajdiVKoop(4,2,iTmp);
cbTypDokl.Enabled:= true;
cbTypDokl.ItemIndex:= 0;
if (cbOrg.ItemIndex=0) then
begin
with Helios.OpenSQL('SELECT _TypBalicihoListu FROM ' + tblDZe + ' WHERE id=' + IntToStr(idDZ)) do
if not VarIsNull(FieldValues(0)) then
cbTypDokl.ItemIndex:= StrToInt(VarToStr(FieldValues(0))) - 1;
end;
lSQL:= 'SELECT pz.id,pz.IDZboSklad,pz.SkupZbo,pz.RegCis,pz.Mnozstvi,kz.id,pz.NazevSozNa1,pz.Hmotnost FROM ' + tblPZ + ' pz INNER JOIN ';
lSQL:= lSQL + tblKZ + ' kz ON (pz.RegCis=kz.RegCis AND pz.SkupZbo=kz.SkupZbo) WHERE pz.IDDoklad=' + IntToStr(idDZ);
// lSQL:= lSQL + ' ORDER BY pz.SkupZbo,pz.RegCis';
lSQL:= lSQL + ' ORDER BY pz.id';
pol:= Helios.OpenSQL(lSQL);
if pol.RecordCount>0 then
begin
if not vTabBL.Active then
vTabBL.Open;
vTabBL.EmptyDataSet;
pol.First;
while not(pol.EOF) do
begin
vTabBL.Insert;
vTabBL.FieldByName('idPZ').AsString:= VarToStr(pol.FieldValues(0));
vTabBL.FieldByName('idSS').AsString:= VarToStr(pol.FieldValues(1));
vTabBL.FieldByName('idKZ').AsString:= VarToStr(pol.FieldValues(5));
vTabBL.FieldByName('SkupZbo').AsString:= VarToStr(pol.FieldValues(2));
vTabBL.FieldByName('RegCis').AsString:= VarToStr(pol.FieldValues(3));
vTabBL.FieldByName('Box').AsString:= VarToStr(pol.FieldValues(6));
vTabBL.FieldByName('Mnoz').AsFloat:= StrToFloat(VarToStr(pol.FieldValues(4)));
vTabBL.FieldByName('CelkHmot').AsFloat:= RoundToEx(StrToFloat(VarToStr(pol.FieldValues(7))),-3);
with Helios.OpenSQL('SELECT id FROM ' + tblBLPol + ' WHERE id=' + VarToStr(pol.FieldValues(0))) do
if RecordCount>0 then
vTabBL.FieldByName('IdBLPol').AsString:= VarToStr(FieldValues(0));
vTabBL.Post;
pol.Next;
end;
end;
end;
end;
end;
procedure TformBaliciListy.TestRC;
var lSQL, podm, skl: string;
begin
jsemLov:= JeLovato;
if (jsemLov) and (cbTypDokl.ItemIndex=2) then
if (selSZ.Text<>'MAT') then
begin
Helios.Error(#1'Je vybr<62>n BL druh MATERI<52>L, nelze zadat d<>lce/polosestavy.'#1);
selSZ.Text:= '';
selRegCis.Text:= '';
edtKS.Value:= 0;
idKZ:= 0;
sIdSS:= '';
Exit;
end;
if (jsemLov) and (cbTypDokl.ItemIndex<2) then
if (Pos('POL_',selRegCis.Text)>0) or (selSZ.Text='MAT') then
begin
Helios.Error(#1'Je vybr<62>n BL druh FIN<49>LY/NEBALEN<45>, nelze zadat polosestavy <20>i materi<72>l.'#1);
selSZ.Text:= '';
selRegCis.Text:= '';
edtKS.Value:= 0;
idKZ:= 0;
sIdSS:= '';
Exit;
end;
if (sIdSS<>'') and (not selVyber) then
begin
if (idKZ>0) then
begin
lSQL:= 'SELECT Hmotnost FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ);
with Helios.OpenSQL(lSQL) do
hmotZ:= StrToFloat(VarToStr(FieldValues(0)));
end;
lSQL:= 'SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(sklCil) + ' AND IDKmenZbozi=(';
lSQL:= lSQL + 'SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + sIdSS + ')';
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
if not(VarIsNull(FieldValues(0))) then
sIdSSCil:= VarToStr(FieldValues(0));
if (sIdSSCil='') and not(jsemLov) then
begin
Helios.Error(#1'Vybran<61> polo<6C>ka nen<65> ur<75>ena pro tohoto odb<64>ratele !'#1 + CRLF + 'Nejprve p<>i<EFBFBD>a<EFBFBD>te kartu na sklad.');
sIdSS:= '';
idKZ:= 0;
lblKarta.Caption:= '';
selSZ.Text:= '';
selRegCis.Text:= '%';
selRegCis.SetFocus;
Exit;
end;
end;
end;
procedure TformBaliciListy.grdDblClick (Sender: TObject);
var mnozZad, stav: Extended;
lSQL, box,skl: string;
chkStav: boolean;
clRow, clCol: integer;
fldName: string;
begin
// Z<>sk<73>n<EFBFBD> pozice kurzoru v gridu
clCol := grd.MouseCoord(Mouse.CursorPos.X - grd.ClientOrigin.X,
Mouse.CursorPos.Y - grd.ClientOrigin.Y).X;
clRow := grd.MouseCoord(Mouse.CursorPos.X - grd.ClientOrigin.X,
Mouse.CursorPos.Y - grd.ClientOrigin.Y).Y;
// Pokud je dvojklik na bu<62>ce, zjist<73>me jm<6A>no pole
if (clRow>0) and (clCol>0) then
begin
fldName:= grd.Columns[clCol-1].FieldName;
mnozZad:= vTabBL.FieldByName('Mnoz').AsFloat;
box:= vTabBL.FieldByName('Box').AsString;
if FormMnozstviBox(Helios, 'Zadejte opraven<65> mno<6E>stv<74>', mnozZad, box) then
begin
skl:= NajdiVKoop(3,4,cbOrg.ItemIndex);
if not(jsemLov) and (Helios.BrowseID=18) then
skl:= '200';
chkStav:= false;
if (Helios.BrowseID=18) then
chkStav:= true;
stav:= 0;
lSQL:= 'DECLARE @mn NUMERIC(19,6)' + CRLF + 'SET @mn=0' + CRlF;
lSQL:= lSQL + 'IF EXISTS(SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl) + ' AND IdKmenZbozi=';
lSQL:= lSQL + vTabBL.FieldByName('idKZ').AsString + ')' + CRLF + 'SELECT @Mn=Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl);
lSQL:= lSQL + ' AND IdKmenZbozi=' + vTabBL.FieldByName('idKZ').AsString + CRLF + 'SELECT @mn';
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
stav:= StrToFloat(VarToStr(FieldValues(0)));
if (stav<mnozZad) and not(jsemLov) and (chkStav) then
if Helios.YesNo(#1'Skladem je pouze ' + FloatToStr(stav) + ' kus<75>.' + CRLF + 'Chcete p<>ev<65>st JEN tento zbytek ?'#1,true) then
mnozZad:= stav;
vTabBL.Edit;
vTabBL.FieldByName('Mnoz').AsFloat:= mnozZad;
vTabBL.FieldByName('Box').AsString:= box;
vTabBL.Post;
end;
end;
end;
procedure TformBaliciListy.viewPolKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_DELETE) then
pMDelPolClick(Sender);
end;
procedure TformBaliciListy.selRegCisButtonClick(Sender: TObject);
var podm, skl,bidTit: string;
cBid: integer;
begin
selVyber:= true;
NajdiZdrojCil;
if not(jsemLov) then
begin
podm:= 'IdSklad=N' + QuotedStr(sklZdroj);
// if not(JeLovato) and (Helios.BrowseID=18) then
// podm:= podm + QuotedStr(VyrSkl)
// else
// podm:= podm + QuotedStr(skl);
podm:= podm + ' AND IdKmenZbozi IN (SELECT idKmenZbozi FROM ' + tblSS + ' WHERE IDSklad=N';
podm:= podm + QuotedStr(sklCil) + ') AND Mnozstvi>0';
cBid:= 235;
end;
if (jsemLov) and (Helios.BrowseID=27) then
begin
podm:= 'IdSklad=N' + QuotedStr(sklZdroj) + ' AND IdKmenZbozi IN (SELECT id FROM ' + tblKZ + ' WHERE Material=';
if (cbTypDokl.ItemIndex=2) or (cbTypDokl.ItemIndex=3) then
podm:= podm + '1'
else
podm:= podm + '0';
podm:= podm + ' AND LEFT(RegCis,4)<>N' + QuotedStr('POL_') + ')';
cBid:= 235;
end;
bidTit:= 'Stavy skladu "' + sklZdroj +'"';
if (selRegCis.Text<>'%') and (selRegCis.Text<>'') then
podm:= podm + ' AND IdKmenZbozi IN (SELECT id FROM ' + tblKZ + ' WHERE RegCis LIKE N' + QuotedStr(selRegCis.Text + '%') + ')';
podm:= podm + ' AND IdKmenZbozi NOT IN (SELECT id FROM ' + tblKZ + ' WHERE Blokovano=1)';
if Helios.Prenos(cBid,'id',oVar1,podm,bidTit,true) then
begin
idKZ:= 0;
if (cBid=100050) or (cBid=235) then
begin
sIdSS:= VarToStr(oVar1); // zdroj
podm:= 'SELECT kz.SkupZbo,kz.RegCis,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id)';
podm:= podm + ' WHERE ss.id=' + sIdSS;
with Helios.OpenSQL(podm) do
begin
selSZ.Text:= VarToStr(FieldValues(0));
selRegCis.Text:= VarToStr(FieldValues(1));
idKZ:= StrToInt(VarToStr(FieldValues(2)));
end;
end;
sIdSSCil:= '';
if (idKZ>0) then // and (skl<>VyrSkl)
with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + IntToStr(idKZ) + ' AND IDSklad=N' + QuotedStr(sklCil)) do
if (RecordCount=1) then
if not(VarIsNull(FieldValues(0))) then
sIdSSCil:= VarToStr(FieldValues(0));
if (sIdSSCil='') and not(jsemLov) then
begin
Helios.Error(#1'Tato polo<6C>ka nelze p<>ev<65>st na sklad ' + sklCil + #1 + CRLF + '(nen<65> vytvo<76>ena karta)');
Exit;
end;
if (cBid=bidKZ) then
begin
idKZ:= StrToInt(VarToStr(oVar1));
with Helios.OpenSQL('SELECT SkupZbo,RegCis FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do
begin
selSZ.Text:= VarToStr(FieldValues(0));
selRegCis.Text:= VarToStr(FieldValues(1));
end;
with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + IntToStr(idKZ) + ' AND IDSklad=N' + QuotedStr(skl)) do
if (RecordCount=1) then
sIdSS:= VarToStr(FieldValues(0));
end;
TestRC;
end;
{
if Helios.Prenos2(bidKZ,'SkupZbo','RegCis',oVar1,oVar2,podm,'Karty zbo<62><6F> a materi<72>lu',true,true,false,1) then
begin
selSZ.Text:= VarToStr(oVar1);
selSZ.Text:= StringReplace(selSZ.Text,'N''','',[rfReplaceAll]);
selSZ.Text:= StringReplace(selSZ.Text,'''','',[rfReplaceAll]);
selRegCis.Text:= VarToStr(oVar2);
selRegCis.Text:= StringReplace(selRegCis.Text,'N''','',[rfReplaceAll]);
if Length(selRegCis.Text)=2 then
selRegCis.Text:= selRegCis.Text + 'N';
selRegCis.Text:= StringReplace(selRegCis.Text,'''','',[rfReplaceAll]);
end;
}
end;
procedure TformBaliciListy.selRegCisExit(Sender: TObject);
var lSQL, podm: string;
wild: boolean;
begin
jsemLov:= JeLovato;
jsemPrev:= JePrevodka;
if (selRegCis.Text<>'') and (selRegCis.Text<>'%') and not(selVyber) then
// KBN4L11P, %BGX5000 - final
// 4RF915 - nebalane
begin
NajdiZdrojCil;
sIdSS:= '';
sIdSSCil:= '';
if (selRegCis.Text[1]='%') then
begin
wild:= true;
selRegCis.Text:= MidStr(selRegCis.Text,2,255);
end;
lSQL:= 'SELECT ss.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id)';
lSQL:= lSQL + ' INNER JOIN ' + tblKZe + ' kze ON (kze.id=kz.id)';
lSQL:= lSQL + ' WHERE ss.IDSklad=N' + QuotedStr(sklZdroj) + ' AND kz.RegCis LIKE ' + QuotedStr('%' + selRegCis.Text + '%');
lSQL:= lSQL + ' AND kz.SkupZbo<>N' + QuotedStr('M00') + ' AND kz.SkupZbo IN (SELECT sz.SkupZbo FROM ';
lSQL:= lSQL + tblSZ + ' sz LEFT JOIN ' + tblSZe + ' sze ON (sz.id=sze.id) WHERE sze._JeVyroba=1)';
// finaly
if (cbTypDokl.ItemIndex=0) and (jsemLov) then
lSQL:= lSQL + ' AND kze._TypKartyVyroba IN (0,2)';
// nebalene
if (cbTypDokl.ItemIndex=1) and (jsemLov) then
lSQL:= lSQL + ' AND kze._TypKartyVyroba IN (1,2)';
{
with Helios.OpenSQL(lSQL + ' AND ss.Blokovano=1') do
begin
if (RecordCount>0) then
begin
Helios.Error(#1'N<>kter<65> odpov<6F>daj<61>c<EFBFBD> karta je na zdrojov<6F>m sklad<61> (' + sklZdroj + ') blokov<6F>na, pokud chcete' + CRLF + 'p<>ev<65>st blokovanou kartu, p<>evod se mus<75> ud<75>lat standardn<64>m editorem.'#1);
selRegCis.Text:= '%' + selRegCis.Text;
selRegCis.SetFocus;
idKZ:= 0;
sIdSS:= '';
sIdSSCil:= '';
end;
end;
}
with Helios.OpenSQL(lSQL) do
begin
case RecordCount of
0: begin
Helios.Error(#1'Nebyla nalezena <20><>dn<64> odpov<6F>daj<61>c<EFBFBD> karta zbo<62><6F>.'#1 + CRLF + 'Zkontrolujte typ na ext.informac<61>ch kmenov<6F> karty (Fin<69>l/Nebalen<65> apod.)');
selRegCis.Text:= '%';
selRegCis.SetFocus;
idKZ:= 0;
sIdSS:= '';
sIdSSCil:= '';
Exit;
end;
1: begin
sIdSS:= VarToStr(FieldValues(0)); // idSS zdroj
with Helios.OpenSQL('SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + sIdSS) do
idKZ:= StrToInt(VarToStr(FieldValues(0)));
end;
else
begin
podm:= 'TabStavSkladu.IDSklad=N' + QuotedStr(sklZdroj) + ' AND TabStavSkladu.idKmenZbozi IN (SELECT id FROM ' + tblKZ;
podm:= podm + ' kz WHERE ';
if (jsemLov) and (cbTypDokl.ItemIndex<2) then
podm:= podm + 'SkupZbo<>N' + QuotedStr('MAT') + ' AND LEFT(RegCis,4)<>N' + QuotedStr('POL_');
if (Pos('MAT', podm))>0 then
podm:= podm + ' AND ';
podm:= podm + 'RegCis LIKE N' + QuotedStr(IfThen(selRegCis.Text[1]='%','','%') + selRegCis.Text + '%');
if (jsemLov) and (cbTypDokl.ItemIndex=2) then
podm:= podm + ' AND SkupZbo=N' + QuotedStr('MAT');
podm:= podm + ' AND Blokovano=0 AND SkupZbo IN (SELECT SkupZbo FROM dbo.TabSkupinyZbozi sz LEFT JOIN dbo.TabSkupinyZbozi_EXT';
podm:= podm + ' sze ON (sz.id=sze.id) WHERE sze._JeVyroba=1 AND RIGHT(SkupZbo,1)<>N''V''))';
if Helios.Prenos(235,'id',oVar1,podm,'Stav skladu ' + sklZdroj,true) then
begin
sIdSS:= VarToStr(oVar1);
with Helios.OpenSQL('SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + sIdSS) do
idKZ:= StrToInt(VarToStr(FieldValues(0)));
end
else
sIdSS:= '';
end;
end;
end;
if (sIdSS<>'') then
begin
lSQL:= 'SELECT kz.SkupZbo,kz.RegCis,kz.Nazev1,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id)';
lSQL:= lSQL + ' WHERE ss.id=' + sIdSS;
with Helios.OpenSQL(lSQL) do
begin
selSZ.Text:= VarToStr(FieldValues(0));
selRegCis.Text:= VarToStr(FieldValues(1));
lblKarta.Caption:= VarToStr(FieldValues(2));
idKZ:= StrToInt(VarToStr(FieldValues(3)));
end;
sIdSSCil:= '';
end;
end;
selVyber:= false;
if (sIdSS<>'') and (idKZ>0) then
begin
TestRC;
if (selRegCis.Text<>'%') then
FocusKS;
end;
end;
procedure TformBaliciListy.selRegCisKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key=VK_ESCAPE then
selRegCis.Text:= '';
if (Key in [VK_RETURN,VK_TAB]) and (selRegCis.Text<>'') and (selRegCis.Text<>'%') then
begin
selRegCisButtonClick(Sender);
FocusKS;
end;
end;
procedure TformBaliciListy.selSZButtonClick(Sender: TObject);
var podm: string;
begin
podm:= 'TabSkupinyZbozi.id IN (SELECT id FROM ' + tblSZe + ' WHERE _JeVyroba=1)';
if (JeLovato) and (cbTypDokl.ItemIndex=2) then
podm:= 'TabSkupinyZbozi.SkupZbo=N' + QuotedStr('MAT');
if Helios.Prenos(bidSZ,'SkupZbo',oVar1,podm,'Skupiny zbo<62><6F>',true) then
selSZ.Text:= VarToStr(oVar1);
selSZ.Text:= Trim(selSZ.Text);
end;
procedure TformBaliciListy.selSZKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
selSZ.Text:= Trim(selSZ.Text);
if (Key in [VK_RETURN,VK_TAB]) and (selSZ.Text<>'') then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblSZ + ' WHERE SkupZbo=N' + QuotedStr(selSZ.Text)) do
if RecordCount=0 then
begin
Helios.Error(#1'Zadan<61> skupina zbo<62><6F> neexistuje.'#1);
selSZ.Text:= '';
end;
end;
end;
procedure TformBaliciListy.pmDelPolClick(Sender: TObject);
var sTmp: string;
begin
if not edit then
begin
if vTabBL.RecordCount=0 then
Exit;
sTmp:= vTabBL.FieldByName('SkupZbo').AsString + ' : ' + vTabBL.FieldByName('RegCis').AsString;
if Helios.YesNo('Opravdu zru<72>it polo<6C>ku (' + sTmp + ') ?',False) then
begin
Clipboard.AsText:= vTabBL.FieldByName('Mnoz').AsString;
vTabBL.Delete;
FocusRegCis;
end;
end
else
Helios.Error('Na realizovan<61>m dokladu nelze mazat polo<6C>ky.');
end;
procedure TformBaliciListy.pmImpReaderClick(Sender: TObject);
var fIn: TStringStream;
idx,pocet: Integer;
fName: string;
radky: TStringList;
begin
if OtevriSoubor('Soubor importovan<61>ch dat','Textov<6F> soubor','*.txt','',fName) then
begin
fIn:= TStringStream.Create;
try
fIn.LoadFromFile(fName);
pocet:= Length(fIn.DataString)-Length(StringReplace(fIn.DataString,#13,'',[rfReplaceAll]));
finally
fIn.Free;
end;
end
else
Helios.Error(#1'Nebyl vybr<62>n soubor pro import...'#1);
end;
procedure TformBaliciListy.VytvorTabulkyAGrid;
var idx: integer;
begin
if not(vTabBL.Active) then
vTabBL.Open;
{
with vTabBL do
begin
with FieldDefs do
begin
Clear;
Add('idKZ', ftInteger, 0, true);
Add('idSS', ftInteger, 0, false);
Add('idPZ', ftInteger, 0, false);
Add('SkupZbo', ftString, 3, true);
Add('RegCis', ftString, 20, true);
Add('Box', ftString, 20, false);
Add('Mnoz', ftFloat, 0, true);
Add('CelkHmot', ftFloat, 0, false);
Add('Prikaz', ftInteger, 0, false);
Add('IdBLPol', ftInteger, 0, false);
Add('IDSklad', ftString, 30, false);
Add('idSSCil', ftInteger, 0, false);
Add('IDSkladCil', ftString, 30, false);
end;
end;
vTabBL.Open;
}
end;
procedure TformBaliciListy.btnAddPolClick(Sender: TObject);
var lSQL, skl: string;
stav: Extended;
chkStav: Boolean;
begin
jsemLov:= JeLovato;
if (idKZ>0) and (sIdSS<>'') and ((sIdSSCil<>'') or (jsemLov)) then
begin
chkStav:= false;
if (Helios.BrowseID=18) then
chkStav:= true;
stav:= 0;
// skl:= VyrSkl;
// if (cbVratka.Checked) then
// skl:= NajdiVKoop(3,4,cbOrg.ItemIndex);
{
lSQL:= 'DECLARE @mn NUMERIC(19,6)' + CRLF + 'SET @mn=0' + CRLF;
lSQL:= lSQL + 'IF EXISTS(SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl) + ' AND IdKmenZbozi=';
lSQL:= lSQL + IntToStr(idKZ) + ')' + CRLF + 'SELECT @mn=Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl);
lSQL:= lSQL + ' AND IdKmenZbozi=' + IntToStr(idKZ) + CRLF + 'SELECT @mn';
}
lSQL:= 'DECLARE @mn NUMERIC(19,6)' + CRLF + 'DECLARE @skl NVARCHAR(30)' + CRLF + 'SET @mn=0' + CRLF + 'SET @skl=NULL' + CRLF;
lSQL:= lSQL + 'SELECT @mn=Mnozstvi-MnozstviKVydeji,@skl=IDSklad FROM ' + tblSS + ' WHERE id=' + sIdSS + CRLF + 'SELECT @mn,@skl';
with Helios.OpenSQL(lSQL) do
stav:= StrToFloat(VarToStr(FieldValues(0)));
if (stav<edtKS.Value) and not(jsemLov) and (chkStav) then
if Helios.YesNo(#1'Po realizaci v<>dej<65> bude skladem pouze ' + FormatFloat('##,##0.###',stav) + ' kus<75>.' + CRLF + 'Chcete p<>ev<65>st JEN tento ZBYTEK ?'#1, true) then
edtKS.Value:= stav
else
Exit;
if (edtKS.Value>0) then
begin
edtBox.Text:= Trim(edtBox.Text);
vTabBL.Append;
vTabBL.FieldByName('idKZ').AsInteger:= idKZ;
vTabBL.FieldByName('idSS').AsString:= sIdSS;
vTabBL.FieldByName('Mnoz').AsFloat:= edtKS.Value;
vTabBL.FieldByName('SkupZbo').AsString:= selSZ.Text;
vTabBL.FieldByName('RegCis').AsString:= selRegCis.Text;
vTabBL.FieldByName('Box').AsString:= edtBox.Text;
vTabBL.FieldByName('CelkHmot').AsFloat:= RoundToEX(hmotC,-3);
vTabBL.FieldByName('IDSklad').AsString:= sklZdroj;
vTabBL.FieldByName('IDSkladCil').AsString:= sklCil;
vTabBL.FieldByName('IdSSCil').AsString:= sIdSSCil;
lSQL:= 'INSERT ' + tblBLPol + ' (IdDoklad,IdStavSkladu,IdStavSkladuCil,Mnozstvi,Box) VALUES (';
lSQL:= lSQL + IntToStr(idBL) + ',' + sIdSS + ',';
if (sIdSSCil='') then
lSQL:= lSQL + '0'
else
lSQL:= lSQL + sIdSSCil;
lSQL:= lSQL + ',' + StringReplace(FloatToStr(edtKS.Value),',','.',[rfReplaceAll]) + ',N';
lSQL:= lSQL + QuotedStr(edtBox.Text) + ')' + CRLF + 'SELECT SCOPE_IDENTITY()';
try
with Helios.OpenSQL(lSQL) do
vTabBL.FieldByName('IdBLPol').AsString:= VarToStr(FieldValues(0));
except
end;
vTabBL.Post;
selSZ.Text:= '';
selRegCis.Text:= '';
edtKS.Value:= 0;
edtBox.Text:= '0';
idKZ:= 0;
sIdSS:= '';
sIdSSCil:= '';
lblKarta.Caption:= '';
FocusRegCis;
end;
end
else
Helios.Error(#1'Nen<65> vybran<61> polo<6C>ka.'#1);
end;
procedure TformBaliciListy.btnCancelClick(Sender: TObject);
begin
if vTabBL.RecordCount=0 then
Helios.ExecSQL('DELETE FROM ' + tblBL + ' WHERE id=' + IntToStr(idBL));
Close;
end;
procedure TformBaliciListy.btnOKClick(Sender: TObject);
const rPrev = '250';
var idx, idKZ, idPZ, idSS, prikaz, idDZ2, idDZv, idDZp, idKJ: integer;
lSQL, wCond: string;
kurz, jcena, qty, hmot: Extended;
mena, mj, cOrg, cBL, rDoklBL, cSkl, dt, idObd, cZak: string;
idcka: string;
jeMat, realVyd, realPrij: boolean;
oldSkl, sklPrev: string;
begin
ReseedTable(Helios,tblDZ);
ReseedTable(Helios,tblPZ);
ReseedTable(Helios,tblBL);
ReseedTable(Helios,tblBLPol);
// ReseedTable(Helios,'[dbo].[_TamTempPolozkyBL]');
idObd:= '';
idDZv:= 0; // vydejka
idDZp:= 0; // prijemka
idKJ:= 0;
jsemLov:= JeLovato;
jsemPrev:= JePrevodka;
lSQL:= 'DECLARE @obd INT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateToStr(edtDat.Date)) + ',104)';
lSQL:= lSQL + CRLF + 'EXEC @obd=dbo.hp_GetObdobiDleDatumu @dt,0,null,null,0,0' + CRLF + 'SELECT @obd';
with Helios.OpenSQL(lSQL) do
idObd:= Trim(VarToStr(FieldValues(0)));
if (idObd='') then
begin
Helios.Error(#1'Podle zadan<61>ho data nebylo nalezeno Obdob<6F>, zkontrolujte nastaven<65> Heliosu.'#1);
end;
lSQL:= 'DELETE FROM dbo._TabStavPrevod WHERE DATEDIFF(month, DatPorizeni, GETDATE())>1';
Helios.ExecSQL(lSQL);
oldSkl:= Helios.Sklad;
// balici listy
cBL:= '11'; // druh pohybu Nabidkove sestavy
rDoklBL:= '200'; // rada dokladu
lSQL:= BoolToStr(jsemLov);
if not(jsemLov) then
begin
cBL:= '4'; // vydej v evid.cene
rDoklBL:= '450'; // vydejka-prevodka
end;
if (vTabBL.RecordCount>0) then
begin
// smaze z dokladu polozky smazane skladnikem v BL
idcka:= helUtils.IDckaTabulky(vTabBL,'idPZ');
if (idcka<>'') then
try
Helios.ExecSQL('DELETE FROM ' + tblPZ + ' WHERE idDoklad=' + IntToStr(idDZ) + ' AND id NOT IN (' + idcka + ')');
except on E:Exception do
Helios.Error(#1'Z Balic<69>ho listu nelze smazat "star<61>" <20><>dek.'#1 + CRLF + E.Message);
end;
if (jsemLov) then
cOrg:= '1' // Lovato IT
else
cOrg:= NajdiVKoop(2, 4, cbOrg.ItemIndex);
if (jsemPrev) then
cOrg:= '0'; // pri prevodce nastav vlastni organizaci
lSQL:= 'UPDATE ' + tblBL + ' SET CisloOrg=' + cOrg + ',Vratka=';
if cbVratka.Checked then
lSQL:= lSQL + '1'
else
lSQL:= lSQL + '0';
if (jsemLov) then
begin
lSQL:= lSQL + ',MistoUrceni=';
if (cbTypDokl.ItemIndex>0) then
begin lSQL:= lSQL + cOrg end
else
begin lSQL:= lSQL + cOrgFinaly; end;
end;
if (jsemLov) then
lSQL:= lSQL + ',TypBL=' + IntToStr(cbTypDokl.ItemIndex+1);
lSQL:= lSQL + ' WHERE id=' + IntToStr(idBL);
try
Helios.ExecSQL(lSQL);
except
end;
// pri reklamaci udelej zakazku
cZak:= '';
if (cbTypDokl.Text='REKLAMACE') then
begin
dt:= '200'; // rada zakazek Vyroba-Reklamace
lSQL:= 'SELECT REPLICATE(N''0'', (SELECT CisloDelka FROM dbo.TabZakazkaRada WHERE Rada=N' + QuotedStr(dt);
lSQL:= lSQL + ') - LEN(CONVERT(nvarchar, CONVERT(int, ( SELECT ISNULL';
lSQL:= lSQL + ' ( (SELECT MAX(CisloZakazky) FROM dbo.TabZakazka WHERE Rada=N' + QuotedStr(dt) + ') ,0))))))';
lSQL:= lSQL + ' + CONVERT(NVARCHAR,MAX(CONVERT(int,z.CisloZakazky))+1) FROM TabZakazka z WHERE z.Rada=N' + QuotedStr(dt);
with Helios.OpenSQL(lSQL) do
cZak:= VarToStr(FieldValues(0));
lSQL:= 'INSERT ' + tblZak + ' (Rada,CisloZakazky,Nazev) VALUES (N' + QuotedStr(dt) + ',N' + QuotedStr(cZak) + ',N';
dt:= 'Reklamace > ';
case StrToInt(cOrg) of
11: dt:= dt + 'VDST';
17: dt:= dt + 'Pikl';
25: dt:= dt + 'PCO';
end;
lSQL:= lSQL + QuotedStr(dt) + ')';
try
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Nelze ulo<6C>it <20><>slo zak<61>zky pro reklamaci.'#1 + CRLF + E.Message);
end;
end;
{
vTabBL.First;
while not vTabBL.Eof do
begin
lSQL:= 'INSERT [dbo].[_TabTempPolozkyBL] (SkupZbo,RegCis,Mnoz,Box,CisloOrg) VALUES (N';
lSQL:= lSQL + QuotedStr(vTabBL.FieldByName('SkupZbo').AsString) + ',N' + QuotedStr(vTabBL.FieldByName('RegCis').AsString);
lSQL:= lSQL + ',' + StringReplace(vTabBL.FieldByName('Mnoz').AsString,',','.',[rfReplaceAll]) + ',N';
lSQL:= lSQL + QuotedStr(vTabBL.FieldByName('Box').AsString) + ',' + cOrg + ')';
try
Helios.ExecSQL(lSQL);
except
end;
vTabBL.Next;
end;
sklPrev:= NajdiVKoop(3,4,cbOrg.ItemIndex);
if (cbVratka.Checked) and not(jeLovato) then
begin
Helios.SetSklad(sklPrev);
sklPrev:= '200';
if (cbTypDokl.ItemIndex=1) and (cbReklamace.Checked) then
if Length(sklPrev)=3 then
begin sklPrev:= sklPrev + '00001' end
else
begin sklPrev:= sklPrev + '001' end
end;
}
dt:= DateTimeToStr(Now);
if (edtDat.Text<>'') then
dt:= DateToStr(edtDat.Date) + ' ' + TimeToStr(Now);
kurz:= 1;
mena:= 'CZK';
if (jsemLov) then
begin
mena:= 'EUR';
lSQL:= 'DECLARE @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)';
lSQL:= lSQL + CRLF + 'SELECT kurz FROM ' + tblKList + ' WHERE Datum<=@dt AND Mena=N' + QuotedStr(mena) + ' ORDER BY Datum DESC';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
kurz:= StrToFloat(VarToStr(FieldValues(0)));
end;
if (idDZ=0) then
begin
lSQL:= 'DECLARE @dt DATETIME,@Ident INT';
lSQL:= lSQL + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)';
lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @Ident OUT,@Sklad=N';
lSQL:= lSQL + QuotedStr(sklZdroj)+',@DruhPohybu=' + cBL + ',@RadaDokladu=N' + QuotedStr(rDoklBL);
lSQL:= lSQL +',@Insert=1,@PC=NULL,@CisloOrg=' + cOrg + ',@Mena=N' + QuotedStr(mena) + ',@DatumPorizeni=@dt';
lSQL:= lSQL + CRLF + 'SELECT @Ident';
idDZ:= 0;
try
with Helios.OpenSQL(lSQL) do
if VarIsNull(FieldValues(0)) then
idDZ:= 0
else
if not TryStrToInt(VarToStr(FieldValues(0)), idDZ) then
idDZ:= 0;
if (idDZ>0) and (cOrg<>'') and not(jeLovato) then
begin
idDZv:= idDZ;
lSQL:= 'UPDATE ' + tblDZ + ' SET Mena=' + QuotedStr('CZK') + ',IdSkladPrevodu=N' + QuotedStr(sklCil);
lSQL:= lSQL + ',BlokovaniEditoru=' + IntToStr(Helios.UserId) + ',TypPrevodky=N' + QuotedStr(rPrev);
lSQL:= lSQL + ',Text3=CONVERT(ntext,N' + QuotedStr('plgLOVATO') + '),DruhPohybuPrevod=0 WHERE id=' + IntToStr(idDZ);
if (cZak<>'') then
lSQL:= lSQL + CRLF + 'UPDATE ' + tblDZ + ' SET CisloZakazky=N' + QuotedStr(cZak) + ' WHERE id=' + IntToStr(idDZ);
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
begin
Helios.Error(#1'Nelze ulo<6C>it nov<6F> Bal<61>c<EFBFBD> list/V<>dejku/Vratku.'#1 + CRLF + E.Message);
idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze ulo<6C>it nov<6F> Bal<61>c<EFBFBD> list/V<>dejku/Vratku');
if idKJ>0 then
Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N'
+ QuotedStr('Podrobnosti.baliciListy') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')');
idKJ:= 0;
end;
end;
end;
if (idDZ>0) then
begin
if (jsemLov) then
begin
lSQL:= 'UPDATE ' + tblDZ + ' SET MistoUrceni=';
if (cOrg='1') then
if (cbTypDokl.ItemIndex>0) then
begin lSQL:= lSQL + cOrg end
else
begin lSQL:= lSQL + cOrgFinaly; end;
lSQL:= lSQL + ' WHERE id=' + IntToStr(idDZ);
Helios.ExecSQL(lSQL);
lSQL:= 'IF NOT EXISTS(SELECT id FROM ' + tblDZe + ' WHERE id=' + IntToStr(idDZ) + ')' + CRLF;
lSQL:= lSQL + 'INSERT ' + tblDZe + ' (id) VALUES (' + IntToStr(idDZ) + ')' + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblDZe + ' SET _TypBalicihoListu=' + IntToStr(cbTypDokl.ItemIndex+1);
lSQL:= lSQL + ' WHERE id=' + IntToStr(idDZ);
Helios.ExecSQL(lSQL);
end;
with Helios.OpenSQL('SELECT Mena FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ)) do
begin
if not VarIsNull(FieldValues(0)) then
mena:= VarToStr(FieldValues(0));
// if not VarIsNull(FieldValues(1)) then
// kurz:= StrToFloat(VarToStr(FieldValues(1)));
end;
vTabBL.DisableControls;
vTabBL.First;
while not(vTabBL.EOF) do
begin
qty:= vTabBL.FieldByName('Mnoz').AsFloat;
idKZ:= vTabBL.FieldByName('idKZ').AsInteger;
idSS:= vTabBL.FieldByName('idSS').AsInteger;
idPZ:= vTabBL.FieldByName('idPZ').AsInteger;
hmot:= vTabBL.FieldByName('CelkHmot').AsFloat;
hmot:= RoundToEx(hmot/qty,-3);
prikaz:= vTabBL.FieldByName('Prikaz').AsInteger;
jcena:= 0.1;
mj:= 'ks';
if (idKZ<>0) and (idPZ=0) then
with Helios.OpenSQL('SELECT MJevidence,Hmotnost FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do
begin
mj:= VarToStr(FieldValues(0));
if VarIsNull(FieldValues(1)) then
Helios.ExecSQL('UPDATE ' + tblKZ + ' SET Hmotnost=0 WHERE id=' + IntToStr(idKZ))
else
hmot:= StrToFloat(VarToStr(FieldValues(1)));
end;
if (idSS=0) and (idKZ<>0) and (idPZ=0) then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND IDKMenZbozi=' + IntToStr(idKZ)) do
if RecordCount>0 then
idSS:= StrToInt(VarToStr(FieldValues(0)))
else
begin
lSQL:= 'INSERT ' + tblSS + ' (IDSklad,IDKmenZbozi) VALUES (N' + QuotedStr(Helios.Sklad);
lSQL:= lSQL + ',' + IntToStr(idKZ) + ')' + CRLF + 'SELECT SCOPE_IDENTITY()';
with Helios.OpenSQL(lSQL) do
idSS:= StrToInt(VarToStr(FieldValues(0)));
end;
end;
if (idSS>0) and (qty<>0) then
begin
// data pro kontrolu prevodu
lSQL:= 'INSERT dbo._TabStavPrevod(IDDoklad,IDZboSklad,Stav,Mnozstvi) VALUES (';
lSQL:= lSQL + IntToStr(idDZ) + ',' + IntToStR(idSS) + ',';
with Helios.OpenSQL('SELECT Mnozstvi FROM ' + tblSS + ' WHERE id=' + IntToStr(idSS)) do
lSQL:= lSQL + StringReplace(VarToStr(FieldValues(0)),',','.',[rfReplaceAll]) + ',';
lSQL:= lSQL + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]) + ')';
Helios.ExecSQL(lSQL);
with Helios.OpenSQL('SELECT EcJc FROM ' + tblJC + ' WHERE IDStavSkladu=' + IntToStr(idSS)) do
if (RecordCount>0) then
jcena:= StrToFloat(VarToStr(FieldValues(0)))
else
jcena:= 0.1;
jeMat:= false;
if (idKZ>0) then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblKZ + ' WHERE Material=1 AND id=' + IntToStr(idKZ)) do
if (RecordCount>0) then
jeMat:= true;
end;
// kalkulacni cena materialu na balici listy i vydejky kooperantum
// !! kalk.cena je v EURech !!
if (jeMat) then
begin
with Helios.OpenSQL('SELECT TOP(1) kc.Cena FROM ' + tblKalkCe + ' kc LEFT JOIN ' + tblCZmen + ' cz ON (kc.ZmenaOd=cz.id) WHERE kc.IDKmenZbozi=' + IntToStr(idKZ) + ' ORDER BY cz.datum DESC') do
if (RecordCount=1) then
jcena:= StrToFloat(VarToStr(FieldValues(0)));
end
else
begin
with Helios.OpenSQL('SELECT TOP(1) zk.Mat FROM ' + tblZaklKalk + ' zk LEFT JOIN ' + tblCZmen +' cz ON (zk.ZmenaOd=cz.id) WHERE zk.dilec=' + IntToStr(idKZ) + ' ORDER BY cz.Datum DESC') do
if (RecordCount=1) then
jcena:= StrToFloat(VarToStr(FieldValues(0)));
end;
jCena:= RoundToEx(jcena*Kurz,-4); // cena * Kurz
if (idPZ=0) then
begin
lSQL:= 'DECLARE @Ident INT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)';
lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @Ident OUT,@IDDoklad=';
lSQL:= lSQL + IntToStr(idDZ) + ',@DruhPohybu=' + cBL + ',@CisloOrg=' + cOrg + ',@IDZboSklad=' + IntToStr(idSS);
lSQL:= lSQL + ',@SazbaDPH=null,@Mnozstvi=' + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',@MJ=N' + QuotedStr(mj) + ',@JCbezDaniKC=' + StringReplace(FloatToStr(jcena),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',@DatPorizeni=@dt,@VstupniCena=';
if (cOrg='1') then
lSQL:= lSQL + '4,@Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll])
else
lSQL:= lSQL + '0,@Kurz=1';
lSQL:= lSQL + ',@PovolitDuplicitu=1,@SazbaSD=0,@ZakazanoDPH=0,@KurzEuro=0,@Mena=N' + QuotedStr(mena);
lSQL:= lSQL + ',@JednotkaMeny=1,@Selectem=0' + CRLF + 'SELECT @Ident';
end
else
begin
lSQL:= 'UPDATE ' + tblPZ + ' SET Mnozstvi=' + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',VstupniCena=';
if cOrg='1' then
lSQL:= lSQL + '4,Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll])
else
lSQL:= lSQL + '0,Kurz=1';
lSQL:= lSQL + ',StredNaklad=N' + QuotedStr(VyrSkl) + ' WHERE id=' + IntToStr(idPZ);
end;
try
with Helios.OpenSQL(lSQL) do
if (idPZ=0) then
if (RecordCount>0) then
if not VarIsNull(FieldValues(0)) then
if not TryStrToInt(VarToStr(FieldValues(0)),idPZ) then
idPZ:= 0;
except on E:Exception do
Helios.Error(#1'Nelze ulo<6C>it polo<6C>ku do Bal<61>c<EFBFBD>ho listu/V<>dejky !'#1 + CRLF + lSQL);
end;
if (idPZ>0) then
begin
if (vTabBL.FieldByName('idBLPol').AsString<>'') then
begin
lSQL:= 'UPDATE ' + tblBLPol + ' SET IdPolozkaOZ=' + IntToStr(idPZ) + ' WHERE id=';
lSQL:= lSQL + vTabBL.FieldByName('idBLPol').AsString;
Helios.ExecSQL(lSQL);
end;
lSQL:= 'UPDATE ' + tblPZ + ' SET NazevSozNa1=N' + QuotedStr(IfThen(jsemPrev, '', vTabBL.FieldByName('Box').AsString));
lSQL:= lSQL + ',JCbezDaniKC=Kurz*' + StringReplace(FloatToStr(jcena),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',CCbezDaniKc=JCbezDaniKC*Mnozstvi,JCbezDaniVal=';
lSQL:= lSQL + StringReplace(FloatToStr(jcena),',','.',[rfReplaceAll]) + ',CCbezDaniVal=';
lSQL:= lSQL + 'JCbezDaniVal*Mnozstvi WHERE id=' + IntToStr(idPZ);
Helios.ExecSQL(lSQL);
if (prikaz>0) then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblPZe + ' WHERE id=' + IntToStr(idPZ)) do
if RecordCount=0 then
lSQL:= 'INSERT ' + tblPZe + ' (id,_VyrobniPrikaz) VALUES (' + IntToStr(idPZ) + ',' + IntToStr(prikaz) + ')'
else
lSQL:= 'UPDATE ' + tblPZe + ' SET _VyrobniPrikaz=' + IntToStr(prikaz) + ' WHERE id=' + IntToStr(idPZ);
Helios.ExecSQL(lSQL);
end;
end;
vTabBL.Next;
end;
end;
vTabBL.EnableControls;
Helios.ExecSQL('UPDATE ' + tblBL + ' SET IdDokladOZ=' + IntToStr(idDZ) + ' WHERE id=' + IntToStr(idBL));
Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyVydejky @idDZ=' + IntToStr(idDZ));
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1');
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ));
if (cZak<>'') then
Helios.ExecSQL('UPDATE ' + tblPZ + ' SET CisloZakazky=N' + QuotedStr(cZak) + ' WHERE idDoklad=' + IntToStr(idDZ));
if not(jsemLov) and (Helios.BrowseID=bidDZPrij) then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE NavaznyDoklad IS NOT NULL AND id=' + IntToStR(idDZ)) do
if (RecordCount=0) then
begin
realVyd:= false;
// vytvor hlavicku nasledneho dokladu
if (rDoklBL='450') then
begin
rDoklBL:= '250';
cBL:= '0';
end;
// wCond:= 'IDSklad=N' + QuotedStr(sklCil);
// wCond:= wCond + ' AND Obdobi=' + idObd;
// wCond:= wCond + ' AND DruhPohybuZbo=' + cBL + ' AND RadaDokladu=N' + QuotedStr(rDoklBL);
// idDZ2:= helUtils.NajdiPrvniVolny(Helios,tblDZ,'PoradoveCislo',cBL,rDoklBL,idObd,wCond);
lSQL:= 'DECLARE @dt DATETIME,@Ident INT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)';
lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @Ident OUT,@Sklad=N' + QuotedStr(sklCil);
lSQL:= lSQL + ',@DruhPohybu=' + cBL + ',@RadaDokladu=N' + QuotedStr(rDoklBL);
lSQL:= lSQL + ',@Insert=1,@PC=NULL,@CisloOrg=';
lSQL:= lSQL + cOrg + ',@Mena=N' + QuotedStr(mena) + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @Ident';
idDZ2:= 0;
try
with Helios.OpenSQL(lSQL) do
if VarIsNull(FieldValues(0)) then
idDZ2:= 0
else
if not TryStrToInt(VarToStr(FieldValues(0)), idDZ2) then
idDZ2:= 0;
except on E:Exception do
Helios.Error(#1'Nelze vytvo<76>it n<>sledn<64> doklad.'#1 + CRLF + E.Message + errPlg);
end;
end;
if (idDZ2>0) then
idDZp:= idDZ2;
if (cZak<>'') and (idDZp>0) then
begin
lSQL:= 'UPDATE ' + tblDZ + ' SET CisloZakazky=N' + QuotedStr(cZak) + ' WHERE id=' + IntToStr(idDZp);
try
Helios.ExecSQL(lSQL);
except
end;
end;
// if cbVratka.Checked then
try
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka';
lSQL:= lSQL + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZ2) + ',@IDDokladSrc=' + IntToStr(idDZ);
lSQL:= lSQL + ',@CisloOrgCil=' + cOrg + ',@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK');
lSQL:= lSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=N' + QuotedStr(VyrSkl) + ',@StredVynosCil=null';
lSQL:= lSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('P<>evod materi<72>lu');
lSQL:= lSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0,@VytvaretPolozkovouVazbu=1';
Helios.ExecSQL(lSQL);
except on E:Exception do
begin
Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE id=' + IntToStR(idDZp));
// idDZp:= 0;
Helios.Error(#1'Chyba p<>i generov<6F>n<EFBFBD> n<>vazn<7A>ho dokladu.'#1 + CRLF + E.Message + errPlg);
end;
end;
try
lSQL:= 'EXEC dbo.ep_PZ_KopirujCenyDleOldPolozky @IdDokladNew=' + IntTOStr(idDZ2);
Helios.ExecSQL(lSQL);
except on E:Exception do
begin
Helios.Error(#1'Chyba p<>i duplikaci cen na n<>vazn<7A> doklad.'#1 + CRLF + E.Message + errPlg);
end;
end;
{
// pokud je kalkulacni cena nulova, koukni se na posledni prijemku, cena v EURech
if jcena=0 then
with Helios.OpenSQL('SELECT TOP(1) JCbezDaniValPoS FROM ' + tblPZ + ' WHERE Mena=N''EUR'' AND DruhPohybuZbo=0 AND IdZboSklad=' + IntToStr(idSS) + ' ORDER BY pz.DatPorizeni DESC') do
if RecordCount=1 then
if not VarIsNull(FieldValues(0)) then
jcena:= StrToFloat(VarToStr(FieldValues(0)));
}
realVyd:= false;
if (idDZ>0) and (idDZp>0) and not(JeLovato) then
begin
realPrij:= false;
try
lSQL:= 'DECLARE @dt DATETIME,@chyba BIT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)' + CRLF;
lSQL:= lSQL + 'SET @chyba=0' + CRLF + 'EXEC dbo.hp_Realizuj_Vydej ' + IntToStr(idDZ) + ',@dt,' + IntToStr(Helios.UserId) + ',0,@chyba OUT';
lSQL:= lSQL + CRLF + 'SELECT @chyba';
with Helios.OpenSQL(lSQL) do
begin
if not VarIsNull(FieldValues(0)) then
if (LowerCase(VarToStr(FieldValues(0)))='false') then
realVyd:= true;
end;
except on E:Exception do
begin
if (Pos('50024',E.Message))>0 then
Helios.Error(#1'Na v<>dejce nejsou polo<6C>ky, nelze realizovat.'#1)
else
Helios.Error(#1'Nelze realizovat v<>dejku !'#1 + CRLF + 'idVyd: ' + IntToStr(idDZ) + CRLF + E.Message + errPlg);
{
idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat V<>dejku/Vratku');
if idKJ>0 then
Helios.ExecSQL('INSERT INTO ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N'
+ QuotedStr('Podrobnosti.unit7') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')');
idKJ:= 0;
}
end;
end;
{
try
lSQL:= 'DECLARE @dt DATETIME,@chyba BIT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_Realizuj_Prijem ' + IntToStr(idDZp) + ',@dt,' + IntToStr(Helios.UserId) + ',@chyba OUT';
lSQL:= lSQL + CRLF + 'SELECT @chyba';
with Helios.OpenSQL(lSQL) do
begin
if not VarIsNull(FieldValues(0)) then
if LowerCase(VarToStr(FieldValues(0)))='false' then
realPrij:= true;
end;
except on E:Exception do
Helios.Error(#1'Nelze realizovat v<>dejku/p<><70>jemku !'#1 + CRLF + 'idVyd: ' + IntToStr(idDZ) + CRLF + 'idPrij: ' + IntToStr(idDZp) + CRLF + E.Message + errPlg);
end;
}
end;
if (idDZp>0) and (realVyd) then
begin
realPrij:= false;
try
lSQL:= 'EXEC dbo.ep_PZ_KopirujCenyDleOldPolozky @IdDokladNew=' + IntTOStr(idDZp);
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Chyba p<>i duplikaci cen na n<>vazn<7A> doklad.'#1 + CRLF + E.Message + errPlg);
end;
try
lSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_Realizuj_Prijem ' + IntToStr(idDZp) + ',@dt,' + IntToStr(Helios.UserId) + ',@chyba OUT';
lSQL:= lSQL + CRLF + 'SELECT @chyba';
with Helios.OpenSQL(lSQL) do
if not VarIsNull(FieldValues(0)) then
if (LowerCase(VarToStr(FieldValues(0)))='false') then
realPrij:= true;
except on E:Exception do
Helios.Error(#1'Nelze realizovat n<>slednou p<><70>jemku !'#1 + CRLF + E.Message + errPlg);
end;
end
else
begin
if (idDZp>0) then
begin
lSQL:= 'FROM ' + tblPZ + ' WHERE IdDoklad=' + IntToStr(idDZp);
try
Helios.ExecSQL('DELETE FROM [dbo].[TabPohybyZboziSD] WHERE id IN (SELECT id ' + lSQL + ')');
Helios.ExecSQL('DELETE ' + lSQL);
Helios.ExecSQL('DELETE FROM [dbo].[TabDokZboDodatek] WHERE IDHlavicky=' + IntToStr(idDZp));
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET NavaznyDoklad=null WHERE id='+ IntToStr(idDZv));
Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE Id=' + IntToStr(idDZp));
except on E:Exception do
Helios.Error('Chyba p<>i maz<61>n<EFBFBD> z<>znam<61>.' + CRLF + E.Message);
end;
end;
end;
end;
Helios.Refresh(true);
end;
end;
end;
procedure TformBaliciListy.btnOKMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var log: string;
begin
log:= 'SELECT DISTINCT(Stanice) FROM dbo._TabPlgUse WHERE PlgJmeno=N' + QuotedStr('plgLOVATO');
log:= log + ' AND DATEDIFF(day,GETDATE(),Datum)=0 GROUP BY Stanice';
if (ssCtrl in Shift) and (Button=mbRight) then
with Helios.OpenSQL(log) do
if (RecordCount>0) then
begin
log:= '';
First;
while not(EOF) do
begin
log:= log + VarToStr(FieldValues(0)) + CRLF;
Next;
end;
Helios.Info('Dnes plugin pou<6F><75>vali:' + CRLF + log);
end;
end;
procedure TformBaliciListy.cbOrgChange(Sender: TObject);
var msg: string;
begin
jsemLov:= JeLovato;
jsemPrev:= JePrevodka;
if not(jsemLov) and (Helios.BrowseID<>27) then
Self.Caption:= ' V<>dejky / Vratky / P<>evodky'
else
Self.Caption:= ' Balic<69> listy';
if ((Helios.BrowseID=16) or (Helios.BrowseID=18)) and (JeLovato) then
begin
if (Helios.Sklad<>VyrRekl) then
begin
msg:= #1'V<>dejku pro LOVATO It<49>lie lze d<>lat pouze pro sklad V<>roba REKLAMACE.' + CRLF + 'Chcete p<>epnout sklad ?';
if Helios.YesNo(msg,true) then
begin
Self.Caption:= ' V<>dej do IT ze skladu V<>roba REKLAMACE';
Helios.SetSklad(VyrRekl);
end
end
else
begin
cbOrg.ItemIndex:= oldCBOdb;
Exit;
end;
end;
if (vTabBL.RecordCount>0) then
begin
Helios.Error(#1'Ve V<>dejce/p<>evodce jsou polo<6C>ky, nelze m<>nit Odb<64>ratele.'#1);
cbOrg.ItemIndex:= oldCBOdb;
end;
if (jsemLov) or (jsemPrev) then
cbVratka.Visible:= false;
selRegCis.Text:= Trim(selRegCis.Text);
if (selRegCis.Text='') or (selRegCis.Text='%') then
FocusRegCis;
end;
procedure TformBaliciListy.cbOrgEnter(Sender: TObject);
begin
oldCBOdb:= cbOrg.ItemIndex;
end;
procedure TformBaliciListy.cbTypDoklChange(Sender: TObject);
var sSkl, nSkl, msg: string;
begin
if (jsemLov) then
begin
if (vTabBL.RecordCount>0) then
begin
Helios.Error(#1'V bal<61>c<EFBFBD>m listu jsou zad<61>ny polo<6C>ky, nelze m<>nit typ BL.'#1);
cbTypDokl.ItemIndex:= oldCBTyp;
Exit;
end;
msg:= 'Tento druh BL lze vyd<79>vat jen ze skladu ';
case cbTypDokl.ItemIndex of
0: begin
sSkl:= VyrFin;
nSkl:= 'V<>roba sklad ' + sSkl;
end;
1,2: begin
sSkl:= VyrSkl;
nSkl:= 'V<>roba ' + sSkl;
end;
3: begin
sSkl:= VyrRekl;
nSkl:= 'V<>roba REKLAMACE';
end;
end;
if (Helios.Sklad<>sSkl) then
begin
Helios.Error(msg + #1 + nSkl + ',' + CRLF + 'aktu<74>ln<6C> sklad bude zm<7A>n<EFBFBD>n.'#1);
Helios.SetSklad(sSkl);
end;
end;
selRegCis.SetFocus;
end;
procedure TformBaliciListy.cbTypDoklEnter(Sender: TObject);
begin
oldCBTyp:= cbTypDokl.ItemIndex;
end;
procedure TformBaliciListy.cbVratkaClick(Sender: TObject);
begin
Self.Caption:= ' V<>dejky pro kooperanta';
if cbVratka.Checked then
Self.Caption:= ' Vratky materi<72>lu od kooperanta'
else
if (JeLovato) then
Self.Caption:= ' Bal<61>c<EFBFBD> listy';
end;
procedure TformBaliciListy.edtKSExit(Sender: TObject);
begin
mnoz:= edtKS.Value;
hmotC:= hmotZ * mnoz;
end;
procedure TformBaliciListy.FormActivate(Sender: TObject);
begin
verText:= GetFileVersion2(GetModuleName(HInstance));
if Length(verText)=12 then
verText:= LeftStr(verText,9) + '0' + RightStr(verText,3);
lblVerze.Caption:= verText;
pmObnovNeulozene.Visible:= false;
pmSmazNeulozene.Visible:= false;
N1.Visible:= false;
N2.Visible:= false;
with Helios.OpenSQL('SELECT id FROM ' + tblBLPol + ' WHERE IdPolozkaOZ IS NULL') do
if (RecordCount>0) then
begin
pmObnovNeulozene.Visible:= true;
pmSmazNeulozene.Visible:= true;
N1.Visible:= true;
N2.Visible:= true;
end;
cbVratka.Enabled:= false;
cbVratka.Checked:= false;
cbOrg.ItemIndex:= 1;
edtBox.Enabled:= false;
edtPrikaz.Enabled:= false;
case Helios.BrowseID of
16: begin
Self.Caption:= ' P<><50>jemky od kooperanta';
cbVratka.Checked:= true;
// cbPolos.Visible:= true;
// cbPolos.Checked:= false;
// cbPolos.Caption:= 'REKLAMACE';
cbTypDokl.Items.Clear;
cbTypDokl.Items.Add('');
cbTypDokl.Items.Add('REKLAMACE');
cbTypDokl.ItemIndex:= 0;
cbTypDokl.Visible:= true;
cbTypDokl.Enabled:= true;
cbReklamace.Enabled:= true;
end;
18: begin
Self.Caption:= ' V<>dejky pro kooperanta/p<>evodka mezi sklady';
// cbPolos.Visible:= false;
cbTypDokl.Visible:= false;
cbTypDokl.Enabled:= false;
end;
else
begin
Self.Caption:= ' Bal<61>c<EFBFBD> listy';
cbOrg.Enabled:= false;
cbOrg.ItemIndex:= 0;
edtBox.Enabled:= true;
cbTypDokl.ItemIndex:= 0;
edtPrikaz.Enabled:= false;
if (idDZ>0) then
NactiBalList;
end;
end;
FocusRegCis;
end;
procedure TformBaliciListy.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (vTabBL.Active) then
vTabBL.Close;
Action:= caFree;
end;
procedure TformBaliciListy.NastavEdity;
var idx: integer;
begin
for idx:=0 to ComponentCount-1 do
begin
if (Self.Components[idx] is TRzEdit) then
(Self.Components[idx] as TRzEdit).FocusColor:= helParams.colBg;
end;
end;
procedure TformBaliciListy.NastavFonty;
var idx: integer;
begin
idx:= 0;
while idx<Self.ComponentCount-1 do
begin
if (Self.Components[idx] is TLabel) then
begin
(Self.Components[idx] as TLabel).Font.Name:= Helios.Font;
(Self.Components[idx] as TLabel).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TButton) then
begin
(Self.Components[idx] as TButton).Font.Name:= Helios.Font;
(Self.Components[idx] as TButton).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TGroupBox) then
begin
(Self.Components[idx] as TGroupBox).Font.Name:= Helios.Font;
(Self.Components[idx] as TGroupBox).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TRzButtonEdit) then
begin
(Self.Components[idx] as TRzButtonEdit).Font.Name:= Helios.Font;
(Self.Components[idx] as TRzButtonEdit).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TRzEdit) then
begin
(Self.Components[idx] as TRzEdit).Font.Name:= Helios.Font;
(Self.Components[idx] as TRzEdit).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TRzDateTimeEdit) then
begin
(Self.Components[idx] as TRzDateTimeEdit).Font.Name:= Helios.Font;
(Self.Components[idx] as TRzDateTimeEdit).Font.Height:= Helios.FontHeight;
end;
Inc(idx);
end;
end;
procedure TformBaliciListy.pmObnovNeulozeneClick(Sender: TObject);
var lSQL: string;
begin
lSQL:= 'SELECT * FROM ' + tblBLPol + ' WHERE IdPolozkaOZ IS NULL';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
if Helios.YesNo(#1'POZOR - Smazat zadan<61> polo<6C>ky ?'#1,false) then
vTabBL.EmptyDataSet;
Helios.ExecSQL('UPDATE ' + tblBLPol + ' SET IdDoklad=' + IntToStr(idBL) + ' WHERE IdPolozkaOZ IS NULL');
First;
while not(EOF) do
begin
vTabBL.Append;
vTabBL.FieldByName('idBLPol').AsString:= VarToStr(FieldByNameValues('Id'));
vTabBL.FieldByName('idSS').AsString:= VarToStr(FieldByNameValues('IdStavSkladu'));
vTabBL.FieldByName('Mnoz').AsFloat:= StrToFloat(VarToStr(FieldByNameValues('Mnozstvi')));
vTabBL.FieldByName('Box').AsString:= VarToStr(FieldByNameValues('Box'));
if VarIsNull(FieldByNameValues('IdPolozkaOZ')) then
vTabBL.FieldByName('idPZ').AsString:= ''
else
vTabBL.FieldByName('idPZ').AsString:= VarToStr(FieldByNameValues('IdPolozkaOZ'));
lSQL:= 'SELECT kz.SkupZbo,kz.RegCis,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz';
lSQL:= lSQL + ' ON (ss.IdKmenZbozi=kz.id) WHERE ss.id=' + VarToStr(FieldByNameValues('IdStavSkladu'));
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
begin
vTabBL.FieldByName('SkupZbo').AsString:= VarToStr(FieldValues(0));
vTabBL.FieldByName('RegCis').AsString:= VarToStr(FieldValues(1));
vTabBL.FieldByName('idKZ').AsString:= VarToStr(FieldValues(2));
end;
vTabBL.Post;
Next;
end;
end;
end;
procedure TformBaliciListy.pmSmazNeulozeneClick (Sender: TObject);
begin
if Helios.YesNo(#1'POZOR - opravdu chcete smazat neulo<6C>en<65> polo<6C>ky ?'#1 + CRLF + '(tyto vzniknou nap<61>. p<>i n<>siln<6C>m vypnut<75> PC/Heliosu)',false) then
Helios.ExecSQL('DELETE FROM ' + tblBLPol + ' WHERE IdPolozkaOZ IS NULL');
end;
procedure TformBaliciListy.FormShow (Sender: TObject);
var lSQL: string;
i: integer;
begin
// if (Helios.Sklad<>'200') then
// begin
// Helios.Error('Aktu<74>ln<6C> sklad nen<65> 200 - V<>roba, automaticky p<>ep<65>n<EFBFBD>m.');
// Helios.SetSklad('200');
// end;
{
SetThreadLocale(LOCALE_USER_DEFAULT);
GetFormatSettings;
ShortDateFormat:= 'dd.mm.yyyy';
}
Application.Handle:= Helios.MainApplicationHandle;
Application.Icon.Handle:= Helios.MainApplicationIconHandle;
// Self.Font.Name:= Helios.Font;
NactiParametryHeliosu(Helios, helParams);
if (helParams.podbarveni) then
NastavEdity;
// NastavFonty;
selVyber:= false;
cbOrg.Items.Clear;
cbOrg.Items.Add('LOVATO It<49>lie');
lSQL:= 'SELECT s.Nazev, se._CisloOrg, s.Cislo FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (se.id=s.id)';
lSQL:= lSQL + ' WHERE se._VydejZjednodusene=1 AND ISNULL(se._CisloOrg,-1)>=0 ORDER BY s.Cislo';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
SetLength(koop,RecordCount);
i:= -1;
lSQL:= 'SELECT s.Nazev, se._CisloOrg, s.Cislo FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (se.id=s.id)';
lSQL:= lSQL + ' WHERE se._VydejZjednodusene=1 AND ISNULL(se._CisloOrg,-1)=0 ORDER BY s.Cislo';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) and (Length(koop)>0) then
begin
First;
while not(EOF) do
begin
if (VarToStr(FieldValues(2))<>Helios.Sklad) then
begin
Inc(i);
koop[i].Nazev:= VarToStr(FieldValues(0));
koop[i].CisloOrg:= StrToInt(VarToStr(FieldValues(1)));
koop[i].Sklad:= VarToStr(FieldValues(2));
koop[i].ItemIndex:= i+1;
cbOrg.Items.Add(koop[i].Nazev);
end;
Next;
end;
end;
lSQL:= 'SELECT s.Nazev, se._CisloOrg, s.Cislo FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (se.id=s.id)';
lSQL:= lSQL + ' WHERE se._VydejZjednodusene=1 AND ISNULL(se._CisloOrg,-1)>0 ORDER BY s.Cislo';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) and (Length(koop)>0) then
begin
First;
while not(EOF) do
begin
if (VarToStr(FieldValues(2))<>Helios.Sklad) then
begin
Inc(i);
koop[i].Nazev:= VarToStr(FieldValues(0));
koop[i].CisloOrg:= StrToInt(VarToStr(FieldValues(1)));
koop[i].Sklad:= VarToStr(FieldValues(2));
koop[i].ItemIndex:= i+1;
cbOrg.Items.Add(koop[i].Nazev);
end;
Next;
end;
end;
i:= 0;
if (Length(koop)>0) then
begin
for i:=0 to Length(koop)-1 do
if (koop[i].Nazev='') then
Break;
end;
if (i>0) then
SetLength (koop,i);
edtDat.Date:= Now;
// viewPol.OptionsView.NoDataToDisplayInfoText:= '';
insData:= true;
VytvorTabulkyAGrid;
iOdb:= 0; // pocatecni index cbOrg
idBL:= 0;
if (idDZ>0) then
begin
// cbTypDokl.Enabled:= false;
NactiBalList
end
else
begin
lSQL:= 'INSERT ' + tblBL + ' (CisloOrg, Datum, Vratka) VALUES (';
case Helios.BrowseID of
27: lSQL:= lSQL + '1';
else lSQL:= lSQL + '11';
end;
lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(edtDat.Text) + ',104),0)' + CRLF + 'SELECT SCOPE_IDENTITY()';
with Helios.OpenSQL(lSQL) do
idBL:= StrToInt(VarToStr(FieldValues(0)));
end;
insData:= false;
end;
procedure TformBaliciListy.WMGetMinMaxInfo (var AMsg: TWMGetMinMaxInfo);
begin
inherited;
{
with AMsg.MinMaxInfo^ do
begin
ptMinTrackSize:= Point(Self.Constraints.MinWidth, Self.Constraints.MinHeight);
ptMaxTrackSize:= Point(Self.Constraints.MaxWidth, Self.Constraints.MaxHeight);
end;
}
end;
end.