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