Print carrier labels

With the document output mode 'RETURN', the carrier labels are provided as a byte stream. One can sent this byte stream to a printer from within SAP.

Please note: Responsibility for printers, their settings and proper handling lies is within your IT operation. AEB just provides the label stream in the appropriate format for the printer. Examples provided here just describe one possible approach, technical availabilities may vary dependend on the infrastructure of your SAP system.

There are different options to print the carrier labels, check this document for an overview: https://rz3.aeb.de/docudata/other/carrier-connect/printing-with-carrier-connect/en-US/index.html

This example outlines the printing when executing an output type for an outbound delivery:

*&---------------------------------------------------------------------*
*& Report ZAEB_CCO_DLV_MSG
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zaeb_cco_dlv_msg.

TABLES: nast.

DATA: ls_likp            TYPE likp,
      lt_lips            TYPE /aeb/01_lipss,
      lt_vekp            TYPE /aeb/01_vekps,
      ls_vekp            TYPE vekp,
      lt_vbpa            TYPE /aeb/01_vbpas,
      lt_vepo            TYPE /aeb/01_vepos,
      lt_vepo_total      TYPE /aeb/01_vepos,
      lt_venums          TYPE hum_venum_t,
      ls_venum           TYPE hum_venum,
      lt_objects         TYPE hum_object_t,
      ls_object          TYPE hum_object,
      lv_has_error       TYPE /aeb/pa_pb_has_error,
      lv_has_warning     TYPE  /aeb/pa_pb_has_warning,
      lt_messages        TYPE  string,
      lt_package_results TYPE /aeb/pa_pb_dl_pkg_pr_dos
      .

FIELD-SYMBOLS: <ls_package_result> TYPE /aeb/pa_pb_dl_pkg_pr_do,
               <ls_document>       TYPE /aeb/pa_pb_dl_doc_do
               .

START-OF-SELECTION.

FORM export_synchron USING returncode LIKE sy-subrc us_screen TYPE c. "#EC *

  "nast-objky
  SELECT SINGLE * FROM likp WHERE vbeln = @nast-objky INTO @DATA(ls_likp).
  SELECT * FROM lips WHERE vbeln = @nast-objky INTO TABLE @lt_lips.

  ls_object-object = '01'.
  ls_object-objkey = nast-objky .

  APPEND ls_object TO lt_objects.

  CALL FUNCTION 'HU_PER_DOCUMENT_READ'
    EXPORTING
      it_objects = lt_objects
    IMPORTING
      et_highest = lt_venums
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  IF sy-subrc = 0.
    LOOP AT lt_venums INTO ls_venum.
      SELECT SINGLE * FROM vekp WHERE venum = @ls_venum-venum INTO @ls_vekp.
      APPEND ls_vekp TO lt_vekp.
      SELECT * FROM vepo WHERE venum = @ls_venum-venum INTO TABLE @lt_vepo.
      APPEND LINES OF lt_vepo TO lt_vepo_total.
    ENDLOOP.
  ENDIF.

  SELECT * FROM vbpa WHERE vbeln = @nast-objky  INTO TABLE @lt_vbpa.

  CALL FUNCTION '/AEB/PA_PB_DLV_CR_PKGS_W_PRINT'
    EXPORTING
      im_likp             = ls_likp
      im_vekps            = lt_vekp
      im_lipss            = lt_lips
      im_vbpas            = lt_vbpa
      im_is_shp_to_create = 'X'
      im_vepos            = lt_vepo
    IMPORTING
      ex_has_error        = lv_has_error
      ex_has_warning      = lv_has_warning
      ex_messages         = lt_messages
      ex_package_results  = lt_package_results.

  IF lv_has_error = 'X'.
    returncode = 4.
    RETURN.
  ENDIF.

  LOOP AT lt_package_results ASSIGNING <ls_package_result>.
    LOOP AT <ls_package_result>-documents ASSIGNING <ls_document>.
      PERFORM print_single_label USING ls_likp-vbeln <ls_document>.
    ENDLOOP.
  ENDLOOP.

  returncode = sy-subrc.

ENDFORM.

FORM print_single_label USING iv_vbeln TYPE vbeln_vl
                            is_doc   TYPE /aeb/pa_pb_dl_doc_do.

  DATA: lv_spool_handle TYPE syst_tabix,
        lv_spool        TYPE rspoid,
        lv_xstring      TYPE xstring,
        lv_filesize     TYPE i,
        lt_raw_buffer   TYPE solix_tab,
        lv_title        TYPE rspotitle,
        lv_name         TYPE rspo0name,
        lv_suffix1      TYPE rspo1name,
        lv_suffix2      TYPE rspo2name,
        lv_ldest        TYPE ldest.

  " Prepare data for output of the labels
  lv_xstring    = is_doc-content.
  lt_raw_buffer = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_xstring ).
  lv_filesize   = xstrlen( lv_xstring ).

  " Spool-Settings
  CONCATENATE 'AEB-Label' iv_vbeln INTO lv_title SEPARATED BY space.
  lv_name    = 'AEB'.
  lv_suffix2 = iv_vbeln.
*  lv_ldest   = p_ldest.  " Proposal value when running as report

  " Determination Printer based on AEB-Parameter ID
*  PERFORM determine_ldest CHANGING lv_ldest.

  IF lv_ldest IS INITIAL.
    " No printer determined for output based in AEB-parameter!
*    MESSAGE e009 INTO gv_mess.
*    PERFORM protocol_update.
    RETURN.
  ENDIF.

  " Create Spool Request
  CALL FUNCTION 'RSPO_SR_OPEN'
    EXPORTING
      dest             = lv_ldest
      layout           = 'G_RAW'
      doctype          = 'BIN'
      titleline        = lv_title
      suffix1          = lv_suffix1
      suffix2          = lv_suffix2
      name             = lv_name
      immediate_print  = abap_true       " Direct Print
    IMPORTING
      handle           = lv_spool_handle
      spoolid          = lv_spool
    EXCEPTIONS
      device_missing   = 1
      name_twice       = 2
      no_such_device   = 3
      operation_failed = 4
      OTHERS           = 5.

  IF sy-subrc NE 0.
*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO gv_mess.
*    PERFORM protocol_update.
    RETURN.
  ELSE.
    " Spool-Request &1 has been created!
*    MESSAGE s008 WITH lv_spool INTO gv_mess.
*    PERFORM protocol_update.
  ENDIF.

  " Add the binary content into Spool Request
  CALL FUNCTION 'RSPO_SR_TABLE_WRITE_BINARY'
    EXPORTING
      handle           = lv_spool_handle
      total            = lv_filesize
    TABLES
      lines            = lt_raw_buffer
    EXCEPTIONS
      handle_not_valid = 1.

  IF sy-subrc NE 0.
*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO gv_mess.
*    PERFORM protocol_update.
    RETURN.
  ENDIF.

  " Close Spool Request
  CALL FUNCTION 'RSPO_SR_CLOSE'
    EXPORTING
      handle           = lv_spool_handle
    EXCEPTIONS
      handle_not_valid = 1
      operation_failed = 2
      OTHERS           = 3.

  IF sy-subrc NE 0.
*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO gv_mess.
*    PERFORM protocol_update.
    RETURN.
  ENDIF.

ENDFORM.