MAPL 分配任务清单到物料

MATNR 物料号                              PLNNR 任务清单组码                              PLNAL 组计数器                              组+组计数器 确定一个物料

 

PLKZ 任务清单-主表头

PLNTY 类型                                                       PLNNR 组码                                                      PLNAL组计数器

AEDAT 最后一次更改的日期                              AEUZEIT 最后一次修改的时间                              AENAM 更改人员

 

PLKO 任务清单 - 表头

PLNTY 任务清单类型              PLNNR 任务清单组码             PLNAL 组计数器

VERWE 用途

 

PLAS

 

PLPO 任务清单 - 工序/作业

PLNNR 任务清单组码                PLNKN 任务清单节点数(按物料计数工序)            ZAEHL 内部计数器(按组+组计数器计数工序)  

VORNR 工序                              LTXA1 工序短文本                              

LOEKZ 删除标识(还要连PLAS看有没有删)

ARBID 对象标识(连接CRHD取工作中心)

PREIS 净价

工艺路线工序是无法删除的,删除后会增加删除标识,不在前台显示,但后台是有数据的,所以没有重新计数的问题

注:PLPO~ARBID连接CRHD~OBJNR

 

PLAS(充当PLPO MAPL连接的中间表)

PLNNR 任务清单组码                              PLNAL 组计数器                             组码 + 计数器 确定一个物料

PLNKN 任务清单节点数                                                                                  组码 + 计数器 + 节点 确定一个 物料 + 工序

ZAEHL 内部计数器(组计数器下的工序计数,删除再新建工序时可以使用相同的工序号,而内部计数器只会递增,即新增工序永远都不会使用已使用过的内部计数器。在新的 组+组计数器 下内部计数器会被清空重新计数)

LOEKZ 删除标识(CA02删除了工序数据还在LOEKZ='X')

 

PLMZ 分配工序到BOM组件(如果BOM变了,没有重新分配,PLMZ和STPO关联和CA03对不上,此时需要计算出STPO的KANTE和PLMZ匹配)

函数CARO_ROUTING_READ取组件有时候有bug和CA03对不上(没有考虑KANTE)

PLMZ-PLNKN 工序的任务清单节点号     PLMZ-STLKN BOM节点编号

STLKN 组件节点(连接STPO-STVKN,note2741311有解释 ,但其实是不够的)

 

select

    mapl~werks,mapl~matnr,

    makt~maktx,

    plko~plnnr,plko~ktext,

*    plko~datuv,

    plpo~datuv,

    plko~verwe,plko~plnnr_alt,plko~plnal,

*    plpo~plnty as plnty_plpo,plpo~plnnr as plnnr_plpo,plpo~plnkn as plnkn_plpo,plpo~zaehl as zaehl_plpo,

    plpo~vornr,plpo~ltxa1,plpo~vge01,plpo~vgw01,plpo~meinh,plpo~bmsch,plpo~aennr,

    plpo~anzma,plpo~usr04,plpo~usr05,plpo~usr06,plpo~usr00,plpo~usr02,plpo~usr01,plpo~usr03,

    aenr~aegru,

    crhd~arbpl,

    plmz~stlty,plmz~stlal,plmz~stlnr,plmz~stlkn,

    mast~stlan

*    stpo~posnr,stpo~idnrk,stpo~menge,stpo~meins

    into corresponding fields of table @gt_alv

    from mapl

    left join makt on mapl~matnr = makt~matnr and makt~spras = @sy-langu

    inner join plko on plko~plnty = mapl~plnty and plko~plnnr = mapl~plnnr and plko~plnal = mapl~plnal and plko~loekz = '' and plko~datuv <= @sy-datum and plko~valid_to >= @sy-datum

    inner join plas on plko~plnty = plas~plnty and plko~plnnr = plas~plnnr and plko~plnal = plas~plnal and plas~loekz = '' and plas~datuv <= @sy-datum and plas~valid_to >= @sy-datum

    inner join plpo on plas~plnty = plpo~plnty and plas~plnnr = plpo~plnnr and plas~plnkn = plpo~plnkn and plpo~loekz = '' and plpo~datuv <= @sy-datum and plpo~valid_to >= @sy-datum

    left join aenr on plpo~aennr = aenr~aennr

*    inner join plpo on plko~plnty = plpo~plnty and plko~plnnr = plpo~plnnr and plko~zaehl = plpo~zaehl and plpo~loekz = ''

    left join crhd on plpo~arbid = crhd~objid and crhd~objty = 'A'

    left join plmz  on plpo~plnty = plmz~plnty and plpo~plnnr = plmz~plnnr and plpo~plnkn = plmz~plnkn and plmz~loekz = '' and plmz~datuv <= @sy-datum and plmz~valid_to >= @sy-datum

    left join mast on plmz~stlnr = mast~stlnr and plmz~stlal = mast~stlal

*    left join stpo on plmz~stlty = stpo~stlty and plmz~stlnr = stpo~stlnr and plmz~stlkn  = stpo~stlkn

where mapl~loekz = '' and mapl~plnty = 'N' and mapl~datuv <= @sy-datum and mapl~valid_to >= @sy-datum

    and mapl~matnr in @s_matnr and mapl~werks in @s_werks and mapl~plnnr in @s_plnnr and mapl~plnal in @s_plnal

    and plko~verwe in @s_verwe

    and  crhd~arbpl in @s_arbpl.

 

  sort gt_alv by stlnr stlkn.

  delete adjacent duplicates from gt_alv comparing stlnr stlkn. "排除函数写入的错误重复数据

 

*组件

*BOM有变更,只保留最新的BOM

    types:begin of ty_stpo_datuv,

            stlty like stpo-stlty,

            stlnr like stpo-stlnr,

            datuv like stpo-datuv,

          end of ty_stpo_datuv.

    data lt_stpo_datuv type sorted table of ty_stpo_datuv with unique key stlty stlnr datuv with header line.

select

        stlty,stlnr,stlkn,stpoz,

        posnr,stvkn,idnrk,menge,meins,datuv

        into table @data(lt_stpo)

        from stpo

        for all entries in @gt_alv

        where stpo~stlty = @gt_alv-stlty and stpo~stlnr = @gt_alv-stlnr and stpo~stvkn  = @gt_alv-stlkn

        and stpo~datuv <= @sy-datum.

    sort lt_stpo by stlty stlnr stvkn datuv descending.

 

    loop at lt_stpo into data(ls_stpo).

      read table lt_stpo_datuv with key stlty = ls_stpo-stlty stlnr = ls_stpo-stlnr binary search.

      if sy-subrc ne 0.

        move-corresponding ls_stpo to lt_stpo_datuv.

        insert table lt_stpo_datuv.

      endif.

    endloop.

    loop at lt_stpo into ls_stpo.

      read table lt_stpo_datuv with key stlty = ls_stpo-stlty stlnr = ls_stpo-stlnr datuv = ls_stpo-datuv binary search.

      if sy-subrc ne 0.

        delete lt_stpo.

      endif.

    endloop.

    loop at gt_alv.

      read table lt_stpo into ls_stpo with key stlty = gt_alv-stlty stlnr = gt_alv-stlnr stvkn  = gt_alv-stlkn binary search.

      if sy-subrc = 0.

        gt_alv-idnrk = ls_stpo-idnrk.

        gt_alv-menge = ls_stpo-menge.

        gt_alv-meins = ls_stpo-meins.

        gt_alv-posnr = ls_stpo-posnr.

      else.

        delete gt_alv.

        continue.

      endif.

      modify gt_alv.

    endloop.