arivh.cpp

来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 807 行 · 第 1/2 页

CPP
807
字号
    int TempCount;
    TempCount = comServer->ItemCount;
    TfrmArivd_F *p;
    TfrmArivd_T *p2;
    TfrmArivd_P *p3;
    switch(scArivdDocType->ItemIndex)
    {
     case 0:
      return ; //来源为"不生成"时,不处理
     case 1:     //来源为"销售发货"
      p=new TfrmArivd_F(this);
      SetControlState(caAddBill);
      p->GetComObject(comServer);

        p->ShowModal();

      break;
     case 2:      //来源为"销售退货"
      p2=new TfrmArivd_T(this);
      SetControlState(caAddBill);
      p2->GetComObject(comServer);
      try
      {
        p2->ShowModal();
      }
      __finally
      {
         delete p2;
      }
      break;
     case 3:      //来源为"应收发票"
      p3=new TfrmArivd_P(this);
      SetControlState(caAddBill);
      p3->GetComObject(comServer);
      try
      {
        p3->ShowModal();
      }
      __finally
      {
         delete p3;
      }
      break;
     default:
      break;
    }
    if (TempCount < comServer->ItemCount)
      TGenBaseForm::tbSaveClick(NULL);
    else
      CancelChange();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivh::ChangeToBrowseState(bool Browse)
{
       FloatPanel2->Visible=false;
       sgArivd->Visible=true;
       if(Browse == false)
        sgArivd->SetFocus();

}
//---------------------------------------------------------------------------
void __fastcall TfrmArivh::seArivdArltButtonClick(TObject *Sender)
{
  AnsiString SqlStr;
  SqlStr="004[类型代码][类型名称][科目][来源] ";
  SqlStr+=" select ArltCode,ArltName,ArltGlkm, ";
  SqlStr+=" (case ArltFrom when 1 then '产品' when 2 then '劳务' when 3 then '费用' else '其他' end) tmp ";
  SqlStr+=" from sdArlt order by ArltFrom ";
  TfrmWnQuery *p;
  try
  {
    StartWaitForm("正在查询,请稍候...");
    p=new TfrmWnQuery(this,"发票行类型查询",SqlStr);
  }
  __finally
  {
    EndWaitForm();
  }
  if(p->ShowModal()==mrOk)
  {
    seArivdArlt->LocateKey(p->ColData[1]);
    seArivdArltExit(NULL);
  }
  delete p;
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivh::scArivdDocTypeClick(TObject *Sender)
{
 switch(scArivdDocType->ItemIndex)
 {
  case 0: //手工录
  {
  chkArivhRed->Checked=false;
  seArivdDocCode->Text="";
   break;
   }
  case 1: //来源发货单
   chkArivhRed->Checked=false;
   break; //来源退货单或应收发票,为红字发票
  default:
   chkArivhRed->Checked=true;
   break;
 }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::tbAddDetailClick(TObject *Sender)
{
 //来源于应收发票的红字发票不允许手工增行
 if(scArivdDocType->ItemIndex == 3)
 {
  throw Exception("来源于应收发票的红字发票不允许手工增行,请使用生成功能");
 }
 TGenBaseForm::tbAddDetailClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::tbEditDetailClick(TObject *Sender)
{
 if(rbtArivdFrom_Create->Checked)
 {
  throw Exception("生成的发票行不允许手工修改");
 }
 TGenBaseForm::tbEditDetailClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::seArivdArltExit(TObject *Sender)
{
    if(seArivdArlt->ItemData[1] == GetDetailValue("ArivdArlt"))
     return;
    if(seArivdArlt->ItemData[2] != "1") //行类型不是"产品",直接录入费用金额
    {
     seArivdNAmt->ReadOnly=false;
     GroupBox1->Enabled=false;
     seArivdGoods->Text="";
     scArivdUnit->ItemIndex=-1;
     seArivdQty->Text="0.00";
     seArivdPrice->Text="0.00";
     seArivdTAmt->Text="0.00";
     seArivdNAmt->Text="0.00";
     seArivdDRate->Text="0.00";
     seArivdDAmt->Text="0.00";
     seArivdAmt->Text="0.00";
    }
    else
    {
     seArivdNAmt->ReadOnly=true;
     GroupBox1->Enabled=true;
     seArivdNAmt->Text="0.00";
     seArivdAmt->Text="0.00";
    }

}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::scArivhCurrencyClick(TObject *Sender)
{
 seArivhEnrate->Text=scArivhCurrency->ItemData[2];
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::tbGenDetailClick(TObject *Sender)
{
 if(scArivdDocType->ItemIndex < 1)
  return;
 TGenBaseForm::tbGenDetailClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::seArivdGoodsButtonClick(TObject *Sender)
{
  AnsiString SqlStr;
  SqlStr="003[物料编码][物料名称][计量单位]select GoodsCode,GoodsName,GoodsUnitCode from sdgoods,sdSgd where ";
  SqlStr+="SgdClientCode='"+scArivhClient->ItemData[1]+"' and SgdGoodsCode=GoodsCode order by GoodsCode";
  TfrmWnQuery *p;
  try
  {
    StartWaitForm("正在查询,请稍候...");
    p=new TfrmWnQuery(this,"客户物料查询",SqlStr);
  }
  __finally
  {
    EndWaitForm();
  }
  if(p->ShowModal()==mrOk)
  {
    seArivdGoods->Text=p->ColData[1];
    scArivdUnit->LocateKey(p->ColData[3]);
  }
  delete p;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::scArivdTaxCodeClick(TObject *Sender)
{
 seArivdTRate->Text=scArivdTaxCode->ItemData[2];
 CalculateAmt();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivh::CalculateAmt()
{
  double dQty,dPrice,dDRate,dDAmt,dTRate,dTAmt,dNAmt,dAmt;
  //数量
  if(seArivdQty->Text == "")
  {
   seArivdQty->Text="0";
   dQty=0;
  }
  else
  {
   dQty=StrToFloat(seArivdQty->Text);
   if(dQty < 0)
   {
    seArivdQty->Text="0";
    dQty=0;
   }
  }
  //单价
  if(seArivdPrice->Text == "")
  {
   seArivdPrice->Text="0";
   dPrice=0;
  }
  else
  {
   dPrice=StrToFloat(seArivdPrice->Text);
   if(dPrice < 0)
   {
    seArivdPrice->Text="0";
    dPrice=0;
   }
  }
  //折扣率
  if(seArivdDRate->Text == "")
  {
   seArivdDRate->Text="0";
   dDRate=0;
  }
  else
  {
   dDRate=StrToFloat(seArivdDRate->Text);
   if(dDRate < 0)
   {
    seArivdDRate->Text="0";
    dDRate=0;
   }
  }
  //税率
  if(seArivdTRate->Text == "")
  {
   seArivdTRate->Text="0";
   dTRate=0;
  }
  else
  {
   dTRate=StrToFloat(seArivdTRate->Text);
   if(dTRate < 0)
   {
    seArivdTRate->Text="0";
    dTRate=0;
   }
  }
  //折扣金额=数量*单价*折扣率
  dDAmt=DataCarry(dQty*dPrice*dDRate,2,0);
  seArivdDAmt->Text=FloatToStr(dDAmt);
  if(seArivdNAmt->ReadOnly == true)
  {
   //净额=数量*单价-折扣金额
   dNAmt=DataCarry(dQty*dPrice-dDAmt,2,0);
   seArivdNAmt->Text=FloatToStr(dNAmt);
  }
  else
  {
    if(seArivdNAmt->Text == "")
    {
     seArivdNAmt->Text="0";
     dNAmt=0;
    }
    else
    {
     dNAmt=StrToFloat(seArivdNAmt->Text);
     if(dNAmt < 0)
     {
      seArivdNAmt->Text="0";
      dNAmt=0;
     }
    }
  }
  //税额=净额*税率
  dTAmt=DataCarry(dNAmt*dTRate,2,0);
  seArivdTAmt->Text=FloatToStr(dTAmt);
  //合计=净额+税额
  dAmt=DataCarry(dNAmt+dTAmt,2,0);
  seArivdAmt->Text=FloatToStr(dAmt);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::seArivdQtyExit(TObject *Sender)
{
 //计算发票行各金额
 CalculateAmt();
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::seArivhCodeExit(TObject *Sender)
{
    if(CurrentState==caNormal && seArivhCode->Text != GetHeadValue("ArivhCode"))
    {
      comServer->LocateByKey(WideString(seArivhCode->Text));
      DisplayBill();
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::muAddDetailClick(TObject *Sender)
{
 //来源于应收发票的红字发票不允许手工增行
 if(scArivdDocType->ItemIndex == 3)
 {
  throw Exception("来源于应收发票的红字发票不允许手工增行,请使用生成功能");
 }
 TGenBaseForm::muAddDetailClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::muEditDetailClick(TObject *Sender)
{
 if(rbtArivdFrom_Create->Checked)
 {
  throw Exception("生成的发票行不允许手工修改");
 }
 TGenBaseForm::muEditDetailClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivh::RefreshUpdateData(int MsgSrc,int MsgType)
{
 
}  
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::scArivdTaxCodeExit(TObject *Sender)
{
 seArivdTRate->Text=scArivdTaxCode->ItemData[2];
 CalculateAmt();
}
//---------------------------------------------------------------------------
bool __fastcall TfrmArivh::BeforeCheck()
{
  SetHeadValue("ArivhCheck",1);
  SetHeadValue("ArivhChecker",g_sdUserCode);
  SetHeadValue("ArivhCheckDate",g_sdCurDate);
  return true;
}
//---------------------------------------------------------------------------
bool __fastcall TfrmArivh::BeforeUnCheck()
{
  SetHeadValue("ArivhCheck",0);
  SetHeadValue("ArivhChecker","");
  SetHeadValue("ArivhCheckDate",NULL);
  return true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivh::seArivdDocCodeButtonClick(TObject *Sender)
{
 AnsiString SqlStr;
    TfrmWnQuery *p;
  try
    {
        StartWaitForm("正在查询,请稍候...");
        if(scArivdDocType->ItemData[1]=="1")
        {
         SqlStr="002[发货单号][行号]";
         SqlStr+=" select Soghcode,SogdLine";
         SqlStr+=" from sdSogh,sdSogd where Soghcode=Sogdcode ";
         SqlStr+=" and Soghcheck=1 and Soghclose=0 and Soghcancel=0 ";
         SqlStr+=" and SoghClient='"+scArivhClient->ItemData[1]+"' and SoghCurrency='"+scArivhCurrency->ItemData[1]+"' order by Soghcode";
         p=new TfrmWnQuery(this,"发货单查询",SqlStr);
        }
        else
        {
         SqlStr="002[退货单号][行号]";
         SqlStr+=" select SrethCode,SretdLine from sdSreth,sdSretd ";
         SqlStr+=" where SrethCode=SretdCode and Srethcheck=1 and Srethclose=0 and Srethcancel=0 ";
         SqlStr+=" and SrethClient='"+scArivhClient->ItemData[1]+"' and SrethCurrency='"+scArivhCurrency->ItemData[1]+"'order by Srethcode";
         p=new TfrmWnQuery(this,"退货单查询",SqlStr);
         }
     }
     __finally
     {
       EndWaitForm();
     }
     if(p->ShowModal()==mrOk)
     {
      seArivdDocCode->Text=p->ColData[1];
      seArivdDocLine->Text =p->ColData[2];
     }
     delete p;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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