⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basebilledit.pas

📁 进销存·完整的·有数据库的·非常完整·只得参考
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit BaseBillEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ComCtrls, DBData, ExtCtrls, dxCntner, dxEditor, dxEdLib,
  dxDBELib, dxExEdtr, dxTL, dxDBCtrl, dxDBGrid, Mask, ImgList, Db, dxDBEdtr,
  ADODB, dxBar, Variants, KsSkinButtons, KsSkinForms, KsSkinLabels,
  KsSkinPanels, BaseForm, EditForm, Menus, dxDBTLCl, dxGrClms, se_controls;

type
  TfrmBaseBillEdit = class(TfrmBaseForm)
    gridMain: TdxDBGrid;
    Panel1: TSeSkinPanel;
    lblCaption: TSeSkinLabel;
    dsMaster: TDataSource;
    dsList: TDataSource;
    pnlBillTop: TSeSkinPanel;
    ADOSetMaster: TADODataSet;
    ADOSetList: TADODataSet;
    dxBarManager1: TdxBarManager;
    bbPrev: TdxBarButton;
    bbNext: TdxBarButton;
    bbIns: TdxBarButton;
    bbEdit: TdxBarButton;
    bbDel: TdxBarButton;
    bbSetup: TdxBarButton;
    bbPrint: TdxBarButton;
    PopupMenu1: TdxBarPopupMenu;
    pbbPrint: TdxBarButton;
    pbbPrintView: TdxBarButton;
    pbbPrintCustom: TdxBarButton;
    pbbPrintInit: TdxBarButton;
    bbOk: TSeSkinButton;
    bbExit: TSeSkinButton;
    GridPopMenu: TdxBarPopupMenu;
    bbCopy: TdxBarButton;
    procedure bbExitClick(Sender: TObject);
    procedure pbbPrintClick(Sender: TObject);
    procedure pbbPrintViewClick(Sender: TObject);
    procedure pbbPrintCustomClick(Sender: TObject);
    procedure pbbPrintInitClick(Sender: TObject);
    procedure bbPrintClick(Sender: TObject);
    procedure gridMainKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure bbPrevClick(Sender: TObject);
    procedure bbNextClick(Sender: TObject);
    procedure bbInsClick(Sender: TObject);
    procedure bbDelClick(Sender: TObject);
    procedure bbEditClick(Sender: TObject);
    procedure gridMainMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure bbOkClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure gridMainCustomDraw(Sender: TObject; ACanvas: TCanvas;
      ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn;
      const AText: string; AFont: TFont; var AColor: TColor; ASelected,
      AFocused: Boolean; var ADone: Boolean);
  private
    { Private declarations }
  public
    bReturn: Boolean;
    { Public declarations }
  protected
    lID, lMode, lSelectMode, lOneRet: Integer;
    bDrawFullGrid: Boolean;
    function CheckUnRegister: Boolean;
    procedure GridButtonClick(Sender: TObject; AbsoluteIndex: Integer);
    procedure GridSelectPrice(Sender: TObject; AbsoluteIndex: Integer);
    procedure GetDataField(var sFieldName, sCaption, sWidth, sNoDisPlay, sReadOnly: string);
    procedure SetBillDisPlay(sDisPlay: string);
    procedure SetBillReadOnly(sRead: string);
    procedure SaveGirdWidth;
    procedure SetDrawGridSummary(dxGrid: TdxDBGrid);
    procedure GridDrawSummaryFooter(Sender: TObject; ACanvas: TCanvas; ARect:
      TRect; var AText: string; var AAlignment: TAlignment; AFont: TFont; var AColor:
      TColor; var ADone: Boolean);
  end;

implementation

uses SysPublic;

{$R *.DFM}

function TfrmBaseBillEdit.CheckUnRegister: Boolean;
begin
  Result := False;
  if not bSoftRegister and (GetDataSetCount('SELECT * FROM BillIndex') > 100) then
  begin
    ShowMsg('你使用的是未注册版,您录入的单据已超过100张,不能继续录入,请注册或购买正版!');
    Result := True;
  end;
end;

procedure TfrmBaseBillEdit.GridButtonClick(Sender: TObject; AbsoluteIndex: Integer);
var
  sSql, sSelect, sPeiCi, sWareID, sUnitItem: string;
  lOrder: Integer;
begin
  sSelect := BaseSelect(BASE_WARE, 1, gridMain.EditingText, lSelectMode, lOneRet);
  sWareID := GetCommaStr(sSelect, 1);
  sPeiCi := GetCommaStr(sSelect, 2);
  if StrToInt2(sWareID) = 0 then
  begin
    gridMain.CancelEditor;
    gridMain.Repaint;
    gridMain.ShowEditor;
    Exit;
  end;
  if (ADOSetList.State <> dsEdit) and (ADOSetList.State <> dsInsert) then ADOSetList.Edit;
  ADOSetList.FieldByName('WareID').AsInteger := StrToInt2(sWareID);
  ADOSetList.FieldByName('WareCode').AsString := FieldIdToName('Ware', sWareID, 'UserCode');
  ADOSetList.FieldByName('WareName').AsString := FieldIdToName('Ware', sWareID, 'Name');
  ADOSetList.FieldByName('WareUnit').AsString := FieldIdToName('Ware', sWareID, 'Unit');
  ADOSetList.FieldByName('Model').AsString := FieldIdToName('Ware', sWareID, 'Model');
  ADOSetList.FieldByName('Spec').AsString := FieldIdToName('Ware', sWareID, 'Spec');
  ADOSetList.FieldByName('Area').AsString := FieldIdToName('Ware', sWareID, 'Area');
  //选择双单位
  if bUseTwoUnit then
  begin
    sUnitItem := FieldIdToName('Ware', sWareID, 'Unit') + #13 + FieldIdToName('Ware', sWareID, 'Unit2');
    ChangColumnType(gridMain, gridMain.ColumnByFieldName('WareUnit'), TdxDBGridPickColumn);
    TdxDBGridPickColumn(gridMain.ColumnByFieldName('WareUnit')).Items.Text := sUnitItem;
    TdxDBGridPickColumn(gridMain.ColumnByFieldName('WareUnit')).DropDownListStyle := True;
  end
  else
  begin
    gridMain.ColumnByFieldName('WareUnit').ReadOnly := True;
    gridMain.ColumnByFieldName('WareUnit').Color := clInfoBk;
  end;
  ADOSetList.FieldByName('Price').AsString := FieldIdToName('Ware', sWareID, 'Pos_Price');
  if lSelectMode = 1 then
  begin
    lOrder := StrToInt2(GetIniValue(frmData.ADOConnet, 'OutOrder')); //读成本算法
    if lOrder = 0 then
      sSql := 'SELECT Sum(Total)/iif(Sum(Number)=0,1,Sum(Number)) as ConstPrice FROM  WareStock WS WHERE WS.WareID=' + sWareID
    else
      sSql := 'SELECT Price as ConstPrice FROM  WareStock WS WHERE WS.WareID=' + sWareID + ' and Ws.Order=' + sPeiCi;
    ADOSetList.FieldByName('ConstPrice').AsString := SqlToFieldValue(sSql, 'ConstPrice');
    case lMode of
      SALE_ORDER_EDIT, SALE_FORMAL_EDIT, SALE_READY_EDIT, SALE_POS_EDIT:
        ADOSetList.FieldByName('PeiCi').AsInteger := StrToInt2(sPeiCi);
    end;
  end;
  case lMode of
    SALE_POS_EDIT:
      begin
        ADOSetList.FieldByName('Number').AsFloat := 1;
        with gridMain do
          if isEof or (DataLink.DataSet.RecNo = DataLink.DataSet.RecordCount) then
            DataLink.DataSet.Append
          else
            DataLink.DataSet.Next;
        Exit;
      end;
  end;
  if gridMain.FocusedColumn < gridMain.ColumnCount - 1 then
    gridMain.FocusedColumn := gridMain.FocusedColumn + 1;
end;

procedure TfrmBaseBillEdit.GridSelectPrice(Sender: TObject; AbsoluteIndex: Integer);
var
  sP1, sP2, sSql, s0, s1, s2, s3, s4: string;
  lWareID, lIndex: Integer;
  ADOSetTmp: TADODataSet;
  tsList: TStrings;
begin
  sP1 := '';
  sP2 := '';
  tsList := TStringList.Create;
  lWareID := ADOSetList.FieldByName('WareID').AsInteger;
  if lWareID <= 0 then Exit;
  sSql := 'Select * From Ware WHERE ID=' + IntToStr(lWareID);

  ADOSetTmp := TADODataSet.Create(nil);
  ADOSetTmp.LockType := ltReadOnly;
  OpenDataSet(ADOSetTmp, sSql);

  if not ADOSetTmp.IsEmpty then
  begin
    s0 := Trim(ADOSetTmp.FieldByName('Pos_Price').AsString);
    s1 := Trim(ADOSetTmp.FieldByName('Price1').AsString);
    s2 := Trim(ADOSetTmp.FieldByName('Price2').AsString);
    s3 := Trim(ADOSetTmp.FieldByName('Price3').AsString);
    s4 := Trim(ADOSetTmp.FieldByName('Price4').AsString);
  end;
  sP1 := '参考售价 :' + s0 + #13 + '预设售价1:' + s1 + #13 + '预设售价2:' + s2 + #13 +
    '预设售价3:' + s3 + #13 + '预设售价4:' + s4;
  sP2 := s0 + #13 + s1 + #13 + s2 + #13 + s3 + #13 + s4;
  tsList.Text := sP2;
  if ADOSetTmp.Active then ADOSetTmp.Close;
  ADOSetTmp.Free;
  lIndex := GetListBox('选择商品预设售价', sP1, 0, 'LISTBOX');
  if (lIndex >= 0) and (lIndex <= tsList.Count) then
  begin
    ADOSetList.Edit;
    ADOSetList.FieldByName('Price').AsString := tsList.Strings[lIndex];
  end
  else
  begin
    gridMain.CancelEditor;
    gridMain.Repaint;
    gridMain.ShowEditor;
  end;
end;

procedure TfrmBaseBillEdit.GetDataField(var sFieldName, sCaption, sWidth,
  sNoDisPlay, sReadOnly: string);
var
  sSql: string;
  ADOSetTmp: TADODataSet;
  sFieldNameS, sCaptionS, sWidthS, sNoDisPlayS, sReadOnlyS: string;
begin
  ADOSetTmp := nil;
  sFieldNameS := '';
  sCaptionS := '';
  sWidthS := '';
  sNoDisPlayS := '';
  sReadOnlyS := '';
  sSql := 'SELECT * FROM BillSetup WHERE MODE=' + IntToStr(lMode) +
    ' ORDER BY UserID';

  ADOSetTmp := TADODataSet.Create(ADOSetTmp);
  ADOSetTmp.LockType := ltReadOnly;
  OpenDataSet(ADOSetTmp, sSql);
  if not ADOSetTmp.IsEmpty then
    while not ADOSetTmp.Eof do
    begin
      if sFieldName <> '' then
        sFieldNameS := sFieldNameS + ADOSetTmp.FieldByName(sFieldName).AsString
          + ',';
      if sCaption <> '' then
      begin
        if Trim(ADOSetTmp.FieldByName('CustomName').AsString) = '' then
          sCaptionS := sCaptionS + ADOSetTmp.FieldByName(sCaption).AsString + ','
        else
          sCaptionS := sCaptionS + ADOSetTmp.FieldByName('CustomName').AsString
            + ',';
      end;
      if sWidth <> '' then
        sWidthS := sWidthS + ADOSetTmp.FieldByName(sWidth).AsString + ',';
      if (sFieldName <> '') and (not ADOSetTmp.FieldByName(sNoDisPlay).AsBoolean) then
        sNoDisPlayS := sNoDisPlayS + ADOSetTmp.FieldByName(sFieldName).AsString
          + ',';
      if (sFieldName <> '') and ADOSetTmp.FieldByName(sReadOnly).AsBoolean then
        sReadOnlyS := sReadOnlyS + ADOSetTmp.FieldByName(sFieldName).AsString +
          ',';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -