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

📄 sy_ck_lmp.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 4 页
字号:
{*******************************************************}
{                                                       }
{              零枚出库计划单制定模块                   }
{                                                       }
{            中软金马公司版权所有。2002.06              }
{                                                       }
{                   编制:侯华敏                        }
{                                                       }
{                                                       }
{*******************************************************}

(*==============================================================================
本模块在省级零枚票管理模块 计划管理部分的出库计划单制定/单品种多去向出库计划单制定 菜单调用
涉及数据表部分说明:
    1、 出库性质:'10'-分配出库;
    2、 零枚票出库计划单表TYS_TXPCKJHDB中的ZT:0-未处理,2-已签批,
    1-已处理 (TK_TXFHD 中的HDR 为空时-未复核【计算理论库存时需要减去】,TK_TXFHD 中的HDR 不为空时-已经复核 )
   【TK_TXFHD中的YJDH 为TYS_TXPCKJHDB的出库计划单号】
    3、 计算理论库存=零枚票品库存TYS_TXPPKC中的库存-TYS_TXPCKJHDB表中的处理状态为(0,2) 的分配数量
    -TK_TXFHD 中未复核的计划单;
    4、纪_计内_分配计划(封片)TY_JJNFPJH_FP中的邮资类代码为套或者图代码的前三位,即票品类别
    5、主要涉及的表:
      a、读取数据: 零枚票品库存TYS_TXPPKC,纪_计内_分配计划(零枚)TY_JJNFPJH_LM【普通邮票、零枚】,
         纪_计内_分配计划(封片)TY_JJNFPJH_FP【封片简】
      b、 写入数据:零枚票出库计划单表TYS_TXPCKJHDB
                    零枚票出库计划单票品表TYS_TXCKJHDPPB

程序说明:
    1、提供普通邮票、封片简、零枚的分配出库计划单制定;
    2、进入本模块时,默认查询出一周内的计划分配单,并且可以查看明细;对未签批的
    计划单可以修改、删除、签批;对于已经签批的计划单可以取消签批;对于已经处理的计划,
    不可以进行任何操作;
    3、新增计划单时,调用SY_CK_LMP_Add模块,返回票品的代码。名称、售价、计算价、折扣、
    及库房、分配数量等;
    4、对出库总金额、结算总金额进行计算得出;
    5、可以添加、删除同一计划分配单的分配单位,对于新添加的分配单位,分配数量默认为0;
    6、保存前首先判断是否可以出库【分配数量是否大于理论库存、输入数量是否为0】,
    7、对未签批的计划单可以进行签批,更新zt为2,批准人;
    8、对已经签批还未处理的计划单可以取消签批,并且进行修改、删除等处理;
    9、折扣和结算价互斥,其中必定有一个为0或者为空;

侯华敏  2002.06.
修改记录
修改,进价销价结算价结算总金额出库总金额,小数点后保留3位 by jhshao 2003.05.07
===============================================================================*)

unit SY_CK_LMP;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, RXCtrls, ToolEdit, CurrEdit, Mask, DBCtrls,
  EHGrids, DBGridEh, FieldComboBox, Spin, ComCtrls, Db, DBTables, Grids,
  DBGrids;

type
  TFrm_SY_CK_LMP = class(TForm)
    XttxTitle: TRxLabel;
    Panel3: TPanel;
    bbtn_Close: TBitBtn;
    bbtn_Print: TBitBtn;
    bbtn_QP: TBitBtn;
    pgc_LM: TPageControl;
    tbs_List: TTabSheet;
    tbs_Detail: TTabSheet;
    dbgEh_Detail: TDBGridEh;
    Panel4: TPanel;
    Label5: TLabel;
    Label8: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    DBE_PZR: TDBEdit;
    DBE_ZBR: TDBEdit;
    DBE_ZDRQ: TDBEdit;
    CE_KC: TCurrencyEdit;
    dbg_List: TDBGridEh;
    bbtn_Search: TBitBtn;
    qry_List: TQuery;
    ds_List: TDataSource;
    qry_Detail: TQuery;
    ds_Detail: TDataSource;
    usql_Detail: TUpdateSQL;
    usql_List: TUpdateSQL;
    sp_DH: TStoredProc;
    qry_Tmp: TQuery;
    qry_DetailCKJHDH: TStringField;
    qry_DetailDWDM: TStringField;
    qry_DetailPPDM: TStringField;
    qry_DetailKFDM: TStringField;
    qry_DetailPPMC: TStringField;
    qry_DetailJJ: TFloatField;
    qry_DetailXJ: TFloatField;
    qry_DetailZK: TFloatField;
    qry_DetailJSJ: TFloatField;
    qry_DetailFPSL: TFloatField;
    qry_DetailFPSL_OLD: TFloatField;
    qry_DetailSDATE: TDateTimeField;
    qry_DetailDWMC: TStringField;
    qry_DetailKFMC: TStringField;
    qry_DetailJSJE: TFloatField;
    qry_DetailCKZJE: TFloatField;
    lbl_color_0: TLabel;
    lbl_color_2: TLabel;
    lbl_color_1: TLabel;
    Label10: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    bbtn_CancelQP: TBitBtn;
    Bevel2: TBevel;
    dbnv_List: TDBNavigator;
    Panel1: TPanel;
    bbtn_Add: TBitBtn;
    bbtn_Del: TBitBtn;
    bbtn_Modify: TBitBtn;
    bbtn_AddDW: TBitBtn;
    bbtn_DeleteDW: TBitBtn;
    bbtn_Save: TBitBtn;
    bbtn_Cancel: TBitBtn;
    Panel2: TPanel;
    rg_Round: TRadioGroup;
    chk_Round: TCheckBox;
    rg_Round_Style: TRadioGroup;
    lbl_BZGG: TLabel;
    fcb_BZGG: TFieldComboBox;
    Edit1: TEdit;
    Label11: TLabel;
    DBEdit2: TDBEdit;
    Label2: TLabel;
    DBEdit1: TDBEdit;
    Label9: TLabel;
    DBEdit3: TDBEdit;
    Label12: TLabel;
    procedure bbtn_AddClick(Sender: TObject);
    procedure bbtn_AddDWClick(Sender: TObject);
    procedure bbtn_SearchClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure rg_RoundClick(Sender: TObject);
    procedure dbg_ListDblClick(Sender: TObject);
    procedure bbtn_CancelClick(Sender: TObject);
    procedure qry_ListAfterScroll(DataSet: TDataSet);
    procedure qry_DetailBeforeDelete(DataSet: TDataSet);
    procedure qry_DetailBeforeInsert(DataSet: TDataSet);
    procedure bbtn_SaveClick(Sender: TObject);
    procedure bbtn_ModifyClick(Sender: TObject);
    procedure bbtn_DelClick(Sender: TObject);
    procedure bbtn_QPClick(Sender: TObject);
    procedure bbtn_DeleteDWClick(Sender: TObject);
    procedure qry_DetailBeforePost(DataSet: TDataSet);
    procedure qry_DetailFPSLValidate(Sender: TField);
    procedure qry_DetailFPSLSetText(Sender: TField; const Text: String);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure dbg_ListDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
    procedure qry_DetailJJGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    procedure bbtn_CancelQPClick(Sender: TObject);
    procedure bbtn_PrintClick(Sender: TObject);
    procedure qry_DetailZKSetText(Sender: TField; const Text: String);
    procedure qry_DetailJSJSetText(Sender: TField; const Text: String);
    procedure chk_RoundClick(Sender: TObject);
    procedure dbgEh_DetailGetFooterParams(Sender: TObject; DataCol,
      Row: Integer; Column: TColumnEh; AFont: TFont;
      var Background: TColor; var Alignment: TAlignment;
      State: TGridDrawState; var Text: String);
    procedure qry_DetailJSJGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
  private
    procedure SetState(A_Enabled: boolean);                 {设置界面可修改状态}
    procedure Add_CKJHD(A_Source_PP, A_Source_KF: TQuery);  {新制定出库计划单,基本信息的读入}
    function Create_DH(A_BILLID, A_SORTCODE, A_DEPARTMENT,
      A_CYEAR: string): string;                             {调用存储过程,生成单号}
    procedure Save_Info;                                    {保存出库信息}
    function ShowTheoryKC(A_PPDM, A_JJ: string): Integer;         {取理论库存}
    procedure GetGG(A_Type, A_PPDM: string);                {取得凑整的规格}
    procedure SetRounding;                                  {凑包凑版调用}
    procedure SetRoundSL(A_Round, A_Round_Style, A_SingleDest: Integer); {分配数量的凑整处理}
    function GetRoundNumber(A_source, A_SingleDest,
      A_type: Integer): Integer;                            {返回凑整后的数据}
    function Can_CK(var A_Caption: string): boolean;        {是否可以出库}
    procedure AddDW(A_dbg: TDBGrid);                        {新添加的单位}
    procedure ShowList(A_ShowModal: Boolean; A_CKJHDH: string); {查询条件模块的调用,并且是否显示窗体}
    function GetFPSL_Total: Integer;                        {取计划单中的分配总数}
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_SY_CK_LMP: TFrm_SY_CK_LMP;

implementation

{$R *.DFM}

uses
  Datas,
  pub,
  SY_CK_LMP_Add,
  SY_CK_LMP_DW,
  SY_CK_LMP_Sele,
  SY_CK_LMP_Print;

var
  VL_Ban_GG: Integer; {取得该票品的版的规格}                {}
  VL_CKJH: PRec_CKJH; {计划单——查询条件}                  {}
  VL_CKJHDH: string; {用来判断新增或者修改}                 {}
  VL_TheoryKC, VL_FPSL_Modify: Integer; {不包括正在新增或者修改的分配数量的理论库存、修改时未修改前的分配数量} {}

  {TFrm_SY_CK_LMP}

{-------------------------------------------------------------------------------}
{初始化}
procedure TFrm_SY_CK_LMP.FormCreate(Sender: TObject);
var
  l_SysDate: TDate;
begin
  l_sysDate := GetSysDate;                                  {取服务器日期}

  {初始状态设置}
  pgc_LM.ActivePageIndex := 0;
  rg_RoundClick(nil);
  SetState(False);                                          {设置界面可修改状态}

  {查询本周的计划分配单}
  New(VL_CKJH);
  with VL_CKJH^ do
  begin
    JHDH.Checked := False;                                  {计划单号模糊查询}
    JHDH.Text := '';
    RQ.Checked := True;                                     {起止日期}
    RQ.FromDate := l_SysDate - 7;
    RQ.ToDate := l_SysDate;
    SQL := ''
  end;

  ShowList(False, '');                                      {查询条件模块的调用,并且是否显示窗体}
end;

{-------------------------------------------------------------------------------}
{释放资源}
procedure TFrm_SY_CK_LMP.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  {询问}
  if bbtn_Save.Enabled then
    if Application.MessageBox('正在对出库计划单进行修改,是否取消修改并且退出?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
    begin
      Action := caNone;
      Exit;
    end;

  Dispose(VL_CKJH);
  qry_Detail.Close;
  qry_List.Close;
end;

{-------------------------------------------------------------------------------}
{出库计划单的明细更新}
procedure TFrm_SY_CK_LMP.qry_ListAfterScroll(DataSet: TDataSet);
begin
  (* 签批和取消签批在权限控制中处理

   {是否可以进行签批}
    if qry_List.FieldByName('ZT').AsString = '0' then
      bbtn_QP.Enabled := True
    else
      bbtn_QP.Enabled := False;

    {是否可以进行取消签批}
    if qry_List.FieldByName('ZT').AsString = '2' then
      bbtn_CancelQP.Enabled  := True
    else
      bbtn_CancelQP.Enabled  := False;
  *)

    {打开明细信息}
  with qry_Detail do
  begin
    Close;
    SQL.Text := ' select a.CKJHDH, a.DWDM, a.PPDM, a.KFDM, a.PPMC, a.JJ /100 JJ, a.XJ/100 XJ, a.ZK, ' +
      '   decode(a.JSJ,null, (a.ZK/100) * a.XJ* a.FPSL , 0, (a.ZK/100) * a.XJ* a.FPSL ,a.JSJ* a.FPSL)/100 JSJE, ' +
      ' a.XJ* a.FPSL/100 CKZJE, a.JSJ/100 JSJ, a.FPSL, a.FPSL FPSL_OLD , ' +
      '  a.SDATE, b.DWJC DWMC, c.KFMC  from TYS_TXCKJHDPPB a, TGS_GXDWSJB b, TGS_KFB c ' +
      '  where a.DWDM = b.DWDM and c.KFDM = a.KFDM  ' +
      ' and a.CKJHDH = ' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString) +
      '  order by b.PXM ';
    Open;
  end;

  {理论库存}
  ce_KC.Value := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100)); {不包括正在新增或者修改的分配数量的理论库存}
  VL_FPSL_Modify := GetFPSL_Total;                          {修改时未修改前的分配数量}
  VL_TheoryKC := Trunc(ce_KC.Value) + VL_FPSL_Modify;
end;

{-------------------------------------------------------------------------------}
{不允许删除}
procedure TFrm_SY_CK_LMP.qry_DetailBeforeDelete(DataSet: TDataSet);
begin
  Abort;
end;

{-------------------------------------------------------------------------------}
{只允许程序插入数据}
procedure TFrm_SY_CK_LMP.qry_DetailBeforeInsert(DataSet: TDataSet);
begin
  Abort;
end;

{-------------------------------------------------------------------------------}
{保存原有的分配数量}
procedure TFrm_SY_CK_LMP.qry_DetailBeforePost(DataSet: TDataSet);
begin
  qry_Detail.Edit;
  qry_Detail.FieldByName('FPSL_OLD').AsString := qry_Detail.FieldByName('FPSL').AsString;
  {※※※※切不可用post语句※※※}
end;

{-------------------------------------------------------------------------------}
{出库总金额和结算金额以元显示}
procedure TFrm_SY_CK_LMP.dbgEh_DetailGetFooterParams(Sender: TObject;
  DataCol, Row: Integer; Column: TColumnEh; AFont: TFont;
  var Background: TColor; var Alignment: TAlignment; State: TGridDrawState;
  var Text: String);
begin
  if Trim(Text) = '' then
    Exit;

  try
    if (DataCol = 7) or (DataCol = 8) then                  {出库总金额和结算金额以元显示}
      Text := FormatFloat('¥#,##0.00', StrToFloat(Text));
  except

  end;
end;

{-------------------------------------------------------------------------------}
{面值,售价,出库总金额,计算总金额以元显示}
procedure TFrm_SY_CK_LMP.qry_DetailJJGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
{出库计划单进价销价,小数点后保留3位 by jhshao 2003.05.07}
  if Trim(Sender.AsString) = '' then
    Exit;

  try
    if DisplayText then                                     {显示状态}
    begin
      if Sender.AsString <> '' then
        Text := FormatFloat('¥#,##0.000', Sender.AsFloat);
    end
    else                                                    {输入状态}
      Text := FormatFloat('#0.###', Sender.AsFloat)
  except

  end;

end;

{-------------------------------------------------------------------------------}
{折扣输入时的合法性判断,以及和结算价的互斥}
procedure TFrm_SY_CK_LMP.qry_DetailZKSetText(Sender: TField;
  const Text: String);
var
  l_SetTextEvent: TFieldSetTextEvent;
begin
  l_SetTextEvent := qry_DetailZK.OnSetText;
  qry_DetailZK.OnSetText := nil;                            {防止用鼠标点击其他记录时递归调用}

  if Trim(Text) = '' then
  begin
    Sender.AsString := Text;
    qry_DetailZK.OnSetText := l_SetTextEvent;               {防止用鼠标点击其他记录时递归调用}
    Exit;
  end
  else                                                      {结算价的互斥}
    qry_Detail.FieldByName('JSJ').AsString := '0';

  try
    if (StrToFloat(Text) >= 1000) or (StrToFloat(Text) <= 0) then
      Abort;                                                {触发abort异常}
    Sender.AsString := Text;

    {用折扣计算出结算金额}
    with qry_Detail do
    begin
      Edit;
      if (FieldByName('ZK').AsString <> '') and (FieldByName('FPSL').AsString <> '')
        and (FieldByName('XJ').AsString <> '') then
        FieldByName('JSJE').AsFloat := (FieldByName('ZK').AsFloat / 100) * FieldByName('FPSL').AsInteger
          * FieldByName('XJ').AsFloat;

⌨️ 快捷键说明

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