|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
增加一个小程序
我们现在处理的方法是增加一个程序来重新让所有的凭证都能从对方科目中取得利润中心.
参照程序
REPORT ZZUPDATE_GLPCA.
tables : GLPCA , FAGLFLEXA.
TYPE-POOLS:slis.
PARAMETERS : PYEAR LIKE FAGLFLEXA-RYEAR DEFAULT SY-DATUM(4),
PFROMD LIKE GLPCA-BLDAT,
PDOC LIKE GLPCA-GL_SIRID.
PARAMETERS : PTEST AS CHECKBOX DEFAULT 'X'.
DATA : LDATE LIKE SY-DATUM .
DATA : BEGIN OF IT_ID OCCURS 0 ,
GL_SIRID LIKE GLPCA-GL_SIRID,
REFRYEAR LIKE GLPCA-REFRYEAR,
REFDOCNR LIKE GLPCA-REFDOCNR ,
RPRCTR LIKE GLPCA-RPRCTR ,
END OF IT_ID.
DATA : BEGIN OF IT_DIS OCCURS 0 ,
GL_SIRID LIKE GLPCA-GL_SIRID,
REFRYEAR LIKE GLPCA-REFRYEAR,
REFDOCNR LIKE GLPCA-REFDOCNR ,
RPRCTR LIKE GLPCA-RPRCTR ,
RPRCTROK LIKE GLPCA-RPRCTR ,
END OF IT_DIS .
DATA LPRCTR LIKE GLPCA-RPRCTR .
CLEAR : IT_ID , IT_ID[] ,IT_DIS,IT_DIS[], LDATE, LPRCTR.
LDATE = SY-DATUM - 1 .
IF PDOC IS INITIAL .
IF NOT PFROMD IS INITIAL AND PFROMD <= SY-DATUM.
LDATE = PFROMD.
ENDIF.
SELECT GL_SIRID REFRYEAR REFDOCNR RPRCTR
FROM GLPCA INTO TABLE IT_ID
WHERE CPUDT <= SY-DATUM
AND CPUDT >= LDATE.
ELSE.
SELECT GL_SIRID REFRYEAR REFDOCNR RPRCTR
FROM GLPCA INTO TABLE IT_ID
WHERE GL_SIRID = PDOC.
ENDIF.
LOOP AT IT_ID WHERE RPRCTR <> '9999999999'.
DELETE IT_ID.
ENDLOOP .
LOOP AT IT_ID .
CLEAR LPRCTR .
SELECT SINGLE PRCTR FROM FAGLFLEXA INTO LPRCTR
WHERE RYEAR = IT_ID-REFRYEAR
AND DOCNR = IT_ID-REFDOCNR .
* AND PRCTR <> SPACE. " 若对应Profit Center为空是否更新?
IF SY-SUBRC = 0 AND LPRCTR <> IT_ID-RPRCTR
AND NOT LPRCTR IS INITIAL.
TRY.
* For test .
IF PTEST = '' .
UPDATE GLPCA
SET RPRCTR = LPRCTR
WHERE GL_SIRID = IT_ID-GL_SIRID.
ENDIF.
MOVE-CORRESPONDING IT_ID TO IT_DIS.
IT_DIS-RPRCTROK = LPRCTR.
APPEND IT_DIS.
CATCH cx_sy_dynamic_osql_error.
MESSAGE `Error in update!` TYPE 'E'.
ENDTRY.
ELSEIF SY-SUBRC = 0 AND LPRCTR <> IT_ID-RPRCTR
AND LPRCTR IS INITIAL. .
MOVE-CORRESPONDING IT_ID TO IT_DIS.
APPEND IT_DIS.
ENDIF.
CLEAR IT_DIS.
ENDLOOP.
DATA l_tab_fieldcat TYPE slis_t_fieldcat_alv.
DATA L_LAYOUT TYPE SLIS_LAYOUT_ALV.
L_LAYOUT-f2code = '&ETA'.
IF NOT IT_DIS[] IS INITIAL .
* 取得ALV表格
PERFORM alv_fill_fieldcat CHANGING l_tab_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
* i_callback_pf_status_set = 'alv_event_pf_status'
* i_callback_user_command = 'ALV_EVENT_USER_COMMAND'
i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
is_layout = L_LAYOUT
it_fieldcat = l_tab_fieldcat
* i_save = 'A'
* is_variant = l_variant
* it_event_exit = l_tab_exit
* it_events = l_tab_event
TABLES
t_outtab = IT_DIS
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form alv_fill_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_L_TAB_FIELDCAT text
*----------------------------------------------------------------------*
FORM alv_fill_fieldcat CHANGING tab_fieldcat TYPE slis_t_fieldcat_alv.
DATA rec_fieldcat TYPE LINE OF slis_t_fieldcat_alv.
CLEAR tab_fieldcat.
CLEAR rec_fieldcat.
rec_fieldcat-fieldname = 'GL_SIRID'.
rec_fieldcat-intlen = 20.
rec_fieldcat-seltext_s = '行项目记录的记录编号'.
rec_fieldcat-seltext_l = '行项目记录的记录编号'.
APPEND rec_fieldcat TO tab_fieldcat.
CLEAR rec_fieldcat.
rec_fieldcat-fieldname = 'REFRYEAR'.
rec_fieldcat-seltext_s = '会计年度'.
rec_fieldcat-seltext_l = '会计年度'.
APPEND rec_fieldcat TO tab_fieldcat.
rec_fieldcat-fieldname = 'REFDOCNR'.
rec_fieldcat-seltext_s = '会计凭证号码'.
rec_fieldcat-seltext_l = '会计凭证号码'.
APPEND rec_fieldcat TO tab_fieldcat.
rec_fieldcat-fieldname = 'RPRCTR'.
rec_fieldcat-seltext_s = '错误利润中心'.
rec_fieldcat-seltext_l = '错误利润中心'.
APPEND rec_fieldcat TO tab_fieldcat.
rec_fieldcat-fieldname = 'RPRCTROK'.
rec_fieldcat-seltext_s = '正确利润中心'.
rec_fieldcat-seltext_l = '正确利润中心'.
APPEND rec_fieldcat TO tab_fieldcat.
ENDFORM. " alv_fill_fieldcat
*&---------------------------------------------------------------------*
*& Form ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE USING cl_dd
TYPE REF TO cl_dd_document. "#EC *
data: lstring type SDYDO_TEXT_ELEMENT.
if ptest is initial .
lstring = '更新利润中心记录列表'.
else.
lstring = '更新利润中心记录列表(测试运行不会真正的修改数据库)'.
endif.
CALL METHOD cl_dd->add_text
EXPORTING
text = lstring "
SAP_style = cl_dd_document=>heading
SAP_color = cl_dd_document=>list_heading_int
SAP_fontsize = cl_dd_document=>large
SAP_emphasis = cl_dd_document=>strong
style_class = space.
* CALL METHOD cl_dd->new_line
* EXPORTING
* repeat = 1.
ENDFORM. " ALV_TOP_OF_PAGE
该贴已经同步到 xiaoerp的微博 |
|