You are on page 1of 22

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

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

REPORT ZPRUEBA_VIATICOS_VER3.

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

*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.
*******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.

*PARAMETROS SELECCIÓN DE ENTRADA
SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE AAA.
  SELECT-OPTIONS: P_NUMEMP FOR KNA1-KUNNR OBLIGATORY,
                  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 'COMP TC BNX 17',
                  P_TXTCAB FOR BSAD-SGTXT DEFAULT 'COMPROBACION EDO DE CT
A BNX AL 17'.", 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,
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,
END OF ty_datos.

DATA: it_datos TYPE STANDARD TABLE OF ty_datos,
      wa_datos 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.
*Conexion BD VIATICOS
*******Traer datos de la base de datos de viaticos****************
*BREAK ajimenez-ext.
  EXEC SQL.
    CONNECT TO 'SILANES_VIATICOS'
  ENDEXEC.

  EXEC SQL.
    open e for
SELECT *
FROM dbo.vwviaticos
  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.
*BREAK AJIMENEZ-EXT.
*******PONER 0 A NUM EMPLEADO**********
  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.
******PONER 0 A NUM EMPLEADO**********
*BREAK AJIMENEZ-EXT.
******************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.
      APPEND wa_datos TO it_datos.
    ENDIF.
    SORT IT_DATOS BY COL_NUMEMP.
  ENDLOOP.
******************Se trae los clientes seleccionados*****************

**********ELIMINAR DATOS QUE NO TRAEN IMPORTE**********
*DELETE IT_DATOS WHERE COL_IMPORT = 0.
**********ELIMINAR DATOS QUE NO TRAEN IMPORTE**********

*********Traer datos duros*********
*Contador para la posicion e iniciar en 1
*BREAK AJIMENEZ-EXT.
******************ELIMINAR DUPLICADOS******************
*DELETE ADJACENT DUPLICATES FROM IT_DATOS.
******************ELIMINAR DUPLICADOS******************

  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.

    IF wa_vwviaticos-nomciclo = 'Ciclo 1'.
      wa_datos-col_nomciclo  = 'CICLO I'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 2'.
      wa_datos-col_nomciclo  = 'CICLO II'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 3'.
      wa_datos-col_nomciclo  = 'CICLO III'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 4'.
      wa_datos-col_nomciclo  = 'CICLO IV'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 5'.
      wa_datos-col_nomciclo  = 'CICLO V'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 6'.
      wa_datos-col_nomciclo  = 'CICLO VI'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 7'.
      wa_datos-col_nomciclo  = 'CICLO VII'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 8'.
      wa_datos-col_nomciclo  = 'CICLO VIII'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 9'.
      wa_datos-col_nomciclo  = 'CICLO IX'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 10'.
      wa_datos-col_nomciclo  = 'CICLO X'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 11'.
      wa_datos-col_nomciclo  = 'CICLO XI'.
    ELSEIF wa_vwviaticos-nomciclo = 'Ciclo 12'.
      wa_datos-col_nomciclo  = 'CICLO XII'.
    ENDIF.

    MODIFY it_datos FROM wa_datos.
  ENDLOOP.
*********Traer datos duros*********

*******QUITAR 0 A NUM EMPLEADO REPORTE FINAL**********
  LOOP AT it_datos INTO wa_datos.
    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.
******QUITAR 0 A NUM EMPLEADO REPORTE FINAL**********
*break ajimenez-ext.

ENDFORM.                    "f1000_consulta

*Catalogo
FORM alv_grid.

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

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

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

  fieldcatalog-fieldname   = 'COL_NOMBRE'.
  fieldcatalog-seltext_m   = 'Nombre'.
  fieldcatalog-col_pos     = 4.
  fieldcatalog-outputlen   = '20'.
  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_CENTRO'.
  fieldcatalog-seltext_m   = 'Centro Coste'.
  fieldcatalog-col_pos     = 7.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_CLASE'.
  fieldcatalog-seltext_m   = 'Clase'.
  fieldcatalog-col_pos     = 8.
  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     = 9.
  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     = 10.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_MONTO'.
  fieldcatalog-seltext_m   = 'Importe'.
  fieldcatalog-col_pos     = 11.
  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     = 12.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'COL_IVA'.
  fieldcatalog-seltext_m   = 'IVA'.
  fieldcatalog-col_pos     = 13.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

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

  fieldcatalog-fieldname   = 'COL_PROPINA'.
  fieldcatalog-seltext_m   = 'Propina'.
  fieldcatalog-col_pos     = 15.
  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     = 16.
  fieldcatalog-outputlen   = '20'.
  fieldcatalog-emphasize   = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

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

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

  fieldcatalog-fieldname   = 'COL_CTAMAYOR'.
  fieldcatalog-seltext_m   = 'Cta. Mayor'.
  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_ESTATUS'.
  fieldcatalog-seltext_m   = 'Estatus'.
  fieldcatalog-col_pos     = 21.
  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.
  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.                    "zstandard

*Form para generar la bapi
FORM bapi.
  PERFORM operaciones_bapi.
  PERFORM fill_internal_tables.
  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.
ENDFORM.                    "BAPI

****Form para realizar las operaciones de la bapi****
FORM operaciones_bapi.
  data: vl_index TYPE sy-tabix.
  describe TABLE it_datos LINES lv_lines.
  CLEAR VL_INDEX.
  VL_INDEX = 1.
  LOOP AT it_datos INTO wa_datos ."WHERE col_numemp = vl_num_emp.
    vl_index = sy-tabix.
    IF sy-tabix = 1 .
      vl_num_emp = wa_datos-col_numemp.
      vl_total = vl_total + wa_datos-col_monto.
      wa_all_bapi-amt_doccur = wa_datos-col_monto.
      wa_all_bapi-itemno_acc = vl_index.
      wa_all_bapi-currency   = wa_datos-col_moneda.
*      increment vl_index.
      APPEND wa_all_bapi to it_all_bapi.
          increment vl_index.
    ELSE .
      IF vl_num_emp =  wa_datos-col_numemp.

        wa_all_bapi-amt_doccur = wa_datos-col_monto.      "prueba
              wa_all_bapi-itemno_acc = vl_index.
        APPEND wa_all_bapi to it_all_bapi.                 "prueba
            increment vl_index.
        vl_total = vl_total + wa_datos-col_monto.
*        wa_all_bapi-amt_doccur = vl_total.
*        APPEND wa_all_bapi to it_all_bapi.
*        IF sy-tabix = lv_lines.
        IF vl_index = lv_lines.

        wa_all_bapi-amt_doccur = vl_total.
*                wa_all_bapi-amt_doccur = wa_datos-col_monto..
        wa_all_bapi-customer = vl_num_emp.
        wa_all_bapi-itemno_acc = vl_index.
        APPEND wa_all_bapi to it_all_bapi.
            increment vl_index.
        ENDIF.
      ELSE.
*        *************
        wa_all_bapi-amt_doccur = vl_total.
        wa_all_bapi-customer = vl_num_emp.
        wa_all_bapi-itemno_acc = vl_index.
        APPEND wa_all_bapi to it_all_bapi.
            increment vl_index.

*        *************
        CLEAR: wa_all_bapi-customer.
*        ***********************
              wa_all_bapi-amt_doccur = wa_datos-col_monto.
      wa_all_bapi-gl_account = wa_datos-col_ctamayor.
      wa_all_bapi-tax_code   = wa_datos-col_indimp.
      wa_all_bapi-itemno_acc = vl_index.

*        ***********************
        APPEND wa_all_bapi to it_all_bapi.
            increment vl_index.
        CLEAR  vl_total.
        vl_total = vl_total + wa_datos-col_monto.
        vl_num_emp = wa_datos-col_numemp.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "operaciones_bapi
****Form para realizar las operaciones de la bapi****

*      Form  fill_internal_tables
FORM fill_internal_tables.

  PERFORM fill_header.
  PERFORM fill_accountgl.
  PERFORM fill_accountar.
  PERFORM fill_accounttax.
  PERFORM fill_currencyamount.

ENDFORM.                               " fill_internal_tables

*      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_accountgl                                           *
FORM fill_accountgl.

  CLEAR it_accountgl.
  it_accountgl-itemno_acc    = 1.
  it_accountgl-gl_account    = '0060066600'.   "PARA PAGOS AQUI VA LA CUE
NTA'0021129311'.
  it_accountgl-item_text     = 'BAPI PRUEBA TEXTO 3'.       "#EC NOTEXT
* it_accountgl-bus_area       = '01'.
  it_accountgl-alloc_nmbr    = 'BAPI PRUEBA ASIGNASION 3'.
  it_accountgl-tax_code      = 'W3'.   "WE PARA CUANDO LLEVE IVA Y SE COM
ENTA PARA CUANDO SEA PARA PAGOS
  it_accountgl-costcenter    = '7501020300'.   "PARA CUANDO ES PARA PAGOS 
VA COMENTADO
* it_accountgl-comp_code      = 'SLOC'.
  APPEND it_accountgl.

ENDFORM.                    "fill_accountgl

*       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 fill_ar                                                  *
FORM fill_accountar.   "ACCOUNTRECEIVABLE

  CLEAR it_accountreceivable.
  it_accountreceivable-itemno_acc = 1.
  it_accountreceivable-customer   = wa_datos-col_numemp.
  it_accountreceivable-comp_code  = p_soc+3(4).
  it_accountreceivable-alloc_nmbr = p_ref+3(14)."'BAPI PRUEBA ASIGNACION 
3'.
  it_accountreceivable-item_text  = p_txtcab+3(33)."'BAPI PRUEBA TEXTO CA
B DOC 3'.
  it_accountreceivable-sp_gl_ind  = 'D'.   "Indicador para cambiar la cla
ve de contabilizac.
  APPEND it_accountreceivable.

ENDFORM.                    "fill_accountar

*       FORM fill_tax                                                 *
FORM fill_accounttax.
*
  CLEAR it_accounttax.
  it_accounttax-itemno_acc = 1.
  it_accounttax-gl_account = '0011724016'.
  it_accounttax-tax_code   = 'W3'.
*  it_accounttax-acct_key   = 'VST'.
*  it_accounttax-cond_key   = 'MWVS'.
* it_accounttax-itemno_tax = 8.
  APPEND it_accounttax.

ENDFORM.                    "fill_accounttax

*       FORM fill_currencyamount                                      *
FORM fill_currencyamount.

  CLEAR it_currencyamount.
  it_currencyamount-itemno_acc   = 1.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = wa_datos-col_moneda.
  it_currencyamount-amt_doccur   = '1086'.
  APPEND it_currencyamount.

ENDFORM.                    "fill_currencyamount

You might also like