📄 fadc.cpp
字号:
{
if(Key==13 && CurrentState==caNormal)
{
comServer->LocateByKey(scFaDcFadn->Text+scFaDcFMonth->Text);
GetDataFromComObject();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFaDc::sgFaDcClick(TObject *Sender)
{
if (sgFaDc->Row > 0)
comServer->LocateByKey(sgFaDc->TextMatrix[sgFaDc->Row][1]+scFaDcFMonth->Text);
if (!comServer->Eof)
GetDataFromComObject();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFaDc::muEditDetailClick(TObject *Sender) //符合计提条件计提折旧
{
AnsiString strSQL,Sour[13],m_fadncode,m_WorkLoad;
Sour[10]=g_sdEMonth;
scFaDcUser->LocateKey(g_sdUserCode);
if(g_sdEMonth!=scFaDcFMonth->Text)
throw Exception("非当前月份不能计提");
comServer->FilterString = "FADCFMONTH='"+g_sdEMonth+"'";
comServer->Query();
if(comServer->RecordCount>0)
throw Exception("'"+g_sdEMonth+"'财务月份已计提");
try
{
StartWaitForm("计提折旧中, 请稍候...");
strSQL=" select FadnCode,FadnName,FadnOVal,FadnEVal,FadnDVal,FadnTWork,FadnAWork,FadnPeriod,FadnAPeriod,FadnFadm,FadnZjGlkm ";
strSQL+=", FadnCVal FROM SDFAdn,sdfause where FADNFAUSE=FAUSECODE and FAUSEDEPRE='1' "; //使用中要计提折旧的设备
strSQL+=" and datediff(month,FADNUDATE,'"+g_sdCurDate+"')>0 "; //本月前投入使用的设备计提
strSQL+=" and convert(Decimal,FadnEVal)+convert(Decimal,FadnDVal)<convert(Decimal,FadnOVal)"; //累计折旧+预计残值>原值 的设备不计提
strSQL+=" order by FadnCode ";
ResultSet->Close();
ResultSet->Open(strSQL,"");
strSQL="select FAWORKFADN,FAWORKLOAD from sdfawork where FAWORKFMONTH='"+g_sdEMonth+"'";
if(ResultSet->RecordCount<1)
throw("未有设备需要计提折旧");
WorkResultSet->Close();
WorkResultSet->Open(strSQL,"FAWORKFADN");
ResultSet->MoveFirst();
while (ResultSet->Eof == 0)
{
if(ResultSet->FieldByName("FadnFadm")=="101") //工作量折旧法
{
m_fadncode=ResultSet->FieldByName("FadnCode");
if(EnSureDepreciationECode(m_fadncode)==false)
{
m_WorkLoad="";
if(0==WorkResultSet->LocateByKey(m_fadncode))
m_WorkLoad=WorkResultSet->FieldByName("FAWORKLOAD");
if(m_WorkLoad.IsEmpty() ||m_WorkLoad=="0")
throw Exception("设备'"+m_fadncode+"'未输入本期工作量");
}
}
ResultSet->MoveNext();
}
ResultSet->MoveFirst();
while (ResultSet->Eof == 0)
{
Sour[0]=ResultSet->FieldByName("FadnCode");
if(EnSureDepreciationECode(Sour[0])==false)
{
Sour[1]=ResultSet->FieldByName("FadnFadm");
Sour[2]=ResultSet->FieldByName("FadnOVal"); //原值
Sour[3]=ResultSet->FieldByName("FadnDVal"); //累计折旧
Sour[4]=ResultSet->FieldByName("FadnEVal"); //预计残值
Sour[5]=ResultSet->FieldByName("FadnTWork"); //总工作量
Sour[6]=ResultSet->FieldByName("FadnAWork"); //累计工作量
Sour[7]=ResultSet->FieldByName("FadnPeriod"); //使用期限
Sour[8]=ResultSet->FieldByName("FadnAPeriod");//累计使用期限
Sour[11]=ResultSet->FieldByName("FadnZjGlkm");//折旧科目
Sour[12]=ResultSet->FieldByName("FadnCVal"); //预计清理费用
Sour[9]=AnsiString(Depreciation(Sour));
Sour[9]=Sour[9].SubString(1,Sour[9].AnsiPos(".")+2);
Sour[3]=AnsiString(Sour[3].ToDouble()+Sour[9].ToDouble());
comServer->AddNew();
WriteFieldValue(comServer,fiFaDcFadn,Sour[0]);
WriteFieldValue(comServer,fiFaDcFMonth,Sour[10]);
WriteFieldValue(comServer,fiFaDcFadm,Sour[1]);
WriteFieldValue(comServer,fiFaDcOVal,Sour[2]);
WriteFieldValue(comServer,fiFaDcEVal,Sour[4]);
WriteFieldValue(comServer,fiFaDcTWork,Sour[5]);
WriteFieldValue(comServer,fiFaDcAWork,Sour[6]);
WriteFieldValue(comServer,fiFaDcPeriod,Sour[7]);
WriteFieldValue(comServer,fiFaDcAPeriod,Sour[8]);
WriteFieldValue(comServer,fiFaDcPost,"1");
WriteFieldValue(comServer,fiFaDcPzCode,Sour[11]);
WriteFieldValue(comServer,fiFaDcVal,Sour[9]);//本期折旧
WriteFieldValue(comServer,fiFaDcDVal,Sour[3]); //累计折旧
WriteFieldValue(comServer,fiFaDcUser,scFaDcUser->ItemData[1]);
SaveComObject();
}
ResultSet->MoveNext();
}
FillGridWithData();
comServer->MoveFirst();
GetDataFromComObject();
}
catch(...)
{
ResultSet->Open("delete sdfadc where FADCFMONTH='"+g_sdEMonth+"'" ,"");
}
EndWaitForm();
}
//---------------------------------------------------------------------------
double __fastcall TfrmFaDc::Depreciation(AnsiString SourData[13]) //折旧计算
{
AnsiString str;
double work,Period;
if(SourData[1]=="101") //工作量折旧法
{
WorkResultSet->LocateByKey(SourData[0]);
str=WorkResultSet->FieldByName("FAWORKLOAD");
work=str.ToDouble()*(SourData[2].ToDouble()-SourData[4].ToDouble())/SourData[5].ToDouble();
return((work));
}
if(SourData[1]=="102") //平均年限法
{
work=SourData[2].ToDouble()-SourData[4].ToDouble()+SourData[12].ToDouble();
work=(work)/(SourData[2].ToDouble()*SourData[7].ToDouble()*12);
work=SourData[2].ToDouble()*work;
return(work);
}
if(SourData[1]=="103") //年数总和法
{
for(int i=1;i<=SourData[7].ToInt();i++)
{
Period=Period+i;
}
work=SourData[2].ToDouble()-SourData[4].ToDouble();
work=work*(SourData[7].ToDouble()-SourData[8].ToDouble());
work=work/(Period*12);
return(work);
}
if(SourData[1]=="104") //双倍余额递减
{
work=(SourData[2].ToDouble()-SourData[3].ToDouble())*2;
work=work/(SourData[2].ToDouble()*12);
return(work);
}
return(0.0);
}
bool __fastcall TfrmFaDc::EnSureDepreciationECode(AnsiString fadncode) //确定该设备是否折旧
{
//本月前报废或减少的设备不计提折旧 true
//经营租入 ,融资租出 在租出期内不折旧 true
AnsiString m_SQL;
bool SureY,SureN;
TComResultSet *TAddResultSet=NewResultSet();
m_SQL=" select FADECFADN,datediff(month,'"+g_sdCurDate+"',FADECDATE) as distance from sdfadec where FADECFADN='"+fadncode+"'";
TAddResultSet->Close();
TAddResultSet->Open(m_SQL,"");
if(TAddResultSet->RecordCount>0)
{
if(TAddResultSet->FieldByName("distance").ToInt()<=-1)
{
delete TAddResultSet;
return true;
}
}
m_SQL=" select FADISCARDFADN,datediff(month,'"+g_sdCurDate+"',FADISCARDDATE) as distance from sdfadiscard where FADISCARDFADN='"+fadncode+"'";
TAddResultSet->Close();
TAddResultSet->Open(m_SQL,"");
if(TAddResultSet->RecordCount>0)
{
if(TAddResultSet->FieldByName("distance").ToInt()<=-1)
{
delete TAddResultSet;
return true;
}
}
m_SQL=" select FARENTFADN from sdfaRent where FARENTCHECK=1 and( FARENTBFMONTH<='"+g_sdEMonth+"' or FARENTEFMONTH<='"+g_sdEMonth+"' )";
m_SQL=m_SQL+" and (FARENTTYPE='1' and FARENTMODE='1') or (FARENTTYPE='2' and FARENTMODE='2') and FARENTFADN='"+fadncode+"'";
TAddResultSet->Close();
TAddResultSet->Open(m_SQL,"");
if(TAddResultSet->RecordCount>0)
{
delete TAddResultSet;
return true;
}
delete TAddResultSet;
return false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFaDc::FormShow(TObject *Sender)
{
scFaDcFMonth->Text =g_sdEMonth;
comServer->FilterString = " FaDcFMonth = '" +g_sdEMonth + "'";
comServer->Query();
FillGridWithData();
comServer->MoveFirst();
GetDataFromComObject();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFaDc::FormClose(TObject *Sender, TCloseAction &Action)
{
TRecBaseForm::FormClose(Sender,Action);
delete ResultSet;
delete WorkResultSet;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -