arrsd.cpp

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

CPP
369
字号
//--------------------------------------------------------------------------
#include <vcl.h>
#include "Arrsd.h"
#include "Arrsh.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"

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

    StartWaitForm("正在生成红字核销单行,请稍候......");
    if(sgArrsd->RowCount>1)
    {
     int j;
     j=comServer->ItemCount-1;
     if(j>=0)
     {
        comServer->LocateItemByIndex(j);
        j=StrToInt(GetDetailValue("ArrsdLine"));
        j=j+1;
     }
     else
        j=1;
     try
     {
       for(int i=1;i<sgArrsd->RowCount;i++)
       {
           if(sgArrsd->Cells[1][i]=="√")
           {
               comServer->AddItem();
               SetDetailValue("ArrsdCode",frmArrsh->seArrshCode->Text);
               SetDetailValue("ArrsdLine",AnsiString(j));
               SetDetailValue("ArrsdDocCode",sgArrsd->Cells[2][i]);
               SetDetailValue("ArrsdDocLine",sgArrsd->Cells[3][i]);
               if(sgArrsd->Cells[10][i] == "")
                throw Exception("收款金额不允许为空");
               SetDetailValue("ArrsdRAmt",sgArrsd->Cells[10][i]);
               if(sgArrsd->Cells[11][i] == "")
                throw Exception("核销金额不允许为空");
               SetDetailValue("ArrsdCAmt",sgArrsd->Cells[11][i]);
               if(sgArrsd->Cells[12][i] == "")
                throw Exception("换算系数不允许为空");
               SetDetailValue("ArrsdConv",sgArrsd->Cells[12][i]);
               SetDetailValue("ArrsdDesc","");
               comServer->AddToObject();
               j=j+1;
           }
       }
     }
     catch(Exception &e)
     {
      comServer->FreeItem();
      this->ModalResult=0;
      throw Exception(e.Message);
     }
    }
  }
  __finally
  {
    EndWaitForm();
  }
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArrsd::btnCancelClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArrsd::FormShow(TObject *Sender)
{
    InitControlGroup();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArrsd::InitControlGroup()
{
    AnsiString sSql;
    sgArrsd->RowCount = 1;
    seArrshDocType->Text=frmArrsh->scArrshDocType->Text;
    FDocType=StrToInt(frmArrsh->scArrshDocType->ItemData[1]);
    seArrshDocCode->Text=frmArrsh->seArrshDocCode->Text;
    FDocCode=frmArrsh->seArrshDocCode->Text;
    seClientCode->Text="";
    seCurrencyCode->Text="";
    seEnrate->Text="";
    seAmt->Text="";
    seSKDocCode->Text="";
    seArrsdDocCode->Text="";
    deBeginDate->Text="";

    TComResultSet *RsArrsd;
    RsArrsd=new  TComResultSet(Handle,g_ClientHandle);
    try
    {
      switch(FDocType)
      {
       case 1: //退款单
        sSql =" select RefundClient Client,RefundCurrency Currency,RefundArrb SKDocCode, RefundEnrate Enrate,RefundAmt-RefundCAmt Amt ";
        sSql+=" from sdRefund where RefundCheck=1 and RefundCode='"+FDocCode+"'";
        break;
       case 2: //票据
        sSql =" select ArnrClient Client,ArnrCurrency Currency,ArnrCode SKDocCode,ArnrEnrate Enrate,ArnrAmt Amt ";
        sSql+=" from sdArnr where ArnrCheck=1 and ArnrCode='"+FDocCode+"'";
        break;
       default:
        sSql="";
        break;
      }
      RsArrsd->Open(sSql,"");
      if(RsArrsd->RecordCount > 0)
      {
       FClientCode=RsArrsd->FieldByName("Client");
       seClientCode->Text=RsArrsd->FieldByName("Client");
       FCurrencyCode=RsArrsd->FieldByName("Currency");
       seCurrencyCode->Text=RsArrsd->FieldByName("Currency");
       FEnrate=StrToFloat(RsArrsd->FieldByName("Enrate"));
       seEnrate->Text=RsArrsd->FieldByName("Enrate");
       FAmt=StrToFloat(RsArrsd->FieldByName("Amt"));
       seAmt->Text=RsArrsd->FieldByName("Amt");
       FSKDocCode=RsArrsd->FieldByName("SKDocCode");
       seSKDocCode->Text=RsArrsd->FieldByName("SKDocCode");
      }
      else
      {
       throw Exception("'"+FDocCode+"'是无效单据号");
      }
    }
    __finally
    {
      RsArrsd->Close();
      delete RsArrsd;
    }
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmArrsd::GetSqlString()
{
    AnsiString  s_SQL,s_Temp;
    s_SQL =" select ArcavhCode,DocCurrency,ArcavdLine,(case ArcavdDocType when 1 then '应收发票' else '其他应收单' end )DocType, ";
    s_SQL+=" ArcavdDocCode,ArcavdDocLine,ArcavdRAmt,ArcavdCAmt,ArcavdConv ";
    s_SQL+=" from sdArcavh,sdArcavd,sdVW_AR_Doc ";
    s_SQL+=" where ArcavhCode=ArcavdCode and ArcavhCheck=1 ";
    s_SQL+=" and ArcavdDocType=DocTypeCode and ArcavdDocCode=DocCode and ArcavdDocLine=DocLine ";
    s_SQL+=" and ArcavhDocCode='"+FSKDocCode+"' ";
    if(FDocType == 1) //退款单来源于收款单或预收单
     s_SQL+=" and (ArcavhDocType=1 or ArcavhDocType=2) ";
    else              //退回票据
     s_SQL+=" and ArcavhDocType=3 ";
    s_Temp="";
    if(seArrsdDocCode->Text != "")
     s_Temp+=" and ArcavhCode ='"+seArrsdDocCode->Text+"' ";
    if(deBeginDate->Text != "")
     s_Temp+=" and ArcavhDate >='"+deBeginDate->Text+"' ";
    s_SQL+=s_Temp;
    s_SQL+=" order by ArcavhCode,ArcavdLine ";
    return(s_SQL);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArrsd::FillGridWithData()
{
  AnsiString  ItemStr,s_SQL;
  TComResultSet *RsArrsd;
  try
  {
   try
   {
    s_SQL =GetSqlString();
    sgArrsd->RowCount=1;
    RsArrsd=new  TComResultSet(Handle,g_ClientHandle);
    RsArrsd->Open(s_SQL,"");
    while( RsArrsd->Eof == 0)
    {
     ItemStr = "\t"+AnsiString("") +
               "\t"+RsArrsd->FieldByName("ArcavhCode")+
               "\t"+RsArrsd->FieldByName("ArcavdLine")+
               "\t"+RsArrsd->FieldByName("DocType")+
               "\t"+RsArrsd->FieldByName("ArcavdDocCode")+
               "\t"+RsArrsd->FieldByName("ArcavdDocLine")+
               "\t"+RsArrsd->FieldByName("DocCurrency")+
               "\t"+RsArrsd->FieldByName("ArcavdRAmt")+
               "\t"+RsArrsd->FieldByName("ArcavdCAmt")+
               "\t"+RsArrsd->FieldByName("ArcavdRAmt")+
               "\t"+RsArrsd->FieldByName("ArcavdCAmt")+
               "\t"+RsArrsd->FieldByName("ArcavdConv");

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

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

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

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

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

void __fastcall TfrmArrsd::sgArrsdSelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
 if(sgArrsd->Cells[1][ARow]=="√")
  sgArrsd->ReadOnly=false;
 else
  sgArrsd->ReadOnly=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmArrsd::seArrsdDocCodeButtonClick(TObject *Sender)
{
    AnsiString SqlStr;
    SqlStr="003[单号][日期][操作员] ";
    SqlStr+=" select ArcavhCode,ArcavhDate,ArcavhUser ";
    SqlStr+=" from sdArcavh where ArcavhCheck=1 ";
    if(FDocType == 1) //退款单
     SqlStr+=" and (ArcavhDocType=1 or ArcavhDocType=2) ";
    else              //退回票据
     SqlStr+=" and ArcavhDocType=3 ";
    SqlStr+=" and ArcavhDocCode='"+FSKDocCode+"' ";
    SqlStr+=" order by ArcavhDate DESC,ArcavhCode ";
    TfrmWnQuery *p;
    try
    {
      StartWaitForm("正在查询,请稍候...");
      p=new TfrmWnQuery(this,"应收核销单查询",SqlStr);
    }
    __finally
    {
      EndWaitForm();
    }
    if(p->ShowModal()==mrOk)
    {
      seArrsdDocCode->Text=p->ColData[1];
    }
    delete p;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArrsd::btnRetryClick(TObject *Sender)
{
 seArrsdDocCode->Text="";
 deBeginDate->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TfrmArrsd::sgArrsdSetEditText(TObject *Sender, int ACol,
      int ARow, const AnsiString Value)
{
  double dRAmt,dCAmt,dConv;
  if(sgArrsd->Cells[1][ARow] == "√" && (ACol == 10 || ACol == 11))
  {
   if(sgArrsd->Cells[10][ARow] == "")
    return;
   else
    dRAmt=StrToFloat(sgArrsd->Cells[10][ARow]);
   if(sgArrsd->Cells[11][ARow] == "")
    return;
   else
    dCAmt=StrToFloat(sgArrsd->Cells[11][ARow]);
   if(dCAmt == 0 || dRAmt == 0)
   {
    sgArrsd->Cells[12][ARow]="0";
   }
   else
   {
    dConv=DataCarry(dCAmt/dRAmt,2,0);
    sgArrsd->Cells[12][ARow]=FloatToStr(dConv);
   } 
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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