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 + -
显示快捷键?