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

📄 sy_ck_jyp.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    ce_KC.Value := VL_TheoryKC - GetFPSL_Total;             {显示的理论库存=理论库存 -  分配数量 }
  end;
end;

{-------------------------------------------------------------------------------}
{新制定出库计划单}
procedure TFrm_SY_CK_JYP.bbtn_AddClick(Sender: TObject);
var
  l_ModalResult: Integer;
begin
  with TFrm_SY_CK_JYP_Add.Create(Application) do
  try
    l_ModalResult := ShowModal;
    if l_ModalResult = mrOK then
    begin
      Add_CKJHD(qry_PP, qry_DWFP);
      GetGG(qry_Detail.FieldByName('PPDM').AsString);       {取得凑整的规格}
      self.rg_Round.ItemIndex := rg_Round.ItemIndex;
      Self.rg_Round_Style.ItemIndex := rg_Round_Style.ItemIndex;
      self.rg_Round.OnClick(self.rg_Round);
    end;
  finally
    Free;
  end;

  if l_ModalResult <> mrOK then
    Exit;

  VL_CKJHDH := '';                                          {新增}
  SetState(True);                                           {设置界面可修改状态}
  {凑包凑版YJ}
  SetRounding;
end;

{-------------------------------------------------------------------------------}
{新制定出库计划单,基本信息的读入}
procedure TFrm_SY_CK_JYP.Add_CKJHD(A_Source_PP, A_Source_KF: TQuery);
begin
  {增加零枚票出库计划单表TYS_JYCKJHDB}
  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('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_JYCKJHDPPB}
  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('PPDM').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_JYP.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_JYCKJHDPPB}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'Delete from TYS_JYCKJHDPPB where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
      ExecSQL;
    end;
    {删除零枚票出库计划单表TYS_JYCKJHDB}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'Delete from TYS_JYCKJHDB 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_JYP.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_Detail.FieldByName('PPDM').AsString);           {取得凑整的规格}
  SetState(True);                                           {修改分配计划单}
end;

{-------------------------------------------------------------------------------}
{添加出库单位}
procedure TFrm_SY_CK_JYP.bbtn_AddDWClick(Sender: TObject);
var
  l_lst_DWDM: TstringList;
  l_dbgPlace: TBookMark;
  l_PPDM: String;
begin
  if qry_Detail.IsEmpty then                                {为空时不能添加单位}
  begin
    Application.MessageBox('出库计划分配单为空时不能添加单位!', '提示', 48 + mb_ok);
    Exit;
  end;
  l_PPDM := qry_Detail.FieldByName('PPDM').AsString;
  {取计划单中的单位代码}
  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_JYP_DW.Create(Application) do
  try
    ShowDWInfo(l_lst_DWDM);                                 {查询计划中不存在的单位的基本信息}
    if ShowModal = mrOK then
      AddDW(dbg_DW, l_PPDM);                                {新添加的单位}
  finally
    Free;
    l_lst_DWDM.Free;
  end;
end;

{-------------------------------------------------------------------------------}
{新添加的单位}
procedure TFrm_SY_CK_JYP.AddDW(A_dbg: TDBGrid; a_PPDM: String);
var
  l_KFDM, l_KFMC, l_PPDM, l_PPMC, l_JJ, l_XJ, l_JSJ, l_ZK: string; {增加折扣显示}
  I: Integer;
  l_SQL: String;
begin
  {取得该票品的折扣}
  with qry_Tmp do
  begin
    Close;
    SQL.Text := 'Select a.ZK ' +
      ' from TYS_JYPPKC a,  TGS_KFRYDZB c, TGS_KFB d ' +
      ' where  d.KFDM = a.KFDM  and c.KFDM = d.KFDM ' +
      ' and c.YGDM =' + QuotedStr(VG_UserID) + ' and a.PPDM=' + QuotedStr(a_PPDM);
    Open;
    l_ZK := FieldByName('ZK').AsString;
    Close;
  end;


  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').AsString;
  l_XJ := qry_Detail.FieldByName('XJ').AsString;
  l_JSJ := qry_Detail.FieldByName('JSJ').AsString;

  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').AsString := l_JJ;
    qry_Detail.FieldByName('XJ').AsString := l_XJ;
    qry_Detail.FieldByName('JSJ').AsString := l_JSJ;
    qry_Detail.FieldByName('FPSL').AsInteger := 0;
    qry_Detail.FieldByName('ZK').AsString := l_ZK;
    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').AsString := l_JJ;
      qry_Detail.FieldByName('XJ').AsString := l_XJ;
      qry_Detail.FieldByName('JSJ').AsString := l_JSJ;
      qry_Detail.FieldByName('ZK').AsString := l_ZK;
      qry_Detail.FieldByName('FPSL').AsInteger := 0;
      qry_Detail.Post;
    end;

  qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
end;

{-------------------------------------------------------------------------------}
{删除出库单位}
procedure TFrm_SY_CK_JYP.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;

  CE_KC.Value := CE_KC.Value + qry_Detail.FieldByName('FPSL').AsInteger; {更新库存}

  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_JYP.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_JYP.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').AsFloat = 0))
        and ((FieldByName('ZK').AsString = '') or (FieldByName('ZK').AsFloat = 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_JYP.Save_Info;
begin
  {零枚票出库计划单表TYS_JYCKJHDB}{CKJHDH, CKXZ, ZBR, PZR, ZDRQ, BZ, ZT}
  if Trim(VL_CKJHDH) = '' then {新增}                       {}
  begin
    VL_CKJHDH := Create_DH('g_jypfpd', 'JN', '', '');       {调用存储过程,生成单号}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'insert into TYS_JYCKJHDB (CKJHDH, CKXZ, ZBR, PZR, ZDRQ, ZT) values(' +
        QuotedStr(VL_CKJHDH) + ', ' + QuotedStr('10') + ', ' +
        QuotedStr(VG_USERName) + ', ' + QuotedStr('') + ', ' +
        ' Trunc(sysdate, ''DD'') , ' + QuotedStr('0') +
        ')';
      ExecSQL;
    end;
  end
  else {修改}                                               {}
  begin
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'update TYS_JYCKJHDB set ' +
        '  ZBR = ' + QuotedStr(VG_USERName) + ', ' +
        '  ZDRQ = Trunc(sysdate, ''DD''), ' +
        '  ZT = ' + QuotedStr('0') +
        ' where  CKJHDH = ' + QuotedStr(VL_CKJHDH);
      ExecSQL;
    end;
  end;

  {零枚票出库计划单票品表TYS_JYCKJHDPPB}{删除后,重新添加票品}

⌨️ 快捷键说明

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