Title

采购订单Message输出打印

很多业务中需要在完成订单的时候来进行单据打印的输出操作,比如新建采购订单的时候,需要输出采购订单的PDF或者使用邮件功能来将采购订单发送给制定人员

SAP 有标准MESSAGE输出的配置功能-TCODE NACE

下面我们就根据采购订单保存时生成一个message smartforms 来说明一下

一 Nace配置

  • 设置输出类型

从NEU复制一个到ZNEU目前我们是对于功能1打印输出来做定制化,所以需要选中ZNEU,双击处理程序(保存采购订单后调用的程序FORM)

⽬前我们是对于功能1打印输出来做定制化,所以需要选中ZNEU,双击处理程序(保存 采购订单后调⽤的程序FORM)

发现它是使⽤SAPFM06P使⽤ADOBE FORM来输出的,这⾥对于我们⼀般的ABAPer 来说,使⽤smartforms会⽐较熟练,所以我们创建⼀个:ZTAB_ZHU_PO_OUT_FORM 程序 来调⽤我⾃⼰定义的smartforms来输出打印 设置如下图

  • 设置条件记录

  • 选择我们创建的ZNEU输出类型

选择根据采购组织和供应商来确定Message 的输出

当我们第一进入时,可以选择左上角输出定价菜单→创建

添加一条条件记录如下图所示:其中VN是供应商功能类型,媒介1表示打印输出,调度时间4表示需要立即输出

同时我们可以点击通讯来对某个供应商设置打印属性设置:

如下图可以对采购组织1310 和供应商133000273的订单输出设置打印设备为LP01,且立即打印

  • 设置过程

设置完毕后退出,点击过程来添加设置好的输出类型

可以选择原来的过程进行添加,也可以单独创建一个过程

在新添加的过程ZRMBEF中添加ZNEU 需求为101

  • SPRO配置

接下来还要在SPRO→物料管理→采购→消息→输出控制→信息类型→定义采购订单的消息类型,添加ZNEU的输出类型

该配置是在采购订单创建和修改时自动在消息中追加一条Message 输出

如下图是订单在修改之后或者创建时自动添加的一条未处理Message输出

同时在SPRO→物料管理→采购→消息→输出控制→信息类型→信息确定方案 ,将过程RMBEF1修改为之前定义的过程ZRMBEF

当配置和程序都完毕时,我们去ME21N创建对应供应商的采购订单

当保存PO时,弹出框调用WINDOWS本地打印机输出为PDF

二 代码部分

重点关注以下几点内容:

  • 在采购订单保存成功之后,后台程序仅仅会调用 ZTAB_ZHU_PO_OUT_FORM中的FORM enter_neu.
  • 使用Function 'ME_READ_PO_FOR_PRINTING' 来获取当前PO的信息,都放在doc的返回参数中
  • 程序中TNAPR存放着调用程序,SMARTFORMS的信息,所以smartforms为TNAPR-SFORM
  • 在程序中发生错误或者打印成功后,使用Function 'NAST_PROTOCOL_UPDATE' 来更新NAST表,NAST表为记录所有OUTPUT Message 状态的表
  1 *&---------------------------------------------------------------------*2 *& Report ZTAB_ZHU_PO_OUT_FORM3 *&---------------------------------------------------------------------*4 *&5 *&---------------------------------------------------------------------*6 REPORT ztab_zhu_po_out_form.7 8 INCLUDE rvadtabl.9 DATA:10   xscreen,                           "Output on printer or screen11   nast_anzal   LIKE nast-anzal,      "Number of outputs (Orig. + Cop.)12   nast_tdarmod LIKE nast-tdarmod.    "Archiving only one time13 14 * Type Pools15 TYPE-POOLS: meein.16 17 * DDIC-Tabellen18 DATA:19   addr1_sel LIKE addr1_sel,20   addr1_val LIKE addr1_val.21 22 DATA:23   cdhdr    TYPE cdhdr,24   cdshw    TYPE cdshw,25   gs_dd04t TYPE dd04t,26   ekes     TYPE ekes,27   eket     TYPE eket,28   ekko     TYPE ekko,29   ekpo     TYPE ekpo,30   gs_elbp  TYPE elbp,31   esuh     TYPE esuh,32   komg     TYPE komg,33   komk     TYPE komk,34   komp     TYPE komp,35   konp     TYPE konp,36   gs_lfa1  TYPE lfa1,37   gs_lfm1  TYPE lfm1,38   mdpa     TYPE mdpa,39   gs_t001  TYPE t001,40   gs_t001n TYPE t001n,41   t001w    TYPE t001w,42   gs_t005  TYPE t005,43   gs_t100  TYPE t100,44   t161m    TYPE t161m,45   t166c    TYPE t166c,46   gs_t166t TYPE t166t,47   gs_t685b TYPE t685b,48   gs_tinct TYPE tinct,49   wyt3     TYPE wyt3.50 51 52 * Interne Tabellen53 DATA:54   i_cdhdr LIKE cdhdr OCCURS 0 WITH HEADER LINE,55   i_cdshw LIKE cdshw OCCURS 0 WITH HEADER LINE,56   i_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE,57   i_ekes  LIKE ekes  OCCURS 0 WITH HEADER LINE,58   i_eket  LIKE eket  OCCURS 0 WITH HEADER LINE,59   i_ekpo  LIKE ekpo  OCCURS 0 WITH HEADER LINE,60   i_konp  LIKE konp  OCCURS 0 WITH HEADER LINE,61   i_mdsb  LIKE mdsb  OCCURS 0 WITH HEADER LINE,62   i_nast  LIKE nast  OCCURS 0 WITH HEADER LINE,63   i_t001w LIKE t001w OCCURS 0 WITH HEADER LINE,64   i_t161m LIKE t161m OCCURS 0 WITH HEADER LINE,65   i_t166c LIKE t166c OCCURS 0 WITH HEADER LINE,66   i_t166k LIKE t166k OCCURS 0 WITH HEADER LINE,67   i_t166p LIKE t166p OCCURS 0 WITH HEADER LINE,68   i_t166t LIKE t166t OCCURS 0 WITH HEADER LINE,69   i_ttext LIKE ttext OCCURS 0 WITH HEADER LINE,70   i_ttxit LIKE ttxit OCCURS 0 WITH HEADER LINE,71   i_wyt3  LIKE wyt3  OCCURS 0 WITH HEADER LINE.72 73 DATA: gs_cdshw TYPE cdshw.74 75 DATA:76   i2_cdred LIKE cdred OCCURS 0 WITH HEADER LINE,77   i2_cdshw LIKE cdshw OCCURS 0 WITH HEADER LINE,78   i2_eket  LIKE eket  OCCURS 0 WITH HEADER LINE,79   i2_konp  LIKE konp  OCCURS 0 WITH HEADER LINE,80   i2_mdpm  LIKE mdpm  OCCURS 0 WITH HEADER LINE,81   i2_mdsb  LIKE mdsb  OCCURS 0 WITH HEADER LINE.82 83 DATA:84   tkomv    LIKE komv  OCCURS 0 WITH HEADER LINE,85   tkomvd   LIKE komvd OCCURS 0 WITH HEADER LINE,86   tkomvd_2 LIKE komvd OCCURS 0 WITH HEADER LINE.87 88 DATA:89    ls_doc TYPE meein_purchase_doc_print.90 91 * Smartforms Rückgabestrukturen92 DATA:93 *   document_output_info TYPE ssfcrespd,94   job_output_info TYPE ssfcrescl,95 *   job_output_options   TYPE ssfcresop,96   spoolids        TYPE rspoid.97 98 * Sonstige Variable99 DATA:
100   c1,
101   gv_tdid        TYPE tdid,
102   c10(10),
103   c20(20),
104   c80(80),
105   c100(100),
106   ix_from_memory TYPE char1,
107   xdruvo         LIKE t166k-druvo,
108   xindex         LIKE sy-index,
109   xobjcl         LIKE cdhdr-objectclas,
110   xobjid         LIKE cdhdr-objectid,
111   xretco         LIKE sy-subrc,
112   xrolln         LIKE dd04t-rollname,
113   xspool         TYPE rspoid,
114   xsubrc         LIKE sy-subrc,
115   xtdid          TYPE stxh-tdid,
116   xtdnam         TYPE stxh-tdname,
117   xxaend         TYPE meein_xaend,
118   zaehl          TYPE i.
119
120 DATA: ls_repid TYPE repid,
121       ls_bukrs TYPE bukrs,
122       lv_adrnr TYPE lfa1-adrnr.
123
124 TYPES: tt_mmpa TYPE TABLE OF mmpa.
125
126 FIELD-SYMBOLS: <xmmpa>    TYPE tt_mmpa,
127                <ls_xmmpa> TYPE mmpa.
128
129 DATA ls_xekpa TYPE msgpa. "ekpa.
130
131 * Startroutine Nachricht NEU
132 FORM entry_neu USING return_code TYPE i
133                      us_screen   TYPE c.
134   CLEAR: xsubrc.
135
136   xretco  = return_code.
137   xscreen = us_screen.
138
139   PERFORM processing USING us_screen
140                   CHANGING xsubrc.
141
142   IF xsubrc NE 0.
143     return_code = 1.
144   ELSE.
145     return_code = 0.
146   ENDIF.
147 ENDFORM.                    "ENTRY_NEU
148
149 FORM processing USING proc_screen TYPE c
150              CHANGING cf_retcode  TYPE i.
151   DATA:
152     lf_fm_name        TYPE rs38l_fnam,
153     lf_formname       TYPE tdsfname,
154     ls_addr_key       LIKE addr_key,
155     ls_composer_param TYPE ssfcompop,
156     ls_control_param  TYPE ssfctrlop,
157     ls_recipient      TYPE swotobjid,
158     ls_sender         TYPE swotobjid.
159
160 * Sonderroutine bei Ausgabe Mail mit Anlagen
161 * ( Aufruf aus ZAMMMP0001 )
162   CLEAR xspool.
163
164 * Löschen Flag "CX_FROM_MEMORY"
165   CLEAR: cf_retcode, ix_from_memory.
166
167 * Datenbeschaffung
168   CALL FUNCTION 'ME_READ_PO_FOR_PRINTING'
169     EXPORTING
170       ix_nast        = nast
171       ix_screen      = proc_screen
172     IMPORTING
173       ex_retco       = cf_retcode
174       doc            = ls_doc
175 *     ex_nast        = xnast
176     CHANGING
177       cx_druvo       = xdruvo
178       cx_from_memory = ix_from_memory.
179   CHECK cf_retcode = 0.
180
181
182 * Übernahme Änderungen in int. Tabelle für Smartforms
183   PERFORM aenderungsbelege.
184
185   SELECT SINGLE * FROM lfa1 INTO gs_lfa1
186        WHERE lifnr = nast-parnr.
187
188   lf_formname = tnapr-sform.
189
190 * Aufbereitung Druckparameter
191   PERFORM set_print_param USING ls_addr_key
192                                 gs_lfa1-land1
193                        CHANGING ls_control_param
194                                 ls_composer_param
195                                 ls_recipient
196                                 ls_sender
197                                 cf_retcode.
198
199 *  Bestimmung Funktionsbaustein für Smartforms-Formular
200   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
201     EXPORTING
202       formname           = lf_formname
203     IMPORTING
204       fm_name            = lf_fm_name
205     EXCEPTIONS
206       no_form            = 1
207       no_function_module = 2
208       OTHERS             = 3.
209
210   IF sy-subrc NE 0.
211     cf_retcode = sy-subrc.
212     PERFORM protocol_update.
213   ENDIF.
214
215   CHECK cf_retcode = 0.
216
217   nast_tdarmod = nast-tdarmod.
218   nast_anzal =
219   ls_composer_param-tdnewid = 'X'.
220
221   ls_composer_param-tdcopies = nast-anzal.
222
223 *  Aufruf Smartforms-FB
224   CALL FUNCTION lf_fm_name
225     EXPORTING
226       archive_index      = toa_dara
227       archive_parameters = arc_params
228       control_parameters = ls_control_param
229       mail_recipient     = ls_recipient
230       mail_sender        = ls_sender
231       output_options     = ls_composer_param
232       user_settings      = space
233       ekko               = ls_doc-xekko
234       nast               = nast
235     IMPORTING
236 *     document_output_info = document_output_info
237       job_output_info    = job_output_info
238 *     job_output_options = job_output_options
239     TABLES
240       t_ekpo             = ls_doc-xekpo
241     EXCEPTIONS
242       formatting_error   = 1
243       internal_error     = 2
244       send_error         = 3
245       user_canceled      = 4
246       OTHERS             = 5.
247
248 *  Fehlerprotokoll
249   IF sy-subrc NE 0.
250     cf_retcode = sy-subrc.
251     PERFORM protocol_update.
252     PERFORM add_smfrm_prot.
253   ENDIF.
254
255 *  Ermitteln Spool-Nummer
256   LOOP AT job_output_info-spoolids INTO spoolids.
257     CHECK spoolids NE space.
258
259     PERFORM protocol_update_spool USING '342' spoolids
260                                         space space space.
261     xspool = spoolids.
262   ENDLOOP.
263
264
265
266   IF NOT nast_tdarmod IS INITIAL.
267     nast-tdarmod = nast_tdarmod.
268     CLEAR nast_tdarmod.
269   ENDIF.
270
271   IF NOT xspool IS INITIAL.
272     sy-msgid = 'VN'.
273     sy-msgty = 'I'.
274     sy-msgno = '342'.
275     sy-msgv1 = xspool.
276   ENDIF.
277 ENDFORM.
278 *&---------------------------------------------------------------------*
279 *& Form aenderungsbelege
280 *&---------------------------------------------------------------------*
281 *& text
282 *&---------------------------------------------------------------------*
283 *& -->  p1        text
284 *& <--  p2        text
285 *&---------------------------------------------------------------------*
286 FORM aenderungsbelege .
287   REFRESH i_cdshw.
288
289   LOOP AT ls_doc-xaend INTO xxaend.
290 *  Keine Änderungen aus Bestellbestätigungen
291     CHECK xxaend-tabname NE 'EKES'.
292
293 *  Keine Änderungen aus Einteilungen (ausser Liefertermin)
294     IF xxaend-tabname = 'EKET'.
295       CHECK xxaend-fname = 'EINDT'.
296     ENDIF.
297
298 *  Datenübernahme in Änderungsstruktur
299     MOVE-CORRESPONDING xxaend TO i_cdshw.
300
301 *  Aufbereitung überflüssiger Nachkommastellen
302     REPLACE ',000 ' WITH space INTO i_cdshw-f_old.
303     REPLACE ',000 ' WITH space INTO i_cdshw-f_new.
304
305 *  Feldbezeichnung in Nachrichtensprache
306     SELECT * FROM dd03l
307        INTO TABLE i_dd03l
308        WHERE tabname   = i_cdshw-tabname
309          AND fieldname = i_cdshw-fname
310        ORDER BY PRIMARY KEY.   "BHS120614(+).
311
312     IF sy-subrc = 0.
313       READ TABLE i_dd03l INDEX 1.
314
315       PERFORM lesen_datenelement
316          USING i_dd03l-rollname 'M' i_cdshw-ftext.
317     ENDIF.
318
319 *  Aufbau Tabelle mit Änderungsbelegen
320     APPEND i_cdshw.
321   ENDLOOP.
322
323   CHECK sy-subrc NE 0.
324
325 * Prüfen, ob bereits mindestens 1 verarbeitete Nachricht vorliegt
326   SELECT * FROM nast
327      INTO TABLE i_nast
328      WHERE kappl = nast-kappl
329        AND objky = nast-objky
330        AND kschl = nast-kschl
331        AND vstat = '1'
332        ORDER BY PRIMARY KEY.   "BHS120614(+).
333   CHECK sy-subrc = 0.
334
335 * Letzte verarbeitete Nachricht wg. Timestamp für Änderungsbelege
336   DESCRIBE TABLE i_nast LINES xindex.
337
338   IF xindex > 1.
339     SELECT COUNT( * ) FROM nast
340        WHERE kappl = nast-kappl
341          AND objky = nast-objky
342          AND kschl = nast-kschl
343          AND vstat = '0'.
344
345     IF sy-subrc NE 0.
346       xindex = xindex - 1.
347     ENDIF.
348   ENDIF.
349
350   READ TABLE i_nast INDEX xindex.
351
352 * Lesen Änderungsbelege
353   PERFORM lesen_aenderungsbelege USING 'EINKBELEG' nast-objky.
354 ENDFORM.
355 *&---------------------------------------------------------------------*
356 *& Form lesen_aenderungsbelege
357 *&---------------------------------------------------------------------*
358 *& text
359 *&---------------------------------------------------------------------*
360 *&      --> P_
361 *&      --> NAST_OBJKY
362 *&---------------------------------------------------------------------*
363 FORM lesen_aenderungsbelege USING xxobjcl TYPE cdhdr-objectclas
364                                   xxobjid TYPE nast-objky.
365   CHECK nast-kschl = 'NEU '.
366
367   xobjcl = xxobjcl.
368   xobjid = xxobjid.
369
370   CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
371     EXPORTING
372       objectclass                = xobjcl
373       objectid                   = xobjid
374       username                   = space
375     TABLES
376       i_cdhdr                    = i_cdhdr
377     EXCEPTIONS
378       no_position_found          = 1
379       wrong_access_to_archive    = 2
380       time_zone_conversion_error = 3
381       OTHERS                     = 4.
382   CHECK sy-subrc = 0.
383
384   LOOP AT i_cdhdr INTO cdhdr.
385     CHECK cdhdr-udate > i_nast-datvr
386        OR ( cdhdr-udate = i_nast-datvr AND
387             cdhdr-utime > i_nast-uhrvr ).
388
389     CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'
390       EXPORTING
391         changenumber            = cdhdr-changenr
392       TABLES
393         editpos                 = i2_cdshw
394         editpos_with_header     = i2_cdred
395       EXCEPTIONS
396         no_position_found       = 1
397         wrong_access_to_archive = 2
398         OTHERS                  = 3.
399     CHECK sy-subrc = 0.
400
401 *    APPEND LINES OF i2_cdred TO i_cdred.
402     APPEND LINES OF i2_cdshw TO i_cdshw.
403   ENDLOOP.
404
405 * Prüfung änderungsrelevante Felder
406   SELECT * FROM t166c
407      INTO TABLE i_t166c.
408
409   CASE ls_doc-xekko-bstyp.
410     WHEN 'A'.
411       DELETE i_t166c WHERE xanfr NE 'X'.
412     WHEN 'F'.
413       DELETE i_t166c WHERE xbest NE 'X'.
414     WHEN 'K'.
415       DELETE i_t166c WHERE xkont NE 'X'.
416     WHEN 'L'.
417       DELETE i_t166c WHERE xlfpl NE 'X'.
418   ENDCASE.
419
420 *  Keine Änderungen aus Einteilungen und Bestellbestätigungen
421   DELETE i_cdshw WHERE tabname = 'EKES'.
422
423   DELETE i_cdshw WHERE tabname = 'EKET'
424                    AND fname  NE 'EINDT'.
425
426   LOOP AT i_cdshw WHERE chngind = 'U'.
427     READ TABLE i_t166c WITH KEY tname = i_cdshw-tabname
428                                 fname = i_cdshw-fname.
429     IF sy-subrc NE 0.
430       DELETE i_cdshw.
431       CONTINUE.
432     ENDIF.
433
434 *  Druckaufbereitung
435 *  Aufbereitung überflüssiger Nachkommastellen
436     REPLACE ',000 ' WITH space INTO i_cdshw-f_old.
437     REPLACE ',000 ' WITH space INTO i_cdshw-f_new.
438
439 *  Feldbezeichnung in Nachrichtensprache
440     SELECT * FROM dd03l
441        INTO TABLE i_dd03l
442        WHERE tabname   = i_cdshw-tabname
443          AND fieldname = i_cdshw-fname
444        ORDER BY PRIMARY KEY.   "BHS120614(+).
445
446     IF sy-subrc = 0.
447       READ TABLE i_dd03l INDEX 1.
448
449       PERFORM lesen_datenelement
450          USING i_dd03l-rollname 'M' i_cdshw-ftext.
451     ENDIF.
452
453     MODIFY i_cdshw.
454   ENDLOOP.
455 ENDFORM.
456 *&---------------------------------------------------------------------*
457 *& Form set_print_param
458 *&---------------------------------------------------------------------*
459 *& text
460 *&---------------------------------------------------------------------*
461 *&      --> LS_ADDR_KEY
462 *&      --> GS_LFA1_LAND1
463 *&      <-- LS_CONTROL_PARAM
464 *&      <-- LS_COMPOSER_PARAM
465 *&      <-- LS_RECIPIENT
466 *&      <-- LS_SENDER
467 *&      <-- CF_RETCODE
468 *&---------------------------------------------------------------------*
469 FORM set_print_param  USING is_addr_key       LIKE addr_key
470                            xxland1           LIKE lfa1-land1
471                   CHANGING cs_control_param  TYPE ssfctrlop
472                            cs_composer_param TYPE ssfcompop
473                            cs_recipient      TYPE swotobjid
474                            cs_sender         TYPE swotobjid
475                            cf_retcode        TYPE sy-subrc.
476   DATA:
477     lf_device TYPE tddevice,
478     lf_repid  TYPE sy-repid,
479     ls_itcpo  TYPE itcpo.
480
481   lf_repid = sy-repid.
482
483   CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
484     EXPORTING
485       pi_nast       = nast
486       pi_country    = xxland1
487       pi_addr_key   = is_addr_key
488       pi_repid      = lf_repid
489       pi_screen     = xscreen
490     IMPORTING
491       pe_returncode = cf_retcode
492       pe_itcpo      = ls_itcpo
493       pe_device     = lf_device
494       pe_recipient  = cs_recipient
495       pe_sender     = cs_sender.
496
497   IF cf_retcode = 0.
498     MOVE-CORRESPONDING ls_itcpo TO cs_composer_param.
499
500     CLEAR cs_composer_param-tddelete.
501     cs_composer_param-tdlifetime = 8.
502
503     cs_control_param-device    = lf_device.
504     cs_control_param-no_dialog = ''.
505     cs_control_param-preview   = xscreen.
506     cs_control_param-getotf    = ls_itcpo-tdgetotf.
507     cs_control_param-langu     = nast-spras.
508   ENDIF.
509
510 ENDFORM.
511 *&---------------------------------------------------------------------*
512 *& Form protocol_update
513 *&---------------------------------------------------------------------*
514 *& text
515 *&---------------------------------------------------------------------*
516 *& -->  p1        text
517 *& <--  p2        text
518 *&---------------------------------------------------------------------*
519 FORM protocol_update .
520   IF xscreen NE space.
521     MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
522           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
523     EXIT.
524   ENDIF.
525
526   CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
527     EXPORTING
528       msg_arbgb = syst-msgid
529       msg_nr    = syst-msgno
530       msg_ty    = syst-msgty
531       msg_v1    = syst-msgv1
532       msg_v2    = syst-msgv2
533       msg_v3    = syst-msgv3
534       msg_v4    = syst-msgv4
535     EXCEPTIONS
536       OTHERS    = 1.
537 ENDFORM.
538 *&---------------------------------------------------------------------*
539 *& Form add_smfrm_prot
540 *&---------------------------------------------------------------------*
541 *& text
542 *&---------------------------------------------------------------------*
543 *& -->  p1        text
544 *& <--  p2        text
545 *&---------------------------------------------------------------------*
546 FORM add_smfrm_prot .
547   DATA:
548     l_s_log     TYPE bal_s_log,
549     l_s_msg     TYPE bal_s_msg,
550     lt_errortab TYPE tsferror,
551     p_loghandle TYPE balloghndl.
552
553   FIELD-SYMBOLS:
554      <fs_errortab> TYPE LINE OF tsferror.
555
556 * Fehlertabelle lesen
557   CALL FUNCTION 'SSF_READ_ERRORS'
558     IMPORTING
559       errortab = lt_errortab.
560
561   SORT lt_errortab.
562
563 * Hinzufügen Smartforms Protokoll zum Nachrichtenprotokoll
564   LOOP AT lt_errortab ASSIGNING <fs_errortab>.
565     CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
566       EXPORTING
567         msg_arbgb = <fs_errortab>-msgid
568         msg_nr    = <fs_errortab>-msgno
569         msg_ty    = <fs_errortab>-msgty
570         msg_v1    = <fs_errortab>-msgv1
571         msg_v2    = <fs_errortab>-msgv2
572         msg_v3    = <fs_errortab>-msgv3
573         msg_v4    = <fs_errortab>-msgv4
574       EXCEPTIONS
575         OTHERS    = 1.
576   ENDLOOP.
577
578 * Application log
579   l_s_log-extnumber = sy-uname.
580
581   CALL FUNCTION 'BAL_LOG_CREATE'
582     EXPORTING
583       i_s_log      = l_s_log
584     IMPORTING
585       e_log_handle = p_loghandle
586     EXCEPTIONS
587       OTHERS       = 1.
588
589   LOOP AT lt_errortab ASSIGNING <fs_errortab>.
590     MOVE-CORRESPONDING <fs_errortab> TO l_s_msg.
591
592     CALL FUNCTION 'BAL_LOG_MSG_ADD'
593       EXPORTING
594         i_log_handle = p_loghandle
595         i_s_msg      = l_s_msg
596       EXCEPTIONS
597         OTHERS       = 1.
598   ENDLOOP.
599 ENDFORM.
600 *&---------------------------------------------------------------------*
601 *& Form protocol_update_spool
602 *&---------------------------------------------------------------------*
603 *& text
604 *&---------------------------------------------------------------------*
605 *&      --> P_
606 *&      --> SPOOLIDS
607 *&      --> SPACE
608 *&      --> SPACE
609 *&      --> SPACE
610 *&---------------------------------------------------------------------*
611 FORM protocol_update_spool  USING syst_msgno   TYPE symsgno
612                                  p_ls_spoolid TYPE rspoid
613                                  p_space1     TYPE symsgv
614                                  p_space2     TYPE symsgv
615                                  p_space3     TYPE symsgv.
616   CHECK xscreen = space.
617
618   syst-msgid = 'VN'.
619   syst-msgno = syst_msgno.
620   syst-msgv1 = p_ls_spoolid.
621
622   CONDENSE syst-msgv1.
623
624   CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
625     EXPORTING
626       msg_arbgb = syst-msgid
627       msg_nr    = syst-msgno
628       msg_ty    = syst-msgty
629       msg_v1    = syst-msgv1
630       msg_v2    = p_space1
631       msg_v3    = p_space2
632       msg_v4    = p_space3
633     EXCEPTIONS
634       OTHERS    = 1.
635 ENDFORM.
636 * Literale übernehmen aus Datenelemnten
637 FORM lesen_datenelement USING xxrolln TYPE rollname
638                               xxtext  TYPE char1
639                               xxfeld  TYPE any.
640   SELECT SINGLE * FROM dd04t INTO gs_dd04t
641      WHERE rollname   = xxrolln
642        AND ddlanguage = nast-spras
643        AND as4local   = 'A'
644        AND as4vers    = '0000'.
645   CHECK sy-subrc = 0.
646
647   CASE xxtext.
648     WHEN 'M'.  xxfeld = gs_dd04t-scrtext_m.
649     WHEN 'L'.  xxfeld = gs_dd04t-scrtext_l.
650     WHEN 'S'.  xxfeld = gs_dd04t-scrtext_s.
651     WHEN 'D'.  xxfeld = gs_dd04t-ddtext.
652     WHEN 'R'.  xxfeld = gs_dd04t-reptext.
653   ENDCASE.
654 ENDFORM.                    "LESEN_DATENELEMENT

2021.07.11 【ABAP随笔】采购订单Message输出打印相关推荐

  1. abap对采购订单强制置为”交货已完成“状态(BAPI_PO_CHANGE、BAPI_PO_RELEASE、BAPI_PO_RESET_RELEASE)

    项目中,需要对一些采购订单做强制"交货已完成",如果采购订单已批准,是不能用BAPI_PO_CHANGE更改状态的,只有先除去"批准"状态 ,再"交货 ...

  2. SAP ABAP ME23N 采购订单打印输出

    本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系. 完成的功能是ME23N 点击打印预览 客制化用户自己的打印模板, 首先需要先配置打印输出 路径:spro- ...

  3. SAP ABAP 根据采购订单(PO)创建交货单(DN) BAPI_DELIVERYPROCESSING_EXEC - 创建内向交货单

    原文链接:https://blog.csdn.net/JKingyin/article/details/107133840 FORM CREATE_INBOUND_DELIVIRY.DATA: _RE ...

  4. 【ABAP】采购订单行项目 税码 自动默认

    [业务背景]唉,怎么说呢.采购订单的定价策略是个相对复杂一点的事情,但是,根据企业的业务实践,也可以做的相对简单一些. 我们这个案例呢,就是采购定价策略做的比较简单,但是有一点不便捷的地方,就是采购订 ...

  5. 2021/07/11 老男孩带你21周搞定Go语言 (二)

    P30 回顾,运算符和数组 var [30]int 长度30 int类型的数组 [30]int就代表类型 声明变量做初始化 [-]代表用后面的初始化,让go主机去数长度 数组遍历两种方式,一种是长度, ...

  6. 2021/07/11 老男孩带你21周搞定Go语言 (一)

    P1 为什么要学习go go语言设计之初就考虑到多核CPU了,编译好执行,有几个核就跑满几个核 etcd代替zookeeper P2 课上所有物料介绍 typora的笔记里偏好设置,图片到当前的.as ...

  7. SAP ABAP me21n 采购订单抬头字段增强 MM06E005

    SMOD MM06E005 CI_EKKODB添加增强字段: ZXM06TOP: data:gv_mode type char01 . 1.创建0101子屏幕 MODULE STATUS_0101 O ...

  8. oracle 批量下单,3.12批量创建采购订单

    3.12.1   业务方案描述 在生成采购订单前,由采购员审核计划结果,根据供应商的供货状况调整供应商供货数量.供货日期. 所有合格供应商都能够通过下单平台批量下达采购订单,尽管供应商没有供货比例,或 ...

  9. SAP中输出采购订单附件清单操作实例

    近期接到采购同事需求,希望了解SAP系统中有多少采购订单上传了附件?有多少没有?采购订单中的附件可以通过ME23N打开单独来看(如下图).从本公司业务上说,该附件用于存储在系统外签字生效的采购申请单. ...

最新文章

  1. 2022-2028年中国GPS导航行业投资分析及前景预测报告
  2. linux 常用命令:
  3. 有java基础的人学python_准备自学Python ,会java,有什么建议吗?
  4. 【CSDN2012年度博客之星】需要您的一票,感谢大家的支持
  5. php header
  6. Windows下安装Object C开发环境,及Hello Word(转)
  7. Python中的Numpy(5.numpy排序)
  8. Hibernate之Hello World篇
  9. 2017计算机c语言大纲,2017年计算机考研大纲
  10. 编译安装Nginx-1.0.1
  11. Selenium IDE 下载及安装
  12. Linux-虚拟机使用:真机与虚拟机ping通
  13. vue 代码格式化(VS code)
  14. 经济基础知识(初级)【13】
  15. 华为首次自曝“天才少年”成果:入职不到一年就干成这件大事,网友:值200万年薪!...
  16. MySQL数据库存储的字符显示是问号??
  17. mixer: 一个用go实现的mysql proxy
  18. 乐事薯片:价格涨了,质量降了,年轻人的快乐没有了
  19. html 取消回车,java去除html回车换行
  20. 实验........

热门文章

  1. python测试工具--nose简介
  2. 什么是堡垒机?堡垒机的作用?
  3. windows 环境 ngrok内网穿透外网
  4. 数据可视化 饼图_饼图之外的生活:合适工作的合适可视化效果
  5. Ubuntu14.04+Texlive2014+LYX-Linux下LYX的中文配置方案
  6. 两分钟带你彻底明白机器学习中的过采样和欠采样是什么意思?
  7. 虚拟机 Ubuntu 14.04 LTS (64 bits) 下安装 Kurento v6 并运行 kurento-hello-world
  8. 大数据的应用场景都有哪些(医疗篇)
  9. mysql数据库执行mysqladmin flush-hosts方法
  10. 什么叫做「数据驱动方法」