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

📄 sy_ck_jyp.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 4 页
字号:
{计算价输入时的合法性判断,以及和折扣的互斥}
procedure TFrm_SY_CK_JYP.qry_DetailJSJSetText(Sender: TField;
  const Text: String);
var
  l_Text: string;
  l_SetTextEvent: TFieldSetTextEvent;
begin
  l_SetTextEvent := qry_DetailJSJ.OnSetText;
  qry_DetailJSJ.OnSetText := nil;                           {防止用鼠标点击其他记录时递归调用}

  l_Text := Text;
  if Trim(Text) = '' then
  begin
    Sender.AsString := Text;
    qry_DetailJSJ.OnSetText := l_SetTextEvent;              {防止用鼠标点击其他记录时递归调用}
    Exit;
  end
  else                                                      {和折扣的互斥}
    qry_Detail.FieldByName('ZK').AsString := '0';

  try
    if (StrToFloat(l_Text) >= 1000) or (StrToFloat(l_Text) <= 0) then
      Abort;                                                {触发abort异常}
    Sender.AsFloat := StrToFloat(Text);

    with qry_Detail do
    begin
      Edit;

      {用结算价计算出结算金额}
      if (FieldByName('JSJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
        FieldByName('JSJE').AsFloat := FieldByName('JSJ').AsFloat * FieldByName('FPSL').AsInteger;
      Post;
    end;

  except
    Application.MessageBox('所输入的结算价必须合法!', '提示', MB_ICONINFORMATION + mb_ok);
    qry_DetailJSJ.OnSetText := l_SetTextEvent;              {防止用鼠标点击其他记录时递归调用}
    Abort;
  end;

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

{-------------------------------------------------------------------------------}
{结算价以元显示}
procedure TFrm_SY_CK_JYP.qry_DetailJSJGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  if Trim(Sender.AsString) = '' then
    Exit;

  try
    if DisplayText then                                     {显示状态}
    begin
      if Sender.AsString <> '' then
        Text := FormatFloat('¥#,##0.000', Sender.AsFloat);
    end
    else                                                    {输入状态}
      Text := FormatFloat('#0.###', Sender.AsFloat)
  except

  end;
end;

{-------------------------------------------------------------------------------}
{输入数据后,进行凑整操作}
procedure TFrm_SY_CK_JYP.qry_DetailFPSLSetText(Sender: TField;
  const Text: String);
var
  l_Dest: 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));          {分配数量只能为自然数}

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

    l_Dest := 0;
    case rg_Round.ItemIndex of
      0: {凑包}                                             {}
        {        l_Dest := StrToInt(cb_BZGG.Text);}
        l_Dest := StrToInt(VL_MBMS[cb_BZGG.ItemIndex]);
      1: {凑版}                                             {}
        l_Dest := VL_Ban_GG;
      2: {不用凑整数}                                       {}
        Exit;
    end;

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

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

{-------------------------------------------------------------------------------}
{判断是否凑包、凑版,以及计算出库总金额、结算金额}
procedure TFrm_SY_CK_JYP.qry_DetailFPSLValidate(Sender: TField);
begin
  {计算出库总金额}
  with qry_Detail do
  begin
    Edit;
    if (FieldByName('XJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
      FieldByName('CKZJE').AsFloat := FieldByName('XJ').AsFloat * FieldByName('FPSL').AsInteger;

    {用结算价计算出结算金额}
    if (FieldByName('ZK').AsString = '0') or (FieldByName('ZK').AsString = '') then
      if (FieldByName('JSJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
        FieldByName('JSJE').AsFloat := FieldByName('JSJ').AsFloat * FieldByName('FPSL').AsInteger;
    {用折扣计算出结算金额}
    if (FieldByName('JSJ').AsString = '0') or (FieldByName('JSJ').AsString = '') then
      if (FieldByName('ZK').AsString <> '') and (FieldByName('FPSL').AsString <> '')
        and (FieldByName('XJ').AsString <> '') then
        FieldByName('JSJE').AsFloat := (FieldByName('ZK').AsFloat / 100) * FieldByName('FPSL').AsInteger
          * FieldByName('XJ').AsFloat;
  end;
end;

{-------------------------------------------------------------------------------}
{双击打开明细}
procedure TFrm_SY_CK_JYP.dbg_ListDblClick(Sender: TObject);
begin
  pgc_LM.ActivePageIndex := 1;
end;

{-------------------------------------------------------------------------------}
{根据计划的不同状态绘制DBGrid的颜色}
procedure TFrm_SY_CK_JYP.dbg_ListDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
  dbg_List.Canvas.Brush.Color := lbl_Color_0.Color;

  try
    if not qry_List.IsEmpty then
      case qry_List.FieldByName('ZT').AsInteger of
        0: dbg_List.Canvas.Brush.Color := lbl_Color_0.Color; {正常}
        1, 3: dbg_List.Canvas.Brush.Color := lbl_Color_1.Color; {已经处理}
        2: dbg_List.Canvas.Brush.Color := lbl_Color_2.Color; {已经签批}
      end;
  except

  end;

  if gdSelected in State then
  begin
    dbg_List.Canvas.Brush.Color := clNavy;
    dbg_List.Canvas.Font.Color := clWhite;
  end;

  dbg_List.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

{-------------------------------------------------------------------------------}
{查询出库计划单}
procedure TFrm_SY_CK_JYP.bbtn_SearchClick(Sender: TObject);
begin
  ShowList(True, '');                                       {查询条件模块的调用,并且是否显示窗体}
end;

{-------------------------------------------------------------------------------}
{查询条件模块的调用,并且是否显示窗体}
procedure TFrm_SY_CK_JYP.ShowList(A_ShowModal: Boolean; A_CKJHDH: string);
var
  l_ModalResult: Integer;
begin
  l_ModalResult := mrOk;

  {初始化时打开模块时默认调出一周以内的施工单}
  with TFrm_SY_CK_JYP_Sele.Create(Application) do
  try
    Show_Condition(VL_CKJH);                                {查询条件}

    if A_ShowModal then
      l_ModalResult := ShowModal
    else
      bbtn_OKClick(nil);

  finally
    Free;
  end;

  {如果需要进行查询,则根据查询条件取出查询结果}
  if l_ModalResult = mrOK then
    with qry_List do
    begin
      Close;
      SQL.Text := VL_CKJH^.sql;
      Open;
      if IsEmpty then
        qry_listAfterScroll(nil);

      if A_CKJHDH <> '' then
        Locate('CKJHDH', A_CKJHDH, []);
    end;
end;

{-------------------------------------------------------------------------------}
{签批该计划分配单}
procedure TFrm_SY_CK_JYP.bbtn_QPClick(Sender: TObject);
begin
  if qry_list.IsEmpty then
    Exit;
  {YJ}
  if edt_PZR.Text = '' then
  begin
    Application.MessageBox('没有输入签批人,无法继续!', '提示', MB_OK + MB_ICONINFORMATION);
    Exit;
  end;

  if bbtn_Save.Enabled then
  begin
    Application.MessageBox(Pchar('该计划分配单正在编辑状态,不能签批!'), '提示', 48 + mb_ok);
    Exit;
  end;

  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_TXPCKJHDB 的ZT为2-已签批}
        {零枚票出库计划单表TYS_JYPCKJHDB 的ZT为2-已签批}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'update TYS_JYCKJHDB set ZT=''2'', PZR=' + QuotedStr(edt_PZR.Text) +
        ' 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;

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

{-------------------------------------------------------------------------------}
{取消已经签批该计划分配单}
procedure TFrm_SY_CK_JYP.bbtn_CancelQPClick(Sender: TObject);
begin
  if qry_list.IsEmpty then
    Exit;

  if bbtn_Save.Enabled then
  begin
    Application.MessageBox(Pchar('该计划分配单正在编辑状态,不能取消签批!'), '提示', 48 + mb_ok);
    Exit;
  end;

  if not (qry_List.FieldByName('ZT').AsString = '2') 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_JYPCKJHDB 的ZT为0-未签批}
    with qry_tmp do
    begin
      Close;
      SQL.Text := 'update TYS_JYCKJHDB set ZT=''0'', PZR=' + QuotedStr('') +
        ' 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;

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

{-------------------------------------------------------------------------------}
{打印模块}
procedure TFrm_SY_CK_JYP.bbtn_PrintClick(Sender: TObject);
var
  L_ModalResult: Integer;
  l_ModalPrint: Boolean;                                    {是否套打}
begin
  if qry_list.IsEmpty then
    Exit;

  L_ModalResult := Application.MessageBox('打印出库计划单时是否进行套打?', '询问', MB_ICONQUESTION + MB_YESNOCANCEL + MB_DEFBUTTON3);

  if L_ModalResult = ID_Cancel then
    Exit;

  l_ModalPrint := l_ModalResult = mrYES;

  with TFrm_SY_CK_JYP_Print.Create(Application) do
  try
    SetParams(qry_List.FieldByName('CKJHDH').AsString, l_ModalPrint);

    {取得报表总页数}
    qr_Print.Prepare;
    SetParams(qry_List.FieldByName('CKJHDH').AsString, l_ModalPrint, qr_Print.QRPrinter.PageCount);

    qr_Print.PreviewModal;
  finally
    Free;
  end;
end;

{-------------------------------------------------------------------------------}
{是否应用所有单位导致分配数量的变化}
procedure TFrm_SY_CK_JYP.chk_RoundClick(Sender: TObject);
begin
  rg_RoundClick(nil);
end;

{-------------------------------------------------------------------------------}
{凑包凑版的选择、凑整类型的选择,和包装规格的变化导致分配数量的变化}
procedure TFrm_SY_CK_JYP.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_MBMS[cb_BZGG.ItemIndex]);
      end;
    1: {凑版}                                               {}
      begin
        rg_Round_Style.Visible := True;
        l_SingleDest := VL_Ban_GG;
      end;
    2: {不用凑整数}                                         {}
      begin
        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;

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

⌨️ 快捷键说明

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