stockinfm.~pas

来自「群星医药系统源码」· ~PAS 代码 · 共 670 行 · 第 1/2 页

~PAS
670
字号
unit StockInFm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ceBaseBillFrm, Grids, DBGridEh, DbUtilsEh, EhLibCDS, xEhLibCtl, ActnList,
  ModuleAction, ImgList, TB2Dock, ExtCtrls, RzPanel, TB2Item, TB2Toolbar,
  StdCtrls, RzCmboBx, RzDBBnEd, ComCtrls, RzDTP, RzDBDTP, RzStatus,IMainFrm,
  RzDBStat, Mask, RzEdit, RzDBEdit, DB, DBClient, MConnect, Buttons,
  ckDBClient,DbFuncs, Menus, RzButton,ShowProGress,uDataTypes,ceGlobal,
  ADODB,ComObj;

type
  TFmStockIn = class(TceBaseBillForm)
    dbgStockInDtl: TxDBGridEh;
    Label11: TLabel;
    Label22: TLabel;
    RzDBEdit21: TRzDBEdit;
    RzDBEdit10: TRzDBEdit;
    Label3: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label7: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    edBillID: TRzDBEdit;
    edDate: TRzDBDateTimePicker;
    RzDBEdit1: TRzDBEdit;
    edEmpID: TRzDBButtonEdit;
    edDepot: TRzDBButtonEdit;
    edDepart: TRzDBButtonEdit;
    cbInOutKind: TRzComboBox;
    RzDBEdit2: TRzDBEdit;
    RzDBEdit3: TRzDBEdit;
    Label9: TLabel;
    RzDBEdit4: TRzDBEdit;
    Lab_State: TLabel;
    RzDBEdit5: TRzDBEdit;
    CdsStockIn: TckClientDataSet;
    DsStockIn: TDataSource;
    DComConn: TDCOMConnection;
    CdsStockInDtl: TckClientDataSet;
    DsStockInDtl: TDataSource;
    SpeedButton1: TSpeedButton;
    CdsStockInBillNo: TStringField;
    CdsStockInFDate: TDateTimeField;
    CdsStockInDepotID: TIntegerField;
    CdsStockInDepotNo: TStringField;
    CdsStockInDepotName: TStringField;
    CdsStockInProvNo: TStringField;
    CdsStockInProvName: TStringField;
    CdsStockInInOutKind: TIntegerField;
    CdsStockInEmpNo: TStringField;
    CdsStockInName: TStringField;
    CdsStockInAudit: TStringField;
    CdsStockInGoodsQty: TBCDField;
    CdsStockInGoodsSum: TBCDField;
    CdsStockInRemark: TStringField;
    CdsStockInTransfer: TBooleanField;
    CdsStockInAdsStockInDtl: TDataSetField;
    CdsStockInDtlBillNo: TStringField;
    CdsStockInDtlItemNo: TIntegerField;
    CdsStockInDtlGoodsID: TStringField;
    CdsStockInDtlName: TStringField;
    CdsStockInDtlSpecs: TStringField;
    CdsStockInDtlUnit: TStringField;
    CdsStockInDtlQty: TBCDField;
    CdsStockInDtlprice: TFloatField;
    CdsStockInDtlAmount: TBCDField;
    CdsStockInDtlBerthNo: TStringField;
    CdsStockInDtlGroupNo: TIntegerField;
    CdsStockInDtlBatchNo: TStringField;
    CdsStockInDtlProdDate: TDateTimeField;
    CdsStockInDtlValidDate: TDateTimeField;
    CdsStockInDtlQuality: TStringField;
    CdsStockInDtlPBillNo: TStringField;
    CdsStockInDtlPItemNO: TIntegerField;
    RzDBEdit6: TRzDBEdit;
    Label8: TLabel;
    CdsStockInPBillNO: TStringField;
    CdsStockInCreater: TStringField;
    CdsStockInMender: TStringField;
    CdsStockInGrup: TIntegerField;
    CdsStockInCreattime: TDateTimeField;
    procedure CdsStockInDtlBeforeInsert(DataSet: TDataSet);
    procedure CdsStockInDtlNewRecord(DataSet: TDataSet);
    procedure ActSaveExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CdsStockInReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure SpeedButton1Click(Sender: TObject);
    procedure CdsStockInNewRecord(DataSet: TDataSet);
    procedure ActAddSubItemExecute(Sender: TObject);
    procedure ActDelSubItemExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ActDeleteExecute(Sender: TObject);
    procedure CdsStockInProvNoChange(Sender: TField);
    procedure CdsStockInEmpNoChange(Sender: TField);
    procedure dbgStockInDtlEditButtonClick(Sender: TObject);
    procedure CdsStockInDtlGoodsIDChange(Sender: TField);
    procedure CdsStockInDtlAfterPost(DataSet: TDataSet);
    procedure CdsStockInDtlQtyChange(Sender: TField);
    procedure CdsStockInAfterScroll(DataSet: TDataSet);
    procedure CdsStockInDepotNoChange(Sender: TField);
    procedure ActUpdateExecute(Sender: TObject);
    procedure ActAuditExecute(Sender: TObject);
    procedure ActRevertExecute(Sender: TObject);
    procedure ActFieldLayoutExecute(Sender: TObject);
    procedure ActDataExportExecute(Sender: TObject);
    procedure edDepotButtonClick(Sender: TObject);
    procedure edEmpIDButtonClick(Sender: TObject);
    procedure edDepartButtonClick(Sender: TObject);
    procedure ActInsertExecute(Sender: TObject);
    procedure ActQueryExecute(Sender: TObject);
  private
    { Private declarations }
    CdsFieldProPerty:TCkClientDataSet;
    iClientID,iLastItemNo:Integer;
    slInOutKinds:TStrings;
    LocSetting: PLocSetting;
    bBrowGoods,CanAudit, CanRevert:Boolean;
    BeforeGoodsID,FlagGoodsID,BeforeProvNo,BeforeEmpNo,BeforeDepotNo:String;
    SvrStockIn,SvrCommon:TDispatchConnection;
    Procedure GetInOut;
    procedure ParseGoodsInfo;
  public
    iAppendInOut:Integer;   //iappendInOut 检测是否有新增入库方式>0表示有
  protected
    Function DoSome(cType: PChar; Values: Variant): Variant; override;
  end;

Const
  sInOutKind='Select KindId,KindName From InOutKind Where InOut=0 Order By KindId';
  sFieldProPerty='Select * From SysFieldProPerty '+
      ' Where TableName in(''StockIn'', ''StockInDtl'', ''Goodses'')';

var
  FmStockIn: TFmStockIn;

implementation

uses INOutKindFm,SelectGoodsFrm,FieldsLayoutFrm,DataExportFrm,ViewGoodsPriceFrm,SelectEmpFrm,SelectProvFrm,
     SelectCustFrm,SelectDepartFrm,SelectDepotFrm,SelectBerthFrm;

{$R *.dfm}
procedure TFmStockIn.FormCreate(Sender: TObject);
begin
  Inherited;
  IFmMain.SetActionStatus(ActionList1, hInstance, self.ClassName);
  iAppendInOut:=0;
  CdsFieldProPerty:=TCKClientDataSet.Create(Self);
  slInOutKinds:=TStringList.Create;
  LocSetting := IFmMain.IFmMainEx.GetLocSetting;
  SetGressHint('正在连接药品入库服务器...');
  CanAudit := ActAudit.Enabled;
  CanRevert:= ActCancel.Enabled;
  iClientID:=IFmMain.IFmMainEx.ClientID;
  SvrStockIn:=IFmMain.GetConnection(Handle,'','CkStockSvr.Stock');
  sBillNoList.Text := SvrStockIn.AppServer.GetCurrMonthBills(iClientID, 'StockIn');
  CdsStockIn.RemoteServer := SvrStockIn;
  SetGressHint('正在连接到公用信息服务器...');
  SvrCommon:=IFmMain.GetConnection(Handle,'','CommonSvr.CommonRDM');
  CdsFieldProPerty.ProviderName := 'DspTemp';
  CdsFieldProPerty.RemoteServer := SvrCommon;
  SetGressHint('正在读取用户操作权限...');
  SetLength(FDetailDataSets, 1);
  FDetailDataSets[0] := CdsStockInDtl;
  RepDataSetNames := '药品入库;药品入库明细';
  sRepSection := '药品入库单';
  MasterDataSet:=CdsStockIn;
end;

procedure TFmStockIn.FormShow(Sender: TObject);
var sTableNames:String;
begin
  SetGressHint('初始化本地环境...');
  SetGridEhColor(dbgStockInDtl);
  SysFieldXml(CdsFieldProPerty,sFieldProPerty,'TFmStockIn.Xml');
  SetFieldProperty(CdsFieldProPerty,CdsStockIn, 'StockIn');
  SetFieldProperty(CdsFieldProPerty,CdsStockInDtl, 'StockInDtl,Goodses');
  SetGressHint('读取历史单据...');
  GetInOut;
  SetCurrBillIdx(0);
  inherited;
  FreeGressForm;
end;

procedure TFmStockIn.CdsStockInDtlBeforeInsert(DataSet: TDataSet);
begin
  iLastItemNO := GetFieldMaxInt(CdsStockInDtl, 'ItemNo')+1;
end;

procedure TFmStockIn.CdsStockInDtlNewRecord(DataSet: TDataSet);
begin
  inherited;
  BeforeGoodsID:='';
  CdsStockInDtlItemNo.Value:=iLastItemNO;
  CdsStockInDtlBillNo.Value:=CdsStockInBillNo.Value;
  CdsStockInDtlProdDate.Value:=Date;
  CdsStockInDtlValidDate.Value:=IncMonth(Date,12);
end;

procedure TFmStockIn.ActSaveExecute(Sender: TObject);
Var iIndex:Integer;
begin
  Try
    If  FEditMode=0 Then Exit;
    iIndex:=cbInOutKind.ItemIndex;
    if iIndex<>-1 Then
      CdsStockInInOutKind.Value:=StrToInt(slInOutKinds[iIndex]);
    edDepart.SetFocus;
    Inherited;
  Except
    On E:Exception Do
      Messagebox(Handle,Pchar(E.Message),nil,16);
  End;
End;

procedure TFmStockIn.CdsStockInReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MessageBox(Handle,Pchar(E.Message),'',16);
  Action:=raAbort;
end;

procedure TFmStockIn.SpeedButton1Click(Sender: TObject);
Var
  A,B:Integer;
begin
	if FEditMode=0 then Exit;
  If cbInOutKind.ItemIndex=-1 Then
    A:=0
  Else
    A:=StrToInt(slInOutKinds[cbInOutKind.ItemIndex]);
  B:=GetKindId(0,A,iAppendInOut);
  If iAppendInOut>0 Then
  Begin
    GetInOut;
    iAppendInOut:=0;
  End;
  cbInOutKind.ItemIndex:=slInOutKinds.IndexOf(IntToStr(B));
end;

procedure TFmStockIn.GetInOut;
Var
  A:Variant;
  I, k:Integer;
begin
  //显示出入库方式
  A:=SvrCommon.AppServer.GetNeedValue(iClientID,2,sInOutKind);
  If (Not VarIsNull(A)) And (VarIsArray(A)) Then
  Begin
    cbInOutKind.Items.Clear;
    slInOutKinds.Clear;
    k := VarArrayHighBound(A,2);
    for i:=VarArrayLowBound(A,2) to k do
    Begin
      slInOutKinds.Add(A[0,i]);
      cbInOutKind.Items.Add('['+A[0,i]+']'+A[1,i]);
    End;
  End;
end;

procedure TFmStockIn.CdsStockInNewRecord(DataSet: TDataSet);
Var sBillNo:String;
begin
  CdsStockInFDate.Value := Date;
  sBillNo := BuildBillNo('StockIn');
  CdsStockInBillNo.Value :=sBillNo;
end;

procedure TFmStockIn.ActAddSubItemExecute(Sender: TObject);
begin
  If FEditMode=0 Then Exit;
  IF Not(CdsStockIn.State In dsEditModes) Then Exit;
  CdsStockInDtl.append;
end;

procedure TFmStockIn.ActDelSubItemExecute(Sender: TObject);
begin
  If FEditMode=0 Then Exit;
  If NOt(CdsStockIn.State In dsEditModes) Then Exit;
	if CdsStockInDtl.IsEmpty then Exit;
  CdsStockInDtl.Delete;
end;

procedure TFmStockIn.ActDeleteExecute(Sender: TObject);
begin
  Try
    If CdsStockInTransfer.Value Then Begin
      Messagebox(Handle,Pchar('当前单据已[复核],不能执行删除操作!'),'警告:',64);
      Exit;
    End;
    inherited;
  Except
    On E:Exception Do
      Messagebox(Handle,Pchar(E.Message),'',16);
  End;
end;

procedure TFmStockIn.CdsStockInProvNoChange(Sender: TField);
Var
  sProvNo,sProvName,LogText:String;
begin
  IF FEditMode=0 Then Exit;
  sProvNo:=CdsStockInProvNo.Value;
  If sProvNo='' Then Exit;
  if sProvNo=BeforeProvNo Then Exit;
  BeforeProvNo:=sProvNO;
  sProvName:=VarToStr(SvrCommon.AppServer.GetProvInfo(iClientID,sProvNo,1,'ProvName',LogText));
  CdsStockInProvName.Value:=sProvName;
  If LogText<>'' Then Begin
    Messagebox(Handle,Pchar(LogText),nil,16);
    RzDBEdit2.SetFocus;
    Abort;
  End;
end;

procedure TFmStockIn.CdsStockInEmpNoChange(Sender: TField);
Var
  sEmpNo,sEmpName,LogText:String;
begin
  IF FEditMode=0 Then Exit;
  sEmpNo:=CdsStockInEmpNo.Value;
  If sEmpNo='' Then Exit;
  if sEmpNo=BeforeEmpNo Then Exit;
  BeforeEmpNo:=sEmpNO;
  sEmpName:=VarToStr(SvrCommon.AppServer.GetEmpInfo(iClientID,sEmpNo,1,'Name',LogText));
  CdsStockInName.Value:=sEmpName;
  If LogText<>'' Then Begin
    Messagebox(Handle,Pchar(LogText),nil,16);

⌨️ 快捷键说明

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