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

📄 sy_jyprkdbl.pas

📁 省级集邮品管理ERP
💻 PAS
字号:
{*******************************************************}
{                                                       }
{                 入库依据单补录                      }
{                                                       }
{            中软金马公司版权所有。2002.12前            }
{                                                       }
{            编制:中软金马邮资票品项目开发组           }
{                                                       }
{                                                       }
{*******************************************************}
(*
省级集邮品管理,地市集邮票管理

*)
{
[与零枚票对照]
  表对照
    A 零枚票发货单         -> 集邮票品发货单
    B 零枚出库票品         -> 集邮出库票品
    C 袋数重量表           -> 集邮袋数重量表
    D 包号版号表(出库单)  -> 集邮包号版号(出库单)
  字段对照
    B
     图代码 -> 票品代码
     售价   -> 销价
     面值   -
     原价   +
     进价   +
    D
     进价   +

有关表:
  集邮票品发货单、集邮出库票品、集邮袋数重量表、集邮包号版号(出库单)
数据来源:
  出库单计划号:集邮票品发货单依据单号的GROUP BY
  发货单号:  集邮票品发货单的发货单号
  发货单主信息:集邮票品发货单
  发货单详细信息:集邮出库票品
  包袋:集邮袋数重量表
  包号版本号:集邮包号版号(出库单)
功能:
算法:
  1.输入的库房号必须在库房表中存在
  2.对起始版号、终止版本号数据修改时要较验,即不能重复
  3.当修改完成保存数据时,需要作如下操作:
    A. 装票日期、封装袋数、出库日期、库管员、备注保存到集邮票品发货单中
       修改集邮票品发货单的在途状态为'1'
    B. 记录库存数据
      零枚票品库存
        票品代码:集邮出库票品.票品代码
        库房代码:集邮出库票品.库房号
        原价:集邮出库票品.原价
        进价:集邮出库票品.进价
        销价:集邮出库票品.销价
        库位号:集邮出库票品.库位号
        票品类别:通过票品代码判断(?)
        IF 出库性质 = '待销毁出库' THEN
          待销毁库存 = 待销毁库存 - 集邮出库票品.数量
        ELSE IF 出库性质 = '预付出库' THEN
          预付库存 = 预付库存 - 集邮出库票品.数量
        ELSE 库存总枚数 = 库存总枚数 + 集邮出库票品.数量
        变更标志:NULL(?)
        备注:NULL
      包号版号表(库存)
        起始版号:包号版号表(出库单).起始版本号
        终止版号: 包号版号表(出库单).终止版本号
    C. 记帐
        集邮票总帐表
        集邮票总分户帐表  (集邮票总分户帐明细表)
        集邮票明细分类帐
        集邮票进发存明细帐表
        集邮票明细分类帐(库管员)
        集邮票品库存(库管)
        集邮票品库存(业务部)
更新有关表:
  集邮票品发货单、集邮出库票品、集邮袋数重量表、集邮包号版号(出库单)
备注:
  对操作员要较验权限,不能浏览其它库房的入库单
修改记录:
1。一张单子的总结算金额自动计算 by jhshao 2003.05.07
}
unit SY_JYPRKDBL;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  FORMBASE, ExtCtrls, ModiPanel, StdCtrls, Mask, DBCtrls, Grids, DBGrids,
  CurrEdit, RXDBCtrl, ToolEdit, ComCtrls, Buttons, DBTables, Db,
  RxQuery, RXCtrls;

type
  Pdwdm = ^Tdwdm;
  Tdwdm = record
    dwdm: string;
    dwmc: string;
  end;
  Prkxz = ^Trkxz;
  Trkxz = record
    rkxzdm: string;
    rkxzmc: string;
  end;
  Tfrm_JYPRKDBL = class(TFFormBase)
    ModiPanel1: TModiPanel;
    Panel1: TPanel;
    DBG_fhd: TDBGrid;
    Pnl_edit: TPanel;
    Label3: TLabel;
    Label5: TLabel;
    DS_fhd: TDataSource;
    DS_fhpp: TDataSource;
    DBG_fhpp: TDBGrid;
    Label4: TLabel;
    Qry_fhpp: TQuery;
    Panel4: TPanel;
    XttxTitle: TRxLabel;
    DWMC: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    DBM_bz: TDBMemo;
    Qry_fhd: TQuery;
    USQL_fhd: TUpdateSQL;
    USQL_fhpp: TUpdateSQL;
    DBDE_kdrq: TDBDateEdit;
    DBEdt_fhdh: TDBEdit;
    DBEdt_zbr: TDBEdit;
    DBEdt_jsje: TDBEdit;
    Qry_fhppFHDH: TStringField;
    Qry_fhppTDM: TStringField;
    Qry_fhppSL: TFloatField;
    Qry_fhppSJ: TFloatField;
    Qry_fhppZK: TFloatField;
    Qry_fhppJSJ: TFloatField;
    Qry_fhppZH: TStringField;
    Qry_fhppTJC: TStringField;
    Label6: TLabel;
    Label7: TLabel;
    DBLCBo_dw: TDBLookupComboBox;
    DBLCBo_ckxz: TDBLookupComboBox;
    Qry_dw: TQuery;
    DS_dw: TDataSource;
    DS_ckxz: TDataSource;
    Qry_ckxz: TQuery;
    Qry_fhppJSJE: TFloatField;
    Qry_fhdFHDH: TStringField;
    Qry_fhdDWDM: TStringField;
    Qry_fhdDWMC: TStringField;
    Qry_fhdCKXZ: TStringField;
    Qry_fhdQXDW: TStringField;
    Qry_fhdKDRQ: TDateTimeField;
    Qry_fhdZTZT: TStringField;
    Qry_fhdZBR: TStringField;
    Qry_fhdJSJE: TFloatField;
    Qry_fhdBZ: TStringField;
    Qry_fhdCZBZ: TStringField;
    procedure ModiPanel1BtnClick(Index: TBtnVisible);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Qry_fhppSJGetText(Sender: TField; var Text: string;
      DisplayText: Boolean);
    procedure Qry_fhppSJSetText(Sender: TField; const Text: string);
    procedure Qry_fhppZKChange(Sender: TField);
    procedure Qry_fhppJSJEChange(Sender: TField);
  private
    { Private declarations }
    FDtState: TDataState;
    procedure Save;
    procedure SetState(Value: TdataState);
    procedure DoDelFHD;
{新增,遍历Qry_fhpp计算整个单子的结算金额 by jhshao 2003.05.09}
    function GetJSJE_Total: double;

  public
    { Public declarations }
    recordcount: integer;
    zh: array of string;
    mc: array of string;
    tdm: array of string;
    mz: array of double;
    sj: array of double;


    queding: boolean;
    editpd: boolean;
    insertmode: boolean;
    save1: boolean;
    rkdh: string;
    Saved: Boolean;
  end;

function Show_JYPRKDBL: Boolean;
var
  frm_JYPRKDBL: Tfrm_JYPRKDBL;

implementation

uses datas, pub, SHOW_JYP, SJ_RKDDY;
{$R *.DFM}


function Show_JYPRKDBL: Boolean;
begin
  Application.CreateForm(Tfrm_JYPRKDBL, frm_JYPRKDBL);
  with frm_JYPRKDBL do
  try
    if CheckRight(frm_JYPRKDBL, [Modipanel1]) then
      result := ShowModal = MB_OK;
  finally
    Free;
  end;
end;

procedure Tfrm_JYPRKDBL.SetState(Value: TdataState);
var
  i: integer;
  procedure SetControls(Value: Boolean);
  begin
    DBG_fhd.Enabled := Value;
    DBG_fhpp.ReadOnly := Value;
    DBLCBo_dw.ReadOnly := Value;
    DBLCBo_ckxz.ReadOnly := Value;
    DBEdt_fhdh.ReadOnly := Value;
    DBDE_kdrq.ReadOnly := Value;
    DBEdt_jsje.ReadOnly := Value;
    DBEdt_zbr.ReadOnly := Value;
    DBM_bz.ReadOnly := Value;
  end;
begin
  FDtState := Value;
  ModiPanel1.ChangeMode(FDtState = dtBrowse);
  SetControls(FDtState = dtBrowse);

  for i := 2 to 5 do
    if Value = dtBrowse then
      DBG_fhpp.Columns[i].Color := cl3DLight
    else
      DBG_fhpp.Columns[i].Color := clInfoBK;
end;

procedure Tfrm_JYPRKDBL.DoDelFHD;
begin
  try
    data.DM.StartTransaction;
    with Qry_fhpp do
    begin
      DataSource := nil;
      DisableConstraints;
      while not IsEmpty do
        Delete;
      EnableConstraints;
    end;
    Qry_fhpp.ApplyUpdates;
    Qry_fhd.Delete;
    Qry_fhd.ApplyUpdates;
    data.DM.Commit;
  except
    data.DM.Rollback;
    raise Exception.Create('数据保存错误');
    exit;
  end;
  Qry_fhd.CommitUpdates;
  Qry_fhpp.CommitUpdates;
  Qry_fhpp.DataSource := DS_fhd;
  Qry_fhpp.EnableConstraints;
  SetState(dtBrowse);
end;

procedure Tfrm_JYPRKDBL.Save;
  function DoRefreshFHDH: boolean;
  begin
    Result := true;

    AssignSQLstr(data.Qry_Static, 'select FHDH from TK_JYFHD where FHDH=''' + DBEdt_fhdh.Text + '''');
    data.Qry_Static.Open;
    if not data.Qry_Static.IsEmpty then
    begin
      Result := false;
      CHQMsgBox('该发货单号已存在!');
      DBEdt_fhdh.SetFocus;
      exit;
    end;

    with Qry_fhpp do
    begin
      disablecontrols;
      first;
      while not Eof do
      begin
        edit;
        FieldByName('FHDH').AsString := Qry_fhd.FieldByName('FHDH').AsString;
        if (FieldByName('SL').AsFloat = 0) or (FieldByName('SJ').AsFloat = 0)
          or not ((FieldByName('ZK').AsFloat = 0) xor (FieldByName('JSJ').AsFloat = 0)) then
        begin
          Result := false;
          EnableControls;
          CHQMsgBox('请设置发货单票品的数量及价格!');
          exit;
        end;
        Next;
      end;
      EnableControls;
    end;
  end;
begin
  if Qry_fhd.FieldByName('FHDH').IsNull or Qry_fhd.FieldByName('DWDM').IsNull then
  begin
    CHQMsgBox('发货单号和来源单位不能为空!');
    exit;
  end;
  if Qry_fhpp.FieldByName('FHDH').AsString = #9 then
    if not DoRefreshFHDH then
      exit;
  try
    data.DM.StartTransaction;
    Qry_fhd.FieldByName('DWMC').AsString := DBLCBo_dw.Text;
    Qry_fhd.FieldByName('CZBZ').AsString := '1';
    Qry_fhd.FieldByName('ZTZT').AsString := '1';
    Qry_fhd.ApplyUpdates;
    Qry_fhpp.ApplyUpdates;
    data.DM.Commit;
  except
    data.DM.Rollback;
    exit;
  end;
  Qry_fhd.CommitUpdates;
  Qry_fhpp.CommitUpdates;
  if Qry_fhpp.DataSource = nil then
    Qry_fhpp.DataSource := DS_fhd;
  SetState(dtBrowse);
end;

procedure Tfrm_JYPRKDBL.ModiPanel1BtnClick(Index: TBtnVisible);
var
  i: integer;
begin
  inherited;
  case index of
    bnAdd:
      begin
        queding := false;
        ExeSY_RKDBL_XZPP;
        if queding then
        begin
          Qry_fhd.Append;
          Qry_fhd.FieldByName('QXDW').AsString := VG_UnitID;
          insertmode := true;
          for i := 0 to recordcount - 1 do
          begin
            Qry_fhpp.Append;
            Qry_fhpp.FieldByName('FHDH').asstring := #9;
            Qry_fhpp.FieldByName('TDM').asstring := tdm[i];
            Qry_fhpp.FieldByName('TJC').AsString := mc[i];
            Qry_fhpp.FieldByName('ZH').AsString := zh[i];
            Qry_fhpp.FieldByName('SJ').AsFloat := sj[i];
           {新增,用于一张单子的总结算金额自动计算,有遍历计算故要设置Qry_fhpp为编辑状态 by jhshao 2003.05.09}
            Qry_fhpp.Edit;
            Qry_fhpp.post;
          end;
          insertmode := false;
          SetState(dtEdit);
          Qry_fhpp.DataSource := nil;
        end
        else
          SetState(dtBrowse);
      end;
    bnDelete:
      begin
        if Qry_fhd.IsEmpty then
        begin
          CHQMsgBox('没有可删除的数据!');
          exit;
        end;
        if CHQMsgBox('确定要删除记录吗?', 2) = IDYES then
        begin
          DoDelFHD;
        end;
      end;
    bnEdit:
      begin
        if Qry_fhd.IsEmpty then
        begin
          CHQMsgBox('没有可修改的数据!');
          exit;
        end;
        SetState(dtEdit);
        DBEdt_fhdh.ReadOnly := true;
        Qry_fhpp.DataSource := nil;
        Qry_fhd.Edit;
        Qry_fhpp.Edit;
      end;
    bnSave:
      Save;
    bnCancel:
      if CHQMsgBox('取消编辑, 确定吗?', 2) = IDYES then
      try
        Qry_fhd.CancelUpdates;
        Qry_fhpp.CancelUpdates;
        Qry_fhpp.EnableControls;
        Qry_fhpp.DataSource := DS_fhd;
      finally
        SetState(dtBrowse);
      end;
    bnClose:
      Close;
  end;
end;

procedure Tfrm_JYPRKDBL.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
  if (FDtstate in [dtInsert, dtEdit]) then
    case CHQMsgBox('数据已经编辑,需要保存吗?', 3) of
      IDYES:
        if not Saved then Action := caNone;
      IDCANCEL: Action := caNone;
    end;
end;

procedure Tfrm_JYPRKDBL.FormCreate(Sender: TObject);
begin
  inherited;
  XttxTitle.Caption := '入库依据单补录';
  DWMC.Caption := '使用单位:' + VG_UnitName;
  Qry_fhd.Open;
  Qry_fhpp.Open;
  Qry_dw.Open;
  Qry_ckxz.Open;
  SetState(dtBrowse);
end;

procedure Tfrm_JYPRKDBL.Qry_fhppSJGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  inherited;
  CurrGetText(Sender, Text, DisplayText);
end;

procedure Tfrm_JYPRKDBL.Qry_fhppSJSetText(Sender: TField;
  const Text: string);
begin
  inherited;
  CurrSetText(Sender, Text);
end;

procedure Tfrm_JYPRKDBL.Qry_fhppZKChange(Sender: TField);
begin
  inherited;
  with Qry_fhpp do
  begin
    if Sender.FieldName = 'JSJ' then
    begin
      if Sender.AsFloat <> 0 then
        FieldByName('ZK').AsFloat := 0;
    end;
    if Sender.FieldName = 'ZK' then
    begin
      if Sender.AsFloat <> 0 then
        FieldByName('JSJ').AsFloat := 0;
    end;
    Edit;
    FieldByName('JSJE').AsFloat := FieldByName('SL').AsFloat * (FieldByName('SJ').AsFloat * FieldByName('ZK').AsFloat / 100 + FieldByName('JSJ').AsFloat);
  end;
end;

{新增,遍历Qry_fhpp计算整个单子的结算金额 by jhshao 2003.05.09}
function Tfrm_JYPRKDBL.GetJSJE_Total: double;
var
  l_jsje: double;
  l_dbgPlace: TBookMark;
begin
  l_jsje := 0;

  {取计划单中的分配总数}
  with Qry_fhpp do
  begin
    DisableControls;
    l_dbgPlace := GetBookMark;
    First;
    while not Eof do
    begin
      l_jsje := l_jsje + FieldByName('JSJE').AsFloat;
      Next;
    end;
    EnableControls;
    GotoBookMark(l_dbgPlace);
    FreeBookMark(l_dbgPlace);
  end;

  Result := l_jsje;
end;

procedure Tfrm_JYPRKDBL.Qry_fhppJSJEChange(Sender: TField);
begin
{新增,调用GetJSJE_Total计算整个单子的结算金额 by jhshao 2003.05.09}
  inherited;
  try
    Qry_fhd.FieldByName('JSJE').AsFloat := GetJSJE_Total;
  finally

  end;

end;

end.

⌨️ 快捷键说明

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