arcavd.cpp

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

CPP
397
字号
//--------------------------------------------------------------------------
#include <vcl.h>
#include "Arcavd.h"
#include "Arcavh.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"

TfrmArcavd  *frmArcavd;
//--------------------------------------------------------------------------
__fastcall TfrmArcavd::TfrmArcavd(TComponent* Owner)
        : TStdBaseForm(Owner)
{
  btnOK->Enabled = false;
}
//--------------------------------------------------------------------------
void __fastcall TfrmArcavd::btnOKClick(TObject *Sender)
{
  double tmp;
  try
  {
    tmp=0;
    for(int i=1;i<sgArcavd->RowCount;i++)
    {
     if(sgArcavd->Cells[1][i]=="√")
     {
      if(sgArcavd->Cells[9][i] == "")
       throw Exception("核销金额不允许为空 ");
      tmp+=StrToFloat(sgArcavd->Cells[9][i]);
     }
    }
    if(tmp-FAmt > 0)
     throw Exception("应收单据的核销金额总和不能大于来款单据金额");

    StartWaitForm("正在生成核销单行,请稍候......");
    if(sgArcavd->RowCount>1)
    {
     int j;
     j=comServer->ItemCount-1;
     if(j>=0)
     {
        comServer->LocateItemByIndex(j);
        j=StrToInt(GetDetailValue("ArcavdLine"));
        j=j+1;
     }
     else
        j=1;
     try
     {
       for(int i=1;i<sgArcavd->RowCount;i++)
       {
           if(sgArcavd->Cells[1][i]=="√")
           {
               comServer->AddItem();
               SetDetailValue("ArcavdCode",frmArcavh->seArcavhCode->Text);
               SetDetailValue("ArcavdLine",AnsiString(j));
               if(sgArcavd->Cells[2][i] == "应收发票")
                SetDetailValue("ArcavdDocType","1");
               else
                SetDetailValue("ArcavdDocType","2");
               SetDetailValue("ArcavdDocCode",sgArcavd->Cells[3][i]);
               SetDetailValue("ArcavdDocLine",sgArcavd->Cells[4][i]);
               if(sgArcavd->Cells[8][i] == "")
                throw Exception("收款金额不允许为空");
               SetDetailValue("ArcavdRAmt",sgArcavd->Cells[8][i]);
               if(sgArcavd->Cells[9][i] == "")
                throw Exception("核销金额不允许为空");
               SetDetailValue("ArcavdCAmt",sgArcavd->Cells[9][i]);
               if(sgArcavd->Cells[10][i] == "")
                throw Exception("换算系数不允许为空");
               SetDetailValue("ArcavdConv",sgArcavd->Cells[10][i]);
               SetDetailValue("ArcavdDesc","");
               comServer->AddToObject();
               j=j+1;
           }
       }
     }
     catch(Exception &e)
     {
      comServer->FreeItem();
      this->ModalResult=0;
      throw Exception(e.Message);
     }
    }
  }
  __finally
  {
    EndWaitForm();
  }
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArcavd::btnCancelClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArcavd::FormShow(TObject *Sender)
{
    InitControlGroup();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArcavd::InitControlGroup()
{
    AnsiString sSql;
    sgArcavd->RowCount = 1;
    seArcavhDocType->Text=frmArcavh->scArcavhDocType->Text;
    FDocType=StrToInt(frmArcavh->scArcavhDocType->ItemData[1]);
    seArcavhDocCode->Text=frmArcavh->seArcavhDocCode->Text;
    FDocCode=frmArcavh->seArcavhDocCode->Text;
    seClientCode->Text="";
    seCurrencyCode->Text="";
    seEnrate->Text="";
    seAmt->Text="";
    seArcavdDocCode->Text="";
    deBeginDate->Text="";

    scArcavdDocType->ClearAll();
    scArcavdDocType->AddItems("1-应收发票","1");
    scArcavdDocType->AddItems("2-其他应收单","2");
    scArcavdDocType->ItemIndex=-1;

    TComResultSet *RsArcavd;
    RsArcavd=new  TComResultSet(Handle,g_ClientHandle);
    try
    {
      switch(FDocType)
      {
       case 1: //收款单
        sSql =" select ArrbClient Client,ArrbCurrency Currency,ArrbEnrate Enrate,ArrbAmt-ArrbBAmt-ArrbCAmt Amt ";
        sSql+=" from sdArrb where ArrbCheck=1 and ArrbCode='"+FDocCode+"'";
        break;
       case 2: //预收单
        sSql =" select PreRbClient Client,PreRbCurrency Currency,PreRbEnrate Enrate,PreRbAmt-PreRbBAmt-PreRbCAmt Amt ";
        sSql+=" from sdPreRb where PreRbCheck=1 and PreRbCode='"+FDocCode+"'";
        break;
       case 3: //票据
        sSql =" select ArnrClient Client,ArnrCurrency Currency,ArnrEnrate Enrate,ArnrAmt-ArnrCAmt Amt ";
        sSql+=" from sdArnr where ArnrCheck=1 and ArnrCode='"+FDocCode+"'";
        break;
       default:
        sSql="";
        break;
      }
      RsArcavd->Open(sSql,"");
      if(RsArcavd->RecordCount > 0)
      {
       FClientCode=RsArcavd->FieldByName("Client");
       seClientCode->Text=RsArcavd->FieldByName("Client");
       FCurrencyCode=RsArcavd->FieldByName("Currency");
       seCurrencyCode->Text=RsArcavd->FieldByName("Currency");
       FEnrate=StrToFloat(RsArcavd->FieldByName("Enrate"));
       seEnrate->Text=RsArcavd->FieldByName("Enrate");
       FAmt=StrToFloat(RsArcavd->FieldByName("Amt"));
       seAmt->Text=RsArcavd->FieldByName("Amt");
      }
      else
      {
       throw Exception("'"+FDocCode+"'是无效单据号");
      }
    }
    __finally
    {
      RsArcavd->Close();
      delete RsArcavd;
    }
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmArcavd::GetSqlString()
{
    AnsiString  s_SQL,s_Temp;
    s_SQL =" select DocType,DocCode,DocLine,DocCurrency,DocEnrate,DocAmt ";
    s_SQL+=" from sdVW_AR_Doc where DocClient='"+FClientCode+"' and DocAmt>0 ";
    s_Temp="";
    if(scArcavdDocType->ItemIndex > -1)
    {
     if(scArcavdDocType->ItemIndex == 0 )
      s_Temp+=" and DocType ='应收发票' ";
     else
      s_Temp+=" and DocType ='其他应收单' ";
    }
    if(seArcavdDocCode->Text != "")
     s_Temp+=" and DocCode ='"+seArcavdDocCode->Text+"' ";
    if(deBeginDate->Text != "")
     s_Temp+=" and DocDate >='"+deBeginDate->Text+"' ";
    s_SQL+=s_Temp;
    s_SQL+=" order by DocType DESC,DocCode,DocLine ";
    return(s_SQL);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArcavd::FillGridWithData()
{
  AnsiString  ItemStr,s_SQL;
  TComResultSet *RsArcavd;
  try
  {
   try
   {
    s_SQL =GetSqlString();
    sgArcavd->RowCount=1;
    RsArcavd=new  TComResultSet(Handle,g_ClientHandle);
    RsArcavd->Open(s_SQL,"");
    while( RsArcavd->Eof == 0)
    {
     ItemStr = "\t"+AnsiString("") +
               "\t"+RsArcavd->FieldByName("DocType")+
               "\t"+RsArcavd->FieldByName("DocCode")+
               "\t"+RsArcavd->FieldByName("DocLine")+
               "\t"+RsArcavd->FieldByName("DocCurrency")+
               "\t"+RsArcavd->FieldByName("DocEnrate")+
               "\t"+RsArcavd->FieldByName("DocAmt")+
               "\t"+RsArcavd->FieldByName("DocAmt");
     if(UpperCase(RsArcavd->FieldByName("DocCurrency")) == UpperCase(FCurrencyCode))
     {
      ItemStr+="\t"+RsArcavd->FieldByName("DocAmt")+
               "\t"+AnsiString("1");
     }
     else
     {
      ItemStr+="\t"+AnsiString("")+
               "\t"+AnsiString("");
     }
     sgArcavd->AddItem(ItemStr);
     RsArcavd->MoveNext();
    }
    RsArcavd->Close();
   }
   catch(Exception &e)
   {
    throw Exception(e.Message);
   }
  }
  __finally
  {
   delete RsArcavd;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmArcavd::GetComObject(TComServer *comServerPtr)
{
    comServer = comServerPtr;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TfrmArcavd::sgArcavdDblClick(TObject *Sender)
{
    int ARow=sgArcavd->Row;
    int ACol=sgArcavd->Col;
    if (ARow < 1) return;
    if (ACol == 1)
    {
      if (sgArcavd->Cells[1][ARow] == "√")
      {
       sgArcavd->Cells[1][ARow] =  "";
       for (int i=1;i<sgArcavd->RowCount;i++)
       {
          if(sgArcavd->Cells[1][i]=="√")
          {
             btnOK->Enabled=true;
             break;
          }
          else
             btnOK->Enabled=false;
       }
      }
      else
      {
          sgArcavd->Cells[1][ARow] =  "√";
          btnOK->Enabled = true;
      }
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArcavd::bbQueryClick(TObject *Sender)
{
  if(seClientCode->Text == "")
   return;
  FillGridWithData();
}
//---------------------------------------------------------------------------

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

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

void __fastcall TfrmArcavd::sgArcavdSelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
 if(sgArcavd->Cells[1][ARow]=="√")
 {
  if(UpperCase(FCurrencyCode) == UpperCase(sgArcavd->Cells[5][ARow])&&(ACol == 9))
    sgArcavd->ReadOnly=true;
  else
    sgArcavd->ReadOnly=false;
 }
 else
  sgArcavd->ReadOnly=true;

}
//---------------------------------------------------------------------------
void __fastcall TfrmArcavd::seArcavdDocCodeButtonClick(TObject *Sender)
{
    AnsiString SqlStr;
    SqlStr="003[单号][日期][币种] ";
    SqlStr+=" select distinct DocCode,DocDate,DocCurrency ";
    SqlStr+=" from sdVW_AR_Doc ";
    SqlStr+=" where DocClient='"+FClientCode+"' ";
    if(scArcavdDocType->ItemIndex == 0)
     SqlStr+=" and DocType='应收发票' ";
    if(scArcavdDocType->ItemIndex == 1)
     SqlStr+=" and DocType='其他应收单' ";
    SqlStr+=" order by DocDate DESC,DocCode ";
    TfrmWnQuery *p;
    try
    {
      StartWaitForm("正在查询,请稍候...");
      p=new TfrmWnQuery(this,"应收单据查询",SqlStr);
    }
    __finally
    {
      EndWaitForm();
    }
    if(p->ShowModal()==mrOk)
    {
      seArcavdDocCode->Text=p->ColData[1];
    }
    delete p;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArcavd::btnRetryClick(TObject *Sender)
{
 scArcavdDocType->ItemIndex=-1;
 seArcavdDocCode->Text="";
 deBeginDate->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TfrmArcavd::sgArcavdSetEditText(TObject *Sender, int ACol,
      int ARow, const AnsiString Value)
{
  double dRAmt,dCAmt,dConv;
  if(sgArcavd->Cells[1][ARow] == "√" && (ACol == 8 || ACol == 9))
  {
   if(UpperCase(FCurrencyCode) != UpperCase(sgArcavd->Cells[5][ARow]))
   {
     if(sgArcavd->Cells[8][ARow] == "")
      return;
     else
      dRAmt=StrToFloat(sgArcavd->Cells[8][ARow]);
     if(sgArcavd->Cells[9][ARow] == "")
      return;
     else
      dCAmt=StrToFloat(sgArcavd->Cells[9][ARow]);
     if(dCAmt == 0  || dRAmt == 0)
      sgArcavd->Cells[10][ARow]="0";
     else
     {
      dConv=DataCarry(dCAmt/dRAmt,2,0);
      sgArcavd->Cells[10][ARow]=FloatToStr(dConv);
     }
   }
   //收款和应收币种相同,只允许修改收款金额
   else
   {
    sgArcavd->Cells[9][ARow]=Value;
    sgArcavd->Cells[10][ARow]="1";
   }
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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