Mostrando entradas con la etiqueta SAP. Mostrar todas las entradas
Mostrando entradas con la etiqueta SAP. Mostrar todas las entradas

martes, 11 de junio de 2019

Declaraciones Inline en ABAP 7.40 (Inline declarations)

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Inline Declaratinos *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT Zjm_demo_inline. START-OF-SELECTION. " Declarar tabla en un SELECT SELECT * UP TO 1 ROWS FROM mara INTO TABLE @DATA(gdt_mara). " Declarar Work Area READ TABLE gdt_mara INTO DATA(gwa_mara) INDEX 1. " Declarar Field Symbol READ TABLE gdt_mara ASSIGNING FIELD-SYMBOL() INDEX 1. " Declarar una variable con valor inicial. DATA(gs_string) = 'Hola Mundo'. " Declarar variables en SPLIT en cadenas SPLIT gs_string AT space INTO DATA(ls_substring1) DATA(ls_substring2). " Declarar variable de tabla en SPLIT SPLIT gs_string AT space INTO TABLE DATA(gdt_string). " Declarar un parámetro de retorno en métodos. DATA(gi_digits) = cl_abap_math=>get_number_of_digits( '1240' ).

sábado, 4 de noviembre de 2017

BAPI_SHIPMENT_CREATE - VT01N

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Creación de Documento de transporte (Shipment) - VT01N *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_shipment. PARAMETERS: p_tplst TYPE vttk-tplst OBLIGATORY, p_shtyp TYPE vttk-shtyp OBLIGATORY, p_vbeln TYPE lips-vbeln. DATA: gdt_item TYPE STANDARD TABLE OF bapishipmentitem, gdt_dlin TYPE STANDARD TABLE OF bapishipmentheaderdeadline, gdt_ret2 TYPE bapiret2_tab. DATA: gwa_header TYPE bapishipmentheader. FIELD-SYMBOLS: <fs_item> TYPE bapishipmentitem, <fs_dlin> TYPE bapishipmentheaderdeadline, <fs_ret2> TYPE bapiret2. DATA: gv_tknum TYPE vttk-tknum. START-OF-SELECTION. REFRESH: gdt_item, gdt_dlin, gdt_ret2. CLEAR: gwa_header, gv_tknum. "Cabecera del Documento de transporte gwa_header-shipment_type = p_shtyp. gwa_header-trans_plan_pt = p_tplst. "Se inicia en status Planificado "Se puede iniciar en otro status, se deben marcar todos los status previos gwa_header-status_plan = abap_true. "Se completa la fecha y hora de cada status APPEND INITIAL LINE TO gdt_dlin ASSIGNING <fs_dlin>. <fs_dlin>-time_type = 'HDRSTPLDT'. <fs_dlin>-time_stamp_utc = sy-datum && sy-uzeit. <fs_dlin>-time_zone = 'UTC'. *SAP-Note 531207 *TIME_TYPE = HDRSTPLDT --> Date/time of end of planning *TIME_TYPE = HDRSTCIPDT --> PLANNED date/time of check-in *TIME_TYPE = HDRSTCIADT --> ACTUAL date/time of check-in *TIME_TYPE = HDRSTLSPDT --> PLANNED date/time of loading start *TIME_TYPE = HDRSTLSADT --> ACTUAL date/time of loading start *TIME_TYPE = HDRSTLEPDT --> PLANNED date/time of loading end *TIME_TYPE = HDRSTLEADT --> ACTUAL date/time of loading end *TIME_TYPE = HDRSTCPDT --> PLANNED date/time of shipment completion *TIME_TYPE = HDRSTCADT --> ACTUAL date/time of shipment completion *TIME_TYPE = HDRSTSSPDT --> PLANNED date/time of shipment start *TIME_TYPE = HDRSTSSADT --> ACTUAL date/time of shipment start *TIME_TYPE = HDRSTSEPDT --> PLANNED date/time of shipment end *TIME_TYPE = HDRSTSEADT --> ACTUAL date/time of shipment end "Se pueden asignar las entregas, no es obligatorio. IF p_vbeln IS NOT INITIAL. APPEND INITIAL LINE TO gdt_item ASSIGNING . <fs_item>-delivery = p_vbeln. ENDIF. "Se ejecuta la BAPI CALL FUNCTION 'BAPI_SHIPMENT_CREATE' EXPORTING headerdata = gwa_header IMPORTING transport = gv_tknum TABLES headerdeadline = gdt_dlin itemdata = gdt_item return = gdt_ret2. "Si GV_TKNUM tiene un valor, se creó el transporte IF gv_tknum IS INITIAL. READ TABLE gdt_ret2 ASSIGNING <fs_ret2> WITH KEY type = 'E'. IF sy-subrc EQ 0. "Mensaje de la BAPI MESSAGE <fs_ret2>-message TYPE 'S' DISPLAY LIKE 'E'. ENDIF. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. ENDIF.

sábado, 23 de abril de 2016

ALV Factory - Ordenamiento, Totales y Subtotales

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : TEST - ALV FACTORY *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_alv_factory. DATA: gtd_sflight TYPE STANDARD TABLE OF sflight. DATA: gwa_sflight TYPE sflight. DATA: go_alv TYPE REF TO cl_salv_table, go_sorts TYPE REF TO cl_salv_sorts, go_aggrs TYPE REF TO cl_salv_aggregations. * Párametros de selección PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY. SELECT-OPTIONS: s_connid FOR gwa_sflight-connid, s_fldate FOR gwa_sflight-fldate. START-OF-SELECTION. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gtd_sflight WHERE carrid EQ p_carrid AND connid IN s_connid AND fldate IN s_fldate. IF sy-subrc NE 0. "No se encontraron datos para esta ejecución MESSAGE s425(fr) DISPLAY LIKE 'E'. RETURN. ENDIF. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gtd_sflight ). CATCH cx_salv_msg. "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. go_sorts = go_alv->get_sorts( ). TRY. go_sorts->add_sort( columnname = 'FLDATE' "Columna a ordenar position = 1 "1er criterio de ordenamiento sequence = if_salv_c_sort=>sort_up "Orden Ascendente subtotal = abap_true ). "Se utiliza para Subtotales CATCH cx_salv_data_error cx_salv_not_found cx_salv_existing . "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. go_aggrs = go_alv->get_aggregations( ). TRY. go_aggrs->add_aggregation( columnname = 'PAYMENTSUM' "Columna aggregation = if_salv_c_aggregation=>total ). "Totalizar(suma) CATCH cx_salv_data_error cx_salv_not_found cx_salv_existing . "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. * Se activan todas las funciones(botones) estándar del ALV go_alv->get_functions( )->set_all( abap_true ). go_alv->display( ).
Salida del ALV

domingo, 20 de marzo de 2016

Envío de correo con PDF - OO

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Envío de correos OO con PDF *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_email. DATA: gdt_text TYPE soli_tab, gdt_lines TYPE tline_t, gdt_pdf TYPE solix_tab. DATA: gwa_parameters TYPE ssfctrlop, gwa_outoptions TYPE ssfcompop, gwa_outinfo TYPE ssfcrescl. DATA: go_bcs TYPE REF TO cl_bcs, go_document TYPE REF TO cl_document_bcs, go_address TYPE REF TO cl_cam_address_bcs. DATA: gs_formname TYPE tdsfname, gs_subject TYPE so_obj_des, gs_result TYPE os_boolean, gs_funcname TYPE rs38l_fnam, gs_file TYPE xstring, gi_size TYPE i, gs_archivo TYPE so_obj_des. PARAMETERS: p_email TYPE ad_smtpadr. START-OF-SELECTION. gs_formname = 'ZJM_DEMO_EMAIL'. "Se obtiene el nombre del Módulo de Funciones para el SMARTFORM CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = gs_formname IMPORTING fm_name = gs_funcname EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc NE 0. "Error en el nombre del SMARTFORM, revisar RETURN. ENDIF. "Se completan datos para la ejecución del SMARTFORM CLEAR gwa_parameters. "Indicar que se va a recibir el OTF gwa_parameters-getotf = abap_true. "No mostar pantalla de diálogo de impresión gwa_parameters-no_dialog = abap_true. "Sin previsualización gwa_parameters-preview = abap_false. "Se completan datos específicos de la impresión CLEAR gwa_outoptions. gwa_outoptions-tddest = 'LP01'. "Impresora para simulación CALL FUNCTION gs_funcname EXPORTING control_parameters = gwa_parameters output_options = gwa_outoptions user_settings = abap_false "Activar si se usa config. del usuario IMPORTING job_output_info = gwa_outinfo EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc NE 0. "Error al ejecutar el SMARTFORM, revisar RETURN. ENDIF. "Se convierte el OTF obtenido a formato PDF, en GS_FILE CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_filesize = gi_size bin_file = gs_file TABLES otf = gwa_outinfo-otfdata lines = gdt_lines EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 err_bad_otf = 4 OTHERS = 5. IF sy-subrc NE 0. "Error al convertir OTF a PDF RETURN. ENDIF. "La cadena binaria obtenida se convierte en tabla CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = gs_file TABLES binary_tab = gdt_pdf. "Esta tabla se envía por correo TRY. go_bcs = cl_bcs=>create_persistent( ). CATCH cx_send_req_bcs. "Error al crear objeto de correo RETURN. ENDTRY. APPEND 'Se adjunta PDF, descargar archivo' TO gdt_text. gs_subject = 'Asunto del correo con PDF'. TRY. go_document = cl_document_bcs=>create_document( i_type = 'RAW' i_text = gdt_text i_subject = gs_subject ). CATCH cx_document_bcs. "Error al crear contenido del correo RETURN. ENDTRY. gs_archivo = 'ARCHIVO_PDF'. "Nombre del archivo sin extensión "Se adjunta el PDF TRY. go_document->add_attachment( EXPORTING i_attachment_type = 'PDF' i_attachment_subject = gs_archivo i_att_content_hex = gdt_pdf ). CATCH cx_document_bcs. RETURN. ENDTRY. TRY. go_address = cl_cam_address_bcs=>create_internet_address( p_email ). CATCH cx_address_bcs. "Error al crear objeto de destinatario RETURN. ENDTRY. TRY. go_bcs->set_document( go_document ). CATCH cx_send_req_bcs. "Error al asignar el objeto de correo RETURN. ENDTRY. TRY. go_bcs->add_recipient( go_address ). CATCH cx_send_req_bcs. "Error al agregar destinatario a la lista RETURN. ENDTRY. TRY. go_bcs->set_send_immediately( abap_true ). CATCH cx_send_req_bcs. "Error al marcar el correo como envio inmediato RETURN. ENDTRY. TRY. "Enviar con error en pantalla gs_result = go_bcs->send( abap_true ). CATCH cx_send_req_bcs. "Error al setear el envío de correo RETURN. ENDTRY. IF gs_result EQ abap_true. "Se confirma el envío, es necesario. COMMIT WORK. ENDIF.
Este es el SMARTFORM que se enviará por correo:





Resultado del envío de correo:







PDF Adjunto:

domingo, 13 de marzo de 2016

Envío de correo electrónico simple

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Envío de correos *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_email. DATA: gdt_text TYPE isumi_mail_content, gdt_pckls TYPE sopcklsti1_t, gdt_email TYPE somlreci1_t. DATA: gwa_docu TYPE sodocchgi1. FIELD-SYMBOLS: <fs_pckls> TYPE sopcklsti1, <fs_email> TYPE somlreci1. START-OF-SELECTION. APPEND 'Cuerpo del e-mail' TO gdt_text. gwa_docu-obj_name = 'EMAIL'. gwa_docu-obj_descr = 'Asunto del e-mail'. APPEND INITIAL LINE TO gdt_email ASSIGNING <fs_email>. <fs_email>-receiver = 'joseman85@gmail.com'. <fs_email>-rec_type = 'U'. APPEND INITIAL LINE TO gdt_pckls ASSIGNING <fs_pckls>. <fs_pckls>-doc_size = lines( gdt_text ) * 255. <fs_pckls>-body_start = 1. <fs_pckls>-body_num = lines( gdt_text ). <fs_pckls>-doc_type = 'TXT'. <fs_pckls>-obj_name = 'Cualquier nombre'. <fs_pckls>-obj_descr = 'Cualquier descripción'. CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING document_data = gwa_docu commit_work = abap_true TABLES packing_list = gdt_pckls contents_txt = gdt_text receivers = gdt_email EXCEPTIONS too_many_receivers = 1 document_not_sent = 2 document_type_not_exist = 3 operation_no_authorization = 4 parameter_error = 5 x_error = 6 enqueue_error = 7 OTHERS = 8. IF sy-subrc EQ 0. "Correo enviado ELSE. "Correo no enviado ENDIF.
Resultado:



domingo, 6 de marzo de 2016

Fullscreen ALV GRID Factory - Creación de Reporte simple

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : TEST - ALV FACTORY *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_alv_factory. * Declaración de variables DATA: gtd_sflight TYPE STANDARD TABLE OF sflight. DATA: gwa_sflight TYPE sflight. DATA: go_alv TYPE REF TO cl_salv_table. * Párametros de selección PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY. SELECT-OPTIONS: s_connid FOR gwa_sflight-connid, s_fldate FOR gwa_sflight-fldate. START-OF-SELECTION. SELECT * FROM sflight INTO TABLE gtd_sflight WHERE carrid EQ p_carrid AND connid IN s_connid AND fldate IN s_fldate. IF sy-subrc NE 0. "No se encontraron datos para esta ejecución MESSAGE s425(fr) DISPLAY LIKE 'E'. RETURN. ENDIF. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gtd_sflight ). CATCH cx_salv_msg. "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. go_alv->display( ).
Párametros de selección


Salida del ALV

Fullscreen ALV Grid Factory - Botones Estándar del ALV

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : TEST - ALV FACTORY - CL_SALV_FUNCTIONS_LIST *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_alv_factory. * Declaración de variables DATA: gtd_sflight TYPE STANDARD TABLE OF sflight. DATA: gwa_sflight TYPE sflight. DATA: go_alv TYPE REF TO cl_salv_table, go_functions TYPE REF TO cl_salv_functions_list. * Párametros de selección PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY. SELECT-OPTIONS: s_connid FOR gwa_sflight-connid, s_fldate FOR gwa_sflight-fldate. START-OF-SELECTION. SELECT * FROM sflight INTO TABLE gtd_sflight WHERE carrid EQ p_carrid AND connid IN s_connid AND fldate IN s_fldate. IF sy-subrc NE 0. "No se encontraron datos para esta ejecución MESSAGE s425(fr) DISPLAY LIKE 'E'. RETURN. ENDIF. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gtd_sflight ). CATCH cx_salv_msg. "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. go_functions = go_alv->get_functions( ). go_functions->set_sort_asc( abap_true ). "Ordenar ascendentemente go_functions->set_sort_desc( abap_true ). "Ordenar descendentemente ** Se activan todas las funciones * go_functions->set_all( abap_true ). go_alv->display( ).
Salida del ALV



Los métodos para activar las funciones se encuentran en la clase CL_SALV_FUNCTIONS_LIST, algunas funciones solo están disponibles de acuerdo al modo de ejecución( ALV List, ALV Tree, Fullscreen Grid, Dynpro Grid ).

ALV Factory - Color en Celda, Fila o Columna

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : TEST - ALV FACTORY *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_alv_factory. TYPES: BEGIN OF gty_sflight. INCLUDE STRUCTURE sflight. * Columna para controlar el color por celda o fila TYPES: color TYPE lvc_t_scol, END OF gty_sflight. * Declaración de variables DATA: gtd_sflight TYPE STANDARD TABLE OF gty_sflight. DATA: gwa_sflight TYPE sflight, gwa_color TYPE lvc_s_colo. DATA: go_alv TYPE REF TO cl_salv_table, go_columns TYPE REF TO cl_salv_columns_table, go_column TYPE REF TO cl_salv_column_table. * Párametros de selección PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY. FIELD-SYMBOLS: <fs_sflight> TYPE gty_sflight, <fs_color> TYPE lvc_s_scol. SELECT-OPTIONS: s_connid FOR gwa_sflight-connid, s_fldate FOR gwa_sflight-fldate. START-OF-SELECTION. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gtd_sflight WHERE carrid EQ p_carrid AND connid IN s_connid AND fldate IN s_fldate. IF sy-subrc NE 0. "No se encontraron datos para esta ejecución MESSAGE s425(fr) DISPLAY LIKE 'E'. RETURN. ENDIF. LOOP AT gtd_sflight ASSIGNING <fs_sflight>. * Si el campo SEATSOCC es cero, la fila es amarilla IF <fs_sflight>-seatsocc EQ 0. APPEND INITIAL LINE TO <fs_sflight>-color ASSIGNING <fs_color>. * Color de fila: dejar en blanco <fs_color>-fname = space. <fs_color>-color-col = 3. "Amarillo <fs_color>-color-int = 1. <fs_color>-color-inv = 0. ENDIF. * Campo PAYMENTSUM: si es mayor que 100000, verde, sino rojo IF <fs_sflight>-paymentsum GT 100000. APPEND INITIAL LINE TO <fs_sflight>-color ASSIGNING <fs_color>. * Color de celda: llenar columna <fs_color>-fname = 'PAYMENTSUM'. <fs_color>-color-col = 5. "Verde <fs_color>-color-int = 0. <fs_color>-color-inv = 0. ELSE. APPEND INITIAL LINE TO <fs_sflight>-color ASSIGNING <fs_color>. * Color de celda: llenar columna <fs_color>-fname = 'PAYMENTSUM'. <fs_color>-color-col = 6. "Rojo <fs_color>-color-int = 0. <fs_color>-color-inv = 0. ENDIF. ENDLOOP. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gtd_sflight ). CATCH cx_salv_msg. "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. * Se activan todas las funciones go_alv->get_functions( )->set_all( abap_true ). go_columns = go_alv->get_columns( ). * La columna COLOR contiene el color por celda o fila go_columns->set_color_column( 'COLOR' ). * Setea color para una columnar gwa_color-col = 5. "Verde gwa_color-int = 1. gwa_color-inv = 0. * Columna CURRENCY verde go_column ?= go_columns->get_column( 'CURRENCY' ). go_column->set_color( gwa_color ). go_alv->display( ).
Salida del ALV