arivd_t.cpp

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

CPP
364
字号
//--------------------------------------------------------------------------
#include <vcl.h>
#include "Arivd_T.h"
#include "Arivh.h"
//--------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma link "SDComboBox"
#pragma link "DateEdit"
#pragma resource "*.dfm"

TfrmArivd_T  *frmArivd_T;
//--------------------------------------------------------------------------
__fastcall TfrmArivd_T::TfrmArivd_T(TComponent* Owner)
        : TStdBaseForm(Owner)
{
  btnOK->Enabled = false;
}
//--------------------------------------------------------------------------

void __fastcall TfrmArivd_T::btnOKClick(TObject *Sender)
{
  double dQty,dPrice,dDRate,dDAmt,dTRate,dTAmt,dNAmt,dAmt;
  try
  {
    StartWaitForm("正在生成发票行,请稍候......");
    if(sgArivd->RowCount>1)
    {
     int j;
     j=comServer->ItemCount-1;
     if(j>=0)
     {
        comServer->LocateItemByIndex(j);
        j=StrToInt(GetDetailValue("ArivdLine"));
        j=j+1;
     }
     else
        j=1;
     try
     {
       for(int i=1;i<sgArivd->RowCount;i++)
       {
           if(sgArivd->Cells[1][i]=="√")
           {
               comServer->AddItem();
               SetDetailValue("ArivdCode",frmArivh->seArivhCode->Text);
               SetDetailValue("ArivdLine",AnsiString(j));
               if(sgArivd->Cells[8][i] == "")
                throw Exception("请选择行类型(鼠标双击'发票行类型')数据列");
               SetDetailValue("ArivdArlt",sgArivd->Cells[8][i]);
               SetDetailValue("ArivdDocType",frmArivh->scArivdDocType->ItemData[1]);
               SetDetailValue("ArivdDocCode",sgArivd->Cells[2][i]);
               SetDetailValue("ArivdDocLine",sgArivd->Cells[6][i]);
               SetDetailValue("ArivdGoods",sgArivd->Cells[9][i]);
               SetDetailValue("ArivdUnit",sgArivd->Cells[11][i]);
               if(sgArivd->Cells[15][i] == "")
                throw Exception("缺少税率数据");
               dTRate=StrToFloat(sgArivd->Cells[15][i]);
               SetDetailValue("ArivdTRate",sgArivd->Cells[15][i]);
               if(sgArivd->Cells[12][i] == "")
                throw Exception("缺少退货物料数量数据");
               dQty=StrToFloat(sgArivd->Cells[12][i]);
               SetDetailValue("ArivdQty",sgArivd->Cells[12][i]);
               if(sgArivd->Cells[13][i] == "")
                throw Exception("缺少退货物料单价数据");
               dPrice=StrToFloat(sgArivd->Cells[13][i]);    //含税单价
               dPrice=DataCarry(dPrice/(1+dTRate),4,0);                    //净单价
               SetDetailValue("ArivdPrice",FloatToStr(dPrice));
               if(sgArivd->Cells[14][i] == "")
                throw Exception("缺少退货物料折扣率数据");
               dDRate=StrToFloat(sgArivd->Cells[14][i]);
               SetDetailValue("ArivdDRate",sgArivd->Cells[14][i]);
               //折扣金额=数量*单价*折扣率
               dDAmt=DataCarry(dQty*dPrice*dDRate,2,0);
               SetDetailValue("ArivdDAmt",FloatToStr(dDAmt));
               //净额=数量*单价-折扣金额
               dNAmt=DataCarry(dQty*dPrice-dDAmt,2,0);
               SetDetailValue("ArivdNAmt",FloatToStr(dNAmt));
               SetDetailValue("ArivdTaxCode",sgArivd->Cells[5][i]);
               //税额=净额*税率
               dTAmt=DataCarry(dNAmt*dTRate,2,0);
               SetDetailValue("ArivdTAmt",FloatToStr(dTAmt));
               //合计=净额+税额
               dAmt=DataCarry(dNAmt+dTAmt,2,0);
               SetDetailValue("ArivdAmt",FloatToStr(dAmt));

               SetDetailValue("ArivdCAmt","0");
               SetDetailValue("ArivdPzCode","");
               SetDetailValue("ArivdBAmt","0");
               SetDetailValue("ArivdRAmt","0");

               SetDetailValue("ArivdFrom","2");
               SetDetailValue("ArivdDesc","");
               SetDetailValue("ArivdState","0");
               comServer->AddToObject();
               j=j+1;
           }
       }
     }
     catch(Exception &e)
     {
      comServer->FreeItem();
      this->ModalResult=0;
      throw Exception(e.Message);
     }
    }
  }
  __finally
  {
    EndWaitForm();
  }
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_T::btnCancelClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_T::FormShow(TObject *Sender)
{
    InitControlGroup();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_T::InitControlGroup()
{
    sgArivd->RowCount = 1;
    FClientCode=frmArivh->scArivhClient->ItemData[1];
    FCurrencyCode=frmArivh->scArivhCurrency->ItemData[1];
    seClientName->Text=frmArivh->scArivhClient->ItemData[0];
    seCurrencyName->Text=frmArivh->scArivhCurrency->ItemData[0];
    deBeginDate->Text="";
    seSrethCode->Text="";
    seSoghCode->Text="";
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmArivd_T::GetSqlString()
{
    AnsiString  s_SQL,s_Temp;
    s_SQL =" select SrethCode,SrethDate,SrethType,SrethTaxCode,TaxRate,SretdLine,SretdSogCode,SretdGoods,GoodsName,SretdUnit, ";
    s_SQL+=" SretdQty,SretdPrice from sdSreth,sdSretd,sdGoods,sdTax ";
    s_SQL+=" where SrethCode=SretdCode and SrethCheck=1 and SretdGoods=GoodsCode and SrethTaxCode=TaxCode ";
    s_SQL+=" and SrethClient='"+FClientCode+"' ";
    s_SQL+=" and SrethCurrency='"+FCurrencyCode+"' ";
    s_Temp="";
    if(seSoghCode->Text != "")
     s_Temp+=" and SretdSogCode ='"+seSoghCode->Text+"'";
    if(seSrethCode->Text != "")
     s_Temp+=" and SrethCode ='"+seSrethCode->Text+"'";
    if(deBeginDate->Text != "")
     s_Temp+=" and SrethDate >='"+deBeginDate->Text+"'";
    s_SQL+=s_Temp;
    s_SQL+=" order by SrethDate DESC,SrethCode,SretdLine ";
    return(s_SQL);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::FillGridWithData()
{
  AnsiString  ItemStr,s_SQL;
  TComResultSet *RsArivd;
  try
  {
   try
   {
    s_SQL =GetSqlString();
    sgArivd->RowCount=1;
    RsArivd=new  TComResultSet(Handle,g_ClientHandle);
    RsArivd->Open(s_SQL,"");
    while( RsArivd->Eof == 0)
    {
     ItemStr = "\t"+AnsiString("") +
               "\t"+RsArivd->FieldByName("SrethCode")+
               "\t"+RsArivd->FieldByName("SrethDate")+
               "\t"+(RsArivd->FieldByName("SrethType")=="1"?"据订单退货":"据客户退货")+
               "\t"+RsArivd->FieldByName("SrethTaxCode")+
               "\t"+RsArivd->FieldByName("SretdLine")+
               "\t"+RsArivd->FieldByName("SretdSogCode")+
               "\t"+AnsiString("")+
               "\t"+RsArivd->FieldByName("SretdGoods")+
               "\t"+RsArivd->FieldByName("GoodsName")+
               "\t"+RsArivd->FieldByName("SretdUnit")+
               "\t"+RsArivd->FieldByName("SretdQty")+
               "\t"+RsArivd->FieldByName("SretdPrice")+
               "\t"+AnsiString("0")+
               "\t"+RsArivd->FieldByName("TaxRate");

     sgArivd->AddItem(ItemStr);
     RsArivd->MoveNext();
    }
    RsArivd->Close();
   }
   catch(Exception &e)
   {
    throw Exception(e.Message);
   }
  }
  __finally
  {
   delete RsArivd;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_T::GetComObject(TComServer *comServerPtr)
{
    comServer = comServerPtr;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::sgArivdDblClick(TObject *Sender)
{
    int ARow=sgArivd->Row;
    int ACol=sgArivd->Col;
    if (ARow < 1) return;
    if (ACol == 1)
    {
      if (sgArivd->Cells[1][ARow] == "√")
      {
       sgArivd->Cells[1][ARow] =  "";
       for (int i=1;i<sgArivd->RowCount;i++)
       {
          if(sgArivd->Cells[1][i]=="√")
          {
             btnOK->Enabled=true;
             break;
          }
          else
             btnOK->Enabled=false;
       }
      }
      else
      {
          sgArivd->Cells[1][ARow] =  "√";
          btnOK->Enabled = true;
      }
    }
    if(ACol == 8)
    {
      if (sgArivd->Cells[1][ARow] != "√")
       return;
      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 where ArltFrom=1 order by ArltFrom ";
      TfrmWnQuery *p;
      try
      {
        StartWaitForm("正在查询,请稍候...");
        p=new TfrmWnQuery(this,"发票行类型查询",SqlStr);
      }
      __finally
      {
        EndWaitForm();
      }
      if(p->ShowModal()==mrOk)
      {
        sgArivd->Cells[8][ARow]=p->ColData[1];
      }
      delete p;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::bbQueryClick(TObject *Sender)
{
  FillGridWithData();
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::bbAllClick(TObject *Sender)
{
  if(sgArivd->RowCount <=1)
    return;
  for(int i=1;i<sgArivd->RowCount;i++)
    sgArivd->Cells[1][i] = "√";
  btnOK->Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::bbNoneClick(TObject *Sender)
{
  for(int i=1;i<sgArivd->RowCount;i++)
    sgArivd->Cells[1][i] = " ";
  btnOK->Enabled = false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::sgArivdSelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
 if(sgArivd->Cells[1][ARow]=="√")
  sgArivd->ReadOnly=false;
 else
  sgArivd->ReadOnly=true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::seSrethCodeButtonClick(TObject *Sender)
{
    AnsiString SqlStr;
    SqlStr="003[退货单号][退货日期][退货类型] ";
    SqlStr+=" select SrethCode,SrethDate,(case SrethType when 1 then '据订单退货' else '据客户退货' end) tmp ";
    SqlStr+=" from sdSreth where SrethCheck=1 and ";
    SqlStr+=" SrethClient='"+FClientCode+"'and SrethCurrency='"+FCurrencyCode+"' ";
    SqlStr+=" order by SrethDate DESC,SrethCode ";
    TfrmWnQuery *p;
    try
    {
      StartWaitForm("正在查询,请稍候...");
      p=new TfrmWnQuery(this,"退货单查询",SqlStr);
    }
    __finally
    {
      EndWaitForm();
    }
    if(p->ShowModal()==mrOk)
    {
      seSrethCode->Text=p->ColData[1];
    }
    delete p;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::seSoghCodeButtonClick(TObject *Sender)
{
    AnsiString SqlStr;
    SqlStr="003[发货单号][发货日期][发货类型] ";
    SqlStr+=" select SoghCode,SoghDate,(case SoghType when 1 then '订单发货' else '非订单发货' end) tmp ";
    SqlStr+=" from sdSogh where SoghCheck=1 and ";
    SqlStr+=" SoghClient='"+FClientCode+"'and SoghCurrency='"+FCurrencyCode+"' ";
    SqlStr+=" order by SoghDate DESC,SoghCode ";
    TfrmWnQuery *p;
    try
    {
      StartWaitForm("正在查询,请稍候...");
      p=new TfrmWnQuery(this,"销售发货单查询",SqlStr);
    }
    __finally
    {
      EndWaitForm();
    }
    if(p->ShowModal()==mrOk)
    {
      seSoghCode->Text=p->ColData[1];
    }
    delete p;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_T::btnRetryClick(TObject *Sender)
{
 seSrethCode->Text="";
 seSoghCode->Text="";
 deBeginDate->Text="";
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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