arivd_p.cpp
来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 324 行
CPP
324 行
//--------------------------------------------------------------------------
#include <vcl.h>
#include "Arivd_P.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_P *frmArivd_P;
//--------------------------------------------------------------------------
__fastcall TfrmArivd_P::TfrmArivd_P(TComponent* Owner)
: TStdBaseForm(Owner)
{
btnOK->Enabled = false;
}
//--------------------------------------------------------------------------
void __fastcall TfrmArivd_P::btnOKClick(TObject *Sender)
{
double dQty,dPrice,dDRate,dDAmt,dTRate,dTAmt,dNAmt,dAmt,dTmp;
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));
SetDetailValue("ArivdArlt",sgArivd->Cells[15][i]);
SetDetailValue("ArivdDocType",frmArivh->scArivdDocType->ItemData[1]);
SetDetailValue("ArivdDocCode",sgArivd->Cells[3][i]);
SetDetailValue("ArivdDocLine",sgArivd->Cells[4][i]);
SetDetailValue("ArivdGoods",sgArivd->Cells[7][i]);
SetDetailValue("ArivdUnit",sgArivd->Cells[8][i]);
if(sgArivd->Cells[2][i] == "")
throw Exception("请输入红冲数量或金额");
if(sgArivd->Cells[14][i] == "1") //类型来源是产品,红冲数量
{
dQty=DataCarry(StrToFloat(sgArivd->Cells[2][i]),2,0);
dTmp=DataCarry(StrToFloat(sgArivd->Cells[9][i]),2,0);
if(dQty-dTmp>0)
throw Exception("红冲数量不能大于原发票行数量");
SetDetailValue("ArivdQty",FloatToStr(dQty));
}
else
{
dQty=StrToFloat(sgArivd->Cells[9][i]);
SetDetailValue("ArivdQty",sgArivd->Cells[9][i]);
}
if(sgArivd->Cells[10][i] == "")
throw Exception("缺少物料单价数据");
dPrice=StrToFloat(sgArivd->Cells[10][i]);
SetDetailValue("ArivdPrice",sgArivd->Cells[10][i]);
if(sgArivd->Cells[13][i] == "")
throw Exception("缺少物料折扣率数据");
dDRate=StrToFloat(sgArivd->Cells[13][i]);
SetDetailValue("ArivdDRate",sgArivd->Cells[13][i]);
//折扣金额=数量*单价*折扣率
dDAmt=DataCarry(dQty*dPrice*dDRate,2,0);
SetDetailValue("ArivdDAmt",FloatToStr(dDAmt));
if(sgArivd->Cells[14][i] == "1")
{
//净额=数量*单价-折扣金额
dNAmt=DataCarry(dQty*dPrice-dDAmt,2,0);
}
else //类型来源不是产品,红冲金额
{
dNAmt=DataCarry(StrToFloat(sgArivd->Cells[2][i]),2,0);
dTmp=DataCarry(StrToFloat(sgArivd->Cells[16][i]),2,0);
if(dNAmt-dTmp>0)
throw Exception("红冲金额不能大于原发票行净额");
}
SetDetailValue("ArivdNAmt",FloatToStr(dNAmt));
SetDetailValue("ArivdTaxCode",sgArivd->Cells[11][i]);
if(sgArivd->Cells[12][i] == "")
throw Exception("缺少税率数据");
dTRate=StrToFloat(sgArivd->Cells[12][i]);
SetDetailValue("ArivdTRate",sgArivd->Cells[12][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_P::btnCancelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::FormShow(TObject *Sender)
{
InitControlGroup();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::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];
seArivhCode->Text="";
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmArivd_P::GetSqlString()
{
AnsiString s_SQL;
s_SQL =" select ArivhCode,ArivdLine,ArivdArlt,ArltFrom,ArivdDocCode,ArivdDocLine,ArivdGoods,ArivdUnit,ArivdQty,ArivdPrice, ";
s_SQL+=" ArivdTaxCode,ArivdTRate,ArivdDRate,ArivdNAmt from sdArivh,sdArivd,sdArlt ";
s_SQL+=" where ArivhCode=ArivdCode and ArivdArlt=ArltCode and ArivhCheck=1 and ArivhRed=1 ";
s_SQL+=" and ArivhClient='"+FClientCode+"' ";
s_SQL+=" and ArivhCurrency='"+FCurrencyCode+"' ";
if(seArivhCode->Text != "")
s_SQL+=" and ArivdCode='"+seArivhCode->Text+"' ";
s_SQL+=" order by ArivhCode,ArivdLine ";
return(s_SQL);
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::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"+AnsiString("") +
"\t"+RsArivd->FieldByName("ArivhCode")+
"\t"+RsArivd->FieldByName("ArivdLine")+
"\t"+RsArivd->FieldByName("ArivdDocCode")+
"\t"+RsArivd->FieldByName("ArivdDocLine")+
"\t"+RsArivd->FieldByName("ArivdGoods")+
"\t"+RsArivd->FieldByName("ArivdUnit")+
"\t"+RsArivd->FieldByName("ArivdQty")+
"\t"+RsArivd->FieldByName("ArivdPrice")+
"\t"+RsArivd->FieldByName("ArivdTaxCode")+
"\t"+RsArivd->FieldByName("ArivdTRate")+
"\t"+RsArivd->FieldByName("ArivdDRate")+
"\t"+RsArivd->FieldByName("ArltFrom")+
"\t"+RsArivd->FieldByName("ArivdArlt")+
"\t"+RsArivd->FieldByName("ArivdNAmt");
sgArivd->AddItem(ItemStr);
RsArivd->MoveNext();
}
RsArivd->Close();
}
catch(Exception &e)
{
throw Exception(e.Message);
}
}
__finally
{
delete RsArivd;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::GetComObject(TComServer *comServerPtr)
{
comServer = comServerPtr;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::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;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::bbQueryClick(TObject *Sender)
{
FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::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_P::bbNoneClick(TObject *Sender)
{
for(int i=1;i<sgArivd->RowCount;i++)
sgArivd->Cells[1][i] = " ";
btnOK->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::sgArivdSelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(sgArivd->Cells[1][ARow]=="√")
sgArivd->ReadOnly=false;
else
sgArivd->ReadOnly=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::seArivhCodeButtonClick(TObject *Sender)
{
AnsiString SqlStr;
SqlStr="003[应收发票][登记日期][操作员] ";
SqlStr+=" select ArivhCode,ArivhDate,UserName from sdArivh,sdUser ";
SqlStr+=" where ArivhUser=UserCode and ArivhCheck=1 and ArivhRed=1 and ";
SqlStr+=" ArivhClient='"+FClientCode+"'and ArivhCurrency='"+FCurrencyCode+"' ";
SqlStr+=" order by ArivhDate DESC,ArivhCode ";
TfrmWnQuery *p;
try
{
StartWaitForm("正在查询,请稍候...");
p=new TfrmWnQuery(this,"蓝字应收发票查询",SqlStr);
}
__finally
{
EndWaitForm();
}
if(p->ShowModal()==mrOk)
{
seArivhCode->Text=p->ColData[1];
}
delete p;
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::btnRetryClick(TObject *Sender)
{
seArivhCode->Text="";
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?