Для определения запаса на контроле качества на дату мы у себя пока что решили таким способом:
Code:
TYPES: BEGIN OF ty_regulations,
shkzg TYPE shkzg,
bwart TYPE bwart,
END OF ty_regulations.
TYPES: BEGIN OF ty_data,
matnr TYPE matnr,
maktx TYPE maktx,
werks TYPE werks_d,
name1 TYPE name1,
lgort TYPE lgort_d,
lgobe TYPE lgobe,
charg TYPE charg_d,
menge TYPE my_mbsta,
END OF ty_data.
DATA gt_out TYPE TABLE OF ty_data.
DATA gt_regulations TYPE TABLE OF ty_regulations.
APPEND |S563| TO GT_REGULATIONS.
APPEND |S554| TO gt_regulations.
APPEND |S523| TO gt_regulations.
APPEND |S503| TO gt_regulations.
APPEND |S349| TO gt_regulations.
APPEND |S323| TO gt_regulations.
APPEND |S324| TO gt_regulations.
APPEND |S322| TO gt_regulations.
APPEND |H321| TO gt_regulations.
APPEND |H323| TO gt_regulations.
APPEND |H324| TO gt_regulations.
APPEND |H564| TO gt_regulations.
APPEND |H350| TO gt_regulations.
APPEND |H504| TO gt_regulations.
APPEND |H524| TO gt_regulations.
APPEND |H553| TO gt_regulations.
SELECT mseg~matnr,
mseg~werks,
mseg~lgort,
mseg~charg,
mseg~bwart,
mkpf~budat,
mseg~shkzg,
mseg~menge,
mseg~meins
INTO TABLE @DATA(gt_mseg)
FROM mseg
JOIN mkpf ON mseg~mblnr EQ mkpf~mblnr
AND mseg~mjahr EQ mkpf~mjahr
WHERE mseg~matnr IN @so_matnr
AND mseg~werks IN @so_werks
AND mseg~lgort IN @so_lgort
AND mseg~charg IN @so_charg
AND mkpf~budat LE @so_budat-low.
SORT gt_mseg BY matnr
werks
lgort
charg
budat ASCENDING.
LOOP AT gt_mseg INTO DATA(ls_mseg) GROUP BY ( matnr = ls_mseg-matnr
werks = ls_mseg-werks
lgort = ls_mseg-lgort
charg = ls_mseg-charg )
REFERENCE INTO DATA(charg_group).
LOOP AT GROUP charg_group ASSIGNING FIELD-SYMBOL(<ls_charg>).
READ TABLE gt_regulations TRANSPORTING NO FIELDS
WITH KEY shkzg = <ls_charg>-shkzg
bwart = <ls_charg>-bwart.
CHECK sy-subrc EQ 0.
DATA ls_out TYPE ty_data.
CLEAR ls_out.
MOVE-CORRESPONDING <ls_charg> TO ls_out.
CLEAR ls_out-menge.
CASE <ls_charg>-shkzg.
WHEN 'S'. ls_out-menge = abs( <ls_charg>-menge ).
WHEN 'H'. ls_out-menge = - abs( <ls_charg>-menge ).
WHEN OTHERS.
ENDCASE.
COLLECT ls_out INTO gt_out.
ENDLOOP.
ENDLOOP.
Задумка в том, что в MSEG хранятся все проводки с суммами и флагом - поступление/списание. Мы знаем виды движения какими можно изменить запас на контроле качества. Формируем соответствующую таблицу GT_REGULATIONS с настройками: S - приход, H - расход. Сравнивая эту информацию с данными из MSEG получаем информацию о том как изменялся запас. С помощью таблицы MKPF разграничиваем дату проводок. В итоге - зная объемы прихода/ухода схлопываем эти суммы и получаем остаток, который и отражает запас на КК на нашу дату.