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

1017 lines
37 KiB
ObjectPascal
Raw Blame History

unit frmUnit6;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ToolWin, Vcl.Mask, ddPlugin_TLB,
RzEdit, RzBtnEdt, helUtils, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxStyles, cxCustomData,
cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses, cxGridCustomView,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, RzButton, Vcl.ExtCtrls, RzPanel,
MemDS, VirtualTable, Vcl.ImgList, Vcl.ButtonGroup, Vcl.Buttons, cxLabel, Vcl.Menus;
type
TformVydejka = class(TForm)
pgControl: TPageControl;
tBar: TToolBar;
tBtn1: TToolButton;
tBtn2: TToolButton;
pgHlavicka: TTabSheet;
btnOK: TButton;
btnCanel: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
selCisOrg: TRzButtonEdit;
selOdber: TRzButtonEdit;
Label2: TLabel;
selCisOrgMisto: TRzButtonEdit;
selOdberMisto: TRzButtonEdit;
pgPolozky: TTabSheet;
GroupBox2: TGroupBox;
edtDatPrip: TRzDateTimeEdit;
Label3: TLabel;
GroupBox3: TGroupBox;
viewPol: TcxGridDBTableView;
lvPol: TcxGridLevel;
gridPol: TcxGrid;
GroupBox4: TGroupBox;
vTabPol: TVirtualTable;
dsPol: TDataSource;
imgList: TImageList;
btnPolAdd: TSpeedButton;
btnPolEdit: TSpeedButton;
btnPolDel: TSpeedButton;
colIdSS: TcxGridDBColumn;
colIdKZ: TcxGridDBColumn;
colSZ: TcxGridDBColumn;
colRegCis: TcxGridDBColumn;
colNazev1: TcxGridDBColumn;
colNazev2: TcxGridDBColumn;
colMnoz: TcxGridDBColumn;
colJCbezDaniKc: TcxGridDBColumn;
colCCbezDPH: TcxGridDBColumn;
colMJ: TcxGridDBColumn;
pgSklad: TTabSheet;
viewSklad: TcxGridDBTableView;
lvSklad: TcxGridLevel;
gridSklad: TcxGrid;
dsSklad: TDataSource;
vTabSklad: TVirtualTable;
colIdSS2: TcxGridDBColumn;
colIdKZ2: TcxGridDBColumn;
colSZ2: TcxGridDBColumn;
colRegCis2: TcxGridDBColumn;
colNazev12: TcxGridDBColumn;
colNazev22: TcxGridDBColumn;
colMJ2: TcxGridDBColumn;
colJCbezDaniKc2: TcxGridDBColumn;
colCCbezDPH2: TcxGridDBColumn;
colMnoz2: TcxGridDBColumn;
Label4: TLabel;
cbMena: TComboBox;
colIdPZ: TcxGridDBColumn;
selKurz: TRzButtonEdit;
Label5: TLabel;
pmSklad: TPopupMenu;
pmSklad1: TMenuItem;
procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
procedure selOdberButtonClick(Sender: TObject);
procedure selCisOrgButtonClick(Sender: TObject);
procedure selCisOrgMistoButtonClick(Sender: TObject);
procedure selOdberMistoButtonClick(Sender: TObject);
procedure selCisOrgExit(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnCanelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure selCisOrgMistoExit(Sender: TObject);
procedure btnPolAddClick(Sender: TObject);
procedure viewPolColumnHeaderClick(Sender: TcxGridTableView; AColumn: TcxGridColumn);
procedure FormActivate(Sender: TObject);
procedure pgControlChange(Sender: TObject);
procedure vTabPolCalcFields(DataSet: TDataSet);
procedure btnOKClick(Sender: TObject);
procedure btnPolDelClick(Sender: TObject);
procedure btnPolEditClick(Sender: TObject);
procedure viewPolCellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
procedure selKurzButtonClick(Sender: TObject);
procedure viewSkladCellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
procedure pmSklad1Click(Sender: TObject);
private
cfCelkemDef: TFieldDef;
cfCelkem: TField;
procedure NovyDoklad;
procedure NactiDoklad;
procedure VytvorGrid;
function GetSklad: ShortString;
procedure NaplnSkladKoop;
function LzeUlozit: boolean;
function ZjistiKurzDleMeny(mena: shortString): Extended;
public
Helios: IHelios;
idDZ: integer;
radaV, druhV: ShortString;
vstCena: integer;
end;
var
formVydejka: TformVydejka;
sql: WideString;
oVar1, oVar2: OleVariant;
wherePodm: WideString;
radaPopis, cDokl, idDDZ, idSS, idKZ, DZshift, cOrg, idSklad: ShortString;
HeliosImages: THeliosImages;
implementation
uses cxGridStrs, System.StrUtils;
{$R *.dfm}
procedure TformVydejka.WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo);
begin
inherited;
with AMsg.MinMaxInfo^ do
begin
ptMinTrackSize := Point(Constraints.MinWidth, Constraints.MinHeight);
ptMaxTrackSize := Point(Constraints.MaxWidth, Constraints.MaxHeight);
end;
end;
procedure TformVydejka.NaplnSkladKoop;
var sql: WideString;
begin
if not vTabSklad.Active then
vTabSklad.Open;
vTabSklad.Clear;
sql:= 'SELECT ss.Id,kz.Id,kz.SkupZbo,kz.RegCis,kz.Nazev1,kz.Nazev2,kz.MJEvidence,ss.Mnozstvi,ss.Prumer,ss.StavSkladu FROM ';
sql:= sql + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IDKmenZbozi=kz.id AND ss.IDSklad=N' + QuotedStr(idSklad)+ ') WHERE kz.id IN';
sql:= sql + ' (SELECT IDKmenZbozi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(idSklad) + ' ORDER BY kz.SkupZbo,kz.RegCis';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
vTabSklad.Append;
vTabSklad.Fields.Fields[0].AsInteger:= StrToInt(VarToStr(FieldValues(0)));
vTabSklad.Fields.Fields[1].AsInteger:= StrToInt(VarToStr(FieldValues(1)));
vTabSklad.Fields.Fields[2].AsString:= VarToStr(FieldValues(2));
vTabSklad.Fields.Fields[3].AsString:= VarToStr(FieldValues(3));
vTabSklad.Fields.Fields[4].AsString:= VarToStr(FieldValues(4));
vTabSklad.Fields.Fields[5].AsString:= VarToStr(FieldValues(5));
vTabSklad.Fields.Fields[6].AsString:= VarToStr(FieldValues(6));
vTabSklad.Fields.Fields[7].AsExtended:= StrToFloat(VarToStr(FieldValues(7)));
vTabSklad.Fields.Fields[8].AsExtended:= StrToFloat(VarToStr(FieldValues(8)));
vTabSklad.Fields.Fields[9].AsExtended:= StrToFloat(VarToStr(FieldValues(9)));
vTabSklad.Post;
Next;
end;
end;
end;
procedure TformVydejka.VytvorGrid;
var idx: integer;
begin
with vTabPol do
begin
with FieldDefs do
begin
Clear;
Add('idSS', ftInteger, 0, true);
Add('idKZ', ftInteger, 0, true);
Add('SkupZbo', ftString, 3, false);
Add('RegCis', ftString, 20, false);
Add('Nazev1', ftString, 100, false);
Add('Nazev2', ftString, 100, false);
Add('MJ', ftString, 10, false);
Add('Mnozstvi', ftFloat, 0, false);
Add('JCbezDaniKC', ftFloat, 0, false);
Add('CCbezDPH', ftFloat, 0, false);
Add('idPZ', ftInteger, 0, false);
end;
end;
for idx:=0 to vTabPol.FieldDefs.Count-1 do
begin
cfCelkemDef:= vTabPol.FieldDefs.Items[idx];
cfCelkem:= cfCelkemDef.CreateField(vTabPol);
if (cfCelkem.FieldName='CCbezDPH') then // oznac Pocitane pole
cfCelkem.FieldKind:= fkCalculated;
end;
with viewPol.Columns[0] do
begin
DataBinding.FieldName:= 'idSS';
DataBinding.ValueTypeClass:= TcxIntegerValueType;
Visible:= false;
Width:= 1;
end;
with viewPol.Columns[1] do
begin
DataBinding.FieldName:= 'idKZ';
DataBinding.ValueTypeClass:= TcxIntegerValueType;
Visible:= false;
Width:= 1;
end;
with viewPol.Columns[2] do
begin
DataBinding.FieldName:= 'SkupZbo';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'SZ';
Width:= 40;
end;
with viewPol.Columns[3] do
begin
DataBinding.FieldName:= 'RegCis';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'Reg.<2E><>slo';
Width:= 80;
end;
with viewPol.Columns[4] do
begin
DataBinding.FieldName:= 'Nazev1';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'N<>zev';
Width:= 280;
end;
with viewPol.Columns[5] do
begin
DataBinding.FieldName:= 'Nazev2';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'N<>zev 2';
Width:= 230;
end;
with viewPol.Columns[6] do
begin
DataBinding.FieldName:= 'MJ';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'MJ';
Width:= 40;
end;
with viewPol.Columns[7] do
begin
DataBinding.FieldName:= 'Mnozstvi';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'Mno<6E>stv<74>';
Width:= 70;
end;
with viewPol.Columns[8] do
begin
DataBinding.FieldName:= 'JCbezDaniKC';
DataBinding.ValueTypeClass:= TcxFloatValueType;
Caption:= 'JC bez DPH';
Width:= 75;
end;
with viewPol.Columns[9] do
begin
DataBinding.FieldName:= 'CCbezDPH';
DataBinding.ValueTypeClass:= TcxFloatValueType;
Caption:= 'CC bez DPH';
Width:= 80;
end;
with viewPol.Columns[10] do
begin
DataBinding.FieldName:= 'idPZ';
DataBinding.ValueTypeClass:= TcxIntegerValueType;
Visible:= false;
Width:= 1;
end;
with vTabSklad do
begin
with FieldDefs do
begin
Clear;
Add('idSS', ftInteger, 0, true);
Add('idKZ', ftInteger, 0, true);
Add('SkupZbo', ftString, 3, false);
Add('RegCis', ftString, 20, false);
Add('Nazev1', ftString, 100, false);
Add('Nazev2', ftString, 100, false);
Add('MJ', ftString, 10, false);
Add('Mnozstvi', ftFloat, 0, false);
Add('Prumer', ftFloat, 0, false); // prumerna JC
Add('CCbezDPH', ftFloat, 0, false);
end;
end;
for idx:=0 to vTabSklad.FieldDefs.Count-1 do
begin
cfCelkemDef:= vTabSklad.FieldDefs.Items[idx];
cfCelkem:= cfCelkemDef.CreateField(vTabSklad);
if (cfCelkem.FieldName='CCbezDPH') then // oznac Pocitane pole
cfCelkem.FieldKind:= fkCalculated;
end;
with viewSklad.Columns[0] do
begin
DataBinding.FieldName:= 'idSS';
DataBinding.ValueTypeClass:= TcxIntegerValueType;
Visible:= false;
Width:= 1;
end;
with viewSklad.Columns[1] do
begin
DataBinding.FieldName:= 'idKZ';
DataBinding.ValueTypeClass:= TcxIntegerValueType;
Visible:= false;
Width:= 1;
end;
with viewSklad.Columns[2] do
begin
DataBinding.FieldName:= 'SkupZbo';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'SZ';
Width:= 40;
end;
with viewSklad.Columns[3] do
begin
DataBinding.FieldName:= 'RegCis';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'Reg.<2E><>slo';
Width:= 80;
end;
with viewSklad.Columns[4] do
begin
DataBinding.FieldName:= 'Nazev1';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'N<>zev';
Width:= 280;
end;
with viewSklad.Columns[5] do
begin
DataBinding.FieldName:= 'Nazev2';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'N<>zev 2';
Width:= 230;
end;
with viewSklad.Columns[6] do
begin
DataBinding.FieldName:= 'MJ';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'MJ';
Width:= 45;
end;
with viewSklad.Columns[7] do
begin
DataBinding.FieldName:= 'Mnozstvi';
DataBinding.ValueTypeClass:= TcxStringValueType;
Caption:= 'Mno<6E>stv<74>';
Width:= 70;
end;
with viewSklad.Columns[8] do
begin
DataBinding.FieldName:= 'Prumer';
DataBinding.ValueTypeClass:= TcxFloatValueType;
Caption:= 'Pr<50>m<EFBFBD>rn<72> JC';
Width:= 80;
end;
with viewSklad.Columns[9] do
begin
DataBinding.FieldName:= 'StavSkladu';
DataBinding.ValueTypeClass:= TcxFloatValueType;
Caption:= 'Fin.stav';
Width:= 80;
end;
end;
function TformVydejka.GetSklad: shortString;
begin
result:= '';
if selCisOrg.Text<>'' then
begin
idSklad:= '';
sql:= 'SELECT s.Cislo FROM ' + tblStromE + ' se INNER JOIN ' + tblStrom + ' s ON (se.id=s.id)' ;
sql:= sql + ' WHERE se._CisloOrg=' + selCisOrg.Text;
with Helios.OpenSQL(sql) do
if RecordCount>0 then
result:= VarToStr(FieldValues(0));
end;
idSklad:= result;
if idSklad<>'' then
NaplnSkladKoop;
end;
procedure TformVydejka.btnCanelClick(Sender: TObject);
begin
Close;
end;
function TformVydejka.LzeUlozit: boolean;
begin
result:= true;
if edtDatPrip.Text='' then
result:= false;
end;
procedure TformVydejka.btnOKClick(Sender: TObject);
var idPZ, idKZ, idSS, polIdx: integer;
PZtka, sqlInsPZ: WideString;
sIdPZ,sz,regcis,sMnoz,sJC: ShortString;
begin
if LzeUlozit then
begin
if (idDZ>0) then
begin
// hlavicka
sql:= 'DECLARE @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,' + QuotedStr(DateToStr(edtDatPrip.Date)) + ',104)';
sql:= sql + 'UPDATE ' + tblDZ + ' SET DatPorizeni=@dt WHERE id=' + IntToStr(idDZ);
Helios.ExecSQL(sql);
// polozky
if vTabPol.RecordCount>0 then
begin
// zjisti idPZ jiz ulozenych polozek v dokladu
PZtka:= IDckaTabulky(vTabPol,'idPZ');
if PZtka<>'' then
sql:= ' AND id NOT IN (' + PZtka + ')';
Helios.ExecSQL('DELETE FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idDZ) + sql);
vTabPol.First;
while not(vTabPol.Eof) do
begin
sz:= vTabPol.Fields.Fields[2].AsString;
regCis:= vTabPol.Fields.Fields[3].AsString;
sMnoz:= vTabPol.Fields.Fields[7].AsString;
sJC:= vTabPol.Fields.Fields[8].AsString;
sIdPZ:= vTabPol.Fields.Fields[10].AsString;
if sIdPZ<>'' then
begin
// uloz zmeny polozek ve starem dokladu
sql:= 'UPDATE ' + tblPZ + ' SET Mnozstvi=' + StringReplace(vTabPol.FieldByName('Mnozstvi').AsString,',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniKC=' + StringReplace(vTabPol.FieldByName('JCbezDaniKc').AsString,',','.',[rfReplaceAll]);
sql:= sql + ' WHERE id=' + sIdPZ;
try
Helios.ExecSQL(sql);
except on E:Exception do
Helios.Error('Nelze aktualizovat polo<6C>ku dokladu: ' + sz + ':' + regCis + CRLF + E.Message + CRLF + sql);
end;
end
else
begin
// uloz nove radky do dokladu
sql:= 'DECLARE @idPZ INT' + CRLF;
sql:= sql + 'EXEC dbo.hp_InsertPolozkyOZ @idPZ OUT,@IDDoklad=' + IntToStr(idDZ) + ',@DruhPohybu=' + druhV;
sql:= sql + ',@CisloOrg=' + selCisOrg.Text + ',@IDZboSklad=' + VarToStr(vTabPol.Fields.Fields[0].AsString) + ',@Kurz=1';
sql:= sql + ',@JednotkaMeny=1,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0,@ZakazanoDPH=0,@Mena=N' + QuotedStr(cbMena.Text);
sql:= sql + ',@Selectem=0,@PovolitDuplicitu=1,@VstupniCena=' + IntToStr(vstCena);
sql:= sql + ',@Mnozstvi=' + StringReplace(vTabPol.FieldByName('Mnozstvi').AsString,',','.',[rfReplaceAll]);
sql:= sql + ',@JCbezDaniKC=' + StringReplace(vTabPol.FieldByName('JCbezDaniKc').AsString,',','.',[rfReplaceAll]);
sql:= sql + ',@MJ=N' + QuotedStr(vTabPol.FieldByName('MJ').AsString) + CRLF + 'SELECT @idPZ';
try
with Helios.OpenSQL(sql) do
idPZ:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
Helios.Error(#1'Nelze ulo<6C>it polo<6C>ku dokladu, kontaktujte spr<70>vce.'#1 + CRLF + E.Message + CRLF + sql);
end;
if idPZ>0 then
begin
vTabPol.Edit;
vTabPol.Fields.Fields[10].AsInteger:= idPZ;
vTabPol.Post;
sql:= 'UPDATE ' + tblPZ + ' SET CCbezDaniKc=' + StringReplace(vTabPol.FieldByName('CCbezDPH').AsString,',','.',[rfReplaceAll]);
if Pos('CZK',cbMena.Text)=0 then
sql:= sql + ',CCbezDaniVal=' + StringReplace(vTabPol.FieldByName('CCbezDPH').AsString,',','.',[rfReplaceAll]);
sql:= sql + ' WHERE id=' + IntToStr(idPZ);
end;
end;
vTabPol.Next;
end;
end
else
Helios.ExecSQL('DELETE FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idDZ));
end
else
begin
idDZ:= 0;
sql:= 'DECLARE @dt DATETIME,@idDZ INT' + CRLF;
sql:= sql + 'SET @dt=CONVERT(datetime,' + QuotedStr(DateToStr(edtDatPrip.Date)) + ',104)' + CRLF;
sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(Helios.Sklad) + ',@Mena=N' + QuotedStr(cbMena.Text);
sql:= sql + ',@DruhPohybu=' + druhV + ',@RadaDokladu=N' + QuotedStr(radaV) + ',@Insert=1,@CisloOrg=' + selCisOrg.Text + ',@PC=' + cDokl;
sql:= sql + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ';
try
with Helios.OpenSQL(sql) do
idDZ:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
Helios.Error(#1'Nelze ulo<6C>it hlavi<76>ku dokladu, kontaktujte spr<70>vce.'#1 + CRLF + E.Message + CRLF + sql);
end;
if idDZ>0 then
begin
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + IntToStr(idDZ));
if vTabPol.RecordCount>0 then
begin
polIdx:= viewPol.DataController.FocusedRecordIndex; // uloz index zaznamu pro zpetne oznaceni
vTabPol.First;
while not(vTabPol.Eof) do
begin
idPZ:= 0;
sql:= 'DECLARE @idPZ INT' + CRLF;
sql:= sql + 'EXEC dbo.hp_InsertPolozkyOZ @idPZ OUT,@IDDoklad=' + IntToStr(idDZ) + ',@DruhPohybu=' + druhV;
sql:= sql + ',@CisloOrg=' + selCisOrg.Text + ',@IDZboSklad=' + VarToStr(vTabPol.Fields.Fields[0].AsString) + ',@Kurz=1';
sql:= sql + ',@JednotkaMeny=1,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0,@ZakazanoDPH=0,@Mena=N' + QuotedStr(cbMena.Text);
sql:= sql + ',@Selectem=0,@PovolitDuplicitu=1,@VstupniCena=' + IntToStr(vstCena);
sql:= sql + ',@Mnozstvi=' + StringReplace(vTabPol.FieldByName('Mnozstvi').AsString,',','.',[rfReplaceAll]);
sql:= sql + ',@JCbezDaniKC=' + StringReplace(vTabPol.FieldByName('JCbezDaniKc').AsString,',','.',[rfReplaceAll]);
sql:= sql + ',@MJ=N' + QuotedStr(vTabPol.FieldByName('MJ').AsString) + CRLF + 'SELECT @idPZ';
try
with Helios.OpenSQL(sql) do
idPZ:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
Helios.Error(#1'Nelze ulo<6C>it polo<6C>ku dokladu, kontaktujte spr<70>vce.'#1 + CRLF + E.Message + CRLF + sql);
end;
if idPZ>0 then
begin
vTabPol.Edit;
vTabPol.Fields.Fields[10].AsInteger:= idPZ;
vTabPol.Post;
sql:= 'UPDATE ' + tblPZ + ' SET CCbezDaniKc=' + StringReplace(vTabPol.FieldByName('CCbezDPH').AsString,',','.',[rfReplaceAll]);
if vstCena in [4,5,6,7] then
sql:= sql + ',CCbezDaniVal=' + StringReplace(vTabPol.FieldByName('CCbezDPH').AsString,',','.',[rfReplaceAll]);
sql:= sql + ' WHERE id=' + IntToStr(idPZ);
end;
vTabPol.Next;
end;
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1');
viewPol.DataController.FocusedRecordIndex:= polIdx; // obnov oznaceny zaznam
end;
end;
end;
Close;
end
else
Helios.Error(#1'Nelze ulo<6C>it doklad, nepro<72>el form<72>ln<6C> kontrolou.'#1);
end;
procedure TformVydejka.btnPolAddClick(Sender: TObject);
var idKZ: ShortString;
sql: WideString;
polKZ: IHeQuery;
mnoz,jc: Extended;
begin
if (idSklad='') then
begin
idKZ:= '';
wherePodm:= 'TabKmenZbozi.Id IN (SELECT IDKmenZbozi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(Helios.Sklad) + ')';
if Helios.Prenos(bidKZ, 'id', oVar1, wherePodm, '', True) then
idKZ:= VarToStr(oVar1);
if idKZ<>'' then
begin
sql:= 'SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + idKZ + ' AND IDSklad=N' + QuotedStr(Helios.Sklad);
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
mnoz:= 0;
jc:= 0;
if not vTabPol.Active then
vTabPol.Open;
vTabPol.Append;
vTabPol.Fields.Fields[0].AsInteger:= StrToInt(VarToStr(FieldValues(0)));
sql:= 'SELECT * FROM ' + tblKZ + ' WHERE id=' + idKZ;
polKZ:= Helios.OpenSQL(sql);
vTabPol.Fields.Fields[1].AsInteger:= StrToInt(VarToStr(idKZ));
vTabPol.Fields.Fields[2].AsString:= VarToStr(polKZ.FieldByNameValues('SkupZbo'));
vTabPol.Fields.Fields[3].AsString:= VarToStr(polKZ.FieldByNameValues('RegCis'));
vTabPol.Fields.Fields[4].AsString:= VarToStr(polKZ.FieldByNameValues('Nazev1'));
vTabPol.Fields.Fields[5].AsString:= VarToStr(polKZ.FieldByNameValues('Nazev2'));
if not VarIsNull(polKZ.FieldByNameValues('MJevidence')) then
vTabPol.Fields.Fields[6].AsString:= VarToStr(polKZ.FieldByNameValues('MJevidence'));
vTabPol.Fields.Fields[7].AsFloat:= 0;
vTabPol.Fields.Fields[8].AsFloat:= 0;
if FormMnozstviCena('',mnoz,jc,false) then
begin
vTabPol.Fields.Fields[7].AsFloat:= mnoz;
vTabPol.Fields.Fields[8].AsFloat:= jc;
end;
vTabPol.Post;
end;
end;
end
else
Helios.Error(#1'Kooperant<6E>m lze vyd<79>vat pouze p<>ednastaven<65> materi<72>ly' + CRLF + '(z<>lo<6C>ka 3-Sklady kooperant<6E>).'#1);
end;
procedure TformVydejka.btnPolDelClick(Sender: TObject);
var p: ShortString;
idxR: integer;
begin
idxR:= viewPol.DataController.FocusedRowIndex;
p:= VarToStr(viewPol.ViewData.Rows[idxR].Values[4]);
p:= p + ' (' + VarToStr(viewPol.ViewData.Rows[idxR].Values[7]) + ' ';
p:= p + VarToStr(viewPol.ViewData.Rows[idxR].Values[6]) + ')';
if Helios.YesNo('Opravdu chcete z dokladu smazat polo<6C>ku '#1 + p + #1' ?',false) then
begin
vTabPol.RecNo:= viewPol.DataController.FocusedRecordIndex;
vTabPol.Delete;
vTabPol.Refresh;
end;
end;
procedure TformVydejka.btnPolEditClick(Sender: TObject);
var m,c: Extended;
idx: integer;
begin
idx:= viewPol.DataController.FocusedRecordIndex;
vTabPol.RecNo:= idx;
m:= vTabPol.Fields.FieldByName('Mnozstvi').AsExtended;
c:= vTabPol.Fields.FieldByName('JCbezDaniKC').AsExtended;
if FormMnozstviCena('',m,c,false) then
begin
vTabPol.Edit;
vTabPol.Fields.FieldByName('Mnozstvi').AsExtended:= m;
vTabPol.Fields.FieldByName('JCbezDaniKC').AsExtended:= c;
vTabPol.Post;
end;
viewPol.DataController.FocusedRecordIndex:= idx;
end;
procedure TformVydejka.FormActivate(Sender: TObject);
begin
selCisOrg.SetFocus;
end;
procedure TformVydejka.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if vTabSklad.Active then
vTabSklad.Close;
if vTabPol.Active then
vTabPol.Close;
if idDZ>0 then
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ));
Helios.Refresh(true);
Action:= caFree;
end;
procedure TformVydejka.NactiDoklad;
var dz: IHeQuery;
idx: Integer;
pol: IHeQuery;
begin
sql:= 'SELECT * FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ);
dz:= Helios.OpenSQL(sql);
if dz.RecordCount=1 then
begin
cDokl:= VarToStr(dz.FieldByNameValues('PoradoveCislo'));
cOrg:= VarToStr(dz.FieldByNameValues('CisloOrg'));
selKurz.Text:= Format('%3.4f',[StrToFloat(VarToStr(dz.FieldByNameValues('Kurz')))]);
selCisOrg.Text:= cOrg;
selCisOrgExit(Self);
Self.Caption:= Helios.Sklad + ' ' + radaPopis + ' ' + radaV + ' ' + StringOfChar('0',6 - Length(cDokl)) + cDokl;
edtDatPrip.Date:= StrToDate(VarToStr(dz.FieldByNameValues('DatPorizeni_X')));
pol:= Helios.OpenSQL('SELECT * FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idDZ) + ' ORDER BY SkupZbo,RegCis');
if pol.RecordCount>0 then
begin
if not vTabPol.Active then
vTabPol.Open;
vTabPol.Clear;
pol.First;
while not(pol.EOF) do
begin
vTabPol.Append;
idSS:= VarToStr(pol.FieldByNameValues('IdZboSklad'));
vTabPol.Fields.Fields[0].AsInteger:= StrToInt(idSS);
with Helios.OpenSQL('SELECT idKmenZbozi FROM ' + tblSS + ' WHERE id=' + idSS) do
idKZ:= VarToStr(FieldValues(0));
vTabPol.Fields.Fields[1].AsInteger:= StrToInt(idKZ);
vTabPol.Fields.Fields[2].AsString:= VarToStr(pol.FieldByNameValues('SkupZbo'));
vTabPol.Fields.Fields[3].AsString:= VarToStr(pol.FieldByNameValues('RegCis'));
vTabPol.Fields.Fields[4].AsString:= VarToStr(pol.FieldByNameValues('Nazev1'));
vTabPol.Fields.Fields[5].AsString:= VarToStr(pol.FieldByNameValues('Nazev2'));
vTabPol.Fields.Fields[6].AsString:= VarToStr(pol.FieldByNameValues('MJ'));
vTabPol.Fields.Fields[7].AsFloat:= StrToFloat(VarToStr(pol.FieldByNameValues('Mnozstvi')));
vTabPol.Fields.Fields[8].AsFloat:= StrToFloat(VarToStr(pol.FieldByNameValues('JCbezDaniKC')));
vTabPol.Fields.Fields[10].AsFloat:= StrToInt(VarToStr(pol.FieldByNameValues('Id')));
vTabPol.Post;
pol.Next;
end;
end;
end;
end;
procedure TformVydejka.NovyDoklad;
begin
cDokl:= '';
dzShift:= '';
sql:= 'SELECT dzd.PosledniPC FROM ' + tblDDZdef + ' dzd INNER JOIN ' + tblDDZ + ' dz ON';
sql:= sql + ' (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(Helios.Obdobi);
sql:= sql + ' AND dz.DruhPohybuZbo=' + druhV + ' AND dz.RadaDokladu=N' + QuotedStr(radaV);
with Helios.OpenSQL(sql) do
if RecordCount>0 then
dzShift:= VarToStr(FieldValues(0));
if DZshift= '' then
DZshift:= '1';
sql:= 'DECLARE @Cislo INT' + CRLF + 'EXEC @Cislo=dbo.hp_NajdiPrvniVolny ' + QuotedStr('TabDokladyZbozi') + ',' + QuotedStr('PoradoveCislo');
sql:= sql + ',' + DZshift + ',999999,N' + QuotedStr('RadaDokladu=N' + QuotedStr(radaV) + ' AND IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND DruhPohybuZbo=' + druhV);
with Helios.OpenSQL(sql) do
cDokl:= VarToStr(FieldValues(0));
if cDokl=DZshift then
cDokl:= IntToStr(StrToInt(cDokl) + 1);
Self.Caption:= Helios.Sklad + ' ' + radaPopis + ' ' + radaV + ' ' + StringOfChar('0',6 - Length(cDokl)) + cDokl;
edtDatPrip.Date:= Now;
if vstCena in [4,5,6,7] then
selKurz.Enabled:= true
else
selKurz.Enabled:= false;
selKurz.Text:= '1.0';
end;
procedure TformVydejka.pgControlChange(Sender: TObject);
begin
if pgControl.ActivePageIndex=2 then
pgSklad.Visible:= idSklad<>'';
end;
procedure TformVydejka.pmSklad1Click(Sender: TObject);
begin
if idSklad<>'' then
NaplnSkladKoop;
end;
procedure TformVydejka.FormShow(Sender: TObject);
var idx: Integer;
helParam: THeliosParams;
begin
Self.Constraints.MaxWidth:= Self.Width;
Self.Constraints.MinWidth:= Self.Width;
Self.Constraints.MaxHeight:= Self.Height;
Self.Constraints.MinHeight:= Self.Height;
Self.Icon.Handle:= Helios.MainApplicationIconHandle;
Self.Font.Name:= Helios.Font;
helUtils.NactiParametryHeliosu(Helios, helParam);
pgControl.ActivePageIndex:= 0;
cxSetResourceString(@scxGridGroupByBoxCaption,'Sem p<>et<65>hn<68>te z<>hlav<61> sloupc<70>, podle kter<65>ch chcete p<>ehled seskupit.');
viewPol.OptionsView.NoDataToDisplayInfoText:= '';
viewPol.OptionsView.GroupByBox:= False;
viewSklad.OptionsView.NoDataToDisplayInfoText:= '';
viewSklad.OptionsView.GroupByBox:= False;
idx:= 0;
while idx<Self.ComponentCount-1 do
begin
if (Self.Components[idx] is TLabel) then
begin
TLabel(Self.Components[idx]).Font.Name:= Helios.Font;
TLabel(Self.Components[idx]).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TButton) then
begin
TButton(Self.Components[idx]).Font.Name:= Helios.Font;
TButton(Self.Components[idx]).Font.Height:= Helios.FontHeight;
end;
if (Self.Components[idx] is TRzDateTimeEdit) then
begin
TRzDateTimeEdit(Self.Components[idx]).Font.Name:= Helios.Font;
TRzDateTimeEdit(Self.Components[idx]).Font.Height:= Helios.FontHeight;
if helParam.podbarveni then
TRzDateTimeEdit(Self.Components[idx]).FocusColor:= helParam.colBg;
end;
if (Self.Components[idx] is TRzEdit) then
begin
TRzEdit(Self.Components[idx]).Font.Name:= Helios.Font;
TRzEdit(Self.Components[idx]).Font.Height:= Helios.FontHeight;
if helParam.podbarveni then
TRzEdit(Self.Components[idx]).FocusColor:= helParam.colBg;
end;
if (Self.Components[idx] is TRzButtonEdit) then
begin
TRzButtonEdit(Self.Components[idx]).Font.Name:= Helios.Font;
TRzButtonEdit(Self.Components[idx]).Font.Height:= Helios.FontHeight;
if helParam.podbarveni then
TRzButtonEdit(Self.Components[idx]).FocusColor:= helParam.colBg;
end;
if (Self.Components[idx] is TcxGrid) then
begin
TcxGrid(Self.Components[idx]).Font.Name:= Helios.Font;
TcxGrid(Self.Components[idx]).Font.Height:= Helios.FontHeight;
end;
Inc(idx);
end;
HeliosImages:= THeliosImages.Create;
imgList:= HeliosImages.ImageList32;
tBar.Images:= imgList;
tBtn1.ImageIndex:= 1;
tBtn2.ImageIndex:= 2;
tBtn1.Enabled:= false;
tBtn2.Enabled:= false;
imgList.GetBitmap(3, btnPolAdd.Glyph);
imgList.GetBitmap(4, btnPolEdit.Glyph);
imgList.GetBitmap(5, btnPolDel.Glyph);
if Pos('N',radaV)>0 then
begin
radaV:= MidStr(radaV,2,5);
radaV:= StringReplace(radaV,'''','',[rfReplaceAll]);
end;
with Helios.OpenSQL('SELECT Nazev FROM ' + tblDDZ + ' WHERE RadaDokladu=N' + QuotedStr(radaV) + ' AND DruhPohybuZbo=' + druhV) do
radaPopis:= VarToStr(FieldValues(0));
pgSklad.Visible:= false;
pgSklad.TabVisible:= false;
cbMena.Clear;
cbMena.Items.Add('CZK');
with Helios.OpenSQL('SELECT DISTINCT(Mena) FROM ' + tblKList + ' ORDER BY Mena') do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
cbMena.Items.Add(VarToStr(FieldValues(0)));
Next;
end;
end;
cbMena.ItemIndex:= 0;
VytvorGrid;
if idDZ=0 then
NovyDoklad
else
NactiDoklad;
end;
function TformVydejka.ZjistiKurzDleMeny(mena: ShortString): Extended;
begin
result:= 1;
if mena<>'' then
begin
sql:= 'DECLARE @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,' + QuotedStr(edtDatPrip.Text) + ',104)' + CRLF;
sql:= sql + 'SELECT Kurz FROM ' + tblKList + ' WHERE Datum<=@dt AND Mena=N' + QuotedStr(mena) + ' ORDER BY Datum DESC';
with Helios.OpenSQL(sql) do
result:= StrToFloat(VarToStr(FieldValues(0)));
cbMena.Enabled:= true;
end;
end;
procedure TformVydejka.selCisOrgButtonClick(Sender: TObject);
var mena: ShortString;
sql: WideString;
begin
if Helios.Prenos2(bidCisOrg,'CisloOrg','Nazev', oVar1, oVar2,'','Vyberte organizaci',true,false,false,1) then
begin
if (vTabPol.RecordCount=0) or (idSklad='') then
begin
selCisOrg.Text:= VarToStr(oVar1);
mena:= '';
with Helios.OpenSQL('SELECT Mena FROM ' + tblCOrg + ' WHERE CisloOrg=' + selCisOrg.Text) do
if RecordCount=1 then
mena:= VarToStr(FieldValues(0));
if mena<>'' then
cbMena.ItemIndex:= cbMena.Items.IndexOf(mena)
else
cbMena.ItemIndex:= cbMena.Items.IndexOf('CZK');
selKurz.Text:= FloatToStr(ZjistiKurzDleMeny(mena));
idSklad:= GetSklad;
pgSklad.TabVisible:= idSklad<>'';
selOdber.Text:= VarToStr(oVar2);
end
else
Helios.Error(#1'Na dokladu jsou ji<6A> zadan<61> polo<6C>ky vybran<61>ho Kooperanta, nelze m<>nit Odb<64>ratele.'#1);
end;
if not pgSklad.TabVisible then
vTabSklad.Clear;
end;
procedure TformVydejka.selCisOrgExit(Sender: TObject);
var mena: ShortString;
begin
selCisOrg.Text:= Trim(selCisOrg.Text);
if (vTabPol.RecordCount=0) or (idSklad='') then
begin
if (selCisOrg.Text<>'') then
with Helios.OpenSQL('SELECT Nazev,Mena FROM ' + tblCOrg + ' WHERE CisloOrg=' + selCisOrg.Text) do
if RecordCount>0 then
begin
idSklad:= GetSklad;
pgSklad.TabVisible:= idSklad<>'';
if not VarIsNull(FieldValues(0)) then
selOdber.Text:= VarToStr(FieldValues(0));
mena:= '';
if not VarIsNull(FieldValues(1)) then
mena:= VarToStr(FieldValues(1));
if mena<>'' then
cbMena.ItemIndex:= cbMena.Items.IndexOf(mena)
else
cbMena.ItemIndex:= cbMena.Items.IndexOf('CZK');
selKurz.Text:= FormatFloat('###,##0.0###',ZjistiKurzDleMeny(mena));
end;
end
else
Helios.Error(#1'Na dokladu jsou ji<6A> zadan<61> polo<6C>ky vybran<61>ho Kooperanta, nelze m<>nit Odb<64>ratele.'#1);
if not pgSklad.TabVisible then
vTabSklad.Clear;
end;
procedure TformVydejka.selCisOrgMistoButtonClick(Sender: TObject);
begin
if Helios.Prenos2(bidCisOrg,'CisloOrg','Nazev', oVar1, oVar2,'','Vyberte organizaci',true,false,false,1) then
begin
selCisOrgMisto.Text:= VarToStr(oVar1);
selOdberMisto.Text:= VarToStr(oVar2);
end;
end;
procedure TformVydejka.selCisOrgMistoExit(Sender: TObject);
begin
selCisOrgMisto.Text:= Trim(selCisOrgMisto.Text);
if (selCisOrgMisto.Text<>'') and (selOdberMisto.Text='') then
with Helios.OpenSQL('SELECT Nazev FROM ' + tblCOrg + ' WHERE CisloOrg=' + selCisOrgMisto.Text) do
if RecordCount>0 then
begin
if not VarIsNull(FieldValues(0)) then
selOdberMisto.Text:= VarToStr(FieldValues(0));
end;
NaplnSkladKoop;
end;
procedure TformVydejka.selKurzButtonClick(Sender: TObject);
begin
if cbMena.Text<>'CZK' then
begin
if Helios.Prenos(bidKList,'Kurz',oVar1,'Mena=N' + QuotedStr(cbMena.Text),'Kurzovn<76> l<>stek',True) then
selKurz.Text:= FormatFloat('###,##0.0###',StrToFloat(VarToStr(oVar1)))
else
selKurz.Text:= '1,0';
end
else
Helios.Error(#1'Jako m<>na jsou vybran<61> koruny, vyberte ciz<69> m<>nu.'#1);
end;
procedure TformVydejka.selOdberButtonClick(Sender: TObject);
begin
selCisOrgButtonClick(Sender);
end;
procedure TformVydejka.selOdberMistoButtonClick(Sender: TObject);
begin
selCisOrgMistoButtonClick(Sender);
end;
procedure TformVydejka.viewPolCellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
var idx: integer;
begin
idx:= ACellViewInfo.RecordViewInfo.Index;
btnPolEditClick(Sender);
end;
procedure TformVydejka.viewPolColumnHeaderClick(Sender: TcxGridTableView; AColumn: TcxGridColumn);
begin
ShowMessage('<27><><EFBFBD>ka: ' + IntToStr(AColumn.Width));
end;
procedure TformVydejka.viewSkladCellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
var m,c: Extended;
begin
if vTabSklad.RecordCount>0 then
begin
if not vTabPol.Active then
vTabPol.Open;
vTabPol.Append;
vTabPol.Fields.FieldByName('idSS').AsInteger:= vTabSklad.Fields.FieldByName('idSS').AsInteger;
vTabPol.Fields.FieldByName('idKZ').AsInteger:= vTabSklad.Fields.FieldByName('idKZ').AsInteger;
vTabPol.Fields.FieldByName('SkupZbo').AsString:= vTabSklad.Fields.FieldByName('SkupZbo').AsString;
vTabPol.Fields.FieldByName('regCis').AsString:= vTabSklad.Fields.FieldByName('regCis').AsString;
vTabPol.Fields.FieldByName('Nazev1').AsString:= vTabSklad.Fields.FieldByName('Nazev1').AsString;
vTabPol.Fields.FieldByName('Nazev2').AsString:= vTabSklad.Fields.FieldByName('Nazev2').AsString;
vTabPol.Fields.FieldByName('MJ').AsString:= vTabSklad.Fields.FieldByName('MJ').AsString;
m:= vTabSklad.Fields.FieldByName('Mnozstvi').AsExtended;
c:= vTabSklad.Fields.FieldByName('Prumer').AsExtended;
vTabPol.Fields.FieldByName('Mnozstvi').AsExtended:= m;
vTabPol.Fields.FieldByName('JCbezDaniKc').AsExtended:= c;
if FormMnozstviCena('',m,c,false) then
begin
vTabPol.Fields.FieldByName('Mnozstvi').AsExtended:= m;
vTabPol.Fields.FieldByName('JCbezDaniKc').AsExtended:= c;
end;
vTabPol.Post;
end;
end;
procedure TformVydejka.vTabPolCalcFields(DataSet: TDataSet);
var jc,mn: Extended;
begin
if DataSet.RecordCount<>0 then
begin
mn:= DataSet.FieldByName('Mnozstvi').AsFloat;
jc:= DataSet.FieldByName('JCbezDaniKc').AsFloat;
DataSet.FieldByName('CCbezDPH').AsFloat:= RoundToEx(mn*jc,-2);
end;
end;
end.