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

📄 sy_ck_lmp.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 4 页
字号:
      begin
        lbl_BZGG.Visible := False;
        fcb_BZGG.Visible := False;
        rg_Round_Style.Visible := True;
        l_SingleDest := VL_Ban_GG;
      end;
    2: {不用凑整数}                                         {}
      begin
        lbl_BZGG.Visible := False;
        fcb_BZGG.Visible := False;
        rg_Round_Style.Visible := False;
      end;
  end;


  if not qry_Detail.IsEmpty then
  begin
    if chk_Round.Checked then                               {所有单位}
      SetRounding {凑包凑版调用}                            {}
    else                                                    {仅对当前单位适用}
      with qry_Detail do
      begin
        BeforePost := nil;
        Edit;
        if rg_Round.ItemIndex = 2 then {不凑}               {}
          FieldByName('FPSL').AsInteger := FieldByName('FPSL_OLD').AsInteger
        else
          FieldByName('FPSL').AsInteger :=
            GetRoundNumber(FieldByName('FPSL_OLD').AsInteger, l_SingleDest, rg_Round_Style.ItemIndex); {返回凑整后的数据}
        Post;
        BeforePost := qry_DetailBeforePost;
      end;

    {显示出修改后的理论库存}
    ce_KC.Value := VL_TheoryKC - GetFPSL_Total;             {显示的理论库存=理论库存 -  分配数量 }
  end;
end;

{-------------------------------------------------------------------------------}
{新制定出库计划单}
procedure TFrm_SY_CK_LMP.bbtn_AddClick(Sender: TObject);
var
  l_ModalResult: Integer;
begin
  with TFrm_SY_CK_LMP_Add.Create(Application) do
  try
    l_ModalResult := ShowModal;
    if l_ModalResult = mrOK then
      Add_CKJHD(qry_PP, qry_DWFP);
  finally
    Free;
  end;

  if l_ModalResult <> mrOK then
    Exit;

  VL_CKJHDH := '';                                          {新增}
  GetGG(qry_List.FieldByName('TYPE').AsString, qry_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
  SetState(True);                                           {设置界面可修改状态}
end;

{-------------------------------------------------------------------------------}
{新制定出库计划单,基本信息的读入}
procedure TFrm_SY_CK_LMP.Add_CKJHD(A_Source_PP, A_Source_KF: TQuery);
begin
  {增加零枚票出库计划单表TYS_TXPCKJHDB}
  with qry_List do
  begin
    Append;
    FieldByName('ZH').AsString := A_Source_PP.FieldByName('ZH').AsString;
    FieldByName('PPMC').AsString := A_Source_PP.FieldByName('PPMC').AsString;
    FieldByName('TYPE').AsString := A_Source_PP.FieldByName('TYPE').AsString;
    FieldByName('CKXZ').AsString := '10';                   {出库性质}
    FieldByName('CKXZMC').AsString := '分配出库';           {出库性质}
    FieldByName('ZBR').AsString := VG_USERName;             {调用公共模块}
    FieldByName('ZDRQ').AsDateTime := GetSysDate;           {调用公共模块}
    FieldByName('ZT').AsString := '0';
    Post;
  end;

  qry_Detail.BeforeInsert := nil;

  {零枚票出库计划单票品表TYS_TXCKJHDPPB}
  with A_Source_KF do
  begin
    First;
    while not Eof do
    begin
      qry_Detail.Append;
      qry_Detail.FieldByName('DWDM').AsString := FieldByName('DWDM').AsString;
      qry_Detail.FieldByName('DWMC').AsString := FieldByName('DWMC').AsString;
      qry_Detail.FieldByName('KFDM').AsString := A_Source_PP.FieldByName('KFDM').AsString;
      qry_Detail.FieldByName('KFMC').AsString := A_Source_PP.FieldByName('KFMC').AsString;
      qry_Detail.FieldByName('PPDM').AsString := A_Source_PP.FieldByName('TUDM').AsString;
      qry_Detail.FieldByName('PPMC').AsString := A_Source_PP.FieldByName('PPMC').AsString;
      qry_Detail.FieldByName('ZK').AsString := A_Source_PP.FieldByName('ZK').AsString;
      if Trim(A_Source_PP.FieldByName('JJ').AsString) <> '' then
        qry_Detail.FieldByName('JJ').AsFloat := A_Source_PP.FieldByName('JJ').AsFloat / 100;
      if Trim(A_Source_PP.FieldByName('XJ').AsString) <> '' then
        qry_Detail.FieldByName('XJ').AsFloat := A_Source_PP.FieldByName('XJ').AsFloat / 100;
      if Trim(A_Source_PP.FieldByName('JSJ').AsString) <> '' then
        qry_Detail.FieldByName('JSJ').AsFloat := A_Source_PP.FieldByName('JSJ').AsFloat / 100;
      qry_Detail.FieldByName('FPSL').AsString := FieldByName('SL').AsString;
      qry_Detail.Post;
      Next;
    end;
  end;

  qry_Detail.BeforeInsert := qry_DetailBeforeInsert;

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

{-------------------------------------------------------------------------------}
{删除计划单}
procedure TFrm_SY_CK_LMP.bbtn_DelClick(Sender: TObject);
begin
  if qry_Detail.IsEmpty then
    Exit;

  if not (qry_List.FieldByName('ZT').AsString = '0') then
  begin
    Application.MessageBox(Pchar('该计划分配单已经签批,不能删除!'), '提示', 48 + mb_ok);
    Exit;
  end;

  {询问}
  if Application.MessageBox('是否要删除该出库计划单?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
    Exit;

  try
    Data.DM.StartTransaction;

    {删除零枚票出库计划单票品表TYS_TXCKJHDPPB}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'Delete from TYS_TXCKJHDPPB where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
      ExecSQL;
    end;
    {删除零枚票出库计划单表TYS_TXPCKJHDB}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'Delete from TYS_TXPCKJHDB where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
      ExecSQL;
    end;

    Data.DM.Commit;
  except
    if Data.DM.InTransaction then
      Data.DM.Rollback;
    Application.MessageBox(Pchar('删除出库计划单时发生错误!'), '提示', 48 + mb_ok);
    Exit;
  end;

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

{-------------------------------------------------------------------------------}
{修改计划单}
procedure TFrm_SY_CK_LMP.bbtn_ModifyClick(Sender: TObject);
begin
  if qry_Detail.IsEmpty then
    Exit;

  if not (qry_List.FieldByName('ZT').AsString = '0') then
  begin
    Application.MessageBox(Pchar('该计划分配单已经签批,不能修改!'), '提示', 48 + mb_ok);
    Exit;
  end;

  VL_CKJHDH := qry_Detail.FieldByName('CKJHDH').AsString;   {修改}
  GetGG(qry_List.FieldByName('TYPE').AsString, qry_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
  SetState(True);                                           {修改分配计划单}
end;

{-------------------------------------------------------------------------------}
{添加出库单位}
procedure TFrm_SY_CK_LMP.bbtn_AddDWClick(Sender: TObject);
var
  l_lst_DWDM: TstringList;
  l_dbgPlace: TBookMark;
begin
  if qry_Detail.IsEmpty then                                {为空时不能添加单位}
  begin
    Application.MessageBox('出库计划分配单为空时不能添加单位!', '提示', 48 + mb_ok);
    Exit;
  end;

  {取计划单中的单位代码}
  l_lst_DWDM := TStringList.Create;
  with qry_Detail do
  begin
    DisableControls;
    l_dbgPlace := GetBookMark;
    First;
    while not Eof do
    begin
      l_lst_DWDM.Add(FieldByName('DWDM').AsString);
      Next;
    end;
    EnableControls;
    GotoBookMark(l_dbgPlace);
    FreeBookMark(l_dbgPlace);
  end;

  with TFrm_SY_CK_LMP_DW.Create(Application) do
  try
    ShowDWInfo(l_lst_DWDM);                                 {查询计划中不存在的单位的基本信息}
    if ShowModal = mrOK then
      AddDW(dbg_DW);                                        {新添加的单位}
  finally
    Free;
    l_lst_DWDM.Free;
  end;
end;

{-------------------------------------------------------------------------------}
{新添加的单位}
procedure TFrm_SY_CK_LMP.AddDW(A_dbg: TDBGrid);
var
  l_KFDM, l_KFMC, l_PPDM, l_PPMC: string;
  l_JJ, l_XJ, l_JSJ: double;
  I: Integer;
begin
  l_KFDM := qry_Detail.FieldByName('KFDM').AsString;
  l_KFMC := qry_Detail.FieldByName('KFMC').AsString;
  l_PPDM := qry_Detail.FieldByName('PPDM').AsString;
  l_PPMC := qry_Detail.FieldByName('PPMC').AsString;
  l_JJ := qry_Detail.FieldByName('JJ').AsFloat;
  l_XJ := qry_Detail.FieldByName('XJ').AsFloat;
  l_JSJ := qry_Detail.FieldByName('JSJ').AsFloat;

  qry_Detail.BeforeInsert := nil;

  if A_DBG.SelectedRows.Count = 0 then                      {不是选中多行状态,取当前记录}
  begin
    qry_Detail.Append;
    qry_Detail.FieldByName('DWDM').AsString := A_DBG.DataSource.DataSet.FieldByName('DWDM').AsString;
    qry_Detail.FieldByName('DWMC').AsString := A_DBG.DataSource.DataSet.FieldByName('DWJC').AsString;
    qry_Detail.FieldByName('KFDM').AsString := l_KFDM;
    qry_Detail.FieldByName('KFMC').AsString := l_KFMC;
    qry_Detail.FieldByName('PPDM').AsString := l_PPDM;
    qry_Detail.FieldByName('PPMC').AsString := l_PPMC;
    qry_Detail.FieldByName('JJ').AsFloat := l_JJ;
    qry_Detail.FieldByName('XJ').AsFloat := l_XJ;
    qry_Detail.FieldByName('JSJ').AsFloat := l_JSJ;
    qry_Detail.FieldByName('FPSL').AsInteger := 0;
    qry_Detail.Post;
  end
  else {选中多行状态}                                       {}
    for i := 0 to A_DBG.SelectedRows.Count - 1 do
    begin
      A_DBG.DataSource.DataSet.GotoBookmark(pointer(A_DBG.SelectedRows.Items[i]));
      qry_Detail.Append;
      qry_Detail.FieldByName('DWDM').AsString := A_DBG.DataSource.DataSet.FieldByName('DWDM').AsString;
      qry_Detail.FieldByName('DWMC').AsString := A_DBG.DataSource.DataSet.FieldByName('DWJC').AsString;
      qry_Detail.FieldByName('KFDM').AsString := l_KFDM;
      qry_Detail.FieldByName('KFMC').AsString := l_KFMC;
      qry_Detail.FieldByName('PPDM').AsString := l_PPDM;
      qry_Detail.FieldByName('PPMC').AsString := l_PPMC;
      qry_Detail.FieldByName('JJ').AsFloat := l_JJ;
      qry_Detail.FieldByName('XJ').AsFloat := l_XJ;
      qry_Detail.FieldByName('JSJ').AsFloat := l_JSJ;
      qry_Detail.FieldByName('FPSL').AsInteger := 0;
      qry_Detail.Post;
    end;

  qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
end;

{-------------------------------------------------------------------------------}
{删除出库单位}
procedure TFrm_SY_CK_LMP.bbtn_DeleteDWClick(Sender: TObject);
var
  l_dbgPlace: TBookMark;
begin
  if qry_Detail.IsEmpty then                                {为空时不能删除单位}
    Exit;

  {询问}
  if Application.MessageBox('是否要删除该出库计划单中的所选择的单位?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
    Exit;

  with qry_Detail do
  begin
    qry_Detail.BeforeDelete := nil;
    qry_Detail.Delete;

    l_dbgPlace := GetBookMark;
    dbgEh_Detail.SumList.Active := False;                   {刷新删除时的合计数据更新}
    dbgEh_Detail.SumList.Active := True;
    GotoBookMark(l_dbgPlace);
    FreeBookMark(l_dbgPlace);

    qry_Detail.BeforeDelete := qry_DetailBeforeDelete;
  end;
end;

{-------------------------------------------------------------------------------}
{保存数据}
procedure TFrm_SY_CK_LMP.bbtn_SaveClick(Sender: TObject);
var
  l_Caption: string;
begin
  if not Can_CK(l_Caption) then
  begin
    Application.MessageBox(Pchar(l_Caption), '提示', 48 + mb_ok);
    Exit;
  end;

  try
    Data.DM.StartTransaction;
    Save_Info;                                              {保存出库信息}
    Data.DM.Commit;

    (* 签批和取消签批在权限控制中处理
        bbtn_CancelQP.Enabled := False;
    *)
  except
    if Data.DM.InTransaction then
      Data.DM.Rollback;
    Application.MessageBox(Pchar('制定出库计划单时发生错误!'), '提示', 48 + mb_ok);
    Exit;
  end;

  qry_Detail.EnableControls;
  SetState(False);                                          {设置界面可修改状态}
  ShowList(False, VL_CKJHDH);                               {查询条件模块的调用,并且是否显示窗体}
end;

{-------------------------------------------------------------------------------}
{是否可以出库}
function TFrm_SY_CK_LMP.Can_CK(var A_Caption: string): boolean;
var
  l_dbgPlace: TBookMark;
  l_SL: Integer;
begin
  Result := False;
  l_SL := 0;
  if qry_Detail.IsEmpty then
  begin
    A_Caption := '计划分配单不能为空!';
    Exit;
  end;

  {取计划单中的分配总数}
  with qry_Detail do
  begin
    DisableControls;
    l_dbgPlace := GetBookMark;
    First;
    while not Eof do
    begin
      if Trim(FieldByName('FPSL').AsString) = '' then
        A_Caption := '"' + FieldByName('DWMC').AsString + '"的分配数量不能为空!'
      else if FieldByName('FPSL').AsInteger <= 0 then
        A_Caption := '"' + FieldByName('DWMC').AsString + '"的分配数量必须合法!';
      l_SL := l_SL + FieldByName('FPSL').AsInteger;

      if ((FieldByName('JSJ').AsString = '') or (FieldByName('JSJ').AsInteger = 0))
        and ((FieldByName('ZK').AsString = '') or (FieldByName('ZK').AsInteger = 0)) then
        A_Caption := '"' + FieldByName('DWMC').AsString + '"的结算价和折扣必须合法!';

      Next;
    end;
    EnableControls;
    GotoBookMark(l_dbgPlace);
    FreeBookMark(l_dbgPlace);
  end;

  if Trim(A_Caption) <> '' then                             {分配数量不能为空!}
    Exit;

  {刷新理论库存??????}
  if VL_CKJHDH = '' then                                    {新增}
    ce_KC.Value := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100)) - l_SL {理论库存 - 新增的分配数量}
  else                                                      {修改}
    ce_KC.Value := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100))
      + VL_FPSL_Modify - l_SL;                              {理论库存 + 分配数量的改变量}

  A_Caption := '出库数量超出理论库存,不能出库!';
  Result := ce_KC.Value >= 0;
end;

{-------------------------------------------------------------------------------}
{保存出库信息}
procedure TFrm_SY_CK_LMP.Save_Info;

⌨️ 快捷键说明

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