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

📄 mmps.cpp

📁 科思ERP部分源码及控件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      delete McrQuery;
      throw Exception("系统计划展望期值出错!");
    }
    PeriodLen=RstStr.ToInt();

    switch(PeriodType)
    {
      case 1:
        PlanLen=PeriodLen;
        break;
      case 2:
        PlanLen=PeriodLen * 7;
        break;
      case 3:
        PlanLen=PeriodLen * 10;
        break;
      case 4:
        PlanLen=PeriodLen * 15;
        break;
      case 5:
        PlanLen=PeriodLen * 30;
        break;
      case 6:
        PlanLen=PeriodLen * 90;
        break;
      case 7:
        PlanLen=PeriodLen * 183;
        break;
      case 8:
        PlanLen=PeriodLen * 366;
        break;
    }

    TADOQuery *MrpQuery=new TADOQuery(Application);
    MrpQuery->Connection=Connection;
    MrpQuery->SQL->Clear();
    MrpQuery->SQL->Add("select Curdate,CurFmonth from sdvw_curvalue");
    MrpQuery->Open();
    if(MrpQuery->RecordCount<=0)
    {
      delete MrpQuery;
      delete McrQuery;
      throw Exception("读取当前日期及当前月份失败!");
    }
    CurDate=MrpQuery->FieldValues["CurDate"];
    CurFmonth=MrpQuery->FieldValues["CurFmonth"];
    MrpQuery->Close();
    EndDate=TDateTime(StrToDate(CurDate)+PlanLen).FormatString("yyyy-mm-dd");
    SqlStr="select * from sdcale where CaleSocDate='"+EndDate+"'";
    MrpQuery->SQL->Clear();
    MrpQuery->SQL->Add(SqlStr);
    MrpQuery->Open();
    if(MrpQuery->RecordCount<=0)
    {
      delete MrpQuery;
      delete McrQuery;
      throw Exception("工厂日历没有覆盖整个计划运算期!");
    }
}
//---------------------------------------------------------------------------
void __fastcall TsdMrp::BufferInit(struct LinkRec **BufferHead)
{
   //初试化物料需求缓冲区
    struct GoodsRec tmpRec;
    TADOQuery *MrpQuery=new TADOQuery(Application);
    MrpQuery->Connection=Connection;
    MrpQuery->Close();
    MrpQuery->SQL->Clear();
    MrpQuery->SQL->Add("select McrdGoods,McrdRDate,McrdRQty,McrdFrom from sdmcrd,sdGoods ");
    MrpQuery->SQL->Add("where McrdGoods=GoodsCode  and McrdFrom =4 order by McrdGoods");
    MrpQuery->Open();
    MrpQuery->First();
    while(!MrpQuery->Eof)
    {
      //相关需求物料入缓冲区
      tmpRec.Code=MrpQuery->FieldValues["McrdGoods"];
      tmpRec.ReqQty=MrpQuery->FieldValues["McrdRQty"];
      tmpRec.ReqDate=MrpQuery->FieldValues["McrdRDate"];
      tmpRec.From=MrpQuery->FieldValues["McrdFrom"];
      //tmpRec.LowLevel=MrpQuery->FieldValues["GoodsLlc"];
      /*if(tmpRec.LowLevel<0)
      {
       delete MrpQuery;
       throw Exception("物料<"+tmpRec.Code+">低层码不能小于0");
      }*/
      LinkAddRec(tmpRec,BufferHead);
      MrpQuery->Next();
    }
    delete MrpQuery;
}
//---------------------------------------------------------------------------
//实现在LinkHead指向的链中增加一个物料记录
//LinkHead是指向链头指针的指针
void __fastcall TsdMrp::LinkAddRec(struct GoodsRec Rec,struct LinkRec **LinkHead)
{
 struct LinkRec * p,* q;
 struct GoodsRec *rec;
 rec=new struct GoodsRec;
 rec->Code=Rec.Code;
 rec->ReqDate=Rec.ReqDate;
 rec->ReqQty=Rec.ReqQty;
 rec->LowLevel=Rec.LowLevel;
 rec->From=Rec.From;
 q=new struct LinkRec;
 q->Rec=rec;
 p=*LinkHead;
 if(p == NULL)
 {
  q->Next=NULL;
  p=q;
 }
 else
 {
  q->Next=p;
  p=q;
 }
 *LinkHead=p;
}
//---------------------------------------------------------------------------
void __fastcall TsdMrp::DestroyLink(struct LinkRec * Head)
{
 struct LinkRec * tmp,*next;
 if(Head == NULL)
  return;
 tmp=Head;
 while(tmp != NULL)
 {
  next=tmp->Next;
  delete tmp->Rec;
  delete tmp;
  tmp=next;
 }
}
//---------------------------------------------------------------------------
//函数实现将缓冲BuuferHead内低层码等于LevelCode的物料记录放入队列QueueHead
void __fastcall TsdMrp::BufferToQueue(int LevelCode,struct LinkRec **BufferHead,struct LinkRec **QueueHead)
{
 struct LinkRec * tmp,*pre,*p;
 p=*QueueHead;
 tmp=*BufferHead;//tmp是遍历整个缓冲区指针
 pre=tmp;       //pre是tmp的前驱指针
 while(tmp != NULL)
 {
  if(tmp->Rec->LowLevel == LevelCode)
  {
   if(tmp == *BufferHead)
   {
     *BufferHead=tmp->Next; //缓冲头指针后移
     tmp->Next=p;          //将tmp链接到队列QueueHead
     p=tmp;
     tmp=*BufferHead;
     pre=tmp;
   }
   else
   {
     pre->Next=tmp->Next;  //将tmp从缓冲区删除
     tmp->Next=p;          //将tmp链接到队列QueueHead
     p=tmp;
     tmp=pre->Next;
   }
  }
  else
  {
   pre=tmp;
   tmp=pre->Next;
  }
 }
 *QueueHead=p;
}
//---------------------------------------------------------------------------
void __fastcall TsdMrp::PlanIn()
{
    AnsiString SqlStr;
    TADOQuery *m_Query=new TADOQuery(Application);
    m_Query->Connection=Connection;
    SqlStr="Exec SdMrp_CaleSupply '"+EndDate+"'";
    m_Query->Close();
    m_Query->SQL->Clear();
    m_Query->SQL->Add(SqlStr);
    try
    {
      m_Query->ExecSQL();
      delete m_Query;
    }
    catch(Exception &e)
    {
      delete m_Query;
      throw Exception("计算物料供应失败!"+e.Message);
    }
}

//---------------------------------------------------------------------------
void __fastcall TsdMrp::ClearMrp()
{
    AnsiString SqlStr;
    TADOQuery *m_Query=new TADOQuery(Application);
    m_Query->Connection=Connection;
    SqlStr="Exec KsMps_Clear ";
    m_Query->Close();
    m_Query->SQL->Clear();
    m_Query->SQL->Add(SqlStr);
    try
    {
      m_Query->ExecSQL();
      delete m_Query;
    }
    catch(Exception &e)
    {
      delete m_Query;
      throw Exception("清空MRP计划数据失败"+e.Message);
    }
}

//---------------------------------------------------------------------------

void __fastcall TsdMrp::PlanGross(AnsiString sCode,AnsiString sDate,double dQty)
{
    //计算队列所有低层码等于TierCounter的物料毛需求
    AnsiString sql;
    TADOQuery *m_Query=new TADOQuery(Application);
    m_Query->Connection=Connection;
    m_Query->Close();
    m_Query->SQL->Clear();
    sql="exec sdmrp_CaleGross '"+sCode+"','"+sDate+"',"+AnsiString(dQty)+",'"+Planner+"',"+AnsiString(PlanLen);
    m_Query->SQL->Add(sql);
    try
    {
      m_Query->ExecSQL();
      delete m_Query;
    }
    catch(Exception &e)
    {
      delete m_Query;
      throw Exception("计算物料<"+sCode+">毛需求失败!"+e.Message);
    }
}

//---------------------------------------------------------------------------
void __fastcall TsdMrp::PlanNet(AnsiString sCode)
{
     //计算净需求
    AnsiString sql;
    TADOQuery *m_Query=new TADOQuery(Application);
    m_Query->Connection=Connection;
    m_Query->Close();
    m_Query->SQL->Clear();
    sql="exec sdmrp_CaleNet '"+sCode+"'";
    m_Query->SQL->Add(sql);
    try
    {
      m_Query->ExecSQL();
      delete m_Query;
    }
    catch(Exception &e)
    {
      delete m_Query;
      throw Exception("计算物料<"+sCode+">净需求失败!"+e.Message);
    }
}

//---------------------------------------------------------------------------

void __fastcall TsdMrp::BalanceMrp(AnsiString Code)
{
      //平衡物料需求
    TADOQuery *m_Query=new TADOQuery(Application);
    m_Query->Connection=Connection;
    m_Query->Close();
    m_Query->SQL->Clear();
    m_Query->SQL->Add("exec sdmrp_CaleBalance '"+Code+"'");
    try
    {
      m_Query->ExecSQL();
      delete m_Query;
    }
    catch(Exception &e)
    {
      delete m_Query;
      throw Exception("平衡MRP计算失败!"+e.Message);
    }
}

//---------------------------------------------------------------------------



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -