[abap] smartforms句柄与以簇的方式存储数据
来源:互联网 发布:观韬律所 知乎 编辑:程序博客网 时间:2024/05/18 14:42
说明:Smartforms输出打印,设置句柄,用于传递参数。
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 . " 作为全局声明
* 以下是一个定义宏的语句,在DEFINE和END-OF-DEFINITION之间有完整的ABAP语句,
* 用&N作为占位符,在调用的时候把真正的字符传入并取代。
** 例子:
*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.
*结果内表item_out
TYPES: BEGIN OF TY_item_out,
SNO TYPE ZIEB_zsnnm, " 序号 说明: 数据元素不能用LIKE
WERKS LIKE MSEG-WERKS, " 工厂
TName1 LIKE T001W-NAME1, " 工厂名称
Ebeln LIKE EKPO-EBELN, " 采购订单号
LIFNR LIKE MSEG-LIFNR, " 委外加工商代码
LNAME1 LIKE LFA1-NAME1, " 委外加工商名称
BLDAT LIKE MKPF-BLDAT, " 凭证日期
MBLNR LIKE MSEG-MBLNR, " 物料凭证号
BWART LIKE MSEG-BWART, " 移动类型
BTEXT LIKE T156T-BTEXT, " 移动类型描述
ZEILE LIKE MSEG-ZEILE, " 序号
MATNR LIKE MSEG-MATNR, " 物料编号
MAKTX LIKE MAKT-MAKTX, " 物料描述
ERFMG LIKE MSEG-ERFMG, " 数量
ERFME LIKE MSEG-ERFME, " 单位
LGORT LIKE MSEG-LGORT, " 库存地代码
LGOBE LIKE T001L-LGOBE, " 库存地描述
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. " 用来存放抬头的固定内容。
Data wa_item_out TYPE TY_item_out. " 用来存放行项目的可循环内容。
*----------------- 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," 当前年度
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 '工厂选择错误!'. " MESSAGE-ID ZIEB01
MESSAGE '工厂选择错误!' TYPE 'E'.
STOP.
endif.
if p_MJAHR <> sy-datum(04).
MESSAGE '凭证年度选择错误!' 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 '没有委外发料凭证的行项目!' 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中的参数
DATA : fm_name TYPE rs38l_fnam.
*NOTE:SmartForms中的内表不能有HeaderLine
*通过SmartForms的名称取得编译以后的对应的Function Module的名称
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中的内存地址给句柄
*在句柄中加上服务器当前时间作为句柄名称,防止多人同时使用该程序,导致句柄名称相同
CONCATENATE 'ZFMM_HDR' sy-uzeit INTO prt_handler1 .
CONCATENATE 'ZFMM_ITEM' sy-uzeit INTO prt_handler2 .
* 将内表数据传输到数据簇表里
* wa_indx-aedat = sy-datum .
* wa_indx-usera = sy-uname .
* wa_indx-pgmid = sy-repid .
*在SAP中可以将一个对象Export到内存或者数据库中,我们就可以根据一个类似于句柄的字符串再次取出该数据,
*传送一个字符串到SmartForms中是没有任何问题的,所以我们只需要Export内表到内存或者数据库中,
*然后将句柄传递到SmartForms中,在SmartForms中首先定义完全相同类型的内表,
*再将数据Impor到内表中即可完全恢复数据,这样就完成的数据的传递工作。
* 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 :打印参数设置的“结构”
output_opt-rqposname ='Local'.
output_opt-tdimmed = 'X'.
CALL FUNCTION fm_name
EXPORTING
prt_handler1 = prt_handler1 " 要跟Smartfroms中的全局变量对应好
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
*&可以用数据簇方式对程序的任何复杂内部数据对像过行分组保存,
*&并将其临时存储在程序内存中,或长时间存储在数据库中,
*&使用export to memory 语句在内存中存储数据对像
*&格式: Export <f1>[from<g1>]<f2>[from<g2>]…..to memory ID <key>.
*&
*&使用import from memory 语句从内存中读取数据对像
*&格式: IMPORT <F1> [TO <g1>] <F2> [TO <g2>] ... FROM MEMORY ID <key>.
*&
*&使用 free memory 语句从内存中删除数据簇;
*&Free memory [id<key>].
*& 说明:如果不附加ID<key>,则此语句删除整个内存,包括此前用exoprt存储到内存中的所有数据簇 附加ID<key>之后,该语句只能删除此名称命名的数据簇;
*&
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.
*以簇方式存储数据对像
*数据对像从程序写入到内存
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.
- [abap] smartforms句柄与以簇的方式存储数据
- smartforms句柄与以簇的方式存储数据。
- 以0x字节方式打印存储的数据
- numpy中以文本的方式存储以及读取数据
- 以UTF-8编码方式讲数据存储的编码
- SAP-ABAP-Smartforms调用参数的利用与打印次数的记录
- SAP-ABAP-Smartforms调用参数的利用与打印次数的记录
- Android的数据存储方式---内部存储与外部存储
- 今天90%的软件都将与以某种方式存储的某种数据相互作用和影响
- abap smartforms 实现单据
- ABAP 调用smartforms打印
- abap smartforms 实现单据
- abap smartforms 实现单据
- ABAP:SmartForms--设计
- Abap-Smartforms中如何去掉开头的中文文本
- SAP ABAP编程 SMARTFORMS输出变量 的格式问题
- 数据存储的方式
- REPORT传值到SMARTFORMS的三种方式
- JavaScript初学者应注意的七个细节
- [abap] 'REUSE_ALV_GRID_DISPLAY_LVC' 的用法
- as3 倒影
- a 的CSS 样式
- UVa OJ 113-Power of Cryptography
- [abap] smartforms句柄与以簇的方式存储数据
- Boosting和Bagging
- Spring Framework 开发参考手册
- [abap][转载] 关于SCREEN的一些常用语句
- PL/SQL Developer 8.02 在windows7 x64中的安装使用
- C#中实现同时上传多个附件
- 今日正式在csdn安家
- 纠结的隐形眼镜
- ABAP syst常用字段