Advertisement
ezecasti18

Untitled

Aug 19th, 2022
1,494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 44.63 KB | None | 0 0
  1. CLASS lcl_aplic DEFINITION.
  2.   PUBLIC SECTION.
  3. *   DATA:
  4.     METHODS: constructor IMPORTING i_lv_tapli    TYPE zfi_dte_tapli
  5.                                    i_lv_descr    TYPE dd07v-ddtext,
  6.  
  7.              main,
  8.              carga_textos_botones,
  9.              devolver_dynpro         RETURNING value(r_lv_dynpro)    TYPE sydynnr,
  10.              buscar_tabla_de_boton   IMPORTING i_lv_ucomm            TYPE sy-ucomm
  11.                                      RETURNING value(r_lv_tabla)     TYPE dd02v-tabname,
  12.              devolver_tipo_aplicativ RETURNING value(r_lv_tipoaplic) TYPE zfi_dte_tapli.
  13.  
  14.   PROTECTED SECTION.
  15.     TYPES: BEGIN OF ty_t003,
  16.              blart TYPE t003-blart,
  17.              blkls TYPE t003-blkls,
  18.            END OF ty_t003,
  19.  
  20.            BEGIN OF gty_archivo,
  21.              inte  TYPE i,
  22.              linea TYPE c LENGTH 1000,
  23.            END OF gty_archivo.
  24.  
  25.     DATA: gv_tapli TYPE zfi_dte_tapli,
  26.           gv_descr TYPE dd07v-ddtext.
  27.     DATA: gv_waers TYPE waers. "Para el ALV
  28.  
  29.     DATA: gt_rg_blart  TYPE RANGE OF blart, "Clase de documento
  30.           gt_rg_ktosl  TYPE RANGE OF ktosl, "Clave de operacion
  31.           gt_rg_witht  TYPE RANGE OF witht, "Tipo de retencion
  32.           gt_rg_hkont  TYPE RANGE OF hkont, "Cuenta
  33.           gt_bkpf      TYPE SORTED TABLE OF bkpf WITH UNIQUE KEY bukrs belnr gjahr, "Cabeceras de documentos contables
  34.           gt_bseg      TYPE SORTED TABLE OF bseg WITH NON-UNIQUE KEY bukrs belnr gjahr buzei, "Posiciones de documentos contables
  35.           gt_bseg_k_d  TYPE TABLE OF bseg, "Posiciones de documentos contables con clase de cuenta proveedor o deudor
  36.           gt_lfa1      TYPE HASHED TABLE OF lfa1 WITH UNIQUE KEY lifnr, "Datos de acreedor
  37.           gt_lfb1      TYPE HASHED TABLE OF lfb1 WITH UNIQUE KEY lifnr bukrs, "Datos de acreedor (sociedad)
  38.           gt_kna1      TYPE HASHED TABLE OF kna1 WITH UNIQUE KEY kunnr, "Datos de deudor
  39.           gt_knb1      TYPE HASHED TABLE OF knb1 WITH UNIQUE KEY kunnr bukrs, "Datos de deudor (sociedad)
  40.           gt_with_item TYPE SORTED TABLE OF with_item WITH NON-UNIQUE KEY bukrs belnr gjahr, "Posiciones de retenciones de documentos contables
  41.           gt_with_item2 TYPE SORTED TABLE OF with_item WITH NON-UNIQUE KEY bukrs belnr gjahr, "Posiciones de retenciones de documentos contables
  42.           gt_bsec      TYPE TABLE OF bsec, "Obtengo posiciones de proveedores eventuales
  43.           gt_bset      TYPE SORTED TABLE OF bset WITH NON-UNIQUE KEY bukrs belnr gjahr.
  44.  
  45.     DATA: gt_archivo1 TYPE TABLE OF gty_archivo, "Tabla de salida TXT.
  46.           gt_archivo2 TYPE TABLE OF gty_archivo, "Tabla de salida TXT.
  47.           gt_archivo3 TYPE TABLE OF gty_archivo, "Tabla de salida TXT.
  48.           gt_archivo4 TYPE TABLE OF gty_archivo. "Tabla de salida TXT.
  49.  
  50.     DATA: gv_dffilen1 TYPE string, "Nombre default del archivo de salida TXT
  51.           gv_dffilen2 TYPE string, "Nombre default del archivo de salida TXT
  52.           gv_dffilen3 TYPE string. "Nombre default del archivo de salida TXT
  53.  
  54.     METHODS: armar_rangos               RETURNING value(r_lv_ok) TYPE char1,
  55.              necesita_zfi_af_cla_doc_t  RETURNING value(r_lv_necesita)  TYPE char1,
  56.              necesita_zfi_af_cla_ope_t  RETURNING value(r_lv_necesita)  TYPE char1,
  57.              necesita_zfi_af_tip_ret_t  RETURNING value(r_lv_necesita)  TYPE char1,
  58.              necesita_zfi_af_cta_cbl    RETURNING value(r_lv_necesita)  TYPE char1,
  59.              obtener_datos              RETURNING value(r_lv_ok) TYPE char1,
  60.              obtener_documentos_cab     RETURNING value(r_lv_ok) TYPE char1,
  61.              agregar_registros_cab,
  62.              eliminar_registros_cab,
  63.              obtener_documentos_pos     RETURNING value(r_lv_ok) TYPE char1,
  64.              obtener_datos_retenciones  RETURNING value(r_lv_ok) TYPE char1,
  65.              obtener_proveedores_eventuales
  66.                                         RETURNING value(r_lv_ok) TYPE char1,
  67.              obtener_datos_percepciones RETURNING value(r_lv_ok) TYPE char1,
  68.              obtener_tablas_conversion  RETURNING value(r_lv_ok) TYPE char1,
  69.              obtener_tablas_accesorias  RETURNING value(r_lv_ok) TYPE char1,
  70.              obtener_datos_prov_clie    IMPORTING i_lv_bukrs TYPE bkpf-bukrs
  71.                                                   i_lv_belnr TYPE bkpf-belnr
  72.                                                   i_lv_gjahr TYPE bkpf-gjahr
  73.                                                   i_lv_koart TYPE bseg-koart
  74.                                                   i_lv_lifnr TYPE bseg-lifnr
  75.                                                   i_lv_kunnr TYPE bseg-kunnr
  76.                                         CHANGING  c_lv_stcd1 TYPE kna1-stcd1 OPTIONAL
  77.                                                   c_lv_stcd2 TYPE kna1-stcd2 OPTIONAL
  78.                                                   c_lv_stcdt TYPE kna1-stcdt OPTIONAL
  79.                                                   c_lv_name1 TYPE kna1-name1 OPTIONAL
  80.                                                   c_lv_fityp TYPE kna1-fityp OPTIONAL
  81.                                                   c_lv_regio TYPE kna1-regio OPTIONAL
  82.                                                   c_lv_stras TYPE kna1-stras OPTIONAL
  83.                                                   c_lv_telf1 TYPE kna1-telf1 OPTIONAL
  84.                                                   c_lv_pstlz TYPE kna1-pstlz OPTIONAL
  85.                                                   c_lv_ort01 TYPE kna1-ort01 OPTIONAL
  86.                                                   c_lv_gridt TYPE knb1-gridt OPTIONAL
  87.                                                   c_lv_mcod3 TYPE kna1-mcod3 OPTIONAL
  88.                                                   c_lv_adrnr TYPE kna1-adrnr OPTIONAL,
  89.     armar_tabla_aplicativo_per,
  90.     armar_tabla_aplicativo_ret,
  91.     armar_archivo_salida,
  92.     mostrar_alv,
  93.     armar_fieldcat             CHANGING c_lt_fieldcat TYPE slis_t_fieldcat_alv,
  94.     asignar_tabla,
  95.     tipo_impuesto              RETURNING value(r_lv_tipo_impuesto) TYPE char1.
  96. ENDCLASS.                    "lcl_aplic IMPLEMENTATION
  97. *----------------------------------------------------------------------*
  98. *                                                                      *
  99. *                                                                      *
  100. *                          IMPLEMENTATIONS                             *
  101. *                                                                      *
  102. *                                                                      *
  103. *----------------------------------------------------------------------*
  104. *----------------------------------------------------------------------*
  105. *       CLASS lcl_aplic IMPLEMENTATION                                 *
  106. *----------------------------------------------------------------------*
  107. *                                                                      *
  108. *----------------------------------------------------------------------*
  109. CLASS lcl_aplic IMPLEMENTATION.
  110. *----------------------------------------------------------------------*
  111. *      Method Constructo                                               *
  112. *----------------------------------------------------------------------*
  113. *      Metodo principal de los aplicativos                             *
  114. *----------------------------------------------------------------------*
  115.   METHOD constructor.
  116. *   Guardo la descripción que luego será util para el ALV
  117.     gv_tapli = i_lv_tapli.
  118.     gv_descr = i_lv_descr.
  119.  
  120. *   Obtengo la moneda local
  121.     SELECT SINGLE waers
  122.     FROM t001 INTO gv_waers
  123.     WHERE bukrs = p_bukrs.
  124.   ENDMETHOD.                    "lcl_aplic
  125. *----------------------------------------------------------------------*
  126. *      Method main                                                     *
  127. *----------------------------------------------------------------------*
  128. *      Metodo principal de los aplicativos                             *
  129. *----------------------------------------------------------------------*
  130.   METHOD main.
  131. *   Borro los registro de la tabla que contiene la salida de los archivos
  132.     REFRESH gt_archivo1.
  133.     REFRESH gt_archivo2.
  134.     CLEAR   gv_dffilen1.
  135.     CLEAR   gv_dffilen2.
  136.     REFRESH gt_archivo3.
  137.     CLEAR   gv_dffilen3.
  138.  
  139.     IF me->armar_rangos( ) EQ abap_true.
  140.       IF me->obtener_datos( ) EQ abap_true.
  141. *        me->armar_tabla_aplicativo( ).
  142.         me->armar_tabla_aplicativo_per( ).
  143.         me->armar_tabla_aplicativo_ret( ).
  144.         me->armar_archivo_salida( ).
  145.         me->mostrar_alv( ).
  146.       ENDIF.
  147.     ENDIF.
  148.   ENDMETHOD.                    "carga_textos_botones
  149. *----------------------------------------------------------------------*
  150. *      Method carga_textos_botones                                     *
  151. *----------------------------------------------------------------------*
  152. *      Carga textos en los botones                                     *
  153. *----------------------------------------------------------------------*
  154.   METHOD carga_textos_botones.
  155.  
  156.   ENDMETHOD.                    "carga_textos_botones
  157. *----------------------------------------------------------------------*
  158. *      Method devolver_dynpro                                          *
  159. *----------------------------------------------------------------------*
  160. *      Devuelve la dynpro determinada por este aplicativo              *
  161. *----------------------------------------------------------------------*
  162.   METHOD devolver_dynpro.
  163.  
  164.   ENDMETHOD.                    "devolver_dynpro
  165. *----------------------------------------------------------------------*
  166. *      Method buscar_tabla_de_boton                                    *
  167. *----------------------------------------------------------------------*
  168. *      Buscar tabla relacionada con el boton                           *
  169. *----------------------------------------------------------------------*
  170.   METHOD buscar_tabla_de_boton.
  171.  
  172.   ENDMETHOD.                    "buscar_tabla_de_boton
  173. *----------------------------------------------------------------------*
  174. *      Method armar_rangos                                             *
  175. *----------------------------------------------------------------------*
  176. *      Armar rangos                                                    *
  177. *----------------------------------------------------------------------*
  178.   METHOD armar_rangos.
  179.     DATA: ls_rg_blart LIKE LINE OF gt_rg_blart,
  180.           ls_rg_ktosl LIKE LINE OF gt_rg_ktosl,
  181.           ls_rg_witht LIKE LINE OF gt_rg_witht,
  182.           ls_rg_hkont LIKE LINE OF gt_rg_hkont,
  183.           lv_tipo_aplicativ TYPE zfi_dte_tapli.
  184.     DATA l_msj TYPE c LENGTH 100.
  185.  
  186.     r_lv_ok = abap_true.
  187.  
  188.     lv_tipo_aplicativ = me->devolver_tipo_aplicativ(  ).
  189. *   ------------------------------------------------------------ *
  190. *   Armo rango de clases de documentos validas para el aplicativo
  191. *   ------------------------------------------------------------ *
  192.     SELECT blart AS low
  193.     FROM zfi_af_cla_doc_t
  194.     INTO CORRESPONDING FIELDS OF TABLE gt_rg_blart
  195.     WHERE tapli EQ 'PR' OR tapli EQ 'RT' OR tapli EQ 'NC'.
  196.  
  197.     ls_rg_blart-sign   = 'I'.
  198.     ls_rg_blart-option = 'EQ'.
  199.     MODIFY gt_rg_blart FROM ls_rg_blart
  200.     TRANSPORTING sign option WHERE sign IS INITIAL.
  201.  
  202.     IF me->necesita_zfi_af_cla_doc_t( ) EQ abap_true
  203.       AND gt_rg_blart[] IS INITIAL.
  204.  
  205.       CONCATENATE text-001 'ZFI_AF_CLA_DOC_T' INTO l_msj SEPARATED BY space.
  206.       MESSAGE l_msj TYPE 'I'.
  207.     ENDIF.
  208. *   ------------------------------------------------------------ *
  209. *   Armo rango de claves de operacion validas para el aplicativo
  210. *   ------------------------------------------------------------ *
  211.     SELECT ktosl AS low
  212.     FROM zfi_af_cla_ope_t
  213.     INTO CORRESPONDING FIELDS OF TABLE gt_rg_ktosl
  214.     WHERE tapli EQ 'PR'.
  215.  
  216.     ls_rg_ktosl-sign   =  'I'.
  217.     ls_rg_ktosl-option =  'EQ'.
  218.     MODIFY gt_rg_ktosl FROM ls_rg_ktosl
  219.     TRANSPORTING sign option WHERE sign IS INITIAL.
  220.  
  221.     IF me->necesita_zfi_af_cla_ope_t( ) EQ abap_true
  222.       AND gt_rg_ktosl[] IS INITIAL.
  223. *
  224.       CONCATENATE text-001 'ZFI_AF_CLA_OPE_T' INTO l_msj SEPARATED BY space.
  225.       MESSAGE l_msj TYPE 'I'.
  226.  
  227.       r_lv_ok = abap_false.
  228.       RETURN.
  229.     ENDIF.
  230. *   ------------------------------------------------------------ *
  231. *   Armo rango de tipos de retencion validas para el aplicativo
  232. *   ------------------------------------------------------------ *
  233.     SELECT witht AS low
  234.     FROM zfi_af_tip_ret_t
  235.     INTO CORRESPONDING FIELDS OF TABLE gt_rg_witht
  236.     WHERE tapli = 'RT'.
  237.  
  238.     ls_rg_witht-sign   =  'I'.
  239.     ls_rg_witht-option =  'EQ'.
  240.     MODIFY gt_rg_witht FROM ls_rg_witht
  241.     TRANSPORTING sign option WHERE sign IS INITIAL.
  242.  
  243.     IF me->necesita_zfi_af_tip_ret_t( ) EQ abap_true
  244.        AND gt_rg_witht[] IS INITIAL.
  245.  
  246.       CONCATENATE text-001 'ZFI_AF_TIP_RET_T' INTO l_msj SEPARATED BY space.
  247.       MESSAGE l_msj TYPE 'I'.
  248.  
  249.       r_lv_ok = abap_false.
  250.       RETURN.
  251.     ENDIF.
  252. *   ------------------------------------------------------------ *
  253. *   Armo rango de cuentas contables validas para el aplicativo
  254. *   ------------------------------------------------------------ *
  255. *    SELECT hkont AS low
  256. *    FROM zfi_af_cta_cbl
  257. *    INTO CORRESPONDING FIELDS OF TABLE gt_rg_hkont
  258. *    WHERE tapli EQ 'PR' OR tapli EQ 'RT'.
  259.  
  260. *    ls_rg_hkont-sign   =  'I'.
  261. *    ls_rg_hkont-option =  'EQ'.
  262. *    MODIFY gt_rg_hkont FROM ls_rg_hkont
  263. *    TRANSPORTING sign option WHERE sign IS INITIAL.
  264.  
  265. *    IF me->necesita_zfi_af_cta_cbl( ) EQ abap_true
  266. *       AND gt_rg_hkont[] IS INITIAL.
  267.  
  268. *      CONCATENATE text-001 'ZFI_AF_CTA_CBL' INTO l_msj SEPARATED BY space.
  269. *      MESSAGE l_msj TYPE 'I'.
  270.  
  271. *      r_lv_ok = abap_false.
  272. *      RETURN.
  273. *    ENDIF.
  274.  
  275.   ENDMETHOD.                    "buscar_tabla_de_boton
  276. *----------------------------------------------------------------------*
  277. *      Method necesita_ZFI_AF_CLA_DOC_T                                  *
  278. *----------------------------------------------------------------------*
  279. *      ¿Necesita entradas en la tabla ZFI_AF_CLA_DOC_T?                  *
  280. *----------------------------------------------------------------------*
  281.   METHOD necesita_zfi_af_cla_doc_t.
  282.     r_lv_necesita = abap_false.
  283.   ENDMETHOD.                    "necesita_ZFI_AF_CLA_DOC_T
  284. *----------------------------------------------------------------------*
  285. *      Method necesita_ZFI_AF_CLA_OPE_T                                  *
  286. *----------------------------------------------------------------------*
  287. *      ¿Necesita entradas en la ZFI_AF_CLA_OPE_T?                        *
  288. *----------------------------------------------------------------------*
  289.   METHOD necesita_zfi_af_cla_ope_t.
  290.     r_lv_necesita = abap_false.
  291.   ENDMETHOD.                    "necesita_ZFI_AF_CLA_OPE_T
  292. *----------------------------------------------------------------------*
  293. *      Method necesita_ZFI_AF_TIP_RET_T                                  *
  294. *----------------------------------------------------------------------*
  295. *      ¿Necesita entradas en la tabla ZFI_AF_TIP_RET_T?                  *
  296. *----------------------------------------------------------------------*
  297.   METHOD necesita_zfi_af_tip_ret_t.
  298.     r_lv_necesita = abap_false.
  299.   ENDMETHOD.                    "necesita_ZFI_AF_TIP_RET_T
  300. *----------------------------------------------------------------------*
  301. *      Method necesita_zfi_af_cta_cbl                                  *
  302. *----------------------------------------------------------------------*
  303. *      ¿Necesita entradas en la zfi_af_cta_cbl?                        *
  304. *----------------------------------------------------------------------*
  305.   METHOD necesita_zfi_af_cta_cbl.
  306.     r_lv_necesita = abap_false.
  307.   ENDMETHOD.                    "necesita_zfi_af_cta_cbl
  308. *----------------------------------------------------------------------*
  309. *      Method devolver_tipo_aplicativ                                  *
  310. *----------------------------------------------------------------------*
  311. *      ¿Devuelve el tipo de aplicativo, del objeto en particular       *
  312. *----------------------------------------------------------------------*
  313.   METHOD devolver_tipo_aplicativ.
  314.     r_lv_tipoaplic = space.
  315.   ENDMETHOD.                    "devolver_tipo_aplicativ
  316. *----------------------------------------------------------------------*
  317. *      Method obtener_datos                                            *
  318. *----------------------------------------------------------------------*
  319. *      Obtener datos                                                   *
  320. *----------------------------------------------------------------------*
  321.   METHOD obtener_datos.
  322.     r_lv_ok = abap_true.
  323.  
  324.     IF me->obtener_documentos_cab( ) NE abap_true.
  325.       r_lv_ok = abap_false.
  326.       RETURN.
  327.     ENDIF.
  328.  
  329.     IF me->obtener_documentos_pos( ) NE abap_true.
  330.       r_lv_ok = abap_false.
  331.       RETURN.
  332.     ENDIF.
  333.  
  334.     IF me->obtener_datos_retenciones( ) NE abap_true.
  335.       r_lv_ok = abap_false.
  336.       RETURN.
  337.     ENDIF.
  338.  
  339.     IF me->obtener_proveedores_eventuales( ) NE abap_true.
  340.       r_lv_ok = abap_false.
  341.       RETURN.
  342.     ENDIF.
  343.  
  344.     IF me->obtener_datos_percepciones( ) NE abap_true.
  345.       r_lv_ok = abap_false.
  346.       RETURN.
  347.     ENDIF.
  348.  
  349. *   Tablas de conversion, textos, etc.
  350.     IF me->obtener_tablas_conversion( ) NE abap_true.
  351.       r_lv_ok = abap_false.
  352.       RETURN.
  353.     ENDIF.
  354.  
  355. *   Obetener tablas accesorias
  356.     IF me->obtener_tablas_accesorias( ) NE abap_true.
  357.       r_lv_ok = abap_false.
  358.       RETURN.
  359.     ENDIF.
  360.  
  361.   ENDMETHOD.                    "obtener_datos
  362. *----------------------------------------------------------------------*
  363. *      Method obtener_documentos_cab                                   *
  364. *----------------------------------------------------------------------*
  365. *      Obtener cabecera de documentos                                  *
  366. *----------------------------------------------------------------------*
  367.   METHOD obtener_documentos_cab.
  368.     DATA: lv_fksto TYPE vbrk-fksto,
  369.           lv_sfakn TYPE vbrk-sfakn,
  370.           ls_bkpf  TYPE bkpf.
  371.  
  372.     r_lv_ok = abap_true.
  373.  
  374.     DATA: r_gjahr TYPE RANGE OF bkpf-gjahr.
  375.     DATA: wa_gjahr LIKE LINE OF r_gjahr.
  376.  
  377. *    IF so_gjahr IS NOT INITIAL.
  378. *      wa_gjahr-sign   = 'I'.
  379. *      wa_gjahr-option = 'EQ'.
  380. *      wa_gjahr-low    = p_gjahr.
  381. *      APPEND wa_gjahr TO r_gjahr.
  382. *    ENDIF.
  383.  
  384. *   Obtengo documentos FI
  385.     SELECT *
  386.     FROM bkpf INTO TABLE gt_bkpf
  387.     WHERE     bukrs = p_bukrs
  388.           AND belnr IN so_belnr
  389.           AND budat IN so_budat
  390.           AND gjahr IN so_gjahr
  391.           AND blart IN gt_rg_blart
  392.           AND stblg EQ space.
  393.  
  394.  
  395.     agregar_registros_cab( ).
  396.  
  397.     IF tipo_impuesto( ) EQ 'P'(c03).
  398. *     Se busca los documentos de MM y se descartan los anulados y las
  399. *     anulaciones (La anulacion desde SD generalmente vincula los
  400. *     documentos contables correspondientes, pero hay algunas excep.)
  401.       LOOP AT gt_bkpf INTO ls_bkpf WHERE awtyp = 'VBRK'.
  402.         SELECT SINGLE fksto sfakn
  403.         FROM vbrk INTO (lv_fksto, lv_sfakn)
  404.         WHERE vbeln = ls_bkpf-awkey.
  405.         IF    sy-subrc NE 0
  406.            OR lv_fksto IS NOT INITIAL  "Documento de anulacion
  407.            OR lv_sfakn IS NOT INITIAL. "Documento anulado
  408.           DELETE gt_bkpf.
  409.         ENDIF.
  410.       ENDLOOP.
  411.     ENDIF.
  412.  
  413. *   Se eliminan documentos anulados
  414.     DELETE gt_bkpf WHERE stgrd NE space.
  415.  
  416.  
  417.     eliminar_registros_cab( ).
  418.  
  419. *   Se valida que hayan datos
  420.     IF gt_bkpf[] IS INITIAL.
  421.  
  422.       MESSAGE text-002 TYPE 'I'.
  423.       r_lv_ok = abap_false.
  424.       RETURN.
  425.     ENDIF.
  426.  
  427.   ENDMETHOD.                    "obtener_documentos_cab
  428. *----------------------------------------------------------------------*
  429. *      Method agregar_registros_cab                                    *
  430. *----------------------------------------------------------------------*
  431. *      Agregar registros a las cabeceras por aplicativo en particular  *
  432. *----------------------------------------------------------------------*
  433.   METHOD agregar_registros_cab.
  434.  
  435.   ENDMETHOD.                    "agregar_registros_cab
  436. *----------------------------------------------------------------------*
  437. *      Method eliminar_registros_cab                                   *
  438. *----------------------------------------------------------------------*
  439. *      Eliminar registros a las cabeceras por aplicativo en particular *
  440. *----------------------------------------------------------------------*
  441.   METHOD eliminar_registros_cab.
  442.  
  443.   ENDMETHOD.                    "eliminar_registros_cab
  444. *----------------------------------------------------------------------*
  445. *      Method obtener_documentos_pos                                   *
  446. *----------------------------------------------------------------------*
  447. *      Obtener Posicion de documentos                                  *
  448. *----------------------------------------------------------------------*
  449.   METHOD obtener_documentos_pos.
  450.     DATA: ls_bkpf TYPE bkpf.
  451.  
  452.     r_lv_ok = abap_true.
  453.  
  454.     CLEAR gt_bseg.
  455.  
  456. *   Obtengo posiciones del documento para las claves de operacion relevantes
  457.     IF NOT gt_rg_ktosl[] IS INITIAL.
  458.       SELECT *
  459.       FROM bseg APPENDING TABLE gt_bseg
  460.       FOR ALL ENTRIES IN gt_bkpf
  461.       WHERE     bukrs EQ gt_bkpf-bukrs
  462.             AND belnr EQ gt_bkpf-belnr
  463.             AND gjahr EQ gt_bkpf-gjahr
  464.             AND ktosl IN gt_rg_ktosl.
  465.     ENDIF.
  466.  
  467. *   Obtengo posiciones del documento para los tipos de retencion relevantes
  468.     IF NOT gt_rg_witht[] IS INITIAL.
  469.       SELECT *
  470.       FROM bseg APPENDING TABLE gt_bseg
  471.       FOR ALL ENTRIES IN gt_bkpf
  472.       WHERE     bukrs EQ gt_bkpf-bukrs
  473.             AND belnr EQ gt_bkpf-belnr
  474.             AND gjahr EQ gt_bkpf-gjahr
  475.             AND qsskz IN gt_rg_witht.
  476.     ENDIF.
  477.  
  478. *   Obtengo posiciones del documento para las cuentas contables relevantes
  479.     IF NOT gt_rg_hkont[] IS INITIAL.
  480.       SELECT *
  481.       FROM bseg APPENDING TABLE gt_bseg
  482.       FOR ALL ENTRIES IN gt_bkpf
  483.       WHERE     bukrs EQ gt_bkpf-bukrs
  484.             AND belnr EQ gt_bkpf-belnr
  485.             AND gjahr EQ gt_bkpf-gjahr
  486.             AND hkont IN gt_rg_hkont.
  487.     ENDIF.
  488.  
  489. *   Valido que haya al menos una posicion
  490.     DELETE ADJACENT DUPLICATES FROM gt_bseg.
  491.  
  492.     IF gt_bseg[] IS INITIAL.
  493.       MESSAGE text-002 TYPE 'I'.
  494.       r_lv_ok = abap_false.
  495.       RETURN.
  496.     ENDIF.
  497.  
  498. *   Obtengo posiciones de proveedores/clientes
  499.     SELECT *
  500.     FROM bseg INTO TABLE gt_bseg_k_d
  501.     FOR ALL ENTRIES IN gt_bseg
  502.     WHERE     bukrs EQ gt_bseg-bukrs
  503.           AND belnr EQ gt_bseg-belnr
  504.           AND gjahr EQ gt_bseg-gjahr
  505.           AND koart IN (c_koart_k, c_koart_d).
  506.  
  507. *   Ordenar bseg_k_d, luego se utiliza BINARY SEARCH
  508.     SORT gt_bseg_k_d BY bukrs belnr gjahr.
  509.  
  510. *   Descarto los documentos para los que no se encontró ninguna posición
  511.     LOOP AT gt_bkpf INTO ls_bkpf.
  512.       READ TABLE gt_bseg TRANSPORTING NO FIELDS
  513.       WITH KEY bukrs = ls_bkpf-bukrs
  514.                belnr = ls_bkpf-belnr
  515.                gjahr = ls_bkpf-gjahr.
  516.       IF sy-subrc NE 0.
  517.         DELETE gt_bkpf.
  518.       ENDIF.
  519.     ENDLOOP.
  520.  
  521. *   Leo datos maestros de proveedores y clientes
  522.     IF gt_bseg_k_d[] IS NOT INITIAL.
  523.       SELECT *
  524.       FROM kna1 INTO TABLE gt_kna1
  525.       FOR ALL ENTRIES IN gt_bseg_k_d
  526.       WHERE kunnr EQ gt_bseg_k_d-kunnr.
  527.  
  528.       SELECT *
  529.       FROM knb1 INTO TABLE gt_knb1
  530.       FOR ALL ENTRIES IN gt_bseg_k_d
  531.       WHERE     kunnr EQ gt_bseg_k_d-kunnr
  532.             AND bukrs EQ gt_bseg_k_d-bukrs.
  533. *      ELSE.
  534.       SELECT *
  535.       FROM lfa1 INTO TABLE gt_lfa1
  536.       FOR ALL ENTRIES IN gt_bseg_k_d
  537.       WHERE lifnr EQ gt_bseg_k_d-lifnr.
  538.  
  539.       SELECT *
  540.       FROM lfb1 INTO TABLE gt_lfb1
  541.       FOR ALL ENTRIES IN gt_bseg_k_d
  542.       WHERE     lifnr EQ gt_bseg_k_d-lifnr
  543.             AND bukrs EQ gt_bseg_k_d-bukrs.
  544.  
  545.     ENDIF.
  546.   ENDMETHOD.                    "obtener_documentos_pos
  547.  
  548. *----------------------------------------------------------------------*
  549. *      Method obtener_datos_retenciones                                *
  550. *----------------------------------------------------------------------*
  551. *      Obtener datos de retenciones                                    *
  552. *----------------------------------------------------------------------*
  553.   METHOD obtener_datos_retenciones.
  554.     r_lv_ok = abap_true.
  555.  
  556. *     Obtengo datos de retenciones de los documentos encontrados
  557.     SELECT *
  558.     FROM with_item INTO TABLE gt_with_item
  559.     FOR ALL ENTRIES IN gt_bkpf
  560.     WHERE     bukrs EQ gt_bkpf-bukrs
  561.           AND belnr EQ gt_bkpf-belnr
  562.           AND gjahr EQ gt_bkpf-gjahr
  563.           AND witht IN gt_rg_witht
  564.           AND wt_qbshh NE 0.
  565.  
  566.     IF     gt_with_item[] IS INITIAL
  567.        AND me->necesita_zfi_af_tip_ret_t( ) EQ abap_true.
  568.       MESSAGE text-002 TYPE 'I'.
  569.       r_lv_ok = abap_false.
  570.       RETURN.
  571.     ENDIF.
  572.  
  573.   ENDMETHOD.                    "obtener_datos_retenciones
  574. *----------------------------------------------------------------------*
  575. *      Method obtener_proveedores_eventuales                           *
  576. *----------------------------------------------------------------------*
  577. *      Obtener proveedores eventuales                                  *
  578. *----------------------------------------------------------------------*
  579.   METHOD obtener_proveedores_eventuales.
  580.     r_lv_ok = abap_true.
  581.  
  582.     IF tipo_impuesto( ) EQ 'P'(c03).
  583. *     Obtengo posiciones de proveedores eventuales
  584.       SELECT *
  585.       FROM bsec INTO TABLE gt_bsec
  586.       FOR ALL ENTRIES IN gt_bseg
  587.       WHERE     bukrs EQ gt_bseg-bukrs
  588.             AND belnr EQ gt_bseg-belnr
  589.             AND gjahr EQ gt_bseg-gjahr.
  590.     ENDIF.
  591.   ENDMETHOD.                    "obtener_proveedores_eventuales
  592. *----------------------------------------------------------------------*
  593. *      Method obtener_datos_percepciones                               *
  594. *----------------------------------------------------------------------*
  595. *      Obtener datos percepciones                                      *
  596. *----------------------------------------------------------------------*
  597.   METHOD obtener_datos_percepciones.
  598.     r_lv_ok = abap_true.
  599.  
  600.     SELECT *
  601.     FROM bset INTO TABLE gt_bset
  602.     FOR ALL ENTRIES IN gt_bkpf
  603.     WHERE     bukrs EQ gt_bkpf-bukrs
  604.           AND belnr EQ gt_bkpf-belnr
  605.           AND gjahr EQ gt_bkpf-gjahr.
  606.  
  607.   ENDMETHOD.                    "obtener_datos_percepciones
  608. *----------------------------------------------------------------------*
  609. *      Method obtener_tablas_conversion                                *
  610. *----------------------------------------------------------------------*
  611. *      Obtener tablas de conversion por aplicativo en particular       *
  612. *----------------------------------------------------------------------*
  613.   METHOD obtener_tablas_conversion.
  614.     r_lv_ok = abap_true.
  615.   ENDMETHOD.                    "obtener_tablas_conversion
  616. *----------------------------------------------------------------------*
  617. *      Method obtener_tablas_accesorias                                *
  618. *----------------------------------------------------------------------*
  619. *      Obtener tablas accesorias por cada aplicativo                   *
  620. *----------------------------------------------------------------------*
  621.   METHOD obtener_tablas_accesorias.
  622.     r_lv_ok = abap_true.
  623.   ENDMETHOD.                    "obtener_tablas_accesorias
  624. *----------------------------------------------------------------------*
  625. *      Method armar_tabla_aplicativo                                   *
  626. *----------------------------------------------------------------------*
  627. *      Obtener Armar tabla aplicativo                                  *
  628. *----------------------------------------------------------------------*
  629.   METHOD armar_tabla_aplicativo_per.
  630.  
  631.   ENDMETHOD.                    "armar_tabla_aplicativo()
  632.   METHOD armar_tabla_aplicativo_ret.
  633.  
  634.   ENDMETHOD.                    "armar_tabla_aplicativo()
  635. *----------------------------------------------------------------------*
  636. *      Method obtener_datos_prov_clie                                  *
  637. *----------------------------------------------------------------------*
  638. *      Obtener Obtener datos prov clie                                 *
  639. *----------------------------------------------------------------------*
  640.   METHOD obtener_datos_prov_clie.
  641.     DATA: ls_bsec TYPE bsec,
  642.           ls_lfa1 TYPE lfa1,
  643.           ls_lfb1 TYPE lfb1,
  644.           ls_kna1 TYPE kna1,
  645.           ls_knb1 TYPE knb1.
  646.  
  647. *   Copio datos de proveedor/cliente
  648.     CASE i_lv_koart.
  649.       WHEN c_koart_k.
  650. *       Obtengo datos del proveedor
  651.         READ TABLE gt_lfa1 INTO ls_lfa1 WITH TABLE KEY lifnr = i_lv_lifnr.
  652.         IF sy-subrc EQ 0.
  653.           c_lv_stcd1 = ls_lfa1-stcd1.
  654.           c_lv_stcd2 = ls_lfa1-stcd2.
  655.           c_lv_stcdt = ls_lfa1-stcdt.
  656.           c_lv_name1 = ls_lfa1-name1.
  657.           c_lv_fityp = ls_lfa1-fityp.
  658.           c_lv_regio = ls_lfa1-regio.
  659.           c_lv_stras = ls_lfa1-stras.
  660.           c_lv_telf1 = ls_lfa1-telf1.
  661.           c_lv_pstlz = ls_lfa1-pstlz.
  662.           c_lv_ort01 = ls_lfa1-ort01.
  663.           c_lv_mcod3 = ls_lfa1-mcod3.
  664.           c_lv_adrnr = ls_lfa1-adrnr.
  665. *         Para proveedores eventuales tomo el campo de la tabla bsec
  666. *         Indicador: ¿Es cuenta pro diversos (CPD)?
  667.           IF ls_lfa1-xcpdk EQ abap_true.
  668.             READ TABLE gt_bsec INTO ls_bsec WITH KEY bukrs = i_lv_bukrs
  669.                                                      belnr = i_lv_belnr
  670.                                                      gjahr = i_lv_gjahr.
  671.             IF sy-subrc EQ 0.
  672.               c_lv_stcd1 = ls_bsec-stcd1.
  673.             ENDIF.
  674.           ELSE.
  675.             c_lv_stcd1 = ls_lfa1-stcd1.
  676.           ENDIF.
  677.  
  678. *         Obtengo datos del cliente para la sociedad
  679.           READ TABLE gt_lfb1 INTO ls_lfb1 WITH TABLE KEY lifnr = i_lv_lifnr
  680.                                                          bukrs = i_lv_bukrs.
  681.           IF sy-subrc EQ 0.
  682.             c_lv_gridt = ls_lfb1-gridt.
  683.           ENDIF.
  684.         ENDIF.
  685.  
  686.       WHEN c_koart_d.
  687. *       Obtengo datos del cliente
  688.         READ TABLE gt_kna1 INTO ls_kna1 WITH TABLE KEY kunnr = i_lv_kunnr.
  689.         IF sy-subrc EQ 0.
  690.           c_lv_stcd1 = ls_kna1-stcd1.
  691.           c_lv_stcd2 = ls_kna1-stcd2.
  692.           c_lv_stcdt = ls_kna1-stcdt.
  693.           c_lv_name1 = ls_kna1-name1.
  694.           c_lv_fityp = ls_kna1-fityp.
  695.           c_lv_regio = ls_kna1-regio.
  696.           c_lv_stras = ls_kna1-stras.
  697.           c_lv_telf1 = ls_kna1-telf1.
  698.           c_lv_pstlz = ls_kna1-pstlz.
  699.           c_lv_ort01 = ls_kna1-ort01.
  700.           c_lv_mcod3 = ls_kna1-mcod3.
  701.           c_lv_adrnr = ls_kna1-adrnr.
  702. *         Obtengo datos del cliente para la sociedad
  703.           READ TABLE gt_knb1 INTO ls_knb1 WITH TABLE KEY kunnr = i_lv_kunnr
  704.                                                          bukrs = i_lv_bukrs.
  705.           IF sy-subrc EQ 0.
  706.             c_lv_gridt = ls_knb1-gridt.
  707.           ENDIF.
  708.         ENDIF.
  709.     ENDCASE.
  710.   ENDMETHOD.                    "obtener_datos_prov_clie
  711. *----------------------------------------------------------------------*
  712. *      Method mostrar_alv                                              *
  713. *----------------------------------------------------------------------*
  714. *      Mostrar ALV                                                     *
  715. *----------------------------------------------------------------------*
  716.   METHOD mostrar_alv.
  717.  
  718.     DATA: ls_layout   TYPE slis_layout_alv.
  719.     DATA: lt_fieldcat TYPE slis_t_fieldcat_alv.
  720.     DATA: lt_events   TYPE slis_t_event,
  721.           ls_event    TYPE slis_alv_event.
  722.     DATA: lt_sort     TYPE slis_t_sortinfo_alv,
  723.           ls_sort     TYPE slis_sortinfo_alv.
  724.     DATA: lv_titulo   TYPE lvc_title,
  725.           lv_repid    TYPE syst-repid.
  726.  
  727. *    CLEAR ls_sort.
  728. *    ls_sort-spos = 1.
  729. *    ls_sort-fieldname = 'BLDAT'.
  730. *    ls_sort-up        = 'X'.
  731. *    APPEND ls_sort TO lt_sort.
  732.  
  733. *   Opciones de visualizacion
  734.     CLEAR ls_layout.
  735.     ls_layout-colwidth_optimize = 'X'.
  736.     ls_layout-zebra             = 'X'.
  737.  
  738. *   Eventos del ALV
  739.     ls_event-name = slis_ev_pf_status_set.
  740.     ls_event-form = 'ALV_SET_STATUS'.
  741.     APPEND ls_event TO lt_events.
  742.  
  743.     ls_event-name = slis_ev_user_command.
  744.     ls_event-form = 'ALV_USER_COMMAND'.
  745.     APPEND ls_event TO lt_events.
  746.  
  747. *   Arma fieldcat en particular por cada aplicativo
  748.     armar_fieldcat( CHANGING c_lt_fieldcat = lt_fieldcat[] ).
  749.  
  750. *   Asignar la tabla correspondiente por aplicativo
  751.     asignar_tabla( ).
  752.  
  753. *    CONCATENATE gv_tapli '-' gv_descr INTO lv_titulo SEPARATED BY space.
  754.     lv_titulo = gv_descr.
  755.     lv_repid = sy-repid.
  756.  
  757. *   Asignar field symbol al archivo de salida de este aplicativo,
  758. *   para ser usado fuera de la clase
  759.     ASSIGN gt_archivo1 TO <fs_archivo1>.
  760.     ASSIGN gt_archivo2 TO <fs_archivo2>.
  761.     ASSIGN gv_dffilen1 TO <fs_dffilen1>.
  762.     ASSIGN gv_dffilen2 TO <fs_dffilen2>.
  763.     ASSIGN gt_archivo3 TO <fs_archivo3>.
  764.     ASSIGN gv_dffilen3 TO <fs_dffilen3>.
  765.  
  766. *   Muestro el ALV
  767.     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  768.       EXPORTING
  769.         i_callback_program = lv_repid
  770.         i_grid_title       = lv_titulo
  771.         is_layout          = ls_layout
  772.         it_fieldcat        = lt_fieldcat
  773.         it_events          = lt_events
  774. *        it_sort            = lt_sort
  775.       TABLES
  776.         t_outtab           = <fs_alv>.
  777.  
  778.   ENDMETHOD.                    "mostrar_alv
  779. *----------------------------------------------------------------------*
  780. *      Method armar_fieldcat                                           *
  781. *----------------------------------------------------------------------*
  782. *      Armar fieldcat                                                  *
  783. *----------------------------------------------------------------------*
  784.   METHOD armar_fieldcat.
  785.     DATA: ls_fieldcat TYPE slis_fieldcat_alv. "lvc_s_fcat.
  786.  
  787. *   Sociedad
  788.     load_fieldcat 'BUKRS' 'Soc.'(091)
  789.                           'Sociedad'(092)
  790.                           'Sociedad'(092)
  791.                           0 space space.
  792.  
  793.     load_fieldcat 'BELNR' 'Documento'(093)
  794.                           'Documento'(093)
  795.                           'Documento'(093)
  796.                           0 space space.
  797.  
  798.     load_fieldcat 'GJAHR' 'Ejercicio'(094)
  799.                           'Ejercicio'(094)
  800.                           'Ejercicio'(094)
  801.                           0 space space.
  802.   ENDMETHOD.                    "armar_fieldcat
  803. *----------------------------------------------------------------------*
  804. *      Method asignar_tabla                                            *
  805. *----------------------------------------------------------------------*
  806. *      Asignar tabla                                                   *
  807. *----------------------------------------------------------------------*
  808.   METHOD asignar_tabla.
  809.  
  810.   ENDMETHOD.                    "asignar_tabla
  811. *----------------------------------------------------------------------*
  812. *      Method tipo_impuesto                                            *
  813. *----------------------------------------------------------------------*
  814. *      Devuelve el tipo de impuesto, para realizar o no funcionalidades*
  815. *----------------------------------------------------------------------*
  816.   METHOD tipo_impuesto.
  817. *  Existen cuatro tipos de impuestos:
  818. *  'P'(c03) Percepciones efectuadas
  819. *  'R'(c04) Retenciones efectuadas
  820. *  '1'(c07) Percepciones sufridas
  821. *  '2'(c08) Retenciones sufridas
  822.   ENDMETHOD.                    "tipo_impuesto
  823. *----------------------------------------------------------------------*
  824. *      Method armar_archivo_salida                                     *
  825. *----------------------------------------------------------------------*
  826.   METHOD armar_archivo_salida.
  827.   ENDMETHOD.                    "armar_archivo_salida
  828. ENDCLASS.                    "lcl_aplic IMPLEMENTATION
  829. *&---------------------------------------------------------------------*
  830. *&      Form  ALV_SET_STATUS
  831. *&---------------------------------------------------------------------*
  832. FORM alv_set_status USING ft_extab TYPE slis_t_extab .      "#EC CALLED
  833.  
  834.   SET PF-STATUS 'ZFI_STATUS_ALV'  EXCLUDING ft_extab.
  835.  
  836. ENDFORM.                    " ALV_SET_STATUS
  837. *---------------------------------------------------------------------*
  838. *  FORM ALV_USER_COMMAND
  839. *----------------------------------------------------------------------*
  840. FORM alv_user_command USING r_ucomm     LIKE sy-ucomm
  841.                             rs_selfield TYPE slis_selfield. "#EC CALLED
  842.  
  843.   CASE r_ucomm.
  844.     WHEN 'DOWNLOAD'.
  845.       PERFORM exportar_archivo.
  846.     WHEN '&IC1'.
  847.       PERFORM visualizar_documento USING rs_selfield-tabindex.
  848.   ENDCASE.
  849.  
  850. ENDFORM.                    " ALV_USER_COMMAND
  851.  
  852.  
  853. *&---------------------------------------------------------------------*
  854. *&      Form  EXPORTAR_ARCHIVO
  855. *&---------------------------------------------------------------------*
  856. FORM exportar_archivo .
  857.  
  858.   DATA: lv_filename TYPE string,
  859.         lv_path     TYPE string,
  860.         lv_fullpath TYPE string,
  861.         lv_dffilen  TYPE string.
  862.  
  863.   IF <fs_archivo1> IS NOT INITIAL.
  864.  
  865. *    lv_dffilen = <fs_dffilen1>.
  866.     lv_dffilen = 'DATOS'.
  867.  
  868.     IF rb_ar1 IS NOT INITIAL.
  869.  
  870. *  Permito que el usuario determine el nombre del archivo de salida
  871.       CALL METHOD cl_gui_frontend_services=>file_save_dialog
  872.         EXPORTING
  873.           default_file_name    = lv_dffilen
  874.         CHANGING
  875.           filename             = lv_filename
  876.           path                 = lv_path
  877.           fullpath             = lv_fullpath
  878.         EXCEPTIONS
  879.           cntl_error           = 1
  880.           error_no_gui         = 2
  881.           not_supported_by_gui = 3
  882.           OTHERS               = 4.
  883.       IF sy-subrc <> 0.
  884.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  885.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  886.       ENDIF.
  887.  
  888.       CHECK lv_fullpath IS NOT INITIAL.
  889.       CONCATENATE lv_fullpath '.TXT' INTO lv_fullpath.
  890.  
  891.       CALL METHOD cl_gui_frontend_services=>gui_download
  892.         EXPORTING
  893.           filename                = lv_fullpath
  894.           filetype                = 'VSS'
  895.           codepage                = '4110'
  896.         CHANGING
  897.           data_tab                = <fs_archivo1>
  898.         EXCEPTIONS
  899.           file_write_error        = 1
  900.           no_batch                = 2
  901.           gui_refuse_filetransfer = 3
  902.           invalid_type            = 4
  903.           no_authority            = 5
  904.           unknown_error           = 6
  905.           header_not_allowed      = 7
  906.           separator_not_allowed   = 8
  907.           filesize_not_allowed    = 9
  908.           header_too_long         = 10
  909.           dp_error_create         = 11
  910.           dp_error_send           = 12
  911.           dp_error_write          = 13
  912.           unknown_dp_error        = 14
  913.           access_denied           = 15
  914.           dp_out_of_memory        = 16
  915.           disk_full               = 17
  916.           dp_timeout              = 18
  917.           file_not_found          = 19
  918.           dataprovider_exception  = 20
  919.           control_flush_error     = 21
  920.           not_supported_by_gui    = 22
  921.           error_no_gui            = 23
  922.           OTHERS                  = 24.
  923.       IF sy-subrc NE 0.
  924.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  925.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  926.       ENDIF.
  927.     ENDIF.
  928.   ENDIF.
  929.  
  930.   CLEAR: lv_filename,
  931.          lv_path,
  932.          lv_fullpath.
  933.  
  934.   IF <fs_archivo2> IS NOT INITIAL.
  935.  
  936. *    lv_dffilen = <fs_dffilen2>.
  937.     lv_dffilen = 'RETPER'.
  938.  
  939.     IF rb_ar2 IS NOT INITIAL.
  940.  
  941. * Permito que el usuario determine el nombre del archivo de salida
  942.       CALL METHOD cl_gui_frontend_services=>file_save_dialog
  943.         EXPORTING
  944.           default_file_name    = lv_dffilen
  945.         CHANGING
  946.           filename             = lv_filename
  947.           path                 = lv_path
  948.           fullpath             = lv_fullpath
  949.         EXCEPTIONS
  950.           cntl_error           = 1
  951.           error_no_gui         = 2
  952.           not_supported_by_gui = 3
  953.           OTHERS               = 4.
  954.       IF sy-subrc <> 0.
  955.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  956.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  957.       ENDIF.
  958.  
  959.       CHECK lv_fullpath IS NOT INITIAL.
  960.       CONCATENATE lv_fullpath '.TXT' INTO lv_fullpath.
  961.  
  962.       CALL METHOD cl_gui_frontend_services=>gui_download
  963.         EXPORTING
  964.           filename                = lv_fullpath
  965.           filetype                = 'VSS'
  966.         CHANGING
  967.           data_tab                = <fs_archivo2>
  968.         EXCEPTIONS
  969.           file_write_error        = 1
  970.           no_batch                = 2
  971.           gui_refuse_filetransfer = 3
  972.           invalid_type            = 4
  973.           no_authority            = 5
  974.           unknown_error           = 6
  975.           header_not_allowed      = 7
  976.           separator_not_allowed   = 8
  977.           filesize_not_allowed    = 9
  978.           header_too_long         = 10
  979.           dp_error_create         = 11
  980.           dp_error_send           = 12
  981.           dp_error_write          = 13
  982.           unknown_dp_error        = 14
  983.           access_denied           = 15
  984.           dp_out_of_memory        = 16
  985.           disk_full               = 17
  986.           dp_timeout              = 18
  987.           file_not_found          = 19
  988.           dataprovider_exception  = 20
  989.           control_flush_error     = 21
  990.           not_supported_by_gui    = 22
  991.           error_no_gui            = 23
  992.           OTHERS                  = 24.
  993.       IF sy-subrc NE 0.
  994.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  995.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  996.       ENDIF.
  997.     ENDIF.
  998.  
  999.   ENDIF.
  1000.  
  1001.   IF <fs_archivo3> IS NOT INITIAL.
  1002.  
  1003. *    lv_dffilen = <fs_dffilen3>.
  1004.     lv_dffilen = 'NCFACT'.
  1005.  
  1006.     IF rb_ar3 IS NOT INITIAL.
  1007.  
  1008. * Permito que el usuario determine el nombre del archivo de salida
  1009.       CALL METHOD cl_gui_frontend_services=>file_save_dialog
  1010.         EXPORTING
  1011.           default_file_name    = lv_dffilen
  1012.         CHANGING
  1013.           filename             = lv_filename
  1014.           path                 = lv_path
  1015.           fullpath             = lv_fullpath
  1016.         EXCEPTIONS
  1017.           cntl_error           = 1
  1018.           error_no_gui         = 2
  1019.           not_supported_by_gui = 3
  1020.           OTHERS               = 4.
  1021.       IF sy-subrc <> 0.
  1022.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1023.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1024.       ENDIF.
  1025.  
  1026.       CHECK lv_fullpath IS NOT INITIAL.
  1027.       CONCATENATE lv_fullpath '.TXT' INTO lv_fullpath.
  1028.  
  1029.       CALL METHOD cl_gui_frontend_services=>gui_download
  1030.         EXPORTING
  1031.           filename                = lv_fullpath
  1032.           filetype                = 'VSS'
  1033.         CHANGING
  1034.           data_tab                = <fs_archivo3>
  1035.         EXCEPTIONS
  1036.           file_write_error        = 1
  1037.           no_batch                = 2
  1038.           gui_refuse_filetransfer = 3
  1039.           invalid_type            = 4
  1040.           no_authority            = 5
  1041.           unknown_error           = 6
  1042.           header_not_allowed      = 7
  1043.           separator_not_allowed   = 8
  1044.           filesize_not_allowed    = 9
  1045.           header_too_long         = 10
  1046.           dp_error_create         = 11
  1047.           dp_error_send           = 12
  1048.           dp_error_write          = 13
  1049.           unknown_dp_error        = 14
  1050.           access_denied           = 15
  1051.           dp_out_of_memory        = 16
  1052.           disk_full               = 17
  1053.           dp_timeout              = 18
  1054.           file_not_found          = 19
  1055.           dataprovider_exception  = 20
  1056.           control_flush_error     = 21
  1057.           not_supported_by_gui    = 22
  1058.           error_no_gui            = 23
  1059.           OTHERS                  = 24.
  1060.       IF sy-subrc NE 0.
  1061.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1062.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1063.       ENDIF.
  1064.     ENDIF.
  1065.   ENDIF.
  1066.  
  1067. ENDFORM.                    " EXPORTAR_ARCHIVO
  1068. *&---------------------------------------------------------------------*
  1069. *&      Form  VISUALIZAR_DOCUMENTO
  1070. *&---------------------------------------------------------------------*
  1071. FORM visualizar_documento USING f_tabix TYPE sy-tabix.
  1072.  
  1073.   FIELD-SYMBOLS: <fs_registro> TYPE ANY.
  1074.  
  1075.   FIELD-SYMBOLS: <fs_bukrs> TYPE bkpf-bukrs,
  1076.                  <fs_belnr> TYPE bkpf-belnr,
  1077.                  <fs_gjahr> TYPE bkpf-gjahr.
  1078.  
  1079.   CHECK f_tabix IS NOT INITIAL.
  1080.  
  1081.   READ TABLE <fs_alv> ASSIGNING <fs_registro> INDEX f_tabix.
  1082.  
  1083.   ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <fs_registro> TO <fs_bukrs>.
  1084.   CHECK <fs_bukrs> IS ASSIGNED.
  1085.   ASSIGN COMPONENT 'BELNR' OF STRUCTURE <fs_registro> TO <fs_belnr>.
  1086.   CHECK <fs_belnr> IS ASSIGNED.
  1087.   ASSIGN COMPONENT 'GJAHR' OF STRUCTURE <fs_registro> TO <fs_gjahr>.
  1088.   CHECK <fs_gjahr> IS ASSIGNED.
  1089.  
  1090.   CHECK <fs_bukrs> IS NOT INITIAL
  1091.     AND <fs_belnr> IS NOT INITIAL
  1092.     AND <fs_gjahr> IS NOT INITIAL.
  1093.  
  1094.   SET PARAMETER ID 'BUK' FIELD <fs_bukrs>.
  1095.   SET PARAMETER ID 'BLN' FIELD <fs_belnr>.
  1096.   SET PARAMETER ID 'GJR' FIELD <fs_gjahr>.
  1097.   CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
  1098.  
  1099. ENDFORM.                    " VISUALIZAR_DOCUMENTO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement