⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fadc.cpp

📁 速达开源ERP系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
    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 + -