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:

Envío de correo OO con HTML

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Envío de correos OO con HTML *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_email. DATA: gdt_html TYPE soli_tab. 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_subject TYPE so_obj_des, gs_result TYPE os_boolean. PARAMETERS: p_email TYPE ad_smtpadr. START-OF-SELECTION. TRY. go_bcs = cl_bcs=>create_persistent( ). CATCH cx_send_req_bcs. "Error al crear objeto de correo RETURN. ENDTRY. APPEND '<HTML>' TO gdt_html. APPEND '<H1>Título 1</H1>' TO gdt_html. APPEND '<H2>Título 2</H2>' TO gdt_html. APPEND '<H3>Título 3</H3>' TO gdt_html. APPEND '<TABLE BORDER = "1">' TO gdt_html. APPEND '<TR>' TO gdt_html. APPEND '<TD><B>Campo 1</B></TD>' TO gdt_html. APPEND '<TD><B>Campo 2</B></TD>' TO gdt_html. APPEND '</TR>' TO gdt_html. APPEND '<TR>' TO gdt_html. APPEND '<TD>Valor 1</TD>' TO gdt_html. APPEND '<TD>Valor 2</TD>' TO gdt_html. APPEND '</TR>' TO gdt_html. APPEND '</TABLE>' TO gdt_html. APPEND '</HTML>' TO gdt_html. gs_subject = 'Asunto del correo HTML'. TRY. go_document = cl_document_bcs=>create_document( i_type = 'HTM' i_text = gdt_html i_subject = gs_subject ). CATCH cx_document_bcs. "Error al crear contenido del correo 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.
Resultado:





Envío de correos

Lista de programas para enviar correos


Envío de correo simple

Envío de correo - Orientado a Objetos

Envío de correo con HTML - OO

Envío de correo con PDF adjunto - OO

Envío de correos OO

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Envío de correos OO *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_email. DATA: gdt_text TYPE soli_tab. 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_subject TYPE so_obj_des, gs_result TYPE os_boolean. PARAMETERS: p_email TYPE ad_smtpadr. START-OF-SELECTION. TRY. go_bcs = cl_bcs=>create_persistent( ). CATCH cx_send_req_bcs. "Error al crear objeto de correo RETURN. ENDTRY. APPEND 'Ese es el cuerpo del correo' TO gdt_text. gs_subject = 'Asunto del correo'. 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. 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.
Resultado:





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:



sábado, 12 de marzo de 2016

Reportes ALV

Lista de programas para reportes ALV:


Fullscreen ALV Grid - Factory - Reporte simple

ALV - Factory - Botones estándar

ALV - Factory - Color en celdas, filas y columnas

Funciones útiles - Números

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Funciones útiles para números *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_funciones. START-OF-SELECTION. DATA: lwa_words TYPE spell. DATA: ls_docum TYPE char10 VALUE '12453', li_int TYPE i VALUE -35626, ls_int TYPE char10, li_numer TYPE i, li_denom TYPE i. *Completa un texto con números con ceros a la izquierda. WRITE: / 'El valor', ls_docum, 'después de completar con ceros a la izquierda:'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_docum IMPORTING output = ls_docum. WRITE ls_docum. *Elimina los ceros a la izquierda de una cadena con números. WRITE: / 'El valor', ls_docum, 'después de quitar los ceros a la izquierda:'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = ls_docum IMPORTING output = ls_docum. WRITE ls_docum. ls_int = li_int. *Coloca el signo a la izquierda de un número negativo WRITE: / 'El número', ls_int, 'con el signo al inicio es:'. CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' CHANGING value = ls_int. WRITE: ls_int. *Obtiene un número en letras y sus dígitos individualmente CALL FUNCTION 'SPELL_AMOUNT' EXPORTING amount = 1135414 IMPORTING in_words = lwa_words EXCEPTIONS not_found = 1 too_large = 2 OTHERS = 3. IF sy-subrc EQ 0. WRITE: / '1135414 en palabras es:', lwa_words-word. ENDIF. *Convierte un número en fracción ( numerador y denominador ) CALL FUNCTION 'CONVERT_TO_FRACTION' EXPORTING input = '1245.56' IMPORTING nominator = li_numer denominator = li_denom EXCEPTIONS conversion_overflow = 1 OTHERS = 2. IF sy-subrc EQ 0. WRITE: / '1245.56 =', li_numer, '/', li_denom. ENDIF.
Resultado

Funciones Útiles - Unidades de Medida

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Funciones útiles para unidades de medida *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_funciones. START-OF-SELECTION. DATA: ls_matnr TYPE matnr VALUE '030000009', lp_menge TYPE menge_d. *Convierte unidades para un material específico CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' EXPORTING i_matnr = ls_matnr i_in_me = 'UNI' i_out_me = 'KG' i_menge = 10 IMPORTING e_menge = lp_menge EXCEPTIONS error_in_application = 1 error = 2 OTHERS = 3. IF sy-subrc EQ 0. WRITE: / '10 Unidades de', ls_matnr, 'equivalen a', lp_menge, 'KG'. ENDIF. *Convierte unidades del mismo tipo( Masa, Tiempo, Longitud, etc. ) CALL FUNCTION 'UNIT_CONVERSION_SIMPLE' EXPORTING input = lp_menge unit_in = 'KG' unit_out = 'G' IMPORTING output = lp_menge EXCEPTIONS conversion_not_found = 1 division_by_zero = 2 input_invalid = 3 output_invalid = 4 overflow = 5 type_invalid = 6 units_missing = 7 unit_in_not_found = 8 unit_out_not_found = 9 OTHERS = 10. IF sy-subrc EQ 0. WRITE: / '100 KG equivalen a', lp_menge, 'G'. ENDIF.
Resultado

Funciones útiles

Lista de programas con Módulos de función útiles.


Funciones Útiles - Fechas y Hora

Funciones Útiles - Unidades de Medida

Funciones Útiles - Números



* Son ejemplos básicos, para necesidades más complejas, pedir información.

Funciones útiles - Fechas y Hora

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : Funciones útiles para fechas *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_funciones. DATA: ld_datum TYPE sy-datum, ls_dat08 TYPE char8, ls_dat10 TYPE char10, lt_uzeit TYPE sy-uzeit, ls_dia TYPE ish_daytxt, ls_mes TYPE fcltx. START-OF-SELECTION. * Suma días, meses y años a una fecha. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING date = sy-datum days = 3 months = 1 signum = '+' years = 0 IMPORTING calc_date = ld_datum. WRITE: / 'Hoy es', sy-datum, 'dentro de 1 mes y 3 días será', ld_datum. * Resta días, meses y años a una fecha. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING date = sy-datum days = 3 months = 1 signum = '-' years = 0 IMPORTING calc_date = ld_datum. WRITE: / 'Hoy es', sy-datum, 'hace 1 mes y 3 días fue', ld_datum. * Se cualquier cantidad de tiempo a una fecha y hora CALL FUNCTION 'END_TIME_DETERMINE' EXPORTING duration = 456 *Minutos = MIN, Segundos = 'S', Horas = STD, etc. unit = 'MIN' IMPORTING end_date = ld_datum end_time = lt_uzeit CHANGING start_date = sy-datum start_time = sy-uzeit EXCEPTIONS factory_calendar_not_found = 1 date_out_of_calendar_range = 2 date_not_valid = 3 unit_conversion_error = 4 si_unit_missing = 5 parameters_no_valid = 6 OTHERS = 7. IF sy-subrc EQ 0. WRITE: / 'Hoy es', sy-datum, 'hora', sy-uzeit, ', dentro de 456 minutos será', ld_datum, 'hora', lt_uzeit. ENDIF. *Convierte una fecha de formato externo a interno CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL' EXPORTING date_external = '10.10.2016' IMPORTING date_internal = ls_dat08 EXCEPTIONS date_external_is_invalid = 1 OTHERS = 2. IF sy-subrc EQ 0. WRITE: / 'La fecha 10.10.2016 se representa internamente en SAP como', ls_dat08. ENDIF. *Convierte una fecha de formato interno a externo CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL' EXPORTING date_internal = '20151009' IMPORTING date_external = ls_dat10 EXCEPTIONS date_internal_is_invalid = 1 OTHERS = 2. IF sy-subrc EQ 0. WRITE: / 'La fecha interna 20151009 se visualiza como:', ls_dat10. ENDIF. *Obtiene el nombre del día en el que cae una fecha CALL FUNCTION 'ISH_GET_DAY_OF_WEEK' EXPORTING date = '19850123' IMPORTING day_txt = ls_dia. WRITE: / 'El 23 de enero de 1985 fue un día', ls_dia. *Obtiene el último día del mes CALL FUNCTION 'FKK_LAST_DAY_OF_MONTH' EXPORTING day_in = sy-datum IMPORTING last_day_of_month = ld_datum EXCEPTIONS day_in_no_date = 1 OTHERS = 2. IF sy-subrc EQ 0. WRITE: / 'El último día de este mes es:', ld_datum. ENDIF. *Obtiene el nombre de un mes CALL FUNCTION 'ISP_GET_MONTH_NAME' EXPORTING date = sy-datum language = sy-langu IMPORTING longtext = ls_mes EXCEPTIONS calendar_id = 1 date_error = 2 not_found = 3 wrong_input = 4 OTHERS = 5. IF sy-subrc EQ 0. WRITE: / 'Hoy', sy-datum, 'estamos en el mes de', ls_mes. 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