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

📄 ckjh_jjw.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 4 页
字号:
          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;
        qry_Detail.FieldByName('FPSL_Old').AsFloat := 0;
        qry_Detail.FieldByName('FPSL').AsFloat := 0;
        if qry_Detail.State in [dsEdit, dsInsert] then
          qry_Detail.Post;
        VL_CanPost := True;
      end;
      Next;
    end;
  end;
end;

{-------------------------------------------------------------------------------}
{取得该明细中所有票品的的库存,并且显示}
procedure TFrm_CKJH_JJW.pgc_JYChange(Sender: TObject);
begin
  if pgc_JY.ActivePageIndex = 0 then
    Exit;

  Get_PPKCInfo;                                             {得到库存信息}

  qry_Detail.AfterScroll(nil);
end;

{-------------------------------------------------------------------------------}
{双击显示详细信息}
procedure TFrm_CKJH_JJW.dbg_ListDblClick(Sender: TObject);
begin
  pgc_JY.ActivePageIndex := 1;

  Get_PPKCInfo;                                             {得到库存信息}

  qry_Detail.AfterScroll(nil);

end;


{-------------------------------------------------------------------------------}
{得到当前票品库存信息}
procedure TFrm_CKJH_JJW.Get_PPKCInfo;
var
  l_Mark: TBookMark;
begin
  {}
  if qry_Detail.IsEmpty then
    Exit;
  if VL_PPDMList.Count > 0 then
    Exit;
  with qry_Detail do
  try
    AfterScroll := nil;
    DisableControls;
    l_Mark := GetBookmark;
    First;
    while not Eof do
    begin
      VL_PPDMList.Add(FieldByName('PPDM').AsString);
      VL_PPKCList.Add(FloatToStr(PS_GetSYTS(FieldByName('KFDM').AsString, FieldByName('PPDM').AsString, FieldByName('JJ').AsFloat * 100, qry_Detail.FieldByName('CKJHDH').AsString)));
      Next;
    end;
  finally
    GotoBookmark(l_Mark);
    FreeBookmark(l_Mark);
    EnableControls;
    AfterScroll := qry_DetailAfterScroll;
  end;
end;

{-------------------------------------------------------------------------------}
{签批该计划分配单}
procedure TFrm_CKJH_JJW.bbtn_QPClick(Sender: TObject);
var
  l_Tmp: String;
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
    {集邮票出库计划单表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;

  except
    Application.MessageBox(Pchar('签批出库计划单时发生错误!'), '提示', 48 + mb_ok);
    Exit;
  end;
  {刷新}
  l_Tmp := VL_CKJHDH;
  bbtn_Search.Click;
  qry_List.Locate('CKJHDH', l_Tmp, []);
end;

{-------------------------------------------------------------------------------}
{取消签批}
procedure TFrm_CKJH_JJW.bbtn_CancelQPClick(Sender: TObject);
var
  l_Tmp: String;
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

    {集邮票出库计划单表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;
  except
    Application.MessageBox(Pchar('取消签批出库计划单时发生错误!'), '提示', 48 + mb_ok);
    Exit;
  end;
  {刷新}
  l_Tmp := VL_CKJHDH;
  bbtn_Search.Click;
  qry_List.Locate('CKJHDH', l_Tmp, []);

end;

{-------------------------------------------------------------------------------}
{把原来的打印抄过来了,算法很奇怪...}
procedure TFrm_CKJH_JJW.bbtn_PrintClick(Sender: TObject);
var
  StrSQL: string;
begin
  if qry_List.IsEmpty then
    Exit;
  if VL_CKJHDH = '' then
  begin
    Application.MessageBox('请选择分配单号!', '提示', mb_Ok + MB_ICONINFORMATION);
    Exit;
  end;

  Application.CreateForm(TFrm_RichEdit, Frm_RichEdit);
  Application.CreateForm(TCKJHDCX_RPT, CKJHDCX_RPT);
  with CKJHDCX_RPT, Frm_RichEdit do
  try
    StrSQL := 'select ROWNUM, A.CKJHDH, A.CKXZ, A.ZBR, A.PZR,A.ZDRQ, A.BZ ,B.DWMC, B.PPMC,C.ZH,B.XJ/100 XJ, DECODE(B.ZK,0,B.JSJ/100,B.ZK) ZK, B.JSJ/100 JSJ,';
    StrSQL := StrSQL + ' B.FPSL,decode(JSJ,0,B.ZK*B.XJ*B.FPSL/10000, B.JSJ*B.FPSL/100) JE FROM TYS_JYCKJHDB A,TYS_JYCKJHDPPB B,TB_YZPPXXB C where A.CKJHDH = B.CKJHDH  and B.PPDM=C.TDM AND A.CKJHDH =''' + VL_CKJHDH + '''';
    Qry_Print.SQL.Text := StrSQL;
    Qry_Print.Open;
    QRLabel12.Caption := '集邮票';
    QRLabel20.Caption := FormatDateTime('yyyy"年"mm"月"dd"日"', StrToDate(Qry_Print.fieldByName('zdrq').AsString));

    if CHQMsgBox('是否采用套打?', 2) = IDYES then
      Tao_Print_Flag := True
    else
      Tao_Print_Flag := False;

    DetailLines := 0;
    Prepare;
    try
      QRLabel19.Caption := IntToStr(QRPrinter.PageCount);
    finally
      QRPrinter.Free;
    end;
    QRPrinter := nil;

    Preview;
  finally
    CKJHDCX_RPT.Destroy;
    Frm_RichEdit.Destroy;
  end;
end;

{-------------------------------------------------------------------------------}
{对不同状态的分配但,以不同的颜色显示}
procedure TFrm_CKJH_JJW.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_CKJH_JJW.qry_DetailZKSetText(Sender: TField;
  const Text: String);
var
  l_SetTextEvent: TFieldSetTextEvent;
begin
  l_SetTextEvent := qry_DetailZK.OnSetText;
  qry_DetailZK.OnSetText := nil;                            {防止用鼠标点击其他记录时递归调用}

  if Trim(Text) = '' then
  begin
    Sender.AsString := Text;
    qry_DetailZK.OnSetText := l_SetTextEvent;               {防止用鼠标点击其他记录时递归调用}
    Exit;
  end
  else                                                      {结算价的互斥}
    qry_Detail.FieldByName('JSJ').AsString := '0';

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

    {用折扣计算出结算金额}
    with qry_Detail do
    begin
      Edit;
      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;
      if VL_CanPost then
        Post;
    end;

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

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

procedure TFrm_CKJH_JJW.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;
      if VL_CanPost then
        Post;
    end;

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

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


procedure TFrm_CKJH_JJW.dbgEh_DetailGetFooterParams(Sender: TObject;
  DataCol, Row: Integer; Column: TColumnEh; AFont: TFont;
  var Background: TColor; var Alignment: TAlignment; State: TGridDrawState;
  var Text: String);
begin
  if Trim(Text) = '' then
    Exit;

  try
    if (DataCol = 7) or (DataCol = 8) then                  {出库总金额和结算金额以元显示}
      Text := FormatFloat('¥#,##0.000', StrToFloat(Text))
    else if DataCol = 6 then
      Text := FormatFloat('#,##0', StrToFloat(Text));
  except

  end;

end;

procedure TFrm_CKJH_JJW.qry_DetailJJGetText(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_CKJH_JJW.qry_DetailFPSLGetText(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', Sender.AsFloat);
    end
    else                                                    {输入状态}
      Text := FormatFloat('#0.##', Sender.AsFloat)
  except

  end;

end;

end.

⌨️ 快捷键说明

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