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

📄 ss_jypkccsh.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{*******************************************************}
{                                                       }
{                    集邮票库存初始化                   }
{                                                       }
{            中软金马公司版权所有。2002.12前            }
{                                                       }
{            编制:中软金马邮资票品项目开发组           }
{                                                       }
{                                                       }
{*******************************************************}
(*
本模块在省级系统管理模块里面调用。

*)

unit SS_JYPKCCSH;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, DBGridEhExport, SqlStrings, Db, DBTables, RxQuery, RXCtrls,
  StdCtrls, Buttons, ExtCtrls, ModiPanel, Grids, DBGrids, RXDBCtrl, DBCtrls, ClipBrd,
  FieldComboBox, ComCtrls, EHGrids, DBGridEh;

type
  Tfrm_JYPKCCSH = class(TForm)
    pnl_Init: TPanel;
    Panel2: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    edt_Locate: TEdit;
    RxLbl_Title: TRxLabel;
    DWMC: TLabel;
    ds_init: TDataSource;
    pnl_Title: TPanel;
    pnl_Bottom: TPanel;
    bbtn_Cancel: TBitBtn;
    bbtn_Save: TBitBtn;
    bbtn_Edit: TBitBtn;
    bbtn_Add: TBitBtn;
    bbtn_Find: TBitBtn;
    bbtn_Exit: TBitBtn;
    bbtn_Replace: TBitBtn;
    qry_init: TQuery;
    upSQL_Init: TUpdateSQL;
    qry_Tmp: TQuery;
    fcb_KF: TFieldComboBox;
    qry_initZH: TStringField;
    qry_initTMC: TStringField;
    qry_initTPMZ: TFloatField;
    qry_initTPSJ: TFloatField;
    qry_initJJ: TFloatField;
    qry_initXJ: TFloatField;
    qry_initTS: TFloatField;
    qry_initZK: TFloatField;
    qry_initJSJ: TFloatField;
    qry_initKWH: TStringField;
    qry_initTDM: TStringField;
    qry_initTEMP: TFloatField;
    qry_initPPDM: TStringField;
    pnl_Hint: TPanel;
    lbl_Search: TLabel;
    bbtn_Print: TBitBtn;
    sp_Init: TStoredProc;
    pgb_State: TProgressBar;
    lbl_State: TLabel;
    qry_initJJJE: TFloatField;
    qry_initXJJE: TFloatField;
    qry_initMZJE: TFloatField;
    rxdb_Init: TDBGridEh;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure bbtn_CancelClick(Sender: TObject);
    procedure bbtn_FindClick(Sender: TObject);
    procedure qry_initTSChange(Sender: TField);
    procedure qry_initXJChange(Sender: TField);
    procedure qry_initJJChange(Sender: TField);
    procedure bbtn_EditClick(Sender: TObject);
    procedure bbtn_AddClick(Sender: TObject);
    procedure bbtn_SaveClick(Sender: TObject);
    procedure qry_initZKChange(Sender: TField);
    procedure qry_initJSJChange(Sender: TField);
    procedure qry_initKWHChange(Sender: TField);
    procedure bbtn_ReplaceClick(Sender: TObject);
    procedure edt_LocateKeyPress(Sender: TObject; var Key: Char);
    procedure qry_initBeforeInsert(DataSet: TDataSet);
    procedure qry_initBeforeDelete(DataSet: TDataSet);
    procedure FormShow(Sender: TObject);
    procedure qry_initGetText(Sender: TField; var Text: string;
      DisplayText: Boolean);
    procedure qry_initSetText(Sender: TField; const Text: string);
    procedure bbtn_PrintClick(Sender: TObject);
    procedure fcb_KFChange(Sender: TObject);
    procedure rxdb_InitGetFooterParams(Sender: TObject; DataCol,
      Row: Integer; Column: TColumnEh; AFont: TFont;
      var Background: TColor; var Alignment: TAlignment;
      State: TGridDrawState; var Text: string);
    procedure rxdb_InitDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
    procedure DBGridEh1GetFooterParams(Sender: TObject; DataCol,
      Row: Integer; Column: TColumnEh; AFont: TFont;
      var Background: TColor; var Alignment: TAlignment;
      State: TGridDrawState; var Text: string);
  private
    { Private declarations }
    function Init_Public_Data: Boolean; {初始化公共数据}
    function Judge_Modify: Boolean; {判断是否能够进入修改状态,即初始化日期是否设定,以及是否进入已经结束}

    function Show_Data: Boolean; {显示初始化数据}

    procedure Add_Init_Data; {新增同一票品的不同进价}

    procedure Set_Data; {批量设置进价等}
    procedure Set_ZK(Value: Double); {批量设置折扣}
    procedure Set_JSJ(Value: Double; AGDZ: boolean = true); {批量设置结算价,固定值(true)or进价(false)}
    procedure Set_JJ1(Value: Double; Over_Write: Boolean); {批量设置进价,依据折扣计算}
    procedure Set_JJ2(Value: Double; Over_Write: Boolean); {批量设置进价,直接赋值}
    procedure Set_XJ(Over_Write: Boolean); {批量设置销价}

    function Save_Init_Data: Boolean; {保存初始化数据}
    function Test_JJ: Boolean; {判断进价是否存在相同的}
    function Test_XJ: Boolean; {测试销价,是否在其他库房中存在不同进价}

    function Delete_Cur_Record: Boolean; {删除当前记录}
    function Update_Record: Boolean; {向数据库中插入不为0的数据}
    function Delete_Record: Boolean; {从数据库中删除为0的记录}
    function Call_StoreProc: Boolean; {调用存储过程,更新其他表,本步骤不加在事务内,同时出错不显式提示}

    procedure Cancel_Init_Data; {取消保存初始化数据,恢复原来的状态}
    procedure Set_State(State: Integer); {设置界面控件状态}
    procedure DisJE(AType: Integer); {设置金额显示,0-进价金额;1-销价金额;2-面值金额}

  public
    { Public declarations }
  end;

function Show_JYPKCCSH: Boolean;

var
  frm_JYPKCCSH: Tfrm_JYPKCCSH;

  Edit_State: Integer; {指出当前处于的状态,0:浏览,1:修改,2:阅看状态}
  Find_SQL: string;


implementation

{$R *.DFM}

{集邮票、零枚票、集邮品、市场购入票 库存初始化模块,使用外连接进行数据读取,使用Query最后保存数据
调用四个查询模块进行票品代码的查询,使用四个批量设置模块进行进价、销价、折扣、结算价等的处理

 涉及数据库表:
   集邮票品库存(记帐员)(TYS_JYPPKC)
   集邮品品库存(记帐员)(TYS_YPPKC)
   零枚票品库存(TYS_TXPPKC)
   购入票品库存(记帐员)(TYS_GRPPKC)

   系统基本信息表(邮资票品信息表)(TB_YZPPXXB)
   杂表(TGS_ZB)

   石玉琢 2001.09.26补}

uses
  Pub,SS_JYP_Init_PLSR, SS_JYP_Init_Search;


function Show_JYPKCCSH: Boolean;
begin
  with Tfrm_JYPKCCSH.Create(Application) do
  try
    if Init_Public_Data then
      ShowModal;
  finally
    free;
  end;
  Result := True;
end;


{判断是否能够进入修改状态,即初始化日期是否设定,以及是否进入已经结束}
function Tfrm_JYPKCCSH.Judge_Modify: Boolean;
begin
  with qry_Tmp do
  begin
    Close;
    SQL.Text := 'Select ZFXZ from TGS_ZB where DM=''jyp_csh_n''';
    Open;
    if Trim(FieldByName('ZFXZ').AsString) = '' then
    begin
      CHQMsgBox('初始化日期没有设定!请进行初始化日期设定,然后才能够进行库存初始化!');
      Result := False;
      Exit;
    end;

    Close;
    SQL.Text := 'Select ZFXZ from TGS_ZB where DM=''jyp_csh_y''';
    Open;
    if Trim(FieldByName('ZFXZ').AsString) = '' then
    begin
      CHQMsgBox('初始化日期没有设定!请进行初始化日期设定,然后才能够进行库存初始化!');
      Result := False;
      Exit;
    end;

    Close;
    SQL.Text := 'Select ZFXZ from TGS_ZB where DM=''jyp_csh_js''';
    Open;
    if (UpperCase(Trim(FieldByName('ZFXZ').AsString)) = 'YY') or
      (UpperCase(Trim(FieldByName('ZFXZ').AsString)) = 'Y') then
    begin
      CHQMsgBox('初始化已经完成,现在只能进行查看!');
      Result := False;
      Exit;
    end;
  end;
  Result := True;
end;

{-------------------------------------------------------------------------------}
{初始化公共数据}
function Tfrm_JYPKCCSH.Init_Public_Data: Boolean;
begin
  {添加库房}
  with qry_Tmp do
  begin
    Close;
    SQL.Text := 'select a.KFDM,a.KFMC from TGS_KFB a,TGS_KFRYDZB b where a.KFDM=b.KFDM and b.YGDM=''' + VG_UserID + ''' order by a.KFDM';
    Open;

    if IsEmpty then
    begin
      CHQMsgBox('当前用户没有操作库房的权限!');
      Result := False;
      Exit;
    end;

    fcb_KF.ClearAll;
    while not eof do
    begin
      fcb_KF.Items.Add(FieldByName('KFMC').AsString);
      fcb_KF.FieldItems.Add(FieldByName('KFDM').AsString);
      Next;
    end;
    fcb_KF.ItemIndex := 0
  end;
  Result := True;
end;

{设置界面控件状态}
procedure Tfrm_JYPKCCSH.Set_State(State: Integer);
begin
  Edit_State := State;
  case State of
    0: {浏览} {}
      begin
        fcb_KF.Enabled := True;
        rxdb_Init.ReadOnly := True;
        bbtn_Find.Enabled := True;
        bbtn_Edit.Enabled := True;
        bbtn_Replace.Enabled := False;
        bbtn_Add.Enabled := False;
        bbtn_Save.Enabled := False;
        bbtn_Cancel.Enabled := False;
      end;
    1: {修改} {}
      begin
        fcb_KF.Enabled := False;
        rxdb_Init.ReadOnly := False;
        bbtn_Find.Enabled := False;
        bbtn_Edit.Enabled := False;
        bbtn_Replace.Enabled := True;
        bbtn_Add.Enabled := True;
        bbtn_Save.Enabled := True;
        bbtn_Cancel.Enabled := True;
      end;
    2: {只能看,不能进入任何修改状态} {}
      begin
        fcb_KF.Enabled := True;
        rxdb_Init.ReadOnly := True;
        bbtn_Find.Enabled := True;
        bbtn_Edit.Enabled := False;
        bbtn_Replace.Enabled := False;
        bbtn_Add.Enabled := False;
        bbtn_Save.Enabled := False;
        bbtn_Cancel.Enabled := False;
      end;
  end;
end;

{-------------------------------------------------------------------------------}
{显示初始化数据}
{其中PPDM读出用来判断以前在数据库中是否存在该记录,Temp用来判断是否修改,决定是否保存}
function Tfrm_JYPKCCSH.Show_Data: Boolean;
var
  l_kfdm: string;
begin
  l_kfdm := fcb_KF.FieldString;

  with qry_init do
  begin
    Close;
    SQL.Text := 'select b.ZH, b.TMC, b.TPMZ, b.TPSJ, a.JJ, a.XJ, a.TS, a.ZK, a.JSJ, a.KWH, b.TDM,0 Temp,a.PPDM,b.FXRQ, '#13#10 +
      'a.JJ*a.TS JJJE, a.XJ*a.TS XJJE, b.TPMZ*a.TS MZJE from (Select KFDM,PPDM,JJ, XJ, TS, ZK, JSJ, KWH from TYS_JYPPKC where KFDM = ''' + l_kfdm + ''') a, TB_YZPPXXB b'#13#10 +
      'where a.PPDM(+) = b.TDM ' + Find_SQL + ' order by b.TDM';
    Open;
  end;
  Result := True;
end;

{-------------------------------------------------------------------------------}
{绘制DBGrid颜色,当库存大于0,则改变颜色}
procedure Tfrm_JYPKCCSH.rxdb_InitDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
  if qry_initTS.AsInteger > 0 then
    if (gdSelected in State) and (rxdb_Init.Focused = True) then
      rxdb_Init.Canvas.Font.Color := clWhite
    else
      rxdb_Init.Canvas.Font.Color := $00A56E3A;

  rxdb_Init.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

{==========================输入时实时控制输入选项===============================}
{屏蔽DBGrid自动增加记录的功能}
procedure Tfrm_JYPKCCSH.qry_initBeforeInsert(DataSet: TDataSet);
begin
  Abort;
end;

{屏蔽DBGrid自动删除记录的功能}
procedure Tfrm_JYPKCCSH.qry_initBeforeDelete(DataSet: TDataSet);
begin
  Abort;
end;

{-------------------------------------------------------------------------------}
{库存改变的时候,如果大于0,则设置当前行为空色}
procedure Tfrm_JYPKCCSH.qry_initTSChange(Sender: TField);
var
  Old_Value: Integer;
  v_s: string;
begin
  if qry_initTS.AsInteger < 0 then
  begin
    CHQMsgBox('库存数量不能为负!');
    Old_Value := 0;
    if qry_init.FieldByName('PPDM').AsString <> '' then
    try
      Old_Value := qry_initTS.OldValue;
    except
    end;
    qry_initTS.AsInteger := Old_Value;
    Abort;
  end;
  qry_init.FieldByName('TEMP').AsInteger := 1;
  DisJE(0);
  DisJE(1);
  DisJE(2);

end;
{-------------------------------------------------------------------------------}
{对于销价,相同票品销价必须相同}
procedure Tfrm_JYPKCCSH.qry_initXJChange(Sender: TField);
var
  Old_Value: Double;
  cur_pos: Pointer;
  l_TDM: string;
  l_XJ: double;
begin
  {判断销价是否合法}
  if qry_initXJ.AsFloat < 0 then
  begin
    CHQMsgBox('销价不能为负!');
    Old_Value := 0;
    if qry_init.FieldByName('PPDM').AsString <> '' then
    try
      Old_Value := qry_initXJ.OldValue;
    except
    end;
    qry_initXJ.OnChange := nil;
    qry_initXJ.AsFloat := Old_Value;
    qry_initXJ.OnChange := qry_initXJChange;
    Abort;
  end;

  qry_init.FieldByName('TEMP').AsInteger := 1;
  DisJE(1);
//  rxdb_Init1.DisableScroll;

  {统一销价}
  with qry_init do
  begin
    qry_initXJ.OnChange := nil;
    cur_pos := GetBookmark;
    try
      l_XJ := FieldByName('XJ').AsFloat;
      l_TDM := FieldByName('TDM').AsString;

      DisableControls;
      while not Eof do
      begin
        if FieldByName('TDM').AsString = l_TDM then
        begin
          Edit;
          FieldByName('XJ').AsFloat := l_XJ;
          FieldByName('TEMP').AsInteger := 1;
          Next;
        end
        else
          Break;
      end;
      GotoBookmark(cur_pos);

      Prior;
      while not Bof do
      begin
        if FieldByName('TDM').AsString = l_TDM then
        begin
          Edit;
          FieldByName('XJ').AsFloat := l_XJ;
          FieldByName('TEMP').AsInteger := 1;
          Prior;
        end
        else
          Break;
      end;
    finally
      GotoBookmark(cur_pos);
      FreeBookmark(cur_pos);

      qry_initXJ.OnChange := qry_initXJChange;
      EnableControls;

//      rxdb_Init1.EnableScroll;
    end;
  end;
end;

{-------------------------------------------------------------------------------}
{判断进价的输入}
procedure Tfrm_JYPKCCSH.qry_initJJChange(Sender: TField);
var
  Old_Value: Double;
begin
  {判断进价是否合法}
  if qry_initJJ.AsFloat < 0 then
  begin
    CHQMsgBox('进价不能为负!');
    Old_Value := 0;
    if qry_init.FieldByName('PPDM').AsString <> '' then
    try
      Old_Value := qry_initJJ.OldValue;
    except
    end;
    qry_initJJ.OnChange := nil;
    qry_initJJ.AsFloat := Old_Value;
    qry_initJJ.OnChange := qry_initJJChange;
    Abort;
  end;

  qry_init.FieldByName('TEMP').AsInteger := 1;
  DisJE(0);
end;

procedure Tfrm_JYPKCCSH.DisJE(AType: Integer); {设置金额显示,0-进价金额;1-销价金额;2-面值金额}
begin
  case AType of
    0: //进价金额;
      Qry_init.FieldByName('JJJE').AsFloat := Qry_init.FieldByName('JJ').AsFloat * Qry_init.FieldByName('TS').AsFloat;
    1: //销价金额;
      Qry_init.FieldByName('XJJE').AsFloat := Qry_init.FieldByName('XJ').AsFloat * Qry_init.FieldByName('TS').AsFloat;
    2: //面值金额
      Qry_init.FieldByName('MZJE').AsFloat := Qry_init.FieldByName('TPMZ').AsFloat * Qry_init.FieldByName('TS').AsFloat;
  end;
end;

{-------------------------------------------------------------------------------}
{折扣}
procedure Tfrm_JYPKCCSH.qry_initZKChange(Sender: TField);
var
  Old_Value: Double;
begin
  {判断折扣是否合法}
  if (qry_initZK.AsFloat < 0) or (qry_initZK.AsFloat > 100) then
  begin
    CHQMsgBox('折扣必须在0~100之间!');
    Old_Value := 0;
    if qry_init.FieldByName('PPDM').AsString <> '' then
    try

⌨️ 快捷键说明

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