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

📄 ckjh_jjw.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 4 页
字号:
      {清空原有的票品的库存情况}
      VL_PPDMList.Clear;
      VL_PPKCList.Clear;

      {主表信息}
      qry_List.Append;
      qry_List.FieldByName('DWDM').AsString := qry_DW.FieldByName('DWDM').AsString;
      qry_List.FieldByName('DWJC').AsString := qry_DW.FieldByName('DWJC').AsString;
      qry_List.FieldByName('CKXZ').AsString := fcb_CKXZ.FieldString;
      qry_List.FieldByName('RCKXZMC').AsString := fcb_CKXZ.Text;
      if qry_List.State in [dsEdit, dsInsert] then
        qry_List.Post;

      case rg_CKXZ.ItemIndex of                             {根据依据的来源,添加从表}
        0:
          begin
            VL_QLDH := qry_YJD.FieldByName('QLDH').AsString;
            Add_FPInfo(qry_DW.FieldByName('DWDM').AsString, qry_PPInfo_Y);
          end;
        1:
          with qry_PPInfo_N do
            Add_WYTSJ(qry_DW.FieldByName('DWDM').AsString, qry_PPInfo_N, dbg_PP);
      end;

      GetGG(qry_Detail.FieldByName('PPDM').AsString);       {取得凑整的规格}
      rg_Round.ItemIndex := 2;
      rg_Round.OnClick(self.rg_Round);
    end;
  finally
    free;
    qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
  end;

  if l_Modal <> mrOK then
    Exit;
  {  qry_Detail.AfterScroll(nil);}
  {显示库存}
  l_Modal := VL_PPDMList.IndexOf(qry_Detail.FieldByname('PPDM').AsString);
  if l_Modal > -1 then
    medt_KC.Text := VL_PPKCList[l_Modal];
  { medt_KC.Text := FloatToStr(StrToFloat(VL_PPKCList[l_Modal]) - FieldByName('FPSL').AsInteger);}
  GetGG(qry_Detail.FieldByName('PPDM').AsString);

  VL_CKJHDH := '';                                          {新增}
  Set_State(True);                                          {设置界面可修改状态}
end;

{-------------------------------------------------------------------------------}
{添加信息}
procedure TFrm_CKJH_JJW.Add_FPInfo(a_DWDM: String; a_SourceQuery: TQuery);
begin
  {1.添加从表信息}
  with a_SourceQuery do
  begin
    while not Eof do
    begin
      if a_SourceQuery.FieldbyName('KFDM').AsString = '' then
      begin
        {库存中没有该票品}
        Application.MessageBox(Pchar('票品:' + FieldByName('PPMC').asString + '没有库存!'), '提示', mb_Ok + MB_ICONINFORMATION);
        Next;
        Continue;
      end;
      {添加库存信息}
      VL_PPDMList.Add(FieldbyName('PPDM').AsString);
      VL_PPKCList.Add(FLoatToStr(PS_GetSYTS(FieldByName('KFDM').AsString, FieldByName('PPDM').AsString, FieldByName('JJ').AsFloat)));

      qry_Detail.Append;
      VL_CanPost := False;
      qry_Detail.FieldByName('DWDM').AsString := a_DWDM;
      qry_Detail.FieldByName('KFDM').AsString := FieldByName('KFDM').AsString;
      qry_Detail.FieldByName('KFMC').AsString := FieldByName('KFMC').AsString;
      if FieldList.IndexOf('TDM') > -1 then
        qry_Detail.FieldByName('PPDM').AsString := FieldbyName('TDM').AsString
      else
        qry_Detail.FieldByName('PPDM').AsString := FieldbyName('PPDM').AsString;
      qry_Detail.FieldByName('PPMC').AsString := FieldByName('PPMC').AsString;
      if FieldbyName('JJ').AsString <> '' then
        qry_Detail.FieldByName('JJ').AsFloat := FieldByName('JJ').AsFloat / 100;
      qry_Detail.FieldByName('ZK').AsString := FieldByName('ZK').AsString;
      if Trim(FieldByName('XJ').AsString) <> '' then
        qry_Detail.FieldByName('XJ').AsFloat := FieldByName('XJ').AsFloat / 100;
      if Trim(FieldByName('JSJ').AsString) <> '' then
        qry_Detail.FieldByName('JSJ').AsFloat := FieldByName('JSJ').AsFloat / 100;
      if FieldList.IndexOf('XQZTS') > -1 then
        qry_Detail.FieldByName('FPSL').AsString := FieldByName('XQZTS').AsString;
      if qry_Detail.State in [dsEdit, dsInsert] then
        qry_Detail.Post;
      VL_CanPost := True;
      Next;
    end;
  end;
end;

{-------------------------------------------------------------------------------}
{选择凑包凑版}
procedure TFrm_CKJH_JJW.rg_RoundClick(Sender: TObject);
var
  l_SingleDest: Integer;
begin
  l_SingleDest := 0;
  pgc_SeleInfo.ActivePageIndex := rg_Round.ItemIndex;       {YJ}
  case rg_Round.ItemIndex of
    0: {凑包}                                               {}
      begin
        rg_Round_Style.Visible := True;
        if cb_BZGG.Items.Count = 0 then
        begin
          Application.MessageBox('包装规格可能不完整,无法按包进行凑整!', '提示', MB_OK + MB_IconInformation);
          rg_Round.ItemIndex := 2;                          {默认为不凑}
          Exit;
        end;
//        l_SingleDest := StrToInt(cb_BZGG.Text);
          l_SingleDest := StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
      end;
    1: {凑版}                                               {}
      begin
        rg_Round_Style.Visible := True;
        l_SingleDest := VL_Ban_GG;
      end;
    2: {不用凑整数}                                         {}
      rg_Round_Style.Visible := False;
  end;


  if not qry_Detail.IsEmpty then
  begin
    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;

    {显示出修改后的理论库存}
  end;

end;

{-------------------------------------------------------------------------------}
{得到凑包后的结果}
function TFrm_CKJH_JJW.GetRoundNumber(A_source, A_SingleDest,
  A_type: Integer): Integer;
var
  l_Mod, l_Div: Integer;
begin
  Result := 0;

  if A_SingleDest <= 0 then                                 {为0或者小于0时直接返回}
  begin
    Result := A_Source;
    Exit;
  end;

  l_Mod := A_Source Mod A_SingleDest;                       {求余数,为0时整除}

  if (l_Mod = 0) and (A_Source >= A_SingleDest) then        {恰好为整包或整版}
  begin
    Result := A_Source;
    Exit;
  end;

  l_Div := A_Source Div A_SingleDest;                       {}

  case A_type of
    0: {向上}                                               {}
      Result := (l_Div + 1) * A_SingleDest;
    1: {向下}                                               {}
      Result := l_Div * A_SingleDest;
  end;

  if Result < 0 then                                        {向下取整时为负数时返回0}
    Result := 0;
end;

{-------------------------------------------------------------------------------}
{凑包凑版}
procedure TFrm_CKJH_JJW.SetRounding;
var
  l_Dest: Integer;
begin
  l_Dest := 0;

  case rg_Round.ItemIndex of
    0: {凑包}                                               {}
      begin
        if cb_BZGG.Items.Count = 0 then
        begin
          Application.MessageBox('包装规格可能不完整,无法按包进行凑整!', '提示', MB_OK + MB_IconInformation);
          rg_Round.ItemIndex := 2;                          {默认为不凑}
          Exit;
        end;
       { l_Dest := StrToInt(cb_BZGG.Text);}
       l_Dest :=StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
      end;
    1: {凑版}                                               {}
      begin
        if cb_BGG.Items.Count = 0 then
        begin
          Application.MessageBox('版规格可能不完整,无法按版进行凑整!', '提示', MB_OK + MB_IconInformation);
          rg_Round.ItemIndex := 2;                          {默认为不凑}
          Exit;
        end;

        l_Dest := VL_Ban_GG;
      end;
    2: {不用凑整数}                                         {}
      l_Dest := 0;
    //      Exit;
  end;

  SetRoundSL(rg_Round.ItemIndex, rg_Round_Style.ItemIndex, L_Dest); {分配数量的凑整处理}
end;

{-------------------------------------------------------------------------------}
{凑包凑版只凑当前的票品}
procedure TFrm_CKJH_JJW.SetRoundSL(A_Round, A_Round_Style,
  A_SingleDest: Integer);
{参数说明:凑包方式、凑整的方式(向上、向下)、凑整时的单包或者单版包装规格}
begin
  {凑整}
  qry_Detail.BeforePost := nil;
  with qry_Detail do
  begin
    DisableControls;
    if not Eof then
    begin
      Edit;
      if A_Round = 2 then {不凑}                            {}
        FieldByName('FPSL').AsInteger := FieldByName('FPSL_OLD').AsInteger
      else
        FieldByName('FPSL').AsInteger :=
          GetRoundNumber(FieldByName('FPSL_OLD').AsInteger, A_SingleDest, A_Round_Style); {返回凑整后的数据}
      Post;
    end;
    EnableControls;
  end;

  qry_Detail.BeforePost := qry_DetailBeforePost;
end;

{-------------------------------------------------------------------------------}
{改变数据前保存该数据}
procedure TFrm_CKJH_JJW.qry_DetailBeforePost(DataSet: TDataSet);
begin
  qry_Detail.Edit;
  qry_Detail.FieldByName('FPSL_OLD').AsString := qry_Detail.FieldByName('FPSL').AsString;
end;
{-------------------------------------------------------------------------------}
{取消手工输入}
procedure TFrm_CKJH_JJW.qry_DetailBeforeInsert(DataSet: TDataSet);
begin
  Abort;
end;

{-------------------------------------------------------------------------------}
{改变凑版凑包方式}
procedure TFrm_CKJH_JJW.rg_Round_StyleClick(Sender: TObject);
var
  l_SingleDest: Integer;
begin
  l_SingleDest := 0;
  pgc_SeleInfo.ActivePageIndex := rg_Round.ItemIndex;       {YJ}
  case rg_Round.ItemIndex of
    0: {凑包}                                               {}
      begin
        rg_Round_Style.Visible := True;
        if cb_BZGG.Items.Count = 0 then
        begin
          Application.MessageBox('包装规格可能不完整,无法按包进行凑整!', '提示', MB_OK + MB_IconInformation);
          rg_Round.ItemIndex := 2;                          {默认为不凑}
          Exit;
        end;
{        l_SingleDest := StrToInt(cb_BZGG.Text);}
        l_SingleDest := StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
      end;
    1: {凑版}                                               {}
      begin
        rg_Round_Style.Visible := True;
        l_SingleDest := VL_Ban_GG;
      end;
    2: {不用凑整数}                                         {}
      rg_Round_Style.Visible := False;
  end;


  if not qry_Detail.IsEmpty then
  begin
    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;
  end;
end;

{-------------------------------------------------------------------------------}
procedure TFrm_CKJH_JJW.cb_BZGGChange(Sender: TObject);
begin
  SetRounding;                                              {凑包凑版调用}
end;

{-------------------------------------------------------------------------------}
procedure TFrm_CKJH_JJW.cb_BGGChange(Sender: TObject);
begin
  VL_Ban_GG := StrToInt(cb_BGG.Text);
  SetRounding;                                              {凑包凑版调用}
end;

{-------------------------------------------------------------------------------}
{用户填入数量,计算判断}
procedure TFrm_CKJH_JJW.qry_DetailFPSLSetText(Sender: TField;
  const Text: String);
var
  l_Dest, l_Index: Integer;
  L_Text: string;
  l_SetTextEvent: TFieldSetTextEvent;
begin
  l_SetTextEvent := qry_DetailFPSL.OnSetText;
  qry_DetailFPSL.OnSetText := nil;                          {防止用鼠标点击其他记录时递归调用}

  l_Text := Text;
  if Trim(Text) = '' then
  begin
    Sender.AsString := Text;
    qry_DetailFPSL.OnSetText := l_SetTextEvent;             {防止用鼠标点击其他记录时递归调用}
    Exit;
  end;

  try
    if (StrToFloat(Text) >= 10000000) or (StrToFloat(Text) <= 0) then
      Abort;                                                {触发abort异常}
  except
    Application.MessageBox('所输入的分配数量必须合法!', '提示', MB_ICONINFORMATION + mb_ok);
    qry_DetailFPSL.OnSetText := l_SetTextEvent;             {防止用鼠标点击其他记录时递归调用}
    qry_Detail.Cancel;
    Exit;
  end;

  try
    Sender.AsInteger := Trunc(StrToFloat(l_Text));          {分配数量只能为自然数}

    l_Index := VL_PPDMList.IndexOf(qry_Detail.FieldbyName('PPDM').AsString);
    if l_Index > -1 then
      medt_KC.Text := FloatToStr(StrToFloat(VL_PPKCList[l_Index]) - qry_Detail.FieldByName('FPSL').AsInteger);


    l_Dest := 0;
    case rg_Round.ItemIndex of
      0: {凑包}                                             {}
{        l_Dest := StrToInt(cb_BZGG.Text);}
       l_Dest :=StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
      1: {凑版}                                             {}
        l_Dest := VL_Ban_GG;
      2: {不用凑整数}                                       {}
        begin
          qry_Detail.Edit;
          qry_Detail.FieldByName('FPSL').AsInteger := Trunc(StrToFloat(l_Text));
          if VL_CanPost then
            qry_Detail.Post;
          Exit;
        end;
    end;

    qry_Detail.Edit;
    qry_Detail.FieldByName('FPSL').AsInteger :=
      GetRoundNumber(Trunc(StrToFloat(l_Text)), l_Dest, rg_Round_Style.ItemIndex); {返回凑整后的数据}
    if VL_CanPost then
      qry_Detail.Post;

    {如果凑包,重新写库存显示库存}
    l_Index := VL_PPDMList.IndexOf(qry_Detail.FieldbyName('PPDM').AsString);
    if l_Index > -1 then
      medt_KC.Text := FloatToStr(StrToFloat(VL_PPKCList[l_Index]) - qry_Detail.FieldByName('FPSL').AsInteger);

  finally
    qry_DetailFPSL.OnSetText := l_SetTextEvent;             {防止用鼠标点击其他记录时递归调用}
  end;
end;

{-------------------------------------------------------------------------------}
{用户输入数量后,程序计算其他数据}
procedure TFrm_CKJH_JJW.qry_DetailFPSLValidate(Sender: TField);

⌨️ 快捷键说明

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