.#goodsesfm.pas.1.36

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

36
800
字号
  sUnitList.Free;
  sHypoKinds.Free;
  sDosetypeList.Free;
  Action:=CaFree;
end;

procedure TFmGoodses.ActExitExecute(Sender: TObject);
begin
  Close;
end;

procedure TFmGoodses.ActPrintExecute(Sender: TObject);
begin
  if not cdsGoodsPrices.Active then cdsGoodsPrices.Open;
  if not cdsGoodsBatchRebate.Active then cdsGoodsBatchRebate.Open;
  SelRepPrint(Name, [cdsGoodses, cdsGoodsPrices,cdsGoodsBatchRebate],
    '药品基本资料;药品单价表;商品批量折扣', ActDesignReport.Enabled);

//  SelRepPrint(Name, [cdsGoodses, cdsGoodsPrices,cdsGoodsBatchRebate],
//    '药品基本资料;药品单价表;销售相关信息;商品批量折扣;库存相关信息;采购相关相息', ActDesignReport.Enabled);
end;

procedure TFmGoodses.ActQueryExecute(Sender: TObject);
begin
//
end;

procedure TFmGoodses.cdsGoodsesBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
var val: Variant;
begin
  val := OwnerData;
  OwnerData := VarArrayCreate([0,1], varVariant);
  OwnerData[0] := val;
  OwnerData[1] := vOwnerData;
end;

procedure TFmGoodses.cdsGoodsesAfterOpen(DataSet: TDataSet);
begin
  with DataSet as TckClientDataSet do begin
    if VarIsNull(vOwnerData) then begin
      last;
      vOwnerData:=Fieldbyname('GoodsID').Value;
    end;
  end;  
end;

procedure TFmGoodses.cdsGoodsesBeforeOpen(DataSet: TDataSet);
begin
  vOwnerData := null;
end;

procedure TFmGoodses.cdsGoodsesNewRecord(DataSet: TDataSet);
begin
  cdsGoodsesUsefulUnit.Value := '月';
end;

procedure TFmGoodses.ActMoreExecute(Sender: TObject);
Var
  abK:TBookMark;
begin
  Try
    If PacketRecs<0 Then
      CdsGoodses.PacketRecords:=-1
    Else
      CdsGoodses.PacketRecords:=PacketRecs;
    If (Not bTrueEof) Then
    Begin
      abK:=CdsGoodses.GetBookmark;
      if abk<>PublicMark Then
        Abk:=PublicMark;
      Try
        if (CdsGoodses.GetNextPacket<CdsGoodses.PacketRecords) Then
        Begin
          bTrueEof:=True;
          ActMore.Enabled:=False;
        End;
        CdsGoodses.Last;
        vOwnerData:=CdsGoodses.FieldByname('GoodsID').Value;
        CdsGoodses.GotoBookmark(abK);
        CdsGoodses.Next;
      Finally
        CdsGoodses.FreeBookmark(abK);
      End;
    End;
  Except
    On E:exception Do
      Messagebox(Handle,Pchar(E.Message),'',16);
  End;
end;

procedure TFmGoodses.Tab1TabChanged(Sender: TObject);
begin
  NoteBook1.PageIndex := Tab1.ActiveTab;
end;

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

procedure TFmGoodses.CdsGoodsesPurchModeGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
{  case Sender.AsInteger of
    0: Text := '购销';
    1: Text := '代销';
    else
      raise Exception.Create('指定了无效的采购方式!');
  end;
}
end;

procedure TFmGoodses.CdsGoodsesPurchModeSetText(Sender: TField;
  const Text: String);
begin
{  if Text='购销' then
    Sender.AsInteger := 0
  else if Text='代销' then
    Sender.AsInteger := 1
  else
    raise Exception.Create('指定了无效的采购方式!');
}
end;

procedure TFmGoodses.cdsGoodsBatchRebateNewRecord(DataSet: TDataSet);
begin
  CdsGoodsBatchRebateGoodsID.Value:=CdsGoodsesGoodsID.Value;
end;

procedure TFmGoodses.cdsGoodsesAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  PublicMark:=CdsGoodses.GetBookmark;
end;

procedure TFmGoodses.cdsGoodsPricesNewRecord(DataSet: TDataSet);
begin
  CdsGoodsPricesGoodsID.Value:=CdsGoodsesGoodsID.Value;
end;

procedure TFmGoodses.cdsGoodsesAfterScroll(DataSet: TDataSet);
begin
  if ckAutoViewPrice.Checked or chkAutoShowBatRebate.Checked then begin
    Timer1.Enabled := false;
    Timer1.Interval:= 300;
    Timer1.Enabled := true;
  end;
end;

procedure TFmGoodses.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  if ckAutoViewPrice.Checked and (Notebook1.ActivePage = 'GoodsPrices') then
    ActViewPrice.Execute;
  if chkAutoShowBatRebate.Checked and (NoteBook1.ActivePage = 'GoodsBatchRebate') then
    ActViewBatchRebate.Execute;
end;

procedure TFmGoodses.ActViewPriceExecute(Sender: TObject);
begin
  //在主表为空或处于新增状态时,不能显示记录,否则出现排序错。
  if (cdsGoodses.IsEmpty)or(cdsGoodses.State = dsInsert) then Exit;
  with cdsGoodsPrices do begin
    Params.Items[0].Value := cdsGoodsesGoodsID.Value;
    if Active then
      Refresh
    else
      Open;
  end;
end;

procedure TFmGoodses.ActViewBatchRebateExecute(Sender: TObject);
begin
  //在主表为空或处于新增状态时,不能显示记录,否则出现排序错。
  if (cdsGoodses.IsEmpty)or(cdsGoodses.State = dsInsert) then Exit;
  with cdsGoodsBatchRebate do begin
    Params.Items[0].Value := cdsGoodsesGoodsID.Value;
    if Active then
      Refresh
    else
      Open;
  end;
end;

procedure TFmGoodses.ActAddBatchRebateExecute(Sender: TObject);
var ID,N,U1,U2: string;
begin
  if cdsGoodses.IsEmpty then Exit;
  with cdsGoodsBatchRebate do begin
    Params.Items[0].Value := cdsGoodsesGoodsID.Value;
    if Active then close;
    Open;
    ID := cdsGoodsesGoodsID.Value;
    N := cdsGoodsesName.Value;
    U1 := cdsGoodsesUnit1.Value;
    U2 := cdsGoodsesUnit2.Value;
    if TFmEditBatchRebate.Execute('新增批量折扣',ID,N,U1,U2,TClientDataSet(cdsGoodsBatchRebate)) then
    begin
      Post;
      if ApplyUpdates(0)>0 then
        MessageBox(Handle,'更新数据出错!',nil,MB_ICONHAND);
    end;
  end;
end;

procedure TFmGoodses.ActEdtBatchRebateExecute(Sender: TObject);
var ID,N,U1,U2: string;
begin
  if cdsGoodses.IsEmpty then Exit;
  if (cdsGoodsBatchRebate.IsEmpty)or(dbgBatchRebate.SelectedField = nil) then exit;
  with cdsGoodsBatchRebate do begin
    Params.Items[0].Value := cdsGoodsesGoodsID.Value;
    ID := cdsGoodsesGoodsID.Value;
    N := cdsGoodsesName.Value;
    U1 := cdsGoodsesUnit1.Value;
    U2 := cdsGoodsesUnit2.Value;
    if TFmEditBatchRebate.Execute('修改批量折扣',ID,N,U1,U2,TClientDataSet(cdsGoodsBatchRebate),true) then
    begin
      Post;
      if ApplyUpdates(0)>0 then
        MessageBox(Handle,'更新数据出错!',nil,MB_ICONHAND);
    end;
  end;
end;

procedure TFmGoodses.ActDelBatchRebateExecute(Sender: TObject);
begin
  if cdsGoodses.IsEmpty then Exit;
  if (cdsGoodsBatchRebate.IsEmpty)or(dbgBatchRebate.SelectedField = nil) then exit;
  if MessageBox(Handle,'真的要删除批量折扣记录吗?','提示',MB_YESNO or MB_ICONQUESTION)=IDNO then exit;
  cdsGoodsBatchRebate.Delete;
  if cdsGoodsBatchRebate.ApplyUpdates(0)>0 then
      MessageBox(Handle,'更新数据出错!',nil,MB_ICONHAND);
end;

procedure TFmGoodses.ActChkBatchRebateExecute(Sender: TObject);
var iMin: integer;
    sID, sRet: string;
begin
  with cdsGoodsBatchRebate do begin
    if (not Active)or(IsEmpty) then exit;
    sID := FieldByName('GoodsID').AsString;
    if SvrGoodses.AppServer.CheckBatchRebate(iClientID,sID,iMin,sRet) then
      MessageBox(Handle,PChar(sRet),'提示',MB_ICONINFORMATION)
    else begin
      Locate('BatMinQty',iMin,[]);
      MessageBox(Handle,PChar(sRet),nil,MB_ICONHAND);
    end;
  end;
end;

procedure TFmGoodses.ActModifyPriceExecute(Sender: TObject);
begin
  if cdsGoodses.IsEmpty then Exit;
  if cdsGoodsPrices.Params.Items[0].Value<>cdsGoodsesGoodsID.Value then
    ActViewPrice.Execute;
  if ShowPopupData(self, cdsGoodsPrices, '', '药品价格设定', 'GoodsID,ModeNo,ModeName,')=mrOK then begin
    if cdsGoodsPrices.ApplyUpdates(0)>0 then
      Application.MessageBox('数据更新失败!', '消息', MB_ICONINFORMATION);
  end else begin
    cdsGoodsPrices.CancelUpdates;
  end;
end;

procedure TFmGoodses.ActViewPriceModesExecute(Sender: TObject);
begin
  IFmMain.OnAction(Sender);
end;

procedure TFmGoodses.cdsGoodsesCalcFields(DataSet: TDataSet);
var iRate1, iRate2: Integer;
begin
  iRate1 := cdsGoodsesConvRate1.Value;
  iRate2 := cdsGoodsesConvRate2.Value;
  if (iRate1=iRate2) then
    cdsGoodsesConvRate.AsString := ''
  else
    cdsGoodsesConvRate.AsString := IntToStr(iRate1)+'/'+IntToStr(iRate2);
end;

procedure TFmGoodses.Button1Click(Sender: TObject);
begin
  DataExportFrm.ExportData([cdsGoodses, cdsGoodsPrices], '商品资料,商品价格设定', '');
end;

procedure TFmGoodses.dbgGoodsesDblClick(Sender: TObject);
begin
  if ckViewPriceOnDbclick.Checked then
    ActViewPrice.Execute
  else
    ActModify.Execute;
end;

procedure TFmGoodses.BtnPopMenuClick(Sender: TObject);
var tp:TPoint;
begin
	tp.x:=BtnPopMenu.left;
	tp.y:=BtnPopMenu.Top+BtnPopMenu.Height+1;
	tp:=ClientToScreen(tp);
	TopPopmenu.Popup(tp.x,tp.Y);
end;

procedure TFmGoodses.ActFieldsLayoutExecute(Sender: TObject);
begin
  SetFieldsLayOut(LocSetting^.FieldLayoutCfgFile, Name,
                  [dbgGoodses,dbgGoodsPrices,dbgBatchRebate],
                  '药品资料;药品价格设定;批量销售折扣');
end;

procedure TFmGoodses.ActDataExportExecute(Sender: TObject);
begin
	ExportData([cdsGoodses, cdsGoodsPrices, cdsGoodsBatchRebate],
             '药品资料;药品价格设定;批量销售折扣', '');
end;

procedure TFmGoodses.cdsGoodsesUnit2Change(Sender: TField);
begin
  if (cdsGoodsesUnit2.AsString='') and not cdsGoodsesUnit2.IsNull then
    cdsGoodsesUnit2.AsVariant := null;
end;

procedure TFmGoodses.edQuickSearchChange(Sender: TObject);
const
  MatchFields : array[0..4] of string=('GoodsId','Pym','Name','BarCode','BarCode2');
var
  i: integer;
begin
  If not chkAutoMatch.Checked then exit;
  i :=0;
  while (i<5)and(not cdsGoodses.Locate(MatchFields[i],edQuickSearch.Text,[loCaseInsensitive ,loPartialKey])) do
    inc(i);
end;

procedure TFmGoodses.edQuickSearchKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
  MatchFields : array[0..4] of string=('GoodsId','Pym','Name','BarCode','BarCode2');
var
  i: integer;
begin
  i :=0;
  If Key=13 then
  while (i<5)and(not cdsGoodses.Locate(MatchFields[i],edQuickSearch.Text,[loCaseInsensitive ,loPartialKey])) do
    inc(i);
  if (key=VK_UP)or(key=VK_DOWN) then begin
    PostMessage(dbgGoodses.Handle,WM_KEYDOWN,Key,0);
    key :=0;
  end;
end;

procedure TFmGoodses.FormActivate(Sender: TObject);
begin
  edQuickSearch.SetFocus;
end;

procedure TFmGoodses.dbgGoodsesKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=13 then edQuickSearch.SetFocus;
end;

procedure TFmGoodses.cdsGoodsBatchRebateBeforeRefresh(DataSet: TDataSet);
begin
  with cdsGoodsBatchRebate do
  if ApplyUpdates(0)>0 then CancelUpdates;
end;

procedure TFmGoodses.cdsGoodsBatchRebatePostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  if  E.Message = 'Key violation.' then
    MessageBox(Handle,'不能增加重复的批量折扣规则!',nil,MB_ICONHAND);
  Action := daAbort;
  TClientDataSet(DataSet).CancelUpdates;
end;

procedure TFmGoodses.mnAutoPinYinClick(Sender: TObject);
var i: Integer;
begin
  i := Application.MessageBox('确定自动生成拼音码吗?'#13#13'要为所有的药品重新生成拼音码请按[是]'#13'要为所有未指定拼音码的药品生成拼音码请按[否]'#13'按[取消]放弃此操作!', '消息', MB_ICONQUESTION+MB_YESNOCANCEL);
  if i=IDCANCEL then Exit;
  SetGressHint('正在自动生成拼音码,请稍候...');
  try
    SvrGoodses.AppServer.AutoBuildPym(iClientID, i=IDYES);
    cdsGoodses.Refresh;
  finally
    FreeGressForm;
  end;
end;

initialization
  RegisterClass(TFmGoodses);
finalization
  UnRegisterClass(TFmGoodses);
end.

⌨️ 快捷键说明

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