smartforms句柄与以簇的方式存储数据。
說(shuō)明:Smartforms輸出打印,設(shè)置句柄,用于傳遞參數(shù)。
REPORT??ZIEB_WWFLD.
*-----------------??????TABLES??????----------------------------*
*-----------------?????VARIANTS?????----------------------------*
DATA?l_sno?TYPE?ZIEB_ZSNNM.
DATA:?ls_ctr??TYPE?ssfctrlop,
??????ls_cre??TYPE?ssfcrescl,
??????ls_opt?TYPE?ssfcompop.
??DATA?:?wa_indx?TYPE?indx?.??"?作為全局聲明
*?以下是一個(gè)定義宏的語(yǔ)句,在DEFINE和END-OF-DEFINITION之間有完整的ABAP語(yǔ)句,
*?用&N作為占位符,在調(diào)用的時(shí)候把真正的字符傳入并取代。
**?例子:
*DATA:?RESULT?TYPE?I,
*N1?TYPE?I?VALUE?5,
*N2?TYPE?I?VALUE?6.
*DEFINE?OPERATION.
*RESULT?=?&1?&2?&3.
*OUTPUT?&1?&2?&3?RESULT.
*END-OF-DEFINITION.
*OPERATION?4?+?3.
*OPERATION?2?**?7.
*OPERATION?N2?-?N1.
DEFINE?savebuffer.
??perform?save_to_buffer?using?&1?&2.
END-OF-DEFINITION.
DEFINE?clearbuffer.
??perform?clear_buffer?using?&1.
END-OF-DEFINITION.
*-----------------????CONSTANTS?????----------------------------*
*-----------------??INTERNAL??TABLES?----------------------------*
DATA:??item_LFA1?LIKE?LFA1?OCCURS?0?WITH?HEADER?LINE,
???????item_T156T?LIKE?T156T?OCCURS?0?WITH?HEADER?LINE,
???????item_MAKT?LIKE?MAKT?OCCURS?0??WITH?HEADER?LINE.
*結(jié)果內(nèi)表item_out
TYPES:?BEGIN?OF?TY_item_out,
???????????SNO???TYPE?ZIEB_zsnnm,?????????"?序號(hào)??????說(shuō)明:?數(shù)據(jù)元素不能用LIKE
???????????WERKS?LIKE?MSEG-WERKS,?????????"?工廠
???????????TName1?LIKE?T001W-NAME1,???????"?工廠名稱(chēng)
???????????Ebeln?LIKE?EKPO-EBELN,?????????"?采購(gòu)訂單號(hào)
???????????LIFNR?LIKE?MSEG-LIFNR,?????????"?委外加工商代碼
???????????LNAME1?LIKE?LFA1-NAME1,????????"?委外加工商名稱(chēng)
???????????BLDAT?LIKE?MKPF-BLDAT,?????????"?憑證日期
???????????MBLNR?LIKE?MSEG-MBLNR,?????????"?物料憑證號(hào)
???????????BWART?LIKE?MSEG-BWART,?????????"?移動(dòng)類(lèi)型
???????????BTEXT?LIKE?T156T-BTEXT,????????"?移動(dòng)類(lèi)型描述
???????????ZEILE?LIKE?MSEG-ZEILE,?????????"?序號(hào)
???????????MATNR?LIKE?MSEG-MATNR,?????????"?物料編號(hào)
???????????MAKTX?LIKE?MAKT-MAKTX,?????????"?物料描述
???????????ERFMG?LIKE?MSEG-ERFMG,?????????"?數(shù)量
???????????ERFME?LIKE?MSEG-ERFME,?????????"?單位
???????????LGORT?LIKE?MSEG-LGORT,?????????"?庫(kù)存地代碼
???????????LGOBE?LIKE?T001L-LGOBE,????????"?庫(kù)存地描述
???????????CHARG?LIKE?MSEG-CHARG,?????????"?批次
???????????SGTXT?LIKE?MSEG-SGTXT,?????????"?備注
??????END?OF?TY_item_out.
DATA?:?item_out?TYPE?TABLE?OF?TY_item_out?WITH?HEADER?LINE.
Data?hd_item_out?TYPE?TY_item_out.??????"?用來(lái)存放抬頭的固定內(nèi)容。
Data?wa_item_out?TYPE?TY_item_out.??????"?用來(lái)存放行項(xiàng)目的可循環(huán)內(nèi)容。
*-----------------???SELECTION-SCREEN?--------------------------*
SELECTION-SCREEN?BEGIN?OF?BLOCK?block1?WITH?FRAME?TITLE?text-001.
PARAMETERS:?p_werks?LIKE?mseg-werks?OBLIGATORY?DEFAULT?'2100',?"?工廠
????????????p_MJAHR?LIKE?mseg-MJAHR?OBLIGATORY?DEFAULT?sy-datum,"?當(dāng)前年度
????????????p_MBLNR?LIKE?MSEG-MBLNR?OBLIGATORY?DEFAULT?'4900001625'.??"?物料憑證
SELECTION-SCREEN??SKIP?1.
SELECTION-SCREEN?END?OF?BLOCK?block1.
*-----------------???START-OF-SELECTION?--------------------------*
"?MSEG?-?a,?T001W?-?b,EKPO-c,LFA1-d,MKPF-e,T156T-f,MAKT-g,T001L-h
if?p_werks?<>?'2100'.
??"??MESSAGE?S004?with?'工廠選擇錯(cuò)誤!'.??"?MESSAGE-ID?ZIEB01
??MESSAGE??'工廠選擇錯(cuò)誤!'?TYPE?'E'.
??STOP.
endif.
if?p_MJAHR?<>?sy-datum(04).
??MESSAGE?'憑證年度選擇錯(cuò)誤!'?TYPE?'E'.
??STOP.
ENDIF.
START-OF-SELECTION.
*?b~NAME1?as?TName1?????d~NAME1?as?LNAME1??????f~BTEXT?????g~MAKTX?????h~LGOBE
??SELECT?a~werks???c~EBELN??a~LIFNR
?????????e~BLDAT?a~MBLNR?a~BWART??a~ZEILE?a~MATNR
?????????a~ERFMG?a~ERFME?a~LGORT??a~CHARG?a~SGTXT?APPENDING?CORRESPONDING
?????????FIELDS?OF?TABLE?item_out?from?MSEG?as?a
?????????left?join?EKPO?as?c??on?a~MATNR?=?c~MATNR
?????????left?join?MKPF?as?e??on?a~MBLNR?=?e~MBLNR
?????????WHERE?a~WERKS?=?p_werks?and?a~MJAHR?=?p_MJAHR?and?a~MBLNR?=?p_MBLNR?and?a~BWART?in?('541','542')
?????????.
??if?sy-subrc?<>?0?.
????MESSAGE?'沒(méi)有委外發(fā)料憑證的行項(xiàng)目!'?TYPE?'I'.
????STOP.
??endif.
??CLEAR?item_out.
??LOOP?AT??item_out.
????SELECT?SINGLE?NAME1?INTO?item_out-TName1
??????FROM?T001W??WHERE?werks?EQ?item_out-werks
????????????????????AND?SPRAS?=?SY-LANGU.
????SELECT?SINGLE?NAME1?INTO?item_out-LNAME1
??????FROM?LFA1??WHERE?LIFNR?EQ?item_out-LIFNR
???????????????????AND?SPRAS?=?SY-LANGU.
????SELECT?SINGLE?BTEXT??INTO?item_out-BTEXT
??????FROM?T156T??WHERE?BWART??EQ?item_out-BWART
????????????????????AND?SPRAS?=?SY-LANGU.
????SELECT?SINGLE?MAKTX??INTO?item_out-MAKTX
??????FROM?MAKT???WHERE?MATNR??EQ?item_out-MATNR
????????????????????AND?SPRAS?=?SY-LANGU.
????SELECT?SINGLE?LGOBE??INTO?item_out-LGOBE
??????FROM?T001L??WHERE?LGORT?EQ?item_out-LGORT.
????l_sno?=?l_sno?+?1.
????item_out-SNO?=?l_sno.
????MODIFY?item_out.
??ENDLOOP.
??read?TABLE?item_out?INDEX?1?INTO?hd_item_out.
??PERFORM?Display_BySF.
*&---------------------------------------------------------------------*
*&??????Form??Display_BySF
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
Form?Display_BySF.
*?取得smartforms中的參數(shù)
??DATA?:?fm_name?TYPE?rs38l_fnam.
*NOTE:SmartForms中的內(nèi)表不能有HeaderLine
*通過(guò)SmartForms的名稱(chēng)取得編譯以后的對(duì)應(yīng)的Function?Module的名稱(chēng)
??CALL?FUNCTION?'SSF_FUNCTION_MODULE_NAME'
????EXPORTING
??????formname?????????????????=?'ZFIEB_WWFLD'
*?????VARIANT??????????????????=?'?'
*?????DIRECT_CALL??????????????=?'?'
???IMPORTING
?????fm_name??????????????????=?fm_name
???EXCEPTIONS
?????no_form??????????????????=?1
?????no_function_module???????=?2
?????OTHERS???????????????????=?3
????????????.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
*?句柄的聲明
??DATA?:?prt_handler1(22)?.
??DATA?:?prt_handler2(22)?.
??DATA?:?wa_indx?TYPE?indx?.
*smartforms中的內(nèi)存地址給句柄
*在句柄中加上服務(wù)器當(dāng)前時(shí)間作為句柄名稱(chēng),防止多人同時(shí)使用該程序,導(dǎo)致句柄名稱(chēng)相同
??CONCATENATE?'ZFMM_HDR'?sy-uzeit?INTO?prt_handler1?.
??CONCATENATE?'ZFMM_ITEM'?sy-uzeit?INTO?prt_handler2?.
*?將內(nèi)表數(shù)據(jù)傳輸?shù)綌?shù)據(jù)簇表里
*??wa_indx-aedat?=?sy-datum?.
*??wa_indx-usera?=?sy-uname?.
*??wa_indx-pgmid?=?sy-repid?.
*在SAP中可以將一個(gè)對(duì)象Export到內(nèi)存或者數(shù)據(jù)庫(kù)中,我們就可以根據(jù)一個(gè)類(lèi)似于句柄的字符串再次取出該數(shù)據(jù),
*傳送一個(gè)字符串到SmartForms中是沒(méi)有任何問(wèn)題的,所以我們只需要Export內(nèi)表到內(nèi)存或者數(shù)據(jù)庫(kù)中,
*然后將句柄傳遞到SmartForms中,在SmartForms中首先定義完全相同類(lèi)型的內(nèi)表,
*再將數(shù)據(jù)Impor到內(nèi)表中即可完全恢復(fù)數(shù)據(jù),這樣就完成的數(shù)據(jù)的傳遞工作。
*?Report中用EXPORT:
??EXPORT?hd_item_out?TO?DATABASE?indx(hk)?ID?prt_handler1?FROM?wa_indx?.
*??EXPORT?item_out?TO?DATABASE?indx(hk)?ID?prt_handler2?FROM?wa_indx?.
*Smartforms中用IMPORT:
*IMPORT?HD_ITEM_OUT?FROM?DATABASE?indx(hk)?id?PRT_HANDLER1.
*IMPORT?ITEM_OUT?FROM?DATABASE?indx(hk)?id?PRT_HANDLER2.
???savebuffer?item_out[]?prt_handler2.
??DATA?:?output_opt?TYPE?ssfcompop.???"?ssfcompop?:打印參數(shù)設(shè)置的“結(jié)構(gòu)”
??output_opt-rqposname?='Local'.
??output_opt-tdimmed?=?'X'.
??CALL?FUNCTION?fm_name
????EXPORTING
??????prt_handler1???????=?prt_handler1????"?要跟Smartfroms中的全局變量對(duì)應(yīng)好
??????prt_handler2???????=?prt_handler2
??????output_options?????=?output_opt
??????control_parameters?=?ls_ctr
??????user_settings??????=?'X'
????IMPORTING
??????job_output_info????=?ls_cre
????EXCEPTIONS
??????formatting_error???=?1
??????internal_error?????=?2
??????send_error?????????=?3
??????user_canceled??????=?4.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
*??DELETE?FROM?DATABASE?indx(hk)?ID?prt_handler1.
*??DELETE?FROM?DATABASE?indx(hk)?ID?prt_handler2.
????clearbuffer?prt_handler1.
????clearbuffer?prt_handler2.
ENDFORM.????????????????????"Display_BySF
*&可以用數(shù)據(jù)簇方式對(duì)程序的任何復(fù)雜內(nèi)部數(shù)據(jù)對(duì)像過(guò)行分組保存,
*&并將其臨時(shí)存儲(chǔ)在程序內(nèi)存中,或長(zhǎng)時(shí)間存儲(chǔ)在數(shù)據(jù)庫(kù)中,
*&使用export?to?memory?語(yǔ)句在內(nèi)存中存儲(chǔ)數(shù)據(jù)對(duì)像
*&格式:?Export?<f1>[from<g1>]<f2>[from<g2>]…..to?memory?ID?<key>.
*&
*&使用import?from?memory?語(yǔ)句從內(nèi)存中讀取數(shù)據(jù)對(duì)像
*&格式:??IMPORT?<F1>?[TO?<g1>]?<F2>?[TO?<g2>]?...?FROM?MEMORY?ID?<key>.
*&
*&使用?free?memory?語(yǔ)句從內(nèi)存中刪除數(shù)據(jù)簇;
*&Free?memory?[id<key>].
*&?說(shuō)明:如果不附加ID<key>,則此語(yǔ)句刪除整個(gè)內(nèi)存,包括此前用exoprt存儲(chǔ)到內(nèi)存中的所有數(shù)據(jù)簇?附加ID<key>之后,該語(yǔ)句只能刪除此名稱(chēng)命名的數(shù)據(jù)簇;
*&
FORM?save_to_buffer?USING?t?TYPE?table?typeid?TYPE?c?.
????wa_indx-aedat?=?sy-datum.
????wa_indx-usera?=?sy-uname.
????wa_indx-pgmid?=?sy-repid.
*以簇方式存儲(chǔ)數(shù)據(jù)對(duì)像
*數(shù)據(jù)對(duì)像從程序?qū)懭氲絻?nèi)存
??EXPORT?t?TO?DATABASE?indx(hk)?ID?typeid?from?wa_indx.
ENDFORM.
FORM??clear_buffer?using?buffid?TYPE?c.
???DELETE?FROM?DATABASE?indx(hk)?ID?buffid.
ENDFORM.
總結(jié)
以上是生活随笔為你收集整理的smartforms句柄与以簇的方式存储数据。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 查找有权限使用某个T-Code的所有用户
- 下一篇: 指针传递内表方式做smartforms