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.čí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žství'; 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.čí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žství'; Width:= 70; end; with viewSklad.Columns[8] do begin DataBinding.FieldName:= 'Prumer'; DataBinding.ValueTypeClass:= TcxFloatValueType; Caption:= 'Průměrná 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ž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žit položku dokladu, kontaktujte sprá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žit hlavičku dokladu, kontaktujte sprá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žit položku dokladu, kontaktujte sprá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žit doklad, neprošel formální 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ům lze vydávat pouze přednastavené materiály' + CRLF + '(záložka 3-Sklady kooperantů).'#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ž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áhněte záhlaví sloupců, podle kterých chcete přehled seskupit.'); viewPol.OptionsView.NoDataToDisplayInfoText:= ''; viewPol.OptionsView.GroupByBox:= False; viewSklad.OptionsView.NoDataToDisplayInfoText:= ''; viewSklad.OptionsView.GroupByBox:= False; idx:= 0; while idx0 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ž zadané položky vybraného Kooperanta, nelze měnit Odbě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ž zadané položky vybraného Kooperanta, nelze měnit Odbě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í 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é koruny, vyberte cizí 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('Šíř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.