Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 25

*&---------------------------------------------------------------------*

*& Report  ZPRUEBA_VIATICOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZPRUEBA_VIATICOS_VER2.

INCLUDE ZPRUEBA_VIATICOS_VER2_TOP.
INCLUDE ZPRUEBA_VIATICOS_VER2_F01.
*&---------------------------------------------------------------------*
*&  Include           ZPRUEBA_VIATICOS_TOP
*&---------------------------------------------------------------------*

TABLES: ZVIATICOS_FOLIO,
        BSEG.
DATA: WA_BSEG TYPE BSEG.

DATA: fechaMov TYPE string.
DATA: stamp_1 TYPE TIMESTAMP, stamp_2 TYPE TIMESTAMPL.

*DATIOS PARA LAS OPERACIONES DE LA BAPI*
  TYPES :
  BEGIN OF ty_total,
    id_usuario type c LENGTH 6,
    total type p LENGTH 16 DECIMALS 2,
    END OF ty_total.

  data:
        tg_total TYPE STANDARD TABLE OF ty_total,
        wa_total TYPE ty_total.
  DATA: LV_LINES TYPE I.
*DATIOS PARA LAS OPERACIONES DE LA BAPI*

*****************TABLAS SECUNDARIAS PARA OPERACIONES DE LA BAPI**********
*******
TYPES: BEGIN OF ty_accountgl_2,
       ITEMNO_ACC TYPE N LENGTH 10,
       GL_ACCOUNT TYPE C LENGTH 10,
       ITEM_TEXT  TYPE C LENGTH 50,
       ALLOC_NMBR TYPE C LENGTH 18,
       TAX_CODE   TYPE C LENGTH 2,
       COSTCENTER TYPE C LENGTH 10,
END OF ty_accountgl_2.

DATA: it_accountgl_2 TYPE STANDARD TABLE OF ty_accountgl_2,
      wa_accountgl_2 LIKE LINE OF it_accountgl_2.

TYPES: BEGIN OF ty_accountreceivable_2,
       ITEMNO_ACC TYPE N LENGTH 10,
       CUSTOMER   TYPE C LENGTH 10,
       COMP_CODE  TYPE C LENGTH 4,
       ALLOC_NMBR TYPE C LENGTH 18,
       ITEM_TEXT  TYPE C LENGTH 50,
END OF ty_accountreceivable_2.
DATA: it_accountreceivable_2 TYPE STANDARD TABLE OF ty_accountreceivable_
2,
      wa_accountreceivable_2 LIKE LINE OF it_accountreceivable_2.

TYPES: BEGIN OF ty_accounttax_2,
       ITEMNO_ACC TYPE C LENGTH 10,
       GL_ACCOUNT TYPE C LENGTH 10,
       TAX_CODE   TYPE C LENGTH 2,
END OF ty_accounttax_2.

DATA: it_accounttax_2 TYPE STANDARD TABLE OF ty_accounttax_2,
      wa_accounttax_2 LIKE LINE OF it_accounttax_2.

TYPES: BEGIN OF ty_currencyamount_2,
       ITEMNO_ACC TYPE N LENGTH 10,
       CURR_TYPE  TYPE C LENGTH 2,
       CURRENCY   TYPE C LENGTH 5,
       AMT_DOCCUR TYPE P LENGTH 12 DECIMALS 4,
       AMT_BASE   TYPE P LENGTH 12 DECIMALS 4,
END OF ty_currencyamount_2.

DATA: it_currencyamount_2 TYPE STANDARD TABLE OF ty_currencyamount_2,
      wa_currencyamount_2 LIKE LINE OF it_currencyamount_2.

TYPES: BEGIN OF ty_all_bapi,
*      it_accountgl
       ITEMNO_ACC     TYPE N LENGTH 10,
       GL_ACCOUNT     TYPE C LENGTH 10,
       ITEM_TEXT      TYPE C LENGTH 50,
       ALLOC_NMBR     TYPE C LENGTH 18,
       TAX_CODE       TYPE C LENGTH 2,
       COSTCENTER     TYPE C LENGTH 10,
*      it_accountreceivable
       CUSTOMER       TYPE C LENGTH 10,
       COMP_CODE      TYPE C LENGTH 4,
*      it_accounttax
       GL_ACCOUNT_IVA TYPE C LENGTH 10,
       TAX_CODE_IVA   TYPE C LENGTH 2,
*      it_currencyamount
       CURR_TYPE      TYPE C LENGTH 2,
       CURRENCY       TYPE C LENGTH 5,
       AMT_DOCCUR     TYPE P LENGTH 12 DECIMALS 4,
       AMT_BASE       TYPE P LENGTH 12 DECIMALS 4,
END OF ty_all_bapi.

DATA: it_all_bapi TYPE STANDARD TABLE OF ty_all_bapi,
      wa_all_bapi LIKE LINE OF it_all_bapi.
*****************TABLAS SECUNDARIAS PARA OPERACIONES DE LA BAPI**********
*******
*TABLAS A OCUPAR
TABLES: KNA1,
        BSAD,
        BKPF.

*******variables para hacer la relación con la bapi*******
DATA: VL_NUM_EMP TYPE c LENGTH 6,"10,
      VL_TOTAL   TYPE p LENGTH 16 DECIMALS 2,
      VL_TOTAL_2 TYPE p LENGTH 16 DECIMALS 2,
      vl_folioxml TYPE p LENGTH 16.
*******variables para hacer la relación con la bapi*******

*VARIABLES PARA EL INDICE (POSICION)
DATA: vl_index    TYPE sy-tabix,
      vl_indloop  TYPE sy-tabix,
      vl_contador TYPE n LENGTH 5,
      VL_INDIMP   TYPE c LENGTH 2,
      vl_nombemp  TYPE p LENGTH 10,
      VL_NOMBRE   TYPE C LENGTH 40,
      vl_folio    TYPE c LENGTH 9.

*PARAMETROS SELECCIÓN DE ENTRADA
SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE AAA.
  SELECT-OPTIONS: P_NUMEMP FOR KNA1-KUNNR OBLIGATORY,"DEFAULT '*' OBLIGAT
ORY,
                  P_FCHDOC FOR BKPF-BLDAT DEFAULT sy-datum,
                  P_FCHCON FOR BKPF-BUDAT DEFAULT sy-datum,
*                  P_CLASE  FOR BKPF-BLART,
                  P_PERIO  FOR BKPF-MONAT DEFAULT sy-datum+4(2),
                  P_SOC    FOR BKPF-BUKRS DEFAULT '7000',
*                  P_MONEDA FOR BKPF-WAERS,
                  P_REF    FOR BKPF-XBLNR DEFAULT 'TC MAYO',
                  P_TXTCAB FOR BSAD-SGTXT DEFAULT 'EDO DE CTA BANAMEX 17 
MAYO 19'.", ls_mes. "BKPF-BKTXT
*  PARAMETERS:     P_SOC  TYPE BKPF-BUKRS DEFAULT '7000'.
SELECTION-SCREEN: END OF BLOCK BLK1.

*Tabla
TYPES: BEGIN OF ty_entrada,
       EN_NUMEMP TYPE c LENGTH 6,
END OF ty_entrada.

DATA: it_entrada TYPE STANDARD TABLE OF ty_entrada,
      wa_entrada LIKE LINE OF it_entrada.
*Estructura, tabla interna y wa de tabla de usuarios de viaticos
TYPES: BEGIN OF ty_vwviaticos,
       IDCICLO   TYPE p LENGTH 5,
       NOMCICLO  TYPE c LENGTH 10,
       NUMEMP    TYPE c LENGTH 10,
       NOMBRE    TYPE c LENGTH 80,
       CENTRO    TYPE c LENGTH 15,
       CUENTA    TYPE c LENGTH 35,
       EXPR1     TYPE c LENGTH 30,
       MONTO     TYPE p LENGTH 16 DECIMALS 2,
       TCUOTA    TYPE p LENGTH 8 DECIMALS 2,
       SUBTOTAL  TYPE p LENGTH 16 DECIMALS 2,
       IVA       TYPE p LENGTH 10 DECIMALS 2,
       TOTAL     TYPE p LENGTH 16 DECIMALS 2,
       PROPINA   TYPE p LENGTH 10 DECIMALS 2,
       ESTATUS   TYPE p LENGTH 5,
       DESCUENTA TYPE c LENGTH 25,
       DETALLE   TYPE c LENGTH 45,
       CTAMAYOR  TYPE c LENGTH 10,
       IMPHOSP   TYPE p LENGTH 16 DECIMALS 2,
       LUGAREXP  TYPE c LENGTH 5,
       CVEXML    TYPE p LENGTH 16,
       RFC       TYPE c LENGTH 13,
       RAZONSOC  TYPE c LENGTH 250,
       IDFOLIO   TYPE c LENGTH 6,
       IDFOLIODETALLE  TYPE c LENGTH 6,
       IDUSUARIO TYPE c LENGTH 6,
END OF ty_vwviaticos.

DATA: it_vwviaticos TYPE STANDARD TABLE OF ty_vwviaticos,
      wa_vwviaticos LIKE LINE OF it_vwviaticos.

*Estructura, tabla interna y wa de tablaque se mostrara en el alv, se cop
ia igual que los usuarios
TYPES: BEGIN OF ty_datos,
       CHECKBOX      TYPE c,
       COL_POSICION  TYPE p LENGTH 3,
       COL_IDCICLO   TYPE p LENGTH 5,
       COL_NOMCICLO  TYPE c LENGTH 10,
       COL_NUMEMP    TYPE c LENGTH 6,
       COL_NOMBRE    TYPE c LENGTH 80,
       COL_CENTRO    TYPE c LENGTH 15,
       COL_CUENTA    TYPE c LENGTH 35,
       COL_EXPR1     TYPE c LENGTH 30,
       COL_CLASE     TYPE c LENGTH 3,
       COL_MONTO     TYPE p LENGTH 16 DECIMALS 2,
       COL_TCUOTA    TYPE p LENGTH 8 DECIMALS 2,
       COL_SUBTOTAL  TYPE p LENGTH 16 DECIMALS 2,
       COL_IVA       TYPE p LENGTH 10 DECIMALS 2,
       COL_TOTAL     TYPE p LENGTH 16 DECIMALS 2,
       COL_PROPINA   TYPE p LENGTH 10 DECIMALS 2,
       COL_MONEDA    TYPE c LENGTH 5,
       COL_INDIMP    TYPE c LENGTH 5,
       COL_CME_GAST  TYPE c LENGTH 7,
       COL_CME_COMP  TYPE c LENGTH 7,
       COL_DETALLE   TYPE c LENGTH 45,
       COL_CTAMAYOR  TYPE c LENGTH 10,
       COL_VENCE     TYPE sy-datum,
       COL_ESTATUS   TYPE p LENGTH 5,
       COL_IMPHOSP   TYPE p LENGTH 16 DECIMALS 2,
       COL_LUGAREXP  TYPE c LENGTH 5,
       COL_CVEXML    TYPE p LENGTH 16,
       COL_FOLIO     TYPE c LENGTH 9,
       COL_RFC       TYPE c LENGTH 13,
       COL_RAZONSOC  TYPE c LENGTH 250,
       COL_IDFOLIO   TYPE c LENGTH 6,
       COL_IDFOLIODETALLE  TYPE c LENGTH 6,
       COL_IDUSUARIO TYPE c LENGTH 6,
       COL_POSIVA    TYPE n LENGTH 5,
END OF ty_datos.

DATA: it_datos TYPE STANDARD TABLE OF ty_datos,
      wa_datos LIKE LINE OF it_datos,
      wa_datos_2 LIKE LINE OF it_datos.

********variables estandar cabecera********
*DATA: SOC TYPE C.
********variables estandar cabecera********

*******************DATOS PARA ALV*********************
*Type Pool donde vienen definidas todas las estructuras y tablas
TYPE-POOLS: slis.
TYPES: slis.
*Deaclaración para ALV
data: fieldcatalog type slis_t_fieldcat_alv with header line,
      gd_tab_group type slis_t_sp_group_alv,
      gd_layout    type slis_layout_alv,
      IT_TOPHEADER TYPE SLIS_T_LISTHEADER,
      WA_TOP       LIKE LINE OF IT_TOPHEADER,
      WA_TOP2      LIKE LINE OF IT_TOPHEADER,
      WA_TOP3      LIKE LINE OF IT_TOPHEADER,
      WA_TOP4      LIKE LINE OF IT_TOPHEADER,
      WA_TOP5      LIKE LINE OF IT_TOPHEADER,
      WA_TOP6      LIKE LINE OF IT_TOPHEADER,
      WA_TOP7      LIKE LINE OF IT_TOPHEADER,
      gd_repid     like sy-repid,
      it_sort      TYPE slis_t_sortinfo_alv,     "Se agrego para totales 
y subtotales
      wa_sort      TYPE slis_sortinfo_alv,       "Se agrego para totales 
y subtotales
      i_events     TYPE slis_t_event,            "Se agrego para doble cl
ick
      w_events     LIKE LINE OF i_events.         "Se agrego para doble c
lick
*******************DATOS PARA ALV*********************

**************DATOS PARA LA BAPI**************
DATA: gd_documentheader LIKE bapiache09,
      it_accountreceivable like table of bapiacar09 with header line,
      it_accountgl         like table of bapiacgl09 with header line,
      it_accounttax        like table of bapiactx09 with header line,
      it_currencyamount    like table of bapiaccr09 with header line,
      it_return            like table of bapiret2   with header line,
      it_accountpayable    like table of bapiacap09 with header line.
**************DATOS PARA LA BAPI**************

*******WA PARA LA CARGA DE BAPI*******
DATA: wa_accountreceivable LIKE LINE OF it_accountreceivable,
      wa_accountgl         LIKE LINE OF it_accountgl,
      wa_accounttax        LIKE LINE OF it_accounttax,
      wa_currencyamount    LIKE LINE OF it_currencyamount,
      wa_return            LIKE LINE OF it_return,
      wa_accountpayable    LIKE LINE OF it_accountpayable.
*******WA PARA LA CARGA DE BAPI*******

*Nombre del cuadro de los parametros de entrada
INITIALIZATION.
      AAA  = 'Datos de cabecera'.

*fecha
Data: var_fecha TYPE sy-datum.

****Traer el nombre del mes****
Data: ls_mes TYPE fcltx.
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.
****Traer el nombre del mes****

*
*AT SELECTION-SCREEN OUTPUT.
*  LOOP AT SCREEN.
*    IF screen-name = 'P_SOC'.
*      screen-input = 0.
*      MODIFY SCREEN.
*    ENDIF.
*  ENDLOOP.

*Condicion para pasar al alv
START-OF-SELECTION.
      IF P_NUMEMP[] IS NOT INITIAL.
         PERFORM f1000_consulta.
      ENDIF.
*&---------------------------------------------------------------------*
*&  Include           ZPRUEBA_VIATICOS_F01
*&---------------------------------------------------------------------*

PERFORM alv_grid.
PERFORM build_layout.
PERFORM display_alv_report.

*Cabecera de ALV
FORM top_of_page.
  REFRESH it_topheader.
* Título del reporte
  MOVE: 'H'      TO wa_top-typ,
        'Tabla Carga de gastos' TO wa_top-info.
  APPEND wa_top  TO it_topheader.

  MOVE: 'S'             TO wa_top-typ,
        p_numemp-low    TO wa_top-info,
        'Cliente:'      TO wa_top-key,
        'S'             TO wa_top2-typ,
        p_fchdoc-low    TO wa_top2-info,
        'Fecha doc:'    TO wa_top2-key,
        'S'             TO wa_top3-typ,
        p_fchcon-low    TO wa_top3-info,
        'Fecha contab:' TO wa_top3-key,
        'S'             TO wa_top4-typ,
        p_perio-low     TO wa_top4-info,
        'Periodo:'      TO wa_top4-key,
         'S'            TO wa_top5-typ,
        p_soc-low       TO wa_top5-info,
        'Sociedad:'     TO wa_top5-key,
        'S'             TO wa_top6-typ,
        p_ref-low       TO wa_top6-info,
        'Referencia:'   TO wa_top6-key,
        'S'             TO wa_top7-typ,
        p_txtcab-low    TO wa_top7-info,
        'Texto cab:'    TO wa_top7-key.
  APPEND wa_top      TO it_topheader.
  APPEND wa_top2     TO it_topheader.
  APPEND wa_top3     TO it_topheader.
  APPEND wa_top4     TO it_topheader.
  APPEND wa_top5     TO it_topheader.
  APPEND wa_top6     TO it_topheader.
  APPEND wa_top7     TO it_topheader.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_topheader
      i_logo             = 'ZLOGO_LGT256'.
ENDFORM.                    "top_of_page

*&---------------------------------------------------------------------*
*&      Form  f_conexion
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_conexion.
  EXEC SQL.
    CONNECT TO 'SILANES_VIATICOS'
  ENDEXEC.

  EXEC SQL.
    open e for
      SELECT * FROM dbo.vwviaticos
      WHERE Estatus='6'
*      AND NumEmp='007666'
  ENDEXEC.

  DO.
    EXEC SQL.
      FETCH NEXT e INTO :WA_VWVIATICOS
    ENDEXEC.
    IF sy-subrc NE 0.
      EXIT.
    ELSE.
      APPEND wa_vwviaticos TO it_vwviaticos.
    ENDIF.
  ENDDO.

  EXEC SQL.
    CLOSE e
  ENDEXEC.

  EXEC SQL.
    DISCONNECT :'SILANES_VIATICOS'
  ENDEXEC.
ENDFORM.                    "f_conexion

*&---------------------------------------------------------------------*
*&      Form  f1000_consulta
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f1000_consulta.
  PERFORM f_conexion.

  LOOP AT it_vwviaticos INTO wa_vwviaticos.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = wa_vwviaticos-numemp
      IMPORTING
        output = wa_vwviaticos-numemp.

    MODIFY it_vwviaticos FROM wa_vwviaticos.
  ENDLOOP.

******************Se trae los clientes seleccionados*****************
  LOOP AT it_vwviaticos INTO wa_vwviaticos.
*     READ TABLE IT_CATUSUARIOS INTO WA_CATUSUARIOS
*       WHERE numemp  IN p_numemp.
*       AND   estatus = 4.                                                
"ES EL ESTATUS 4 QUE ES EL QUE ESTA AUTORIZADO
    IF sy-subrc = 0.
      wa_datos-col_idciclo   =  wa_vwviaticos-idciclo.
      wa_datos-col_nomciclo  =  wa_vwviaticos-nomciclo.
      wa_datos-col_numemp    =  wa_vwviaticos-numemp+4(6).
      wa_datos-col_nombre    =  wa_vwviaticos-nombre.
      wa_datos-col_centro    =  wa_vwviaticos-centro.
      wa_datos-col_cuenta    =  wa_vwviaticos-cuenta.
      wa_datos-col_expr1     =  wa_vwviaticos-expr1.
      wa_datos-col_monto     =  wa_vwviaticos-monto.
      wa_datos-col_tcuota    =  wa_vwviaticos-tcuota.
      wa_datos-col_subtotal  =  wa_vwviaticos-subtotal.
      wa_datos-col_iva       =  wa_vwviaticos-iva.
      wa_datos-col_total     =  wa_vwviaticos-total.
      wa_datos-col_propina   =  wa_vwviaticos-propina.
      wa_datos-col_estatus   =  wa_vwviaticos-estatus.
      wa_datos-col_detalle   =  wa_vwviaticos-detalle.
      wa_datos-col_ctamayor  =  wa_vwviaticos-ctamayor.
      wa_datos-col_imphosp   =  wa_vwviaticos-imphosp.
      wa_datos-col_lugarexp  =  wa_vwviaticos-lugarexp.
      wa_datos-col_cvexml    =  wa_vwviaticos-cvexml.
      wa_datos-col_rfc       =  wa_vwviaticos-rfc.
      wa_datos-col_razonsoc  =  wa_vwviaticos-razonsoc.

      wa_datos-col_IdFolio          =  wa_vwviaticos-IdFolio.
      wa_datos-col_IdFolioDetalle   =  wa_vwviaticos-IdFolioDetalle.
      wa_datos-col_IdUsuario        =  wa_vwviaticos-IdUsuario.

      APPEND wa_datos TO it_datos.
    ENDIF.
    SORT it_datos BY col_numemp.
  ENDLOOP.

  DEFINE: increment.
    &1 = &1 + 1.
  END-OF-DEFINITION.
  vl_index = 1.
  LOOP AT it_datos INTO wa_datos.
    wa_datos-col_posicion = vl_index.
    increment vl_index.
    wa_datos-col_moneda   = 'MXN'.
    wa_datos-col_clase    = 'SA'.
    wa_datos-col_vence    = sy-datum.

    IF wa_datos-col_numemp <> '21129311'.
      wa_datos-col_cme_gast = 'D'.
    ENDIF.

    IF wa_datos-col_tcuota = '0'.
      wa_datos-col_indimp = 'WE'.
    ELSEIF wa_datos-col_tcuota <> '0'.
      wa_datos-col_indimp = 'W3'.
    ENDIF.

********  Quitar los Ceros de la Izquierda del campo numemp**********
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = wa_datos-col_numemp
      IMPORTING
        output = wa_datos-col_numemp.

    MODIFY it_datos FROM wa_datos.
  ENDLOOP.

ENDFORM.                    "f1000_consulta

*Catalogo
FORM alv_grid.

  fieldcatalog-fieldname   = 'COL_NUMEMP'.
  fieldcatalog-seltext_m   = 'Empleado'.
  fieldcatalog-col_pos     = 1.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_NOMBRE'.
  fieldcatalog-seltext_m   = 'Nombre'.
  fieldcatalog-col_pos     = 2.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname  = 'COL_IDCICLO'.
  fieldcatalog-seltext_m   = 'Ciclo'.
  fieldcatalog-col_pos     = 3.
  fieldcatalog-outputlen   = '10'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_NOMCICLO'.
  fieldcatalog-seltext_m   = 'Nombre Ciclo'.
  fieldcatalog-col_pos     = 4.
  fieldcatalog-outputlen   = '12'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_EXPR1'.
  fieldcatalog-seltext_m   = 'Asignación Comp.'.
  fieldcatalog-col_pos     = 5.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_DETALLE'.
  fieldcatalog-seltext_m   = 'Detalle'.
  fieldcatalog-col_pos     = 6.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_CLASE'.
  fieldcatalog-seltext_m   = 'Clase'.
  fieldcatalog-col_pos     = 7.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_MONTO'.
  fieldcatalog-seltext_m   = 'Importe'.
  fieldcatalog-col_pos     = 8.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-do_sum      = 'X'.               "SE AGREGO PARA OBTENER E
L TOTAL
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_SUBTOTAL'.
  fieldcatalog-seltext_m   = 'Subtotal'.
  fieldcatalog-col_pos     = 9.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-do_sum      = 'X'.               "SE AGREGO PARA OBTENER E
L TOTAL
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_IVA'.
  fieldcatalog-seltext_m   = 'IVA'.
  fieldcatalog-col_pos     = 10.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-do_sum      = 'X'.               "SE AGREGO PARA OBTENER E
L TOTAL
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_TCUOTA'.
  fieldcatalog-seltext_m   = 'Porcentaje'.
  fieldcatalog-col_pos     = 11.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_PROPINA'.
  fieldcatalog-seltext_m   = 'Propina'.
  fieldcatalog-col_pos     = 12.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_IMPHOSP'.
  fieldcatalog-seltext_m   = 'Imp. hospedaje'.
  fieldcatalog-col_pos     = 13.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_SUBTOTAL'."'COL_TOTAL'.
  fieldcatalog-seltext_m   = 'Importe Base'.
  fieldcatalog-col_pos     = 14.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_TOTAL'.
  fieldcatalog-seltext_m   = 'Total'.
  fieldcatalog-col_pos     = 15.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-do_sum      = 'X'.               "SE AGREGO PARA OBTENER E
L TOTAL
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_MONEDA'.
  fieldcatalog-seltext_m   = 'Moneda'.
  fieldcatalog-col_pos     = 16.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_INDIMP'.
  fieldcatalog-seltext_m   = 'Indicador Imp.'.
  fieldcatalog-col_pos     = 17.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_CTAMAYOR'.
  fieldcatalog-seltext_m   = 'Cta. Mayor'.
  fieldcatalog-col_pos     = 18.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_CENTRO'.
  fieldcatalog-seltext_m   = 'Centro Coste'.
  fieldcatalog-col_pos     = 19.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_VENCE'.
  fieldcatalog-seltext_m   = 'Vence el'.
  fieldcatalog-col_pos     = 20.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_CME_GAST'.
  fieldcatalog-seltext_m   = 'CME Gastos'.
  fieldcatalog-col_pos     = 21.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_CME_COMP'.
  fieldcatalog-seltext_m   = 'CME Comprobación'.
  fieldcatalog-col_pos     = 22.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_ESTATUS'.
  fieldcatalog-seltext_m   = 'Estatus'.
  fieldcatalog-col_pos     = 23.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_POSICION'.
  fieldcatalog-seltext_m   = 'Posición'.
  fieldcatalog-col_pos     = 24.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

*Se agrego para los subtotales
  wa_sort-spos             = 1.
  wa_sort-fieldname        = 'COL_NUMEMP'.
  wa_sort-up               = 'X'.
  wa_sort-subtot           = 'X'.
*  wa_sort-
*  wa_sort-tabname          = 'IT_DATOS'.
  APPEND wa_sort TO it_sort.

*************************ORDENAR ALV*************************
*     SORT IT_DATOS BY col_posicion ASCENDING.
*************************ORDENAR ALV*************************

*Se agrego para el doble click
*  w_events-name            = 'USER_COMMAND'.
*  w_events-form            = 'USER_COMMAND'.
*  append w_events to i_events.
*  clear w_events.

ENDFORM.                    "alv_grid

*Estructura del diseño del grid
FORM build_layout.
  gd_layout-no_input            = 'X'.
  gd_layout-colwidth_optimize   = 'X'.
  gd_layout-confirmation_prompt = 'X'.
*  gd_layout-totals_text        = 'Totals'(201).
  gd_layout-header_text         = 'helllllo'.
ENDFORM.                    "build_layout

*datos display
FORM display_alv_report.
  gd_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = gd_repid
      i_callback_pf_status_set = 'ZSTANDARD'
      i_callback_user_command  = 'MI_USER_COMMAND'
      i_buffer_active          = 'X'
      is_layout                = gd_layout
      i_callback_top_of_page   = 'TOP_OF_PAGE'
      it_fieldcat              = fieldcatalog[]
      i_save                   = 'X'
*     no-zero                  = 'X'
      it_sort                  = it_sort            "Se agrego para total 
y subtotales
    TABLES
      t_outtab                 = it_datos
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
  ENDIF.
ENDFORM.                    "display_alv_report

**Forms del boton para realizar la bapí**
FORM mi_user_command USING r_ucomm LIKE sy-ucomm rs_selfied TYPE slis_sel
field.
  CASE r_ucomm.
    WHEN '&BT1'.          "SE DA CLICK
*      PERFORM bapi.
      PERFORM operaciones_bapi_ver2.
  ENDCASE.
ENDFORM.                    "mi_user_command

*&---------------------------------------------------------------------*
*&      Form  zstandard
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM zstandard USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZSTANDARD'.
ENDFORM.

FORM llamada_bapi.
*  PERFORM fill_header.
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' "Se cambio por la Check
      EXPORTING
          documentheader    = gd_documentheader
      TABLES
          accountgl         = it_accountgl
          accountreceivable = it_accountreceivable
          accountpayable    = it_accountpayable
          accounttax        = it_accounttax
          currencyamount    = it_currencyamount
          return            = it_return.
*break ajimenez-ext.
  WRITE: / 'Result of check lines:'.                        "#EC NOTEXT
  PERFORM show_messages.
*        MESSAGE 'Se ha realizado todo' TYPE 'I'.
  COMMIT WORK.
  CLEAR vl_contador.
  PERFORM llevar_folio.
ENDFORM.                    "llamada_bapi

*      Form  Show_messages
FORM show_messages.

  IF it_return[] IS INITIAL.
    MESSAGE 'no messages' TYPE 'I'.
*    write: / 'no messages'.
  ELSE.
    READ TABLE it_return WITH KEY type = 'E'.
    IF sy-subrc <> 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    ENDIF.
    SKIP 1.
    LOOP AT it_return.
*      write: /    it_return-type,
*             (2)  it_return-id,
*                  it_return-number,
*             (80) it_return-message,
*                  it_return-message_v1,
*             (20) it_return-parameter,
*             (3)  it_return-row,
*                  it_return-field.
      MESSAGE    "it_return-type,
*             (2)  it_return-id
*                  it_return-number,
*             (80) it_return-message,
              it_return-message
*                  it_return-message_v1,
*             (20) it_return-parameter,
*             (3)  it_return-row,
*                  it_return-field.
                   TYPE 'I'.
    ENDLOOP.
  ENDIF.
  ULINE.
ENDFORM.                               " Show_messages

*       FORM fill_header                                              *
FORM fill_header.

*  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
*    IMPORTING
*      own_logical_system = gd_documentheader-obj_sys.
* OBJ_TYPE has to be replaced by customers object key (Y* or Z*)
*  gd_documentheader-obj_type   = 'IDOC'.
*  gd_documentheader-obj_key    = p_soc.
  gd_documentheader-username   = 'IDAVILA'."sy-uname.
  gd_documentheader-header_txt = wa_datos-col_nombre.       "#EC NOTEXT
* gd_documentheader-obj_key_r  =
* GD_DOCUMENTHEADER-reason_rev =
  gd_documentheader-comp_code  = p_soc+3(4).
* GD_DOCUMENTHEADER-AC_DOC_NO  =
*  gd_documentheader-fisc_year  = sy-datum(4).
  gd_documentheader-doc_date   = wa_datos-col_vence.
  gd_documentheader-pstng_date = wa_datos-col_vence.
* GD_DOCUMENTHEADER-TRANS_DATE =
* GD_DOCUMENTHEADER-VALUE_DATE =
* GD_DOCUMENTHEADER-FIS_PERIOD =
  gd_documentheader-doc_type   = wa_datos-col_clase.
  gd_documentheader-ref_doc_no = wa_datos-col_nomciclo."'REFERENCIA BAPI 
PRUEBA 3'.
* GD_DOCUMENTHEADER-COMPO_ACC  =
  gd_documentheader-bus_act    = 'RFBU'.

ENDFORM.                    "fill_header

FORM operaciones_bapi_ver2.
  PERFORM llenar_ceros.
  LOOP AT it_datos INTO wa_datos .
    vl_contador = 1.
    vl_num_emp = wa_datos-col_numemp.
    vl_folioxml = wa_datos-col_cvexml.
    CLEAR it_accountgl.
    it_accountgl-itemno_acc = vl_contador.
    it_accountgl-gl_account = wa_datos-col_ctamayor.
    it_accountgl-item_text  = wa_datos-col_detalle.
    it_accountgl-alloc_nmbr = wa_datos-col_expr1.
    it_accountgl-tax_code   = wa_datos-col_indimp.
    it_accountgl-costcenter = wa_datos-col_centro.
    APPEND it_accountgl.

    CLEAR it_currencyamount.
    it_currencyamount-itemno_acc = vl_contador.
    it_currencyamount-curr_type  = '00'.
    it_currencyamount-currency   = wa_datos-col_moneda.
    it_currencyamount-amt_doccur = wa_datos-col_subtotal.
    APPEND it_currencyamount.
    vl_total = vl_total + wa_datos-col_subtotal.
    increment vl_contador.
    IF it_accountgl-tax_code = 'W3'.  " ****** Condición del impuesto
      CLEAR it_accounttax.
      it_accounttax-itemno_acc = vl_contador.
      it_accounttax-gl_account = '0011724016'.
      it_accounttax-tax_code   = wa_datos-col_indimp.
      APPEND it_accounttax.
      wa_datos-col_posiva = vl_contador.
      MODIFY it_datos FROM wa_datos.
      CLEAR it_currencyamount.
      it_currencyamount-itemno_acc = vl_contador.
      it_currencyamount-curr_type  = '00'.
      it_currencyamount-currency   = wa_datos-col_moneda.
      it_currencyamount-amt_doccur = wa_datos-col_iva.
      it_currencyamount-amt_base   = wa_datos-col_subtotal.
      APPEND it_currencyamount.
      vl_nombemp = wa_datos-col_numemp.
      vl_nombre  = wa_datos-col_nombre.
      vl_total = vl_total + wa_datos-col_iva.
      increment vl_contador.
    ENDIF.

    IF wa_datos-col_propina <> 0.   " ********* CONDICION PARA PROPINA
      CLEAR it_accountgl.
      it_accountgl-itemno_acc = vl_contador.
      it_accountgl-gl_account = '0060066612'.
      it_accountgl-item_text  = WA_DATOS-COL_DETALLE.
      it_accountgl-alloc_nmbr = wa_datos-col_expr1.
      it_accountgl-tax_code   = 'WE'."WA_DATOS-COL_INDIMP.
      it_accountgl-costcenter = wa_datos-col_centro.
      APPEND it_accountgl.
      CLEAR it_currencyamount.
      it_currencyamount-itemno_acc = vl_contador.
      it_currencyamount-curr_type  = '00'.
      it_currencyamount-currency   = wa_datos-col_moneda.
      it_currencyamount-amt_doccur = wa_datos-col_propina.
      APPEND it_currencyamount.
      vl_total = vl_total + wa_datos-col_propina.
      increment vl_contador.
    ENDIF.

    IF wa_datos-col_imphosp <> 0. " ****** CONDICION PARA IMPUESTO DE HOT
EL
      CLEAR it_accountgl.
      it_accountgl-itemno_acc = vl_contador.
      it_accountgl-gl_account = '0060066600'.
      it_accountgl-item_text  = WA_DATOS-COL_DETALLE.
      it_accountgl-alloc_nmbr = wa_datos-col_expr1.
      it_accountgl-tax_code   = 'WE'."WA_DATOS-COL_INDIMP.
      it_accountgl-costcenter = wa_datos-col_centro.
      APPEND it_accountgl.
      CLEAR it_currencyamount.
      it_currencyamount-itemno_acc = vl_contador.
      it_currencyamount-curr_type  = '00'.
      it_currencyamount-currency   = wa_datos-col_moneda.
      it_currencyamount-amt_doccur = wa_datos-col_imphosp.
      APPEND it_currencyamount.
      vl_total = vl_total + wa_datos-col_imphosp.
      increment vl_contador.
    ENDIF.

    CLEAR it_accountreceivable.
    it_accountreceivable-itemno_acc  = vl_contador.
    it_accountreceivable-customer    = wa_datos-col_numemp.
    it_accountreceivable-comp_code   = p_soc+3(4).
    it_accountreceivable-alloc_nmbr  = p_ref+3(14).
    it_accountreceivable-item_text   = p_txtcab+3(33).
    it_accountreceivable-sp_gl_ind   = 'D'.
    APPEND it_accountreceivable.
    vl_total_2 = vl_total * -1.

    CLEAR it_currencyamount.
    it_currencyamount-itemno_acc = vl_contador.
    it_currencyamount-curr_type  = '00'.
    it_currencyamount-currency   = wa_datos-col_moneda.
    it_currencyamount-amt_doccur = vl_total_2.
    APPEND it_currencyamount.

    PERFORM ceros_numemp.

    gd_documentheader-username   = 'IDAVILA'."sy-uname.
    gd_documentheader-header_txt = wa_datos-col_nombre.     "#EC NOTEXT
    gd_documentheader-comp_code  = p_soc+3(4).
    gd_documentheader-doc_date   = wa_datos-col_vence.
    gd_documentheader-pstng_date = wa_datos-col_vence.
    gd_documentheader-doc_type   = wa_datos-col_clase.
    gd_documentheader-ref_doc_no = wa_datos-col_nomciclo."'REFERENCIA BAP
I PRUEBA 3'.
    gd_documentheader-bus_act    = 'RFBU'.
    PERFORM llamada_bapi.
    CLEAR vl_contador.
    CLEAR vl_total.
    CLEAR vl_folioxml.
    REFRESH it_accountgl.
    REFRESH it_accountreceivable.
    REFRESH it_accounttax.
    REFRESH it_currencyamount.
  ENDLOOP.
  PERFORM llenar_tablaz.
  PERFORM actualizar_doccont.       "se comento para que no generara cone
xion sql
*  PERFORM modificar_iva.            "se comento por pruebas
****Form para realizar las operaciones de la bapi VER 2****
ENDFORM.

******FORMS PARA LLENAR CAMPOS DE 0******
FORM llenar_ceros.
  LOOP AT it_datos INTO wa_datos.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = wa_datos-col_ctamayor
      IMPORTING
        output = wa_datos-col_ctamayor.
    MODIFY it_datos FROM wa_datos.
  ENDLOOP.
ENDFORM.                    "LLENAR_CEROS

*&---------------------------------------------------------------------*
*&      Form  CEROS_NUMEMP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ceros_numemp.
  LOOP AT it_accountreceivable INTO wa_accountreceivable.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = wa_accountreceivable-customer
      IMPORTING
        output = wa_accountreceivable-customer.
    MODIFY it_accountreceivable FROM wa_accountreceivable.
  ENDLOOP.
ENDFORM.                    "CEROS_NUMEMP
******FORMS PARA LLENAR CAMPOS DE 0******

********************Form para regresar el folio********************
FORM llevar_folio.
  vl_folio = it_return-message+55(9).
  LOOP AT it_accountreceivable.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = it_accountreceivable-customer
      IMPORTING
        output = it_accountreceivable-customer.
    MODIFY it_datos FROM wa_datos.
  ENDLOOP.
  LOOP AT it_datos INTO wa_datos_2 WHERE col_numemp = it_accountreceivabl
e-customer.
    wa_datos_2-col_folio = vl_folio.
    MODIFY it_datos FROM wa_datos_2.
  ENDLOOP.
ENDFORM.                    "llevar_folio
********************Form para regresar el folio********************

*******Form para llenar tabla z*******
FORM llenar_tablaz.
  LOOP AT it_datos INTO wa_datos_2.
    zviaticos_folio-empleado  = wa_datos_2-col_numemp.
    zviaticos_folio-folio_xml = wa_datos_2-col_cvexml.
    zviaticos_folio-doc_cont  = wa_datos_2-col_folio.
    INSERT zviaticos_folio.
  ENDLOOP.
ENDFORM.                    "llenar_tablaz
*******Form para llenar tabla z*******

************************Conexion para actualizar bd sql******************
*****
FORM actualizar_doccont.
  EXEC SQL.
    CONNECT TO 'SILANES_VIATICOS'
  ENDEXEC.
  "pruebas, bueno
  LOOP AT it_datos INTO wa_datos_2.
*    EXEC SQL.
*      open actmasiva for
*       UPDATE dbo.ViaticosDetalle
*             SET FolioDocto = :WA_DATOS_2-COL_FOLIO,
*             Estatus = '8'
*       WHERE CveXml = :WA_DATOS_2-COL_CVEXML
*    ENDEXEC.
*
*    EXEC SQL.
*      CLOSE actmasiva
*    ENDEXEC.

    CONCATENATE sy-datum Sy-uzeit INTO fechaMov.
    GET TIME STAMP FIELD stamp_1 .
*'2019-06-04 11:49:42.500',
    EXEC SQL.
      open insert for
      INSERT INTO  dbo.MovAutorizados
        (IdFolioDetalle,Idfolio, IdUsuarioAutorizador,FechaRegistro,Estat
us)
      VALUES (:WA_DATOS_2-COL_IDFOLIODETALLE,:WA_DATOS_2-
COL_IDFOLIO,'5',sysdatetime(),'12')
    ENDEXEC.

    EXEC SQL.
      CLOSE insert
    ENDEXEC.

  ENDLOOP.

  EXEC SQL.
    DISCONNECT :'SILANES_VIATICOS'
  ENDEXEC.

ENDFORM.
********|***************Conexion para actualizar bd sql******************
*****

************FORM MODIFICAR IVA************
FORM modificar_iva.
  LOOP AT it_datos INTO wa_datos_2.
    READ TABLE BSEG." INTO WA_BSEG.
*       WITH KEY BSEG-BELNR = WA_DATOS_2-COL_FOLIO.
*       IF SY-SUBRC = 0.
    IF BSEG-BELNR = WA_DATOS_2-COL_FOLIO AND BSEG-WRBTR = WA_DATOS_2-
COL_IVA.
      WA_BSEG-ZUONR = WA_DATOS_2-COL_RFC.
      WA_BSEG-SGTXT = WA_DATOS_2-COL_RAZONSOC.
      MODIFY BSEG FROM WA_BSEG.
*          ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.
************FORM MODIFICAR IVA************

You might also like