Adjuntar anexo en factura

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • sponsor
    Senior Member
    • may
    • 108

    #1

    Adjuntar anexo en factura

    Buenas, tengo el siguiente método para adjuntar un anexo en un documento (es una ZZ).

    METHOD adjuntar_annexos_gefact.
    DATA: l_subrc TYPE sysubrc,

    l_objkey TYPE swo_typeid,
    l_id_extern TYPE zgf_gefact_id,

    lcl_efactura TYPE REF TO zgf_cl_ws_efactura,

    lr_message TYPE bapireturn1,
    lr_posicion TYPE zfit_058,

    lr_id_annex TYPE zgf_r_annex_ws,
    li_id_annex TYPE zgf_t_annex_ws,
    lr_folder_id TYPE sofdk,
    l_obj_data TYPE sood1,
    l_obj_id TYPE soodk,
    lr_document_id TYPE sofmk,
    li_objcont TYPE STANDARD TABLE OF soli,
    li_objhead TYPE STANDARD TABLE OF soli,

    lr_boridcomment TYPE borident,
    lr_boridproject TYPE borident,

    lo_obj_sofm_key TYPE sofmk,
    * lo_obj_sofm TYPE swc0_object,
    lo_obj_sofm TYPE swc_object,
    l_index TYPE n,
    l_id_annex_est TYPE zgf_gefact_id.

    * Creem l'objecte per la clase de missatges
    IF ps_mensajes IS NOT BOUND.
    CREATE OBJECT ps_mensajes.
    ENDIF.

    CALL METHOD me->get_id_gefact
    IMPORTING
    ps_id_gefact_extern = l_id_extern.

    LOOP AT me->posicions INTO lr_posicion
    WHERE estat_reg = zfi_cl_preregistre_fac=>estat_pos_conformada.
    CONCATENATE lr_posicion-bukrs_zz
    lr_posicion-belnr_zz
    lr_posicion-gjahr_zz
    INTO l_objkey.

    CREATE OBJECT lcl_efactura.

    CALL METHOD lcl_efactura->ws_obtenir_annex_pendents
    EXPORTING
    * pe_centre_receptor =
    pe_id_gefact = l_id_extern
    IMPORTING
    ps_msg = lr_message
    ts_annexos = li_id_annex[].

    IF lr_message IS INITIAL.

    swc_container container.
    * swc0_create_container container.

    CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
    region = 'B'
    IMPORTING
    folder_id = lr_folder_id
    EXCEPTIONS
    OTHERS = 1.

    LOOP AT li_id_annex INTO lr_id_annex.
    CLEAR l_obj_data.
    l_index = sy-index.

    CALL FUNCTION 'ZGF_F_WF_GENERAR_ANNEX'
    EXPORTING
    pe_id_annex = lr_id_annex-id_annex
    TABLES
    ts_soli = li_objcont.

    IF sy-subrc = 0.
    CONCATENATE 'annex'
    l_index
    l_objkey
    INTO l_obj_data-objdes SEPARATED BY '_'.

    l_obj_data-file_ext = lr_id_annex-extensio.
    l_obj_data-objnam = 'SOFM'.
    l_obj_data-objla = sy-langu.
    l_obj_data-objlen = LINES( li_objcont ) * 255.

    CALL FUNCTION 'SO_OBJECT_INSERT'
    EXPORTING
    folder_id = lr_folder_id
    object_type = 'EXT'
    object_hd_change = l_obj_data
    IMPORTING
    object_id = l_obj_id
    TABLES
    objhead = li_objhead
    objcont = li_objcont
    EXCEPTIONS
    active_user_not_exist = 1
    communication_failure = 2
    component_not_available = 3
    dl_name_exist = 4
    folder_not_exist = 5
    folder_no_authorization = 6
    object_type_not_exist = 7
    operation_no_authorization = 8
    owner_not_exist = 9
    parameter_error = 10
    substitute_not_active = 11
    substitute_not_defined = 12
    system_failure = 13
    x_error = 14
    OTHERS = 15.

    IF sy-subrc = 0.
    COMMIT WORK AND WAIT.

    IF sy-subrc = 0.
    lr_document_id-foltp = lr_folder_id-foltp.
    lr_document_id-folyr = lr_folder_id-folyr.
    lr_document_id-folno = lr_folder_id-folno.
    lr_document_id-doctp = l_obj_id-objtp.
    lr_document_id-docyr = l_obj_id-objyr.
    lr_document_id-docno = l_obj_id-objno.
    ENDIF.

    * swc0_create_object lo_obj_sofm 'SOFM' lr_document_id.
    swc_create_object lo_obj_sofm 'SOFM' lr_document_id.

    IF sy-subrc = 0.
    * swc0_get_object_key lo_obj_sofm lo_obj_sofm_key.
    swc_get_object_key lo_obj_sofm lo_obj_sofm_key.

    lr_boridcomment-objkey = lo_obj_sofm_key.
    lr_boridcomment-objtype = 'MESSAGE'.

    MOVE zfi_cl_preregistre_fac=>gefact_adjunt_objtyp TO lr_boridproject.

    lr_boridproject-objtype = zfi_cl_preregistre_fac=>gefact_adjunt_objtyp.

    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
    EXPORTING
    obj_rolea = lr_boridproject
    obj_roleb = lr_boridcomment
    relationtype = 'ATTA'
    EXCEPTIONS
    no_model = 1
    internal_error = 2
    unknown = 3
    OTHERS = 4.

    IF sy-subrc = 0.

    COMMIT WORK AND WAIT.

    ELSE.
    * No s'han pogut annexar els fitxers.
    ENDIF.
    ELSE.
    * No s'han pogut annexar els fitxers.
    ENDIF.
    ELSE.
    * No s'han pogut annexar els fitxers.
    ENDIF.
    ELSE.
    ps_subrc = 1.

    CALL METHOD ps_mensajes->insertar_mensaje
    EXPORTING
    pe_tipo_msg = zfg_cl_mensajes=>tipo_mensaje_sap
    pe_type = lr_message-type
    pe_id = lr_message-id
    pe_number = lr_message-number
    pe_message_v1 = lr_message-message_v1
    pe_message_v2 = lr_message-message_v2
    pe_message_v3 = lr_message-message_v3
    pe_message_v4 = lr_message-message_v4.
    ENDIF.

    ENDLOOP.
    ELSE.
    ps_subrc = 1.

    CALL METHOD ps_mensajes->insertar_mensaje
    EXPORTING
    pe_tipo_msg = zfg_cl_mensajes=>tipo_mensaje_sap
    pe_type = lr_message-type
    pe_id = lr_message-id
    pe_number = lr_message-number
    pe_message_v1 = lr_message-message_v1
    pe_message_v2 = lr_message-message_v2
    pe_message_v3 = lr_message-message_v3
    pe_message_v4 = lr_message-message_v4.
    ENDIF.
    ENDLOOP.
    ENDMETHOD.

    Este código funciona perfectamente en una función, pero necesitábamos pasarlo a un método.

    La única diferencia respecto a la funcion es el siguiente include:
    INCLUDE <cntn01>. Este include no esta permitido en un método y en internet encontré estos dos para suplirlo, <CNTN02> and <CNTN03>.

    Aun así no me funciona, me recupera el anexo y parece que lo inserta pero luego no hace nada.

    Alguna sugerencia?
Trabajando...