En la transacción SE24 podemos visualizar sus métodos y atributos:
CL_GOS_DOCUMENT_SERVICE |
Esta clase tiene muchos métodos para crear, modificar, borrar y visualizar documentos anexos a un objeto de negocio.
Para los ejemplos con esta clase, seguiremos utilizando el anexo de archivos a documentos contables en SAP pero recordemos que es posible anexar archivos a un gran numero de objetos de negocio en SAP ( materiales, facuras, pedidos de compra, etc... ).
CREAR ANEXO
Seleccionado el documento contable, se abre una ventana del explorador de archivos, seleccionamos el archivo a anexar, y en la FB03 comprobamos que se ha anexado correctamente
Crear Anexo |
VISUALIZAR ANEXOS
Primero recuperamos los anexos del documento contable en la tabla SRGBTBREL, pero aquí solo esta el enlace interno al anexo, para recuperar el nombre del anexo utilizar la bapi SO_OBJECT_GET_CONTENT
Visualizar Anexo |
BORRAR ANEXOS
Primero recuperamos los anexos del documento contable en la tabla SRGBTBREL, pero aquí solo esta el enlace interno al anexo, para recuperar el nombre del anexo utilizar la bapi SO_OBJECT_GET_CONTENT selecionamos el anexo y comprobamos que se ha borrado en al FB03
Borra Anexo |
CODIGO ABAP
Y llegamos lo importante, aqui esta el codigo ABAP que permite crear, visualizar y borrar anexos.
Teneis también el código ABAP disponible en el repositorio github del blog
REPORT ZZ_PRUEBA_ANEXOS_GOS.
*&---------------------------------------------------------------------* *& TYPE-POOLS *&---------------------------------------------------------------------* TYPE-POOLS: slis. *&---------------------------------------------------------------------* *& Tablas *&---------------------------------------------------------------------* TABLES: BSEG. *&---------------------------------------------------------------------* *& Variables Glovales *&---------------------------------------------------------------------* DATA: obj_gos TYPE REF TO cl_gos_document_service. DATA: wa_borident TYPE borident. DATA: wa_objkey TYPE borident-objkey. *&---------------------------------------------------------------------* *& Parámetros de Selección *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK BLOCK01 WITH FRAME TITLE TEXT-S01. PARAMETERS: P_BUKRS TYPE BUKRS OBLIGATORY, P_BELNR TYPE BELNR_D OBLIGATORY, P_GJAHR TYPE GJAHR OBLIGATORY. SELECTION-SCREEN END OF BLOCK BLOCK01. SELECTION-SCREEN BEGIN OF BLOCK BLOCK02 WITH FRAME TITLE TEXT-S01. PARAMETERS: P_crear type c RADIOBUTTON GROUP GR1, P_visua type c RADIOBUTTON GROUP GR1, P_borra type c RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK BLOCK02. *&---------------------------------------------------------------------* *& Validaciones de Pantalla *&---------------------------------------------------------------------* AT SELECTION-SCREEN. *&---------------------------------------------------------------------* *& INITIALIZATION *&---------------------------------------------------------------------* INITIALIZATION. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. SELECT SINGLE * FROM BSEG WHERE BUKRS EQ P_BUKRS AND BELNR EQ P_BELNR AND GJAHR EQ P_GJAHR. IF ( SY-SUBRC <> 0 ). MESSAGE 'No existe el documento' TYPE 'S' DISPLAY LIKE 'E'. ELSE. CREATE OBJECT obj_gos. CONCATENATE P_BUKRS P_BELNR P_GJAHR INTO wa_borident-objkey. wa_borident-objtype = 'BKPF'. IF P_crear IS NOT INITIAL. CALL METHOD obj_gos->create_attachment EXPORTING is_object = wa_borident IMPORTING ep_attachment = wa_borident-objkey. COMMIT WORK. ELSEIF p_visua IS NOT INITIAL. PERFORM SELECT_ATTA USING wa_borident CHANGING wa_objkey. IF ( wa_objkey IS NOT INITIAL ). CALL METHOD obj_gos->display_attachment EXPORTING ip_attachment = wa_objkey. ENDIF. ELSEIF P_Borra IS NOT INITIAL. PERFORM SELECT_ATTA USING wa_borident CHANGING wa_objkey. IF ( wa_objkey IS NOT INITIAL ). CALL METHOD obj_gos->delete_attachment EXPORTING ip_attachment = wa_objkey. COMMIT WORK. ENDIF. ENDIF. ENDIF. *&---------------------------------------------------------------------* *& Form SELECT_ATTA *&---------------------------------------------------------------------* * Muestra un Popu para que el cliente seleccione el adjunto *----------------------------------------------------------------------* FORM SELECT_ATTA USING pi_borident TYPE borident CHANGING po_objkey TYPE borident-objkey. TYPES: BEGIN OF type_anexos, box(1) TYPE C, instid_b TYPE srgbtbrel-instid_b, name(15) TYPE C, END OF type_anexos. DATA: tl_anexos TYPE STANDARD TABLE OF type_anexos, tl_head TYPE STANDARD TABLE OF SOLI, tl_cond TYPE STANDARD TABLE OF SOLI, i_fieldcat TYPE SLIS_T_FIELDCAT_ALV,
l_program TYPE sY-REPID. DATA: Wl_SOODK TYPE SOODK, w_fieldcat TYPE slis_fieldcat_alv. FIELD-SYMBOLS: <fanexos>TYPE type_anexos, <fsoli> TYPE SOLI. CLEAR: po_objkey. REFRESH: TL_anexos. SELECT instid_b INTO CORRESPONDING FIELDS OF TABLE TL_anexos FROM srgbtbrel where instid_a = pi_borident-objkey and typeid_a = pi_borident-objtype and reltype = 'ATTA'. LOOP AT TL_anexos ASSIGNING <fanexos>. CLEAR Wl_SOODK. Wl_SOODK-OBJTP = <fanexos>-instid_b+17(3). Wl_SOODK-OBJYR = <fanexos>-instid_b+20(2). Wl_SOODK-OBJNO = <fanexos>-instid_b+22. CALL FUNCTION 'SO_OBJECT_GET_CONTENT' EXPORTING object_id = Wl_SOODK tables OBJHEAD = tl_head objcont = tl_cond EXCEPTIONS ARCHIVE_ERROR = 1 OBJECT_NOT_EXIST = 2 OTHERS = 3 . IF sy-subrc EQ 0. READ TABLE tl_head INDEX 1 ASSIGNING <FSOLI>. IF ( SY-SUBRC EQ 0 ). <fanexos>-NAME = <FSOLI>-LINE+13. ENDIF. ENDIF. ENDLOOP. l_program = sy-repid. w_fieldcat-fieldname = 'NAME'. w_fieldcat-tabname = 'TL_ANEXOS'. w_fieldcat-seltext_m = 'Anexo'. APPEND w_fieldcat TO i_fieldcat. call function 'REUSE_ALV_POPUP_TO_SELECT' exporting i_title = TEXT-T01 i_tabname = 'TL_ANEXOS' i_selection = 'X' i_zebra = 'X' i_checkbox_fieldname = 'BOX' it_fieldcat = i_fieldcat i_callback_program = l_program tables t_outtab = TL_ANEXOS exceptions program_error = 1 others = 2. IF ( Sy-SUBRC EQ 0 ). READ TABLE TL_ANEXOS WITH KEY BOX = 'X' ASSIGNING <fanexos>. IF ( SY-SUBRC EQ 0 ). po_objkey = <fanexos>-instid_b. ENDIF. ENDIF. endform. " SELECT_ATTA
Carga masiva de anexos en SAP
Entradas Anteriores:
Hey muchas gracias David, varios dias retrasado, y este código me fue de mucha utilidad
ResponderEliminarGran programa y mejor persona! De gran utilidad crack.
ResponderEliminarNo elimina y no tengo idea de porque
ResponderEliminarya vi porque faltaba esta exportacion is_object = wa_borident
ResponderEliminarTambién corregido en el post, disculpa cuando pego el código, aunque lo reviso, el editor "corrige" su formato.
EliminarMuchas gracias, me sirvió mucho
ResponderEliminarMuchas gracias, sabras alguna forma de ver en el sistema quien o que borro los anexos de los documentos FI y MM.
ResponderEliminarBuenas tardes , usted tiene algunos ejemplos de cómo funciona en BSP
ResponderEliminarHola David muchas gracias por compartir tu conocimiento. Llegué aquí gracias a que este tema de adjuntar archivos se hace mediante GOS. He copilado tu código y si me sube y visualiza el documento adjuntado, pero al ir a la FB03 y consultar por el mismo número de documento no me aparece en la lista de archivos adjuntos. ¿Que me podría estar faltando?
ResponderEliminarHola de nuevo ya logré identificar el error y hacer que me muestre en la FB03, era porque en en la FB03 apunta a la dirección ....muchas gracias por el aporte. A diferencia de tu programa el cual elige un archivo existente yo tengo que generar un documento .XML y guardarlo en la FB03
ResponderEliminarHola David Rueda, en mi caso estoy adjutando un XML. Todo bien con la creación del archivo en la FB03 pero al momento de descargar el archivo y visualizarlo trae caracteres como es el NULL. ¿Cómo puedo solucionar este problema ya que se trata de data binaria? He estado probando con el REPLACE pero no funciona. Encontré este link https://blogs.sap.com/2013/08/26/to-remove-spacesnulls-from-binary-data-of-an-internal-tablevariable-using-abap/comment-page-1/#comment-396366 el cual trata el problema pero no me funcionó. Espero que me puedas responder. Gracias.
ResponderEliminarPrueba la instruccion TRANSLATE Y REPLACE
EliminarMira el codigo de la bapi SF_SPECIALCHAR_DELETE
Hola, estoy intentando hacer un script en el cual ademas de crear una solicitud de pago (transaccion YSOLPA04), en esa solicitud de pago hay q crear un anexo. El pro lema que tengo es que potr estar grabando el script se desactiva el explorador al crear el anexo. Aunque si me da opcion a escribir la ruta y el nombre del fichero, siempre tengo un error de archivo no encontrado. Por favor, me podeis ayudar?. Gracias.
ResponderEliminarTengo la transacción FB03 para consultar documentos financieros (para este caso son obligaciones CXP), estos documentos tienen archivos PDF asociados los cuales se pueden ver por lista de anexo (GOS), la situación es que siendo la FB03 una transacción de consulta permite adicionar, modificar o borrar documentos anexo a la obligación y la idea es que solo los pueda visualizar ¿ como puedo hacer para que en esta transacción los botones de crear, modificar y borrar lista de anexo queden inactivos?
ResponderEliminarEstuve probando con la creación de un rol solo con la transacción FB03 y un usuario que solo tiene este rol, trate de restringir la operación por el objeto S_GOS_ATT (que tiene como actividades modificar y borrar) pero no controla nada. También leí que el servicio GOS tiene relación con permisos de SAPOFFICE, incluso la nota 1293080 mencionan que tiene relación con este control pero no encontré nada
Si alguien ha trabajo el tema, le agradezco la colaboración
Buenas, al tratar de crear el anexo, selecciono el documento (pdf) pero me sale una ventana tipo de seguridad, preguntandome sí deseo o no permitir el acceso, al darle en permitir me dice que no puede crear el anexo ¿Cómo se podría solucionar?
ResponderEliminarEl popup se cambia en la configuración del SAPGUI.
EliminarEn la ventana del SAPGUI, pulsa en la esquina superior izquierda -> Opciones
Vas al menú SEGURIDAD -> Abrir configuración de seguridad -> Cambias de preguntar a permitir.
La segunda parte, el error al crear el anexo, tendrás que analizar el error que te de.
Un saludo
Hola David !! Muchas Gracias !!!
ResponderEliminarNecesito adjuntar como anexo una imagen (fotografía que se toma en campo) a una Orden de Lectura de ISU, y después poder visualizarla desde la misma.
Hay forma de adjuntar a ese objeto ? (Orden de Lectura Periodica)
Muchas Gracias
Hola! hay algun reporte que pueda ejecutar para ver los anexos por documento? creo que no, pero por si conoces alguno... ando buscandolo...
ResponderEliminarmuchas gracias!
Muchas gracias David, tengo que realizar la carga de adjuntos a los documentos en un report, el método CREATE_ATTACHMENT y CREATE, ejecutan el popup, ¿ Sabes como ejecutarlo de manera que solo incluya la ruta del fichero que quiero adjuntar? Muchas gracias de nuevo.
ResponderEliminar