Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CLASS lcl_aplic DEFINITION.
- PUBLIC SECTION.
- * DATA:
- METHODS: constructor IMPORTING i_lv_tapli TYPE zfi_dte_tapli
- i_lv_descr TYPE dd07v-ddtext,
- main,
- carga_textos_botones,
- devolver_dynpro RETURNING VALUE(r_lv_dynpro) TYPE sydynnr,
- buscar_tabla_de_boton IMPORTING i_lv_ucomm TYPE sy-ucomm
- RETURNING VALUE(r_lv_tabla) TYPE dd02v-tabname,
- devolver_tipo_aplicativ RETURNING VALUE(r_lv_tipoaplic) TYPE zfi_dte_tapli.
- PROTECTED SECTION.
- TYPES: BEGIN OF ty_t003,
- blart TYPE t003-blart,
- blkls TYPE t003-blkls,
- END OF ty_t003,
- BEGIN OF gty_archivo,
- inte TYPE i,
- linea TYPE c LENGTH 1000,
- END OF gty_archivo.
- DATA: gv_tapli TYPE zfi_dte_tapli,
- gv_descr TYPE dd07v-ddtext.
- DATA: gv_waers TYPE waers. "Para el ALV
- DATA: gt_rg_blart TYPE RANGE OF blart, "Clase de documento
- gt_rg_ktosl TYPE RANGE OF ktosl, "Clave de operacion
- gt_rg_witht TYPE RANGE OF witht, "Tipo de retencion
- gt_rg_hkont TYPE RANGE OF hkont, "Cuenta
- gt_bkpf TYPE SORTED TABLE OF bkpf WITH UNIQUE KEY bukrs belnr gjahr, "Cabeceras de documentos contables
- gt_bseg TYPE SORTED TABLE OF bseg WITH NON-UNIQUE KEY bukrs belnr gjahr buzei, "Posiciones de documentos contables
- gt_bseg_k_d TYPE TABLE OF bseg, "Posiciones de documentos contables con clase de cuenta proveedor o deudor
- gt_lfa1 TYPE HASHED TABLE OF lfa1 WITH UNIQUE KEY lifnr, "Datos de acreedor
- gt_lfb1 TYPE HASHED TABLE OF lfb1 WITH UNIQUE KEY lifnr bukrs, "Datos de acreedor (sociedad)
- gt_kna1 TYPE HASHED TABLE OF kna1 WITH UNIQUE KEY kunnr, "Datos de deudor
- gt_knb1 TYPE HASHED TABLE OF knb1 WITH UNIQUE KEY kunnr bukrs, "Datos de deudor (sociedad)
- gt_with_item TYPE SORTED TABLE OF with_item WITH NON-UNIQUE KEY bukrs belnr gjahr, "Posiciones de retenciones de documentos contables
- gt_with_item2 TYPE SORTED TABLE OF with_item WITH NON-UNIQUE KEY bukrs belnr gjahr, "Posiciones de retenciones de documentos contables
- gt_bsec TYPE TABLE OF bsec, "Obtengo posiciones de proveedores eventuales
- gt_bset TYPE SORTED TABLE OF bset WITH NON-UNIQUE KEY bukrs belnr gjahr.
- DATA: gt_archivo1 TYPE TABLE OF gty_archivo, "Tabla de salida TXT.
- gt_archivo2 TYPE TABLE OF gty_archivo, "Tabla de salida TXT.
- gt_archivo3 TYPE TABLE OF gty_archivo, "Tabla de salida TXT.
- gt_archivo4 TYPE TABLE OF gty_archivo. "Tabla de salida TXT.
- DATA: gv_dffilen1 TYPE string, "Nombre default del archivo de salida TXT
- gv_dffilen2 TYPE string, "Nombre default del archivo de salida TXT
- gv_dffilen3 TYPE string. "Nombre default del archivo de salida TXT
- METHODS: armar_rangos RETURNING VALUE(r_lv_ok) TYPE char1,
- necesita_zar_fi_cla_doc_t RETURNING VALUE(r_lv_necesita) TYPE char1,
- necesita_zar_fi_cla_ope_t RETURNING VALUE(r_lv_necesita) TYPE char1,
- necesita_zar_fi_tip_ret_t RETURNING VALUE(r_lv_necesita) TYPE char1,
- necesita_zfi_af_cta_cbl RETURNING VALUE(r_lv_necesita) TYPE char1,
- obtener_datos RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_documentos_cab RETURNING VALUE(r_lv_ok) TYPE char1,
- agregar_registros_cab,
- eliminar_registros_cab,
- obtener_documentos_pos RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_datos_retenciones RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_proveedores_eventuales
- RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_datos_percepciones RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_tablas_conversion RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_tablas_accesorias RETURNING VALUE(r_lv_ok) TYPE char1,
- obtener_datos_prov_clie IMPORTING i_lv_bukrs TYPE bkpf-bukrs
- i_lv_belnr TYPE bkpf-belnr
- i_lv_gjahr TYPE bkpf-gjahr
- i_lv_koart TYPE bseg-koart
- i_lv_lifnr TYPE bseg-lifnr
- i_lv_kunnr TYPE bseg-kunnr
- CHANGING c_lv_stcd1 TYPE kna1-stcd1 OPTIONAL
- c_lv_stcd2 TYPE kna1-stcd2 OPTIONAL
- c_lv_stcdt TYPE kna1-stcdt OPTIONAL
- c_lv_name1 TYPE kna1-name1 OPTIONAL
- c_lv_fityp TYPE kna1-fityp OPTIONAL
- c_lv_regio TYPE kna1-regio OPTIONAL
- c_lv_stras TYPE kna1-stras OPTIONAL
- c_lv_telf1 TYPE kna1-telf1 OPTIONAL
- c_lv_pstlz TYPE kna1-pstlz OPTIONAL
- c_lv_ort01 TYPE kna1-ort01 OPTIONAL
- c_lv_gridt TYPE knb1-gridt OPTIONAL
- c_lv_mcod3 TYPE kna1-mcod3 OPTIONAL
- c_lv_adrnr TYPE kna1-adrnr OPTIONAL,
- armar_tabla_aplicativo_per,
- armar_tabla_aplicativo_ret,
- armar_archivo_salida,
- mostrar_alv,
- armar_fieldcat CHANGING c_lt_fieldcat TYPE slis_t_fieldcat_alv,
- asignar_tabla,
- tipo_impuesto RETURNING VALUE(r_lv_tipo_impuesto) TYPE char1.
- ENDCLASS. "lcl_aplic IMPLEMENTATION
- *----------------------------------------------------------------------*
- * *
- * *
- * IMPLEMENTATIONS *
- * *
- * *
- *----------------------------------------------------------------------*
- *----------------------------------------------------------------------*
- * CLASS lcl_aplic IMPLEMENTATION *
- *----------------------------------------------------------------------*
- * *
- *----------------------------------------------------------------------*
- CLASS lcl_aplic IMPLEMENTATION.
- *----------------------------------------------------------------------*
- * Method Constructo *
- *----------------------------------------------------------------------*
- * Metodo principal de los aplicativos *
- *----------------------------------------------------------------------*
- METHOD constructor.
- * Guardo la descripción que luego será util para el ALV
- gv_tapli = i_lv_tapli.
- gv_descr = i_lv_descr.
- * Obtengo la moneda local
- SELECT SINGLE waers
- FROM t001 INTO gv_waers
- WHERE bukrs = p_bukrs.
- ENDMETHOD. "lcl_aplic
- *----------------------------------------------------------------------*
- * Method main *
- *----------------------------------------------------------------------*
- * Metodo principal de los aplicativos *
- *----------------------------------------------------------------------*
- METHOD main.
- * Borro los registro de la tabla que contiene la salida de los archivos
- REFRESH gt_archivo1.
- REFRESH gt_archivo2.
- CLEAR gv_dffilen1.
- CLEAR gv_dffilen2.
- REFRESH gt_archivo3.
- CLEAR gv_dffilen3.
- IF me->armar_rangos( ) EQ abap_true.
- IF me->obtener_datos( ) EQ abap_true.
- * me->armar_tabla_aplicativo( ).
- me->armar_tabla_aplicativo_per( ).
- me->armar_tabla_aplicativo_ret( ).
- me->armar_archivo_salida( ).
- me->mostrar_alv( ).
- ENDIF.
- ENDIF.
- ENDMETHOD. "carga_textos_botones
- *----------------------------------------------------------------------*
- * Method carga_textos_botones *
- *----------------------------------------------------------------------*
- * Carga textos en los botones *
- *----------------------------------------------------------------------*
- METHOD carga_textos_botones.
- ENDMETHOD. "carga_textos_botones
- *----------------------------------------------------------------------*
- * Method devolver_dynpro *
- *----------------------------------------------------------------------*
- * Devuelve la dynpro determinada por este aplicativo *
- *----------------------------------------------------------------------*
- METHOD devolver_dynpro.
- ENDMETHOD. "devolver_dynpro
- *----------------------------------------------------------------------*
- * Method buscar_tabla_de_boton *
- *----------------------------------------------------------------------*
- * Buscar tabla relacionada con el boton *
- *----------------------------------------------------------------------*
- METHOD buscar_tabla_de_boton.
- ENDMETHOD. "buscar_tabla_de_boton
- *----------------------------------------------------------------------*
- * Method armar_rangos *
- *----------------------------------------------------------------------*
- * Armar rangos *
- *----------------------------------------------------------------------*
- METHOD armar_rangos.
- DATA: ls_rg_blart LIKE LINE OF gt_rg_blart,
- ls_rg_ktosl LIKE LINE OF gt_rg_ktosl,
- ls_rg_witht LIKE LINE OF gt_rg_witht,
- ls_rg_hkont LIKE LINE OF gt_rg_hkont,
- lv_tipo_aplicativ TYPE zfi_dte_tapli.
- DATA l_msj TYPE c LENGTH 100.
- r_lv_ok = abap_true.
- lv_tipo_aplicativ = me->devolver_tipo_aplicativ( ).
- * ------------------------------------------------------------ *
- * Armo rango de clases de documentos validas para el aplicativo
- * ------------------------------------------------------------ *
- SELECT blart AS low
- FROM zar_fi_cla_doc_t
- INTO CORRESPONDING FIELDS OF TABLE gt_rg_blart
- WHERE tapli EQ 'PR' OR tapli EQ 'RT' OR tapli EQ 'NC'.
- ls_rg_blart-sign = 'I'.
- ls_rg_blart-option = 'EQ'.
- MODIFY gt_rg_blart FROM ls_rg_blart
- TRANSPORTING sign option WHERE sign IS INITIAL.
- IF me->necesita_zar_fi_cla_doc_t( ) EQ abap_true
- AND gt_rg_blart[] IS INITIAL.
- CONCATENATE TEXT-001 'ZAR_FI_CLA_DOC_T' INTO l_msj SEPARATED BY space.
- MESSAGE l_msj TYPE 'I'.
- ENDIF.
- * ------------------------------------------------------------ *
- * Armo rango de claves de operacion validas para el aplicativo
- * ------------------------------------------------------------ *
- SELECT ktosl AS low
- FROM zar_fi_cla_ope_t
- INTO CORRESPONDING FIELDS OF TABLE gt_rg_ktosl
- WHERE tapli EQ 'PR'.
- ls_rg_ktosl-sign = 'I'.
- ls_rg_ktosl-option = 'EQ'.
- MODIFY gt_rg_ktosl FROM ls_rg_ktosl
- TRANSPORTING sign option WHERE sign IS INITIAL.
- IF me->necesita_zar_fi_cla_ope_t( ) EQ abap_true
- AND gt_rg_ktosl[] IS INITIAL.
- *
- CONCATENATE TEXT-001 'ZAR_FI_CLA_OPE_T' INTO l_msj SEPARATED BY space.
- MESSAGE l_msj TYPE 'I'.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- * ------------------------------------------------------------ *
- * Armo rango de tipos de retencion validas para el aplicativo
- * ------------------------------------------------------------ *
- SELECT witht AS low
- FROM zar_fi_tip_ret_t
- INTO CORRESPONDING FIELDS OF TABLE gt_rg_witht
- WHERE tapli = 'RT'.
- ls_rg_witht-sign = 'I'.
- ls_rg_witht-option = 'EQ'.
- MODIFY gt_rg_witht FROM ls_rg_witht
- TRANSPORTING sign option WHERE sign IS INITIAL.
- IF me->necesita_zar_fi_tip_ret_t( ) EQ abap_true
- AND gt_rg_witht[] IS INITIAL.
- CONCATENATE TEXT-001 'ZAR_FI_TIP_RET_T' INTO l_msj SEPARATED BY space.
- MESSAGE l_msj TYPE 'I'.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- * ------------------------------------------------------------ *
- * Armo rango de cuentas contables validas para el aplicativo
- * ------------------------------------------------------------ *
- * SELECT hkont AS low
- * FROM zfi_af_cta_cbl
- * INTO CORRESPONDING FIELDS OF TABLE gt_rg_hkont
- * WHERE tapli EQ 'PR' OR tapli EQ 'RT'.
- * ls_rg_hkont-sign = 'I'.
- * ls_rg_hkont-option = 'EQ'.
- * MODIFY gt_rg_hkont FROM ls_rg_hkont
- * TRANSPORTING sign option WHERE sign IS INITIAL.
- * IF me->necesita_zfi_af_cta_cbl( ) EQ abap_true
- * AND gt_rg_hkont[] IS INITIAL.
- * CONCATENATE text-001 'ZFI_AF_CTA_CBL' INTO l_msj SEPARATED BY space.
- * MESSAGE l_msj TYPE 'I'.
- * r_lv_ok = abap_false.
- * RETURN.
- * ENDIF.
- ENDMETHOD. "buscar_tabla_de_boton
- *----------------------------------------------------------------------*
- * Method necesita_ZAR_FI_CLA_DOC_T *
- *----------------------------------------------------------------------*
- * ¿Necesita entradas en la tabla ZAR_FI_CLA_DOC_T? *
- *----------------------------------------------------------------------*
- METHOD necesita_zar_fi_cla_doc_t.
- r_lv_necesita = abap_false.
- ENDMETHOD. "necesita_ZAR_FI_CLA_DOC_T
- *----------------------------------------------------------------------*
- * Method necesita_ZAR_FI_CLA_OPE_T *
- *----------------------------------------------------------------------*
- * ¿Necesita entradas en la ZAR_FI_CLA_OPE_T? *
- *----------------------------------------------------------------------*
- METHOD necesita_zar_fi_cla_ope_t.
- r_lv_necesita = abap_false.
- ENDMETHOD. "necesita_ZAR_FI_CLA_OPE_T
- *----------------------------------------------------------------------*
- * Method necesita_ZAR_FI_TIP_RET_T *
- *----------------------------------------------------------------------*
- * ¿Necesita entradas en la tabla ZAR_FI_TIP_RET_T? *
- *----------------------------------------------------------------------*
- METHOD necesita_zar_fi_tip_ret_t.
- r_lv_necesita = abap_false.
- ENDMETHOD. "necesita_ZAR_FI_TIP_RET_T
- *----------------------------------------------------------------------*
- * Method necesita_zfi_af_cta_cbl *
- *----------------------------------------------------------------------*
- * ¿Necesita entradas en la zfi_af_cta_cbl? *
- *----------------------------------------------------------------------*
- METHOD necesita_zfi_af_cta_cbl.
- r_lv_necesita = abap_false.
- ENDMETHOD. "necesita_zfi_af_cta_cbl
- *----------------------------------------------------------------------*
- * Method devolver_tipo_aplicativ *
- *----------------------------------------------------------------------*
- * ¿Devuelve el tipo de aplicativo, del objeto en particular *
- *----------------------------------------------------------------------*
- METHOD devolver_tipo_aplicativ.
- r_lv_tipoaplic = space.
- ENDMETHOD. "devolver_tipo_aplicativ
- *----------------------------------------------------------------------*
- * Method obtener_datos *
- *----------------------------------------------------------------------*
- * Obtener datos *
- *----------------------------------------------------------------------*
- METHOD obtener_datos.
- r_lv_ok = abap_true.
- IF me->obtener_documentos_cab( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- IF me->obtener_documentos_pos( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- IF me->obtener_datos_retenciones( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- IF me->obtener_proveedores_eventuales( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- IF me->obtener_datos_percepciones( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- * Tablas de conversion, textos, etc.
- IF me->obtener_tablas_conversion( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- * Obetener tablas accesorias
- IF me->obtener_tablas_accesorias( ) NE abap_true.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- ENDMETHOD. "obtener_datos
- *----------------------------------------------------------------------*
- * Method obtener_documentos_cab *
- *----------------------------------------------------------------------*
- * Obtener cabecera de documentos *
- *----------------------------------------------------------------------*
- METHOD obtener_documentos_cab.
- DATA: lv_fksto TYPE vbrk-fksto,
- lv_sfakn TYPE vbrk-sfakn,
- ls_bkpf TYPE bkpf.
- r_lv_ok = abap_true.
- DATA: r_gjahr TYPE RANGE OF bkpf-gjahr.
- DATA: wa_gjahr LIKE LINE OF r_gjahr.
- * IF so_gjahr IS NOT INITIAL.
- * wa_gjahr-sign = 'I'.
- * wa_gjahr-option = 'EQ'.
- * wa_gjahr-low = p_gjahr.
- * APPEND wa_gjahr TO r_gjahr.
- * ENDIF.
- * Obtengo documentos FI
- SELECT *
- FROM bkpf INTO TABLE gt_bkpf
- WHERE bukrs = p_bukrs
- AND belnr IN so_belnr
- AND budat IN so_budat
- AND gjahr IN so_gjahr
- AND blart IN gt_rg_blart
- AND stblg EQ space.
- agregar_registros_cab( ).
- IF tipo_impuesto( ) EQ 'P'(c03).
- * Se busca los documentos de MM y se descartan los anulados y las
- * anulaciones (La anulacion desde SD generalmente vincula los
- * documentos contables correspondientes, pero hay algunas excep.)
- LOOP AT gt_bkpf INTO ls_bkpf WHERE awtyp = 'VBRK'.
- SELECT SINGLE fksto sfakn
- FROM vbrk INTO (lv_fksto, lv_sfakn)
- WHERE vbeln = ls_bkpf-awkey.
- IF sy-subrc NE 0
- OR lv_fksto IS NOT INITIAL "Documento de anulacion
- OR lv_sfakn IS NOT INITIAL. "Documento anulado
- DELETE gt_bkpf.
- ENDIF.
- ENDLOOP.
- ENDIF.
- * Se eliminan documentos anulados
- DELETE gt_bkpf WHERE stgrd NE space.
- eliminar_registros_cab( ).
- * Se valida que hayan datos
- IF gt_bkpf[] IS INITIAL.
- MESSAGE TEXT-002 TYPE 'I'.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- ENDMETHOD. "obtener_documentos_cab
- *----------------------------------------------------------------------*
- * Method agregar_registros_cab *
- *----------------------------------------------------------------------*
- * Agregar registros a las cabeceras por aplicativo en particular *
- *----------------------------------------------------------------------*
- METHOD agregar_registros_cab.
- ENDMETHOD. "agregar_registros_cab
- *----------------------------------------------------------------------*
- * Method eliminar_registros_cab *
- *----------------------------------------------------------------------*
- * Eliminar registros a las cabeceras por aplicativo en particular *
- *----------------------------------------------------------------------*
- METHOD eliminar_registros_cab.
- ENDMETHOD. "eliminar_registros_cab
- *----------------------------------------------------------------------*
- * Method obtener_documentos_pos *
- *----------------------------------------------------------------------*
- * Obtener Posicion de documentos *
- *----------------------------------------------------------------------*
- METHOD obtener_documentos_pos.
- DATA: ls_bkpf TYPE bkpf.
- r_lv_ok = abap_true.
- CLEAR gt_bseg.
- * Obtengo posiciones del documento para las claves de operacion relevantes
- IF NOT gt_rg_ktosl[] IS INITIAL.
- SELECT *
- FROM bseg APPENDING TABLE gt_bseg
- FOR ALL ENTRIES IN gt_bkpf
- WHERE bukrs EQ gt_bkpf-bukrs
- AND belnr EQ gt_bkpf-belnr
- AND gjahr EQ gt_bkpf-gjahr
- AND ktosl IN gt_rg_ktosl.
- ENDIF.
- * Obtengo posiciones del documento para los tipos de retencion relevantes
- IF NOT gt_rg_witht[] IS INITIAL.
- SELECT *
- FROM bseg APPENDING TABLE gt_bseg
- FOR ALL ENTRIES IN gt_bkpf
- WHERE bukrs EQ gt_bkpf-bukrs
- AND belnr EQ gt_bkpf-belnr
- AND gjahr EQ gt_bkpf-gjahr
- AND qsskz IN gt_rg_witht.
- ENDIF.
- * Obtengo posiciones del documento para las cuentas contables relevantes
- IF NOT gt_rg_hkont[] IS INITIAL.
- SELECT *
- FROM bseg APPENDING TABLE gt_bseg
- FOR ALL ENTRIES IN gt_bkpf
- WHERE bukrs EQ gt_bkpf-bukrs
- AND belnr EQ gt_bkpf-belnr
- AND gjahr EQ gt_bkpf-gjahr
- AND hkont IN gt_rg_hkont.
- ENDIF.
- * Valido que haya al menos una posicion
- DELETE ADJACENT DUPLICATES FROM gt_bseg.
- IF gt_bseg[] IS INITIAL.
- MESSAGE TEXT-002 TYPE 'I'.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- * Obtengo posiciones de proveedores/clientes
- SELECT *
- FROM bseg INTO TABLE gt_bseg_k_d
- FOR ALL ENTRIES IN gt_bseg
- WHERE bukrs EQ gt_bseg-bukrs
- AND belnr EQ gt_bseg-belnr
- AND gjahr EQ gt_bseg-gjahr
- AND koart IN (c_koart_k, c_koart_d).
- * Ordenar bseg_k_d, luego se utiliza BINARY SEARCH
- SORT gt_bseg_k_d BY bukrs belnr gjahr.
- * Descarto los documentos para los que no se encontró ninguna posición
- LOOP AT gt_bkpf INTO ls_bkpf.
- READ TABLE gt_bseg TRANSPORTING NO FIELDS
- WITH KEY bukrs = ls_bkpf-bukrs
- belnr = ls_bkpf-belnr
- gjahr = ls_bkpf-gjahr.
- IF sy-subrc NE 0.
- DELETE gt_bkpf.
- ENDIF.
- ENDLOOP.
- * Leo datos maestros de proveedores y clientes
- IF gt_bseg_k_d[] IS NOT INITIAL.
- SELECT *
- FROM kna1 INTO TABLE gt_kna1
- FOR ALL ENTRIES IN gt_bseg_k_d
- WHERE kunnr EQ gt_bseg_k_d-kunnr.
- SELECT *
- FROM knb1 INTO TABLE gt_knb1
- FOR ALL ENTRIES IN gt_bseg_k_d
- WHERE kunnr EQ gt_bseg_k_d-kunnr
- AND bukrs EQ gt_bseg_k_d-bukrs.
- * ELSE.
- SELECT *
- FROM lfa1 INTO TABLE gt_lfa1
- FOR ALL ENTRIES IN gt_bseg_k_d
- WHERE lifnr EQ gt_bseg_k_d-lifnr.
- SELECT *
- FROM lfb1 INTO TABLE gt_lfb1
- FOR ALL ENTRIES IN gt_bseg_k_d
- WHERE lifnr EQ gt_bseg_k_d-lifnr
- AND bukrs EQ gt_bseg_k_d-bukrs.
- ENDIF.
- ENDMETHOD. "obtener_documentos_pos
- *----------------------------------------------------------------------*
- * Method obtener_datos_retenciones *
- *----------------------------------------------------------------------*
- * Obtener datos de retenciones *
- *----------------------------------------------------------------------*
- METHOD obtener_datos_retenciones.
- r_lv_ok = abap_true.
- * Obtengo datos de retenciones de los documentos encontrados
- SELECT *
- FROM with_item INTO TABLE gt_with_item
- FOR ALL ENTRIES IN gt_bkpf
- WHERE bukrs EQ gt_bkpf-bukrs
- AND belnr EQ gt_bkpf-belnr
- AND gjahr EQ gt_bkpf-gjahr
- AND witht IN gt_rg_witht
- AND wt_qbshh NE 0.
- IF gt_with_item[] IS INITIAL
- AND me->necesita_zar_fi_tip_ret_t( ) EQ abap_true.
- MESSAGE TEXT-002 TYPE 'I'.
- r_lv_ok = abap_false.
- RETURN.
- ENDIF.
- ENDMETHOD. "obtener_datos_retenciones
- *----------------------------------------------------------------------*
- * Method obtener_proveedores_eventuales *
- *----------------------------------------------------------------------*
- * Obtener proveedores eventuales *
- *----------------------------------------------------------------------*
- METHOD obtener_proveedores_eventuales.
- r_lv_ok = abap_true.
- IF tipo_impuesto( ) EQ 'P'(c03).
- * Obtengo posiciones de proveedores eventuales
- SELECT *
- FROM bsec INTO TABLE gt_bsec
- FOR ALL ENTRIES IN gt_bseg
- WHERE bukrs EQ gt_bseg-bukrs
- AND belnr EQ gt_bseg-belnr
- AND gjahr EQ gt_bseg-gjahr.
- ENDIF.
- ENDMETHOD. "obtener_proveedores_eventuales
- *----------------------------------------------------------------------*
- * Method obtener_datos_percepciones *
- *----------------------------------------------------------------------*
- * Obtener datos percepciones *
- *----------------------------------------------------------------------*
- METHOD obtener_datos_percepciones.
- r_lv_ok = abap_true.
- SELECT *
- FROM bset INTO TABLE gt_bset
- FOR ALL ENTRIES IN gt_bkpf
- WHERE bukrs EQ gt_bkpf-bukrs
- AND belnr EQ gt_bkpf-belnr
- AND gjahr EQ gt_bkpf-gjahr.
- ENDMETHOD. "obtener_datos_percepciones
- *----------------------------------------------------------------------*
- * Method obtener_tablas_conversion *
- *----------------------------------------------------------------------*
- * Obtener tablas de conversion por aplicativo en particular *
- *----------------------------------------------------------------------*
- METHOD obtener_tablas_conversion.
- r_lv_ok = abap_true.
- ENDMETHOD. "obtener_tablas_conversion
- *----------------------------------------------------------------------*
- * Method obtener_tablas_accesorias *
- *----------------------------------------------------------------------*
- * Obtener tablas accesorias por cada aplicativo *
- *----------------------------------------------------------------------*
- METHOD obtener_tablas_accesorias.
- r_lv_ok = abap_true.
- ENDMETHOD. "obtener_tablas_accesorias
- *----------------------------------------------------------------------*
- * Method armar_tabla_aplicativo *
- *----------------------------------------------------------------------*
- * Obtener Armar tabla aplicativo *
- *----------------------------------------------------------------------*
- METHOD armar_tabla_aplicativo_per.
- ENDMETHOD. "armar_tabla_aplicativo()
- METHOD armar_tabla_aplicativo_ret.
- ENDMETHOD. "armar_tabla_aplicativo()
- *----------------------------------------------------------------------*
- * Method obtener_datos_prov_clie *
- *----------------------------------------------------------------------*
- * Obtener Obtener datos prov clie *
- *----------------------------------------------------------------------*
- METHOD obtener_datos_prov_clie.
- DATA: ls_bsec TYPE bsec,
- ls_lfa1 TYPE lfa1,
- ls_lfb1 TYPE lfb1,
- ls_kna1 TYPE kna1,
- ls_knb1 TYPE knb1.
- * Copio datos de proveedor/cliente
- CASE i_lv_koart.
- WHEN c_koart_k.
- * Obtengo datos del proveedor
- READ TABLE gt_lfa1 INTO ls_lfa1 WITH TABLE KEY lifnr = i_lv_lifnr.
- IF sy-subrc EQ 0.
- c_lv_stcd1 = ls_lfa1-stcd1.
- c_lv_stcd2 = ls_lfa1-stcd2.
- c_lv_stcdt = ls_lfa1-stcdt.
- c_lv_name1 = ls_lfa1-name1.
- c_lv_fityp = ls_lfa1-fityp.
- c_lv_regio = ls_lfa1-regio.
- c_lv_stras = ls_lfa1-stras.
- c_lv_telf1 = ls_lfa1-telf1.
- c_lv_pstlz = ls_lfa1-pstlz.
- c_lv_ort01 = ls_lfa1-ort01.
- c_lv_mcod3 = ls_lfa1-mcod3.
- c_lv_adrnr = ls_lfa1-adrnr.
- * Para proveedores eventuales tomo el campo de la tabla bsec
- * Indicador: ¿Es cuenta pro diversos (CPD)?
- IF ls_lfa1-xcpdk EQ abap_true.
- READ TABLE gt_bsec INTO ls_bsec WITH KEY bukrs = i_lv_bukrs
- belnr = i_lv_belnr
- gjahr = i_lv_gjahr.
- IF sy-subrc EQ 0.
- c_lv_stcd1 = ls_bsec-stcd1.
- ENDIF.
- ELSE.
- c_lv_stcd1 = ls_lfa1-stcd1.
- ENDIF.
- * Obtengo datos del cliente para la sociedad
- READ TABLE gt_lfb1 INTO ls_lfb1 WITH TABLE KEY lifnr = i_lv_lifnr
- bukrs = i_lv_bukrs.
- IF sy-subrc EQ 0.
- c_lv_gridt = ls_lfb1-gridt.
- ENDIF.
- ENDIF.
- WHEN c_koart_d.
- * Obtengo datos del cliente
- READ TABLE gt_kna1 INTO ls_kna1 WITH TABLE KEY kunnr = i_lv_kunnr.
- IF sy-subrc EQ 0.
- c_lv_stcd1 = ls_kna1-stcd1.
- c_lv_stcd2 = ls_kna1-stcd2.
- c_lv_stcdt = ls_kna1-stcdt.
- c_lv_name1 = ls_kna1-name1.
- c_lv_fityp = ls_kna1-fityp.
- c_lv_regio = ls_kna1-regio.
- c_lv_stras = ls_kna1-stras.
- c_lv_telf1 = ls_kna1-telf1.
- c_lv_pstlz = ls_kna1-pstlz.
- c_lv_ort01 = ls_kna1-ort01.
- c_lv_mcod3 = ls_kna1-mcod3.
- c_lv_adrnr = ls_kna1-adrnr.
- * Obtengo datos del cliente para la sociedad
- READ TABLE gt_knb1 INTO ls_knb1 WITH TABLE KEY kunnr = i_lv_kunnr
- bukrs = i_lv_bukrs.
- IF sy-subrc EQ 0.
- c_lv_gridt = ls_knb1-gridt.
- ENDIF.
- ENDIF.
- ENDCASE.
- ENDMETHOD. "obtener_datos_prov_clie
- *----------------------------------------------------------------------*
- * Method mostrar_alv *
- *----------------------------------------------------------------------*
- * Mostrar ALV *
- *----------------------------------------------------------------------*
- METHOD mostrar_alv.
- DATA: ls_layout TYPE slis_layout_alv.
- DATA: lt_fieldcat TYPE slis_t_fieldcat_alv.
- DATA: lt_events TYPE slis_t_event,
- ls_event TYPE slis_alv_event.
- DATA: lt_sort TYPE slis_t_sortinfo_alv,
- ls_sort TYPE slis_sortinfo_alv.
- DATA: lv_titulo TYPE lvc_title,
- lv_repid TYPE syst-repid.
- * CLEAR ls_sort.
- * ls_sort-spos = 1.
- * ls_sort-fieldname = 'BLDAT'.
- * ls_sort-up = 'X'.
- * APPEND ls_sort TO lt_sort.
- * Opciones de visualizacion
- CLEAR ls_layout.
- ls_layout-colwidth_optimize = 'X'.
- ls_layout-zebra = 'X'.
- * Eventos del ALV
- ls_event-name = slis_ev_pf_status_set.
- ls_event-form = 'ALV_SET_STATUS'.
- APPEND ls_event TO lt_events.
- ls_event-name = slis_ev_user_command.
- ls_event-form = 'ALV_USER_COMMAND'.
- APPEND ls_event TO lt_events.
- * Arma fieldcat en particular por cada aplicativo
- armar_fieldcat( CHANGING c_lt_fieldcat = lt_fieldcat[] ).
- * Asignar la tabla correspondiente por aplicativo
- asignar_tabla( ).
- * CONCATENATE gv_tapli '-' gv_descr INTO lv_titulo SEPARATED BY space.
- lv_titulo = gv_descr.
- lv_repid = sy-repid.
- * Asignar field symbol al archivo de salida de este aplicativo,
- * para ser usado fuera de la clase
- ASSIGN gt_archivo1 TO <fs_archivo1>.
- ASSIGN gt_archivo2 TO <fs_archivo2>.
- ASSIGN gv_dffilen1 TO <fs_dffilen1>.
- ASSIGN gv_dffilen2 TO <fs_dffilen2>.
- ASSIGN gt_archivo3 TO <fs_archivo3>.
- ASSIGN gv_dffilen3 TO <fs_dffilen3>.
- * Muestro el ALV
- CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
- EXPORTING
- i_callback_program = lv_repid
- i_grid_title = lv_titulo
- is_layout = ls_layout
- it_fieldcat = lt_fieldcat
- it_events = lt_events
- * it_sort = lt_sort
- TABLES
- t_outtab = <fs_alv>.
- ENDMETHOD. "mostrar_alv
- *----------------------------------------------------------------------*
- * Method armar_fieldcat *
- *----------------------------------------------------------------------*
- * Armar fieldcat *
- *----------------------------------------------------------------------*
- METHOD armar_fieldcat.
- DATA: ls_fieldcat TYPE slis_fieldcat_alv. "lvc_s_fcat.
- * Sociedad
- load_fieldcat 'BUKRS' 'Soc.'(091)
- 'Sociedad'(092)
- 'Sociedad'(092)
- 0 space space.
- load_fieldcat 'BELNR' 'Documento'(093)
- 'Documento'(093)
- 'Documento'(093)
- 0 space space.
- load_fieldcat 'GJAHR' 'Ejercicio'(094)
- 'Ejercicio'(094)
- 'Ejercicio'(094)
- 0 space space.
- ENDMETHOD. "armar_fieldcat
- *----------------------------------------------------------------------*
- * Method asignar_tabla *
- *----------------------------------------------------------------------*
- * Asignar tabla *
- *----------------------------------------------------------------------*
- METHOD asignar_tabla.
- ENDMETHOD. "asignar_tabla
- *----------------------------------------------------------------------*
- * Method tipo_impuesto *
- *----------------------------------------------------------------------*
- * Devuelve el tipo de impuesto, para realizar o no funcionalidades*
- *----------------------------------------------------------------------*
- METHOD tipo_impuesto.
- * Existen cuatro tipos de impuestos:
- * 'P'(c03) Percepciones efectuadas
- * 'R'(c04) Retenciones efectuadas
- * '1'(c07) Percepciones sufridas
- * '2'(c08) Retenciones sufridas
- ENDMETHOD. "tipo_impuesto
- *----------------------------------------------------------------------*
- * Method armar_archivo_salida *
- *----------------------------------------------------------------------*
- METHOD armar_archivo_salida.
- ENDMETHOD. "armar_archivo_salida
- ENDCLASS. "lcl_aplic IMPLEMENTATION
- *&---------------------------------------------------------------------*
- *& Form ALV_SET_STATUS
- *&---------------------------------------------------------------------*
- FORM alv_set_status USING ft_extab TYPE slis_t_extab . "#EC CALLED
- SET PF-STATUS 'ZFI_STATUS_ALV' EXCLUDING ft_extab.
- ENDFORM. " ALV_SET_STATUS
- *---------------------------------------------------------------------*
- * FORM ALV_USER_COMMAND
- *----------------------------------------------------------------------*
- FORM alv_user_command USING r_ucomm LIKE sy-ucomm
- rs_selfield TYPE slis_selfield. "#EC CALLED
- CASE r_ucomm.
- WHEN 'DOWNLOAD'.
- PERFORM exportar_archivo.
- WHEN '&IC1'.
- PERFORM visualizar_documento USING rs_selfield-tabindex.
- ENDCASE.
- ENDFORM. " ALV_USER_COMMAND
- *&---------------------------------------------------------------------*
- *& Form EXPORTAR_ARCHIVO
- *&---------------------------------------------------------------------*
- FORM exportar_archivo .
- DATA: lv_filename TYPE string,
- lv_path TYPE string,
- lv_fullpath TYPE string,
- lv_dffilen TYPE string.
- IF <fs_archivo1> IS NOT INITIAL.
- * lv_dffilen = <fs_dffilen1>.
- lv_dffilen = 'DATOS'.
- IF rb_ar1 IS NOT INITIAL.
- * Permito que el usuario determine el nombre del archivo de salida
- CALL METHOD cl_gui_frontend_services=>file_save_dialog
- EXPORTING
- default_file_name = lv_dffilen
- CHANGING
- filename = lv_filename
- path = lv_path
- fullpath = lv_fullpath
- EXCEPTIONS
- cntl_error = 1
- error_no_gui = 2
- not_supported_by_gui = 3
- OTHERS = 4.
- IF sy-subrc <> 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- CHECK lv_fullpath IS NOT INITIAL.
- CONCATENATE lv_fullpath '.TXT' INTO lv_fullpath.
- CALL METHOD cl_gui_frontend_services=>gui_download
- EXPORTING
- filename = lv_fullpath
- filetype = 'VSS'
- codepage = '4110'
- CHANGING
- data_tab = <fs_archivo1>
- EXCEPTIONS
- file_write_error = 1
- no_batch = 2
- gui_refuse_filetransfer = 3
- invalid_type = 4
- no_authority = 5
- unknown_error = 6
- header_not_allowed = 7
- separator_not_allowed = 8
- filesize_not_allowed = 9
- header_too_long = 10
- dp_error_create = 11
- dp_error_send = 12
- dp_error_write = 13
- unknown_dp_error = 14
- access_denied = 15
- dp_out_of_memory = 16
- disk_full = 17
- dp_timeout = 18
- file_not_found = 19
- dataprovider_exception = 20
- control_flush_error = 21
- not_supported_by_gui = 22
- error_no_gui = 23
- OTHERS = 24.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- ENDIF.
- ENDIF.
- CLEAR: lv_filename,
- lv_path,
- lv_fullpath.
- IF <fs_archivo2> IS NOT INITIAL.
- * lv_dffilen = <fs_dffilen2>.
- lv_dffilen = 'RETPER'.
- IF rb_ar2 IS NOT INITIAL.
- * Permito que el usuario determine el nombre del archivo de salida
- CALL METHOD cl_gui_frontend_services=>file_save_dialog
- EXPORTING
- default_file_name = lv_dffilen
- CHANGING
- filename = lv_filename
- path = lv_path
- fullpath = lv_fullpath
- EXCEPTIONS
- cntl_error = 1
- error_no_gui = 2
- not_supported_by_gui = 3
- OTHERS = 4.
- IF sy-subrc <> 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- CHECK lv_fullpath IS NOT INITIAL.
- CONCATENATE lv_fullpath '.TXT' INTO lv_fullpath.
- CALL METHOD cl_gui_frontend_services=>gui_download
- EXPORTING
- filename = lv_fullpath
- filetype = 'VSS'
- CHANGING
- data_tab = <fs_archivo2>
- EXCEPTIONS
- file_write_error = 1
- no_batch = 2
- gui_refuse_filetransfer = 3
- invalid_type = 4
- no_authority = 5
- unknown_error = 6
- header_not_allowed = 7
- separator_not_allowed = 8
- filesize_not_allowed = 9
- header_too_long = 10
- dp_error_create = 11
- dp_error_send = 12
- dp_error_write = 13
- unknown_dp_error = 14
- access_denied = 15
- dp_out_of_memory = 16
- disk_full = 17
- dp_timeout = 18
- file_not_found = 19
- dataprovider_exception = 20
- control_flush_error = 21
- not_supported_by_gui = 22
- error_no_gui = 23
- OTHERS = 24.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- ENDIF.
- ENDIF.
- IF <fs_archivo3> IS NOT INITIAL.
- * lv_dffilen = <fs_dffilen3>.
- lv_dffilen = 'NCFACT'.
- IF rb_ar3 IS NOT INITIAL.
- * Permito que el usuario determine el nombre del archivo de salida
- CALL METHOD cl_gui_frontend_services=>file_save_dialog
- EXPORTING
- default_file_name = lv_dffilen
- CHANGING
- filename = lv_filename
- path = lv_path
- fullpath = lv_fullpath
- EXCEPTIONS
- cntl_error = 1
- error_no_gui = 2
- not_supported_by_gui = 3
- OTHERS = 4.
- IF sy-subrc <> 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- CHECK lv_fullpath IS NOT INITIAL.
- CONCATENATE lv_fullpath '.TXT' INTO lv_fullpath.
- CALL METHOD cl_gui_frontend_services=>gui_download
- EXPORTING
- filename = lv_fullpath
- filetype = 'VSS'
- CHANGING
- data_tab = <fs_archivo3>
- EXCEPTIONS
- file_write_error = 1
- no_batch = 2
- gui_refuse_filetransfer = 3
- invalid_type = 4
- no_authority = 5
- unknown_error = 6
- header_not_allowed = 7
- separator_not_allowed = 8
- filesize_not_allowed = 9
- header_too_long = 10
- dp_error_create = 11
- dp_error_send = 12
- dp_error_write = 13
- unknown_dp_error = 14
- access_denied = 15
- dp_out_of_memory = 16
- disk_full = 17
- dp_timeout = 18
- file_not_found = 19
- dataprovider_exception = 20
- control_flush_error = 21
- not_supported_by_gui = 22
- error_no_gui = 23
- OTHERS = 24.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDFORM. " EXPORTAR_ARCHIVO
- *&---------------------------------------------------------------------*
- *& Form VISUALIZAR_DOCUMENTO
- *&---------------------------------------------------------------------*
- FORM visualizar_documento USING f_tabix TYPE sy-tabix.
- FIELD-SYMBOLS: <fs_registro> TYPE any.
- FIELD-SYMBOLS: <fs_bukrs> TYPE bkpf-bukrs,
- <fs_belnr> TYPE bkpf-belnr,
- <fs_gjahr> TYPE bkpf-gjahr.
- CHECK f_tabix IS NOT INITIAL.
- READ TABLE <fs_alv> ASSIGNING <fs_registro> INDEX f_tabix.
- ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <fs_registro> TO <fs_bukrs>.
- CHECK <fs_bukrs> IS ASSIGNED.
- ASSIGN COMPONENT 'BELNR' OF STRUCTURE <fs_registro> TO <fs_belnr>.
- CHECK <fs_belnr> IS ASSIGNED.
- ASSIGN COMPONENT 'GJAHR' OF STRUCTURE <fs_registro> TO <fs_gjahr>.
- CHECK <fs_gjahr> IS ASSIGNED.
- CHECK <fs_bukrs> IS NOT INITIAL
- AND <fs_belnr> IS NOT INITIAL
- AND <fs_gjahr> IS NOT INITIAL.
- SET PARAMETER ID 'BUK' FIELD <fs_bukrs>.
- SET PARAMETER ID 'BLN' FIELD <fs_belnr>.
- SET PARAMETER ID 'GJR' FIELD <fs_gjahr>.
- CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
- ENDFORM. " VISUALIZAR_DOCUMENTO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement