Purchase Order Output

Purchase Order Print Program

Main Program:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
*&---------------------------------------------------------------------*
*& Report  ZPTP_PURCHASEDOC_FLOE
*&---------------------------------------------------------------------*
*& Print Program for Purchase Orders
*&---------------------------------------------------------------------*

************************************************************************
*        Druckroutinen für Einkaufsbelege                              *
************************************************************************

*----------------------------------------------------------------------*
* Datenteil
*----------------------------------------------------------------------*
INCLUDE fm06ptop.
*----------------------------------------------------------------------*
* Datenbeschaffung
*----------------------------------------------------------------------*
*INCLUDE FM06PF01.

*----------------------------------------------------------------------*
* Formularausgabe
*----------------------------------------------------------------------*
*INCLUDE FM06PF02.

*----------------------------------------------------------------------*
* Sonstige PERFORM-Routinen
*----------------------------------------------------------------------*
*INCLUDE FM06PF03.

*----------------------------------------------------------------------*
* Dienstleistungsabwicklung
*----------------------------------------------------------------------*
*INCLUDE FM06PF04.

*----------------------------------------------------------------------*
* Matrixdruck für Varianten
*----------------------------------------------------------------------*
*INCLUDE FM06PFVA.

*----------------------------------------------------------------------*
* Entries
*----------------------------------------------------------------------*
*INCLUDE FM06PE01.

*INCLUDE FM06PF05.

*INCLUDE FM06PF06.

*INCLUDE FM06PF07.

*INCLUDE FM06PF08.

*INCLUDE FM06PF09.

*INCLUDE fm06pe02.

INCLUDE fm06pe03.

INCLUDE fm06pe04.

INCLUDE zptp_varo1.

Include:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
*&---------------------------------------------------------------------*
*& Include          ZPTP_VARO1
*&---------------------------------------------------------------------*

FIELD-SYMBOLS:
  <gv_returncode>    TYPE sysubrc.

DATA: gv_screen_display      TYPE char1,
      gs_nast                TYPE nast,

      cl_output_po           TYPE REF TO cl_purchase_order_output,
      cl_output_knt          TYPE REF TO cl_purchase_contract_output,
      cl_output_schedagr     TYPE REF TO cl_purchase_sched_agr_output,
      cl_output_rfq          TYPE REF TO cl_purchase_rfq_output,    " object for rfq
      cl_output_schedagr_rel TYPE REF TO cl_purchase_sched_rel_output, "object for agree with release
      gv_ebeln               TYPE ebeln,
      gs_ekko                TYPE ekko,
      gv_vend_cntry          TYPE lfa1-land1,
      gv_add_nr              TYPE adr6-addrnumber,
      fp_outputparams        TYPE sfpoutputparams,

* Varo declarations

      gv_pdf                 TYPE xstring,
      gv_doc                 TYPE text40,
      gv_ccode               TYPE /flm/cust_code,
      gv_ftype               TYPE /flm/ftype_code,
      gv_template            TYPE /flm/flang,
      gv_fver                TYPE /flm/fver,
      gv_fid                 TYPE /flm/fid,
      gv_fidvar              TYPE /flm/id_var,
      gs_mess                TYPE bapiret2,
      gt_mess                TYPE TABLE OF bapiret2,
      gs_fpe                 TYPE /flm/fpe,
      gv_cms_doc             TYPE /flm/cms_doc,
      gt_variables           TYPE /flm/vars_t,
      gs_variables           TYPE /flm/vars_s,
      gv_reprint             TYPE flag.

* Floe declarations

TYPES: BEGIN OF ty_floe_rec_email_s,
         email TYPE ad_smtpadr,
         type  TYPE char1,
       END OF ty_floe_rec_email_s.

TYPES: ty_floe_rec_email_t TYPE TABLE OF ty_floe_rec_email_s.

TYPES: BEGIN OF ty_floe_var_code_s,
         var_code       TYPE char30,
         value          TYPE string,
         row_num        TYPE numc3,
         parent_row_num TYPE numc3,
       END OF ty_floe_var_code_s.

TYPES: ty_floe_var_code_t TYPE TABLE OF ty_floe_var_code_s.

DATA: gt_rec_emails     TYPE ty_floe_rec_email_t,
      gs_rec_email      TYPE ty_floe_rec_email_s,
      gt_vars           TYPE ty_floe_var_code_t,
      gs_vars           TYPE ty_floe_var_code_s,
      gv_rec_email_addr TYPE ad_smtpadr,

      gs_attach         TYPE /floe/att_s,
      gt_attach         TYPE /floe/att_t,
      gv_im_doc         TYPE /floe/doc_ref,
      gv_etype          TYPE /floe/etype_code,
      gv_ebody          TYPE  string,
      gv_esubject_long  TYPE  /floe/esubject_long,
      gv_no_commit      TYPE flag,

      gt_lines          TYPE TABLE OF tline,
      gs_lines          TYPE tline,
      gv_text           TYPE string,
      gv_tdname         TYPE tdobname,
      gv_document       TYPE char10.


*&--------------------------------------------------------------------*
*&      Form  entry_varo
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->ENT_RETCO  text
*      -->ENT_SCREEN text
*---------------------------------------------------------------------*
FORM entry_varo USING ent_retco  LIKE sy-subrc
                      ent_screen TYPE c.
*
* Assign retcode
  ASSIGN ent_retco TO <gv_returncode>.
*
  gv_screen_display = ent_screen.
  gs_nast           = nast.
*
  PERFORM processing_varo.
*
ENDFORM.                    " entry_varo

*&--------------------------------------------------------------------*
*&      Form  entry_floe
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->ENT_RETCO  text
*      -->ENT_SCREEN text
*---------------------------------------------------------------------*
FORM entry_floe USING ent_retco  LIKE sy-subrc
                      ent_screen TYPE c.
*
* Assign retcode
  ASSIGN ent_retco TO <gv_returncode>.
*
  gv_screen_display = ent_screen.
  gs_nast           = nast.
*
  PERFORM processing_floe.
*
ENDFORM.                    " entry_varo

*&---------------------------------------------------------------------*
*&      Form  processing Varo
*&---------------------------------------------------------------------*
FORM processing_varo.

*--- Retrieve the data
  PERFORM get_data.
  CHECK <gv_returncode> IS INITIAL.

*--- Print form
  PERFORM print_data_varo.
  CHECK <gv_returncode> IS INITIAL.

ENDFORM.                    " processing_varo

*&---------------------------------------------------------------------*
*&      Form  processing Varo
*&---------------------------------------------------------------------*
FORM processing_floe.

* Check email type
  gv_etype  = tnapr-fonam.
  CHECK gv_etype IS NOT INITIAL.

*--- Retrieve the data
  PERFORM get_data.
  CHECK <gv_returncode> IS INITIAL.

*--- Print form
  PERFORM send_data_floe.
  CHECK <gv_returncode> IS INITIAL.

ENDFORM.                    " processing_varo

*&--------------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------------*
FORM get_data.
*
  DATA: l_xdruvo TYPE c,
        l_xfz    TYPE c.
*
  IF gs_nast-aende EQ space.
    l_xdruvo = prntev_new.
  ELSE.
    l_xdruvo = prntev_chg.
  ENDIF.
*
  IF gs_nast-kappl = 'EF'.
* Purchase order

    CREATE OBJECT cl_output_po
      TYPE
      cl_purchase_order_output
      EXPORTING
        c_mode     = l_xdruvo
        es_nast    = gs_nast
        iv_preview = gv_screen_display.

    CALL METHOD cl_output_po->read.
    gv_add_nr = cl_output_po->is_ekko-adrnr.
    gv_vend_cntry = cl_output_po->is_ekko-land_vend.

  ELSEIF nast-kappl = 'EL'.
*Sceduling Agreement with release

    CREATE OBJECT cl_output_schedagr_rel
      TYPE
      cl_purchase_sched_rel_output
      EXPORTING
        c_mode  = l_xdruvo
        xfz     = l_xfz
        es_nast = gs_nast.

    CALL METHOD cl_output_schedagr_rel->read.
    gv_add_nr = cl_output_schedagr_rel->is_ekko-adrnr.
    gv_vend_cntry = cl_output_schedagr_rel->is_ekko-land_vend.

  ELSE.
    MOVE nast-objky(10) TO gv_ebeln.

    SELECT SINGLE * FROM ekko INTO gs_ekko
    WHERE ebeln EQ gv_ebeln.

    IF gs_ekko-bstyp = 'K'.
* Contract
      CREATE OBJECT cl_output_knt
        TYPE
        cl_purchase_contract_output
        EXPORTING
          c_mode  = l_xdruvo
          es_nast = gs_nast.

      CALL METHOD cl_output_knt->read.
      gv_add_nr = cl_output_knt->is_ekko-adrnr.
      gv_vend_cntry = cl_output_knt->is_ekko-land_vend.

    ELSEIF gs_ekko-bstyp = 'A'.
*RFQ
      CREATE OBJECT cl_output_rfq
        TYPE
        cl_purchase_rfq_output
        EXPORTING
          c_mode  = l_xdruvo
          es_nast = gs_nast.

      CALL METHOD cl_output_rfq->read.
      gv_add_nr = cl_output_rfq->is_ekko-adrnr.
      gv_vend_cntry = cl_output_rfq->is_ekko-land_vend.

    ELSE.
* Scheduling Agreement
      CREATE OBJECT cl_output_schedagr
        TYPE
        cl_purchase_sched_agr_output
        EXPORTING
          c_mode  = l_xdruvo
          es_nast = gs_nast.

      CALL METHOD cl_output_schedagr->read.
      gv_add_nr = cl_output_schedagr->is_ekko-adrnr.
      gv_vend_cntry = cl_output_schedagr->is_ekko-land_vend.

    ENDIF.
  ENDIF.
*
  IF nast-kappl = 'EF'.
    <gv_returncode> = cl_output_po->ret_code.
    IF <gv_returncode> IS NOT INITIAL.                      " 1468512

      syst-msgv1 = gs_ekko-ebeln.
      syst-msgno = '140'.
    ENDIF.

  ELSEIF nast-kappl = 'EL'.
    <gv_returncode> = cl_output_schedagr_rel->ret_code.
    IF <gv_returncode> IS NOT INITIAL.                      " 1468512

      syst-msgv1 = gs_ekko-ebeln.
      syst-msgno = '140'.
    ENDIF.

  ELSE.

    IF gs_ekko-bstyp = 'K'.
      <gv_returncode> = cl_output_knt->ret_code.
      IF <gv_returncode> IS NOT INITIAL.                    " 1468512

        syst-msgv1 = gs_ekko-ebeln.
        syst-msgno = '140'.
      ENDIF.

    ELSEIF gs_ekko-bstyp = 'A'.
      <gv_returncode> = cl_output_rfq->ret_code.
      IF <gv_returncode> IS NOT INITIAL.                    " 1468512

        syst-msgv1 = gs_ekko-ebeln.
        syst-msgno = '140'.
      ENDIF.

    ELSE .
      <gv_returncode> = cl_output_schedagr->ret_code.
      IF <gv_returncode> IS NOT INITIAL.                    " 1468512

        syst-msgv1 = gs_ekko-ebeln.
        syst-msgno = '140'.
      ENDIF.

    ENDIF.
  ENDIF.

  IF <gv_returncode> IS NOT INITIAL.

    CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
      EXPORTING
        msg_arbgb = 'ME'
        msg_nr    = syst-msgno
        msg_ty    = 'W'
        msg_v1    = syst-msgv1
        msg_v2    = syst-msgv2
        msg_v3    = syst-msgv3
        msg_v4    = syst-msgv4
      EXCEPTIONS
        OTHERS    = 1.
  ENDIF.
*
ENDFORM.                    " get_data
*&--------------------------------------------------------------------*
*&      Form  print_data_varo.
*&--------------------------------------------------------------------*
FORM print_data_varo.

  PERFORM fill_control_structure USING    gs_nast
                                          gv_screen_display
                                 CHANGING fp_outputparams.

* Set up defaults
  gv_ftype    = tnapr-sform.
  gv_template = nast-spras.
  gv_fver     = '00'.
  gv_doc      = nast-objky.
  CLEAR gv_reprint.
*----------------------------------------------------------------------*
* Check for Re-print
*----------------------------------------------------------------------*
  SELECT * INTO gs_nast FROM nast WHERE kappl = gs_nast-kappl
                                AND   objky = gs_nast-objky
                                AND   kschl = gs_nast-kschl
                                AND   spras = gs_nast-spras
                                AND   parnr = gs_nast-parnr
                                AND   parvw = gs_nast-parvw
                                AND   nacha BETWEEN '1' AND '4'
                                AND   vstat = '1'.
    IF gs_nast-aende IS INITIAL.
      gv_reprint = 'X'.
    ENDIF.
  ENDSELECT.
*

* Remove reprint logic
  CLEAR gv_reprint.

* Find previous output for reprint.
*
  IF gv_reprint = 'X'.
*
    SELECT * FROM /flm/fpe UP TO 1 ROWS  INTO gs_fpe WHERE ftype    = gv_ftype
                                                     AND   flang = gv_template
                                                     AND   document = gv_doc
                            ORDER BY id DESCENDING.
    ENDSELECT.
*
    IF sy-subrc EQ 0.
* Previous output found
*
      gv_ftype    = gs_fpe-ftype.
      gv_fver     = gs_fpe-fver.
      gv_template = gs_fpe-template.
      gv_fid      = gs_fpe-id.
      gv_doc      = gs_fpe-document.
    ELSE.
* No form found
      CLEAR gv_reprint.
    ENDIF.
*
  ENDIF.
*----------------------------------------------------------------------*
* Fill variables
*----------------------------------------------------------------------*
  CLEAR gs_variables.
  gs_variables-var_code = 'REPRINT'.
  gs_variables-value = gv_reprint.
  APPEND gs_variables TO gt_variables.
  CLEAR gs_variables.
*
  gs_variables-var_code = 'KSCHL'.
  gs_variables-value = gs_nast-kschl.
  APPEND gs_variables TO gt_variables.
  CLEAR gs_variables.
*
  gs_variables-var_code = 'SPRAS'.
  gs_variables-value = gs_nast-spras.
  APPEND gs_variables TO gt_variables.
*
*
*----------------------------------------------------------------------*
* Handle output scenario
*----------------------------------------------------------------------*
  IF gv_screen_display NE 'X'.
*
    CALL FUNCTION '/FLM/PDF_PRINT'
      EXPORTING
        im_ftype        = gv_ftype
        im_outputparams = fp_outputparams
        im_toption      = gv_template
        im_fver         = gv_fver
        im_fid          = gv_fid
        im_document     = gv_doc
        im_variables    = gt_variables
      IMPORTING
        ex_pdf          = gv_pdf
        ex_subrc        = <gv_returncode>
        ex_mess         = gs_mess.
*
    CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
      EXPORTING
        msg_arbgb = gs_mess-id
        msg_nr    = gs_mess-number
        msg_ty    = gs_mess-type
        msg_v1    = gs_mess-message_v1
        msg_v2    = gs_mess-message_v2
        msg_v3    = gs_mess-message_v3
        msg_v4    = gs_mess-message_v4
      EXCEPTIONS
        OTHERS    = 0.

    IF <gv_returncode> <> 0.
      RETURN.
    ENDIF.
*
  ELSE.
*----------------------------------------------------------------------*
* Call screen to preview PDF form
*----------------------------------------------------------------------*
    CALL FUNCTION '/FLM/PREVIEW_OUTPUT_PDF'
      EXPORTING
        im_ftype     = gv_ftype
        im_fid       = gv_fid
        im_fver      = gv_fver
        im_toption   = gv_template
        im_document  = gv_doc
        im_variables = gt_variables
*       IM_DNS_SUB   =
*       IM_HTTPS     =
      IMPORTING
        ex_subrc     = <gv_returncode>
        ex_mess      = gs_mess.
*
  ENDIF.
*
ENDFORM.                    " print_data_varo.


*&---------------------------------------------------------------------*
*&      Form  send_data_floe
*&---------------------------------------------------------------------*
FORM send_data_floe.

* Prepare comms data
  PERFORM prepare_comms_data.
  CHECK <gv_returncode> IS INITIAL.
*---------------------------------------------------------------------*
* Fill recipient
* Add additional recipients in recipient user-exit
*---------------------------------------------------------------------*
  gs_rec_email-email = gv_rec_email_addr.
  gs_rec_email-type = '1'.
  APPEND gs_rec_email TO gt_rec_emails.
*----------------------------------------------------------------------*
* Add variables
* Add additional variables in email data user-exit
*----------------------------------------------------------------------*
  CLEAR gs_variables.
  gs_variables-var_code = 'REPRINT'.
  gs_variables-value = gv_reprint.
  APPEND gs_variables TO gt_variables.  "Varo
  APPEND gs_variables TO gt_vars.       "Floe
*
  CLEAR gs_variables.
  gs_variables-var_code = 'KSCHL'.
  gs_variables-value = gs_nast-kschl.
  APPEND gs_variables TO gt_variables.  "Varo
  APPEND gs_variables TO gt_vars.       "Floe
*
  CLEAR gs_variables.
  gs_variables-var_code = 'SPRAS'.
  gs_variables-value = gs_nast-spras.
  APPEND gs_variables TO gt_variables.  "Varo
  APPEND gs_variables TO gt_vars.       "Floe
*
  CLEAR gs_variables.
  gs_variables-var_code = 'EBELN'.
  gs_variables-value = cl_output_po->is_ekko-ebeln.
  APPEND gs_variables TO gt_vars.       "Floe
*
  CLEAR gs_variables.
  gs_variables-var_code = 'BEDAT'.
  gs_variables-value = cl_output_po->is_ekko-bedat.
  APPEND gs_variables TO gt_vars.       "Floe
*
  IF gv_screen_display IS INITIAL.
    CLEAR gs_variables.
    gs_variables-var_code = 'FLOE_SEND'.
    gs_variables-value = 'X'.
    APPEND gs_variables TO gt_vars.       "Floe
  ENDIF.
*---------------------------------------------------------------------*
* Fill PDF form parameters if one is required.
*---------------------------------------------------------------------*
  gv_ftype = tnapr-sform.
  IF gv_ftype IS NOT INITIAL.
* Generate PDF attachment with Varo, form type ftype.
*
* Set up defaults
    gv_ftype    = tnapr-sform.
    gv_template = gs_nast-spras.
    gv_fver     = '00'.
    gv_doc      = gs_nast-objky.
    gv_document = gs_nast-objky.
*----------------------------------------------------------------------*
* Check if this is a re-print and set form id
*----------------------------------------------------------------------*
*
    SELECT * FROM /flm/fpe UP TO 1 ROWS  INTO gs_fpe WHERE ftype    = gv_ftype
                                                     AND   flang = gv_template
                                                     AND   document = gv_doc
                            ORDER BY id DESCENDING.
    ENDSELECT.
*
    IF sy-subrc EQ 0 AND gs_nast-aende IS INITIAL.
* Previous output found
*
      gv_ftype    = gs_fpe-ftype.
      gv_fver     = gs_fpe-fver.
      gv_template = gs_fpe-template.
      gv_fid      = gs_fpe-id.
      gv_doc      = gs_fpe-document.
*      gv_reprint  = 'X'.
    ENDIF.

*----------------------------------------------------------------------*
* Is this a PDF preview?
*----------------------------------------------------------------------*

    IF NOT gv_screen_display IS INITIAL.

      CALL FUNCTION '/FLM/PREVIEW_OUTPUT_PDF'
        EXPORTING
          im_ftype     = gv_ftype
          im_fid       = gv_fid
          im_fver      = gv_fver
          im_toption   = gv_template
          im_document  = gv_doc
          im_variables = gt_variables
*         IM_DNS_SUB   =
*         IM_HTTPS     =
        IMPORTING
          ex_subrc     = <gv_returncode>
          ex_mess      = gs_mess.

      RETURN.
    ELSE.

* Call Varo to generate the PDF
*
      CALL FUNCTION '/FLM/OUTPUT_PDF_PDL_OUT'
        EXPORTING
          im_ftype     = gv_ftype
          im_fid       = gv_fid
          im_fver      = gv_fver
          im_toption   = gv_template
          im_document  = gv_doc
          im_variables = gt_variables
          im_no_print  = 'X'
*         IM_PDLTYPE   =
*         IM_XDCNAME   =
        IMPORTING
          ex_pdf       = gv_pdf
*         EX_PDL       =
*         EX_PAGECOUNT =
*         EX_JOB_ID    =
          ex_subrc     = <gv_returncode>
          ex_mess      = gs_mess.
*
      CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
        EXPORTING
          msg_arbgb = gs_mess-id
          msg_nr    = gs_mess-number
          msg_ty    = gs_mess-type
          msg_v1    = gs_mess-message_v1
          msg_v2    = gs_mess-message_v2
          msg_v3    = gs_mess-message_v3
          msg_v4    = gs_mess-message_v4
        EXCEPTIONS
          OTHERS    = 0.

      IF <gv_returncode> <> 0.
        RETURN.
      ENDIF.
*
* Get new form id etc.
      gv_cms_doc = gs_mess-parameter.
*
      CALL METHOD /flm/core=>split_xdp_cms_doc
        EXPORTING
          im_cms_doc = gv_cms_doc
        IMPORTING
          ex_ccode   = gv_ccode
          ex_ftype   = gv_ftype
          ex_fver    = gv_fver
          ex_flang   = gv_template
          ex_fid     = gv_fid
          ex_fid_var = gv_fidvar.
*
*---------------------------------------------------------------------*
* Add attachment
* Add additional attachments in attachment user-exit
*---------------------------------------------------------------------*
*
      CONCATENATE 'PO_' gv_document '.pdf' INTO gs_attach-att_filename.
      gs_attach-att_description = 'Purchase_Order_output'.
      gs_attach-att_data = gv_pdf.
      APPEND gs_attach TO gt_attach.
    ENDIF.
  ENDIF.
*-------------------------------------------------------------------
* Determine whether this is run as update task
*
  CLEAR: gv_inupd, gv_no_commit.
  CALL METHOD cl_system_transaction_state=>get_in_update_task
    RECEIVING
      in_update_task = gv_inupd.
*
  IF gv_inupd = 1.
    gv_no_commit = 'X'.
  ENDIF.
*
*----------------------------------------------------------------------*
* Call Floe API
*----------------------------------------------------------------------*
  CLEAR gv_ebody.
*
  gv_im_doc = gv_document.
*
  CALL FUNCTION '/FLOE/EMAIL_OUT'
    EXPORTING
      im_etype            = gv_etype
      im_elang            = gs_nast-spras
      im_document         = gv_im_doc
      im_rec_emails       = gt_rec_emails
      im_variables        = gt_vars
      im_send_immediately = 'X'
      im_attachments      = gt_attach
      im_preview          = gv_screen_display
      im_no_commit        = gv_no_commit
    IMPORTING
      ex_subrc            = <gv_returncode>
      ex_ebody            = gv_ebody
      ex_mess             = gt_mess
      ex_rec_emails       = gt_rec_emails
      ex_attachments      = gt_attach
      ex_esubject_long    = gv_esubject_long.

  LOOP AT gt_mess INTO gs_mess.
    CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
      EXPORTING
        msg_arbgb = gs_mess-id
        msg_nr    = gs_mess-number
        msg_ty    = gs_mess-type
        msg_v1    = gs_mess-message_v1
        msg_v2    = gs_mess-message_v2
        msg_v3    = gs_mess-message_v3
        msg_v4    = gs_mess-message_v4
      EXCEPTIONS
        OTHERS    = 0.
  ENDLOOP.
*
* Drop out if API has thrown an error
  IF <gv_returncode> NE 0.
    RETURN.
  ENDIF.
*
*----------------------------------------------------------------------*
* Preview Email if required.
*----------------------------------------------------------------------*
  IF NOT gv_screen_display IS INITIAL.
*
    CALL FUNCTION '/FLOE/EMAIL_VIEWER'
      EXPORTING
        im_preview     = 'X'
*       IM_ETYPE       =
*       IM_EID         =
        im_esubject    = 'FLOE Preview'
        im_ebody       = gv_ebody
        im_rec_emails  = gt_rec_emails
        im_attachments = gt_attach
      IMPORTING
        ex_subrc       = <gv_returncode>.
*
  ENDIF.
*
ENDFORM.                    " send_data_floe

*&---------------------------------------------------------------------*
*&      Form  prepare comms data
*&---------------------------------------------------------------------*
FORM prepare_comms_data.
*
  CALL FUNCTION 'ADDR_GET_NEXT_COMM_TYPE'
    EXPORTING
      strategy           = gs_nast-tcode
      address_number     = gv_add_nr
    IMPORTING
      comm_type          = gv_comm_type
      comm_values        = gv_comm_values
    EXCEPTIONS
      address_not_exist  = 1
      person_not_exist   = 2
      no_comm_type_found = 3
      internal_error     = 4
      parameter_error    = 5
      OTHERS             = 6.
*
  gv_rec_email_addr     = gv_comm_values-adsmtp-smtp_addr.
*
  CHECK gv_rec_email_addr IS NOT INITIAL.
*
ENDFORM.                          " prepare comms data