Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FUNCTION zfifu004.
- *"----------------------------------------------------------------------
- *"*"Interfase local
- *" IMPORTING
- *" VALUE(P_INOCO) TYPE CHAR1
- *" REFERENCE(P_BUZEI) LIKE BSIK-BUZEI
- *" REFERENCE(E_COMPENSADO) LIKE ZFIES019 STRUCTURE ZFIES019
- *" TABLES
- *" T_FACTURA STRUCTURE ZFIES021
- *" T_TABLA STRUCTURE ZFITA003P
- *"----------------------------------------------------------------------
- * COMPAÑIA: Centinela Servicios Corporativos *
- * AUTOR: Gustavo Adolfo Carreño Monroy (CSC-GACM) *
- * FECHA: Lunes 5 de enero del 2009 *
- * OBJETIVO: Consulta de Compensaciones para PFX *
- *---------------------------------------------------------------------*
- * 20090129, CSC-GACM: Agregué la parte de ingresos. *
- * 20090130, CSC-GACM: Agregué la parte de grafos. *
- * 20090204, CSC-GACM: Agregué caso especial para liberaciones. *
- * 20090205, CSC-GACM: Modifiqué para pagos con diferente moneda. *
- * 20090206, CSC-GACM: Mejor forma de repartir por lo del IVA. *
- * 20090209, CSC-GACM: Agregué campo de indicador de IVA a la condi- *
- * ción para determinar si una compensación es re- *
- * tención de fondo de garantía. *
- * 20090212, CSC-GACM: Modifiqué para tomar en cuenta indicador de de- *
- * be y haber de la factura original. *
- * 20090213, CSC-GACM: Parché para retención a varias facturas. *
- * 20090219, CSC-GACM: Agregué condición complementaria para caso espe-*
- * cial para liberaciones. *
- * 20090304, CSC-GACM: Eliminé parte que evitaba considerar liberacio- *
- * nes parciales. *
- * 20090305, CSC-GACM: Agregué codigo para liberaciones parciales. *
- * 20090306, CSC-GACM: Agregué codigo para evitar pagos malos que se *
- * colaban con lo de liberaciones parciales. *
- * 20090308, CSC-GACM: Solucioné casos de liberación parcial, tanto en *
- * documento con liberaciones totales como en docu-*
- * mento independiente. *
- * 20090310, CSC-GACM: Solucioné efecto secundario de lentitud causada *
- * por liberación parcial mediante tabla auxiliar. *
- * 20090629, CSC-GACM: Modifiqué para considerar como anulaciones de *
- * factura las compensaciones 17s. *
- * 20100323, CSC-GACM: Actualicé para uso de nuevos indicadores de IVA.*
- * 20150504, CSC-GACM: Ignoré compensaciones de anulación de abono. *
- *---------------------------------------------------------------------*
- DATA: BEGIN OF t_compensacion OCCURS 0.
- INCLUDE STRUCTURE zfies019.
- DATA: END OF t_compensacion.
- DATA: t_pago LIKE t_tabla OCCURS 0 WITH HEADER LINE.
- DATA:
- v_compensacion LIKE t_compensacion-wrbtr,
- v_pago LIKE t_compensacion-wrbtr,
- v_total LIKE t_compensacion-wrbtr,
- v_wrbtr LIKE t_factura-wrbtr, "20090212, CSC-GACM.
- v_augbl LIKE e_compensado-augbl, "20090305, CSC-GACM.
- v_piva TYPE zpiva. "20100323, CSC-GACM.
- RANGES:
- r_belnr FOR BSIK-BELNR, "20090305, CSC-GACM.
- r_gjahr FOR BKPF-GJAHR,
- r_hkont FOR BSIK-HKONT,
- r_augdt FOR BSIK-AUGDT,
- r_augbl FOR BSIK-AUGBL,
- r_zuonr FOR BSIK-ZUONR,
- r_buzei FOR BSIK-BUZEI.
- READ TABLE t_factura WITH KEY buzei = p_buzei.
- "INICIO 20090305, CSC-GACM.
- IF e_compensado-augbl IS INITIAL.
- "Es liberación es parcial y hay que recuperar el documento
- "de compensación.
- "SELECT SINGLE
- " BELNR
- " FROM BSEG
- " INTO v_augbl
- " WHERE
- " BUKRS EQ e_compensado-bukrs AND
- " BELNR IN r_belnr AND
- " GJAHR IN r_gjahr AND
- " BUZEI IN r_buzei AND
- " REBZG EQ e_compensado-belnr AND
- " REBZZ EQ p_buzei.
- "20090310, CSC-GACM: Puse lo anterior como comentario.
- "INICIO, 20090310, CSC-GACM.
- SELECT SINGLE
- belnr
- INTO v_augbl
- FROM zfita005
- WHERE
- bukrs EQ e_compensado-bukrs AND
- rebzg EQ e_compensado-belnr AND
- rebzz EQ p_buzei.
- "FIN, 20090310, CSC-GACM.
- ELSE.
- v_augbl = e_compensado-augbl.
- ENDIF.
- "FIN 20090305, CSC-GACM.
- "INICIO 20090129, CSC-GACM.
- IF p_inoco EQ 'I'.
- SELECT
- a~BUKRS
- a~BELNR
- a~BUDAT
- a~USNAM
- a~WAERS
- b~KUNNR
- b~KUNNR AS lifnr
- b~UMSKZ
- b~AUGBL
- b~BUZEI
- b~BSCHL
- b~SHKZG
- b~MWSKZ
- b~WRBTR
- b~KOSTL
- b~AUFNR
- b~HKONT
- b~REBZG
- b~REBZZ
- b~REBZT
- b~PROJK
- FROM
- BKPF AS a
- INNER JOIN BSID AS b
- ON
- b~BUKRS EQ a~BUKRS AND
- b~BELNR EQ a~BELNR
- INTO TABLE t_compensacion
- WHERE
- a~BUKRS EQ e_compensado-bukrs AND
- a~BELNR EQ v_augbl AND
- "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
- a~GJAHR IN r_gjahr AND
- b~HKONT IN r_hkont AND
- b~AUGDT IN r_augdt AND
- b~AUGBL IN r_augbl AND
- b~ZUONR IN r_zuonr AND
- b~GJAHR IN r_gjahr AND
- b~BUZEI IN r_buzei.
- SELECT
- a~BUKRS
- a~BELNR
- a~BUDAT
- a~USNAM
- a~WAERS
- b~KUNNR
- b~KUNNR AS lifnr
- b~UMSKZ
- b~AUGBL
- b~BUZEI
- b~BSCHL
- b~SHKZG
- b~MWSKZ
- b~WRBTR
- b~KOSTL
- b~AUFNR
- b~HKONT
- b~REBZG
- b~REBZZ
- b~REBZT
- b~PROJK
- FROM
- BKPF AS a
- INNER JOIN BSAD AS b
- ON
- b~BUKRS EQ a~BUKRS AND
- b~BELNR EQ a~BELNR
- APPENDING TABLE t_compensacion
- WHERE
- a~BUKRS EQ e_compensado-bukrs AND
- a~BELNR EQ v_augbl AND
- "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
- a~GJAHR IN r_gjahr AND
- b~HKONT IN r_hkont AND
- b~AUGDT IN r_augdt AND
- b~AUGBL IN r_augbl AND
- b~ZUONR IN r_zuonr AND
- b~GJAHR IN r_gjahr AND
- b~BUZEI IN r_buzei.
- LOOP AT t_compensacion.
- CLEAR t_compensacion-lifnr.
- MODIFY t_compensacion TRANSPORTING lifnr.
- ENDLOOP.
- ENDIF.
- "FIN 20090129, CSC-GACM.
- IF p_inoco EQ 'C'. "20090129, CSC-GACM.
- SELECT
- a~BUKRS
- a~BELNR
- a~BUDAT
- a~USNAM
- a~WAERS
- b~LIFNR AS kunnr "20090129, CSC-GACM.
- b~LIFNR
- b~UMSKZ
- b~AUGBL
- b~BUZEI
- b~BSCHL
- b~SHKZG
- b~MWSKZ
- b~WRBTR
- b~KOSTL
- b~AUFNR
- b~HKONT
- b~REBZG
- b~REBZZ
- b~REBZT
- b~PROJK
- FROM
- BKPF AS a
- INNER JOIN BSIK AS b
- ON
- b~BUKRS EQ a~BUKRS AND
- b~BELNR EQ a~BELNR
- INTO TABLE t_compensacion
- WHERE
- a~BUKRS EQ e_compensado-bukrs AND
- a~BELNR EQ v_augbl AND
- "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
- a~GJAHR IN r_gjahr AND
- b~HKONT IN r_hkont AND
- b~AUGDT IN r_augdt AND
- b~AUGBL IN r_augbl AND
- b~ZUONR IN r_zuonr AND
- b~GJAHR IN r_gjahr AND
- b~BUZEI IN r_buzei.
- SELECT
- a~BUKRS
- a~BELNR
- a~BUDAT
- a~USNAM
- a~WAERS
- b~LIFNR AS kunnr "20090129, CSC-GACM.
- b~LIFNR
- b~UMSKZ
- b~AUGBL
- b~BUZEI
- b~BSCHL
- b~SHKZG
- b~MWSKZ
- b~WRBTR
- b~KOSTL
- b~AUFNR
- b~HKONT
- b~REBZG
- b~REBZZ
- b~REBZT
- b~PROJK
- FROM
- BKPF AS a
- INNER JOIN BSAK AS b
- ON
- b~BUKRS EQ a~BUKRS AND
- b~BELNR EQ a~BELNR
- APPENDING TABLE t_compensacion
- WHERE
- a~BUKRS EQ e_compensado-bukrs AND
- a~BELNR EQ v_augbl AND
- "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
- a~GJAHR IN r_gjahr AND
- b~HKONT IN r_hkont AND
- b~AUGDT IN r_augdt AND
- b~AUGBL IN r_augbl AND
- b~ZUONR IN r_zuonr AND
- b~GJAHR IN r_gjahr AND
- b~BUZEI IN r_buzei.
- "INICIO 20090129, CSC-GACM.
- LOOP AT t_compensacion.
- CLEAR t_compensacion-kunnr.
- MODIFY t_compensacion TRANSPORTING kunnr.
- ENDLOOP.
- "FIN 20090129, CSC-GACM.
- ENDIF. "20090129, CSC-GACM.
- IF LINES( t_compensacion ) EQ 0.
- "Necesito que no esté vacía la tabla interna.
- SELECT
- a~BUKRS
- a~BELNR
- a~BUDAT
- a~USNAM
- a~WAERS
- FROM
- BKPF AS a
- INTO CORRESPONDING FIELDS OF TABLE t_compensacion
- WHERE
- a~BUKRS EQ e_compensado-bukrs AND
- a~BELNR EQ v_augbl AND
- "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
- a~GJAHR IN r_gjahr.
- LOOP AT t_compensacion.
- t_compensacion-kunnr = e_compensado-kunnr. "20090129, CSC-GACM.
- t_compensacion-lifnr = e_compensado-lifnr.
- MODIFY t_compensacion TRANSPORTING
- kunnr "20090129, CSC-GACM.
- lifnr.
- ENDLOOP.
- ENDIF.
- SORT t_compensacion BY bukrs belnr buzei.
- READ TABLE t_compensacion WITH KEY
- rebzg = t_factura-belnr
- rebzz = t_factura-buzei.
- IF SY-SUBRC NE 0.
- READ TABLE t_compensacion WITH KEY
- rebzg = e_compensado-belnr
- rebzz = e_compensado-buzei.
- ENDIF.
- IF SY-SUBRC EQ 0 AND
- e_compensado-augbl IS NOT INITIAL.
- "20090306, CSC-GACM: Para forzar irse por ELSE en casos de
- " liberación parcial.
- IF e_compensado-waers NE t_compensacion-waers.
- CALL FUNCTION 'ZFIFU005'
- EXPORTING
- p_wrbtr1 = t_compensacion-wrbtr
- p_waers1 = t_compensacion-waers
- p_waers2 = e_compensado-waers
- p_budat = t_compensacion-budat
- IMPORTING
- p_wrbtr2 = v_compensacion.
- ELSE.
- v_compensacion = t_compensacion-wrbtr.
- ENDIF.
- IF e_compensado-shkzg = 'H'.
- v_pago = + e_compensado-wrbtr.
- ELSE.
- v_pago = - e_compensado-wrbtr.
- ENDIF.
- IF t_compensacion-shkzg = 'H'.
- v_pago = v_pago - v_compensacion.
- "20090205, CSC-GACM: t_compensacion-wrbtr X v_compensacion.
- ELSE.
- v_pago = v_pago + v_compensacion.
- "20090205, CSC-GACM: t_compensacion-wrbtr X v_compensacion.
- ENDIF.
- * IF e_compensado-waers NE t_compensacion-waers.
- * CALL FUNCTION 'ZFIFU005'
- * EXPORTING
- * p_wrbtr1 = v_pago
- * p_waers1 = e_compensado-waers
- * p_waers2 = t_compensacion-waers
- * p_budat = t_compensacion-budat
- * IMPORTING
- * p_wrbtr2 = v_pago.
- * ENDIF.
- "200902025, CSC-GACM: Puse lo anterior como comentario.
- ELSE.
- IF NOT e_compensado-augbl IS INITIAL.
- "20090308, CSC-GACM: Esto aplica cuando no es una
- " liberación parcial.
- LOOP AT t_compensacion WHERE belnr EQ v_augbl.
- "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
- "Esto es para quedarme con el indicador de CME, si es que
- "existe.
- IF NOT t_compensacion-umskz IS INITIAL.
- EXIT.
- ENDIF.
- ENDLOOP.
- t_compensacion-shkzg = 'X'.
- IF e_compensado-shkzg = 'H'.
- v_pago = + e_compensado-wrbtr.
- ELSE.
- v_pago = - e_compensado-wrbtr.
- ENDIF.
- "INICIO 20090308, CSC-GACM.
- ELSE.
- "Esto aplica cuando es una liberación parcial, no importa
- "que sea junto con liberaciones totales de otros documentos
- "o si sea independiente en su propio documento.
- LOOP AT t_compensacion WHERE belnr EQ v_augbl.
- "Esto es para quedarme con el indicador de CME, si es que
- "existe.
- IF NOT t_compensacion-umskz IS INITIAL AND
- t_compensacion-rebzg EQ e_compensado-belnr AND
- t_compensacion-rebzz EQ e_compensado-buzei.
- EXIT.
- ENDIF.
- ENDLOOP.
- IF t_compensacion-shkzg = 'S'.
- v_pago = + t_compensacion-wrbtr.
- ELSE.
- v_pago = - t_compensacion-wrbtr.
- ENDIF.
- ENDIF.
- "FIN 20090308, CSC-GACM.
- ENDIF.
- "INICIO 20090205, CSC-GACM.
- IF e_compensado-waers NE t_compensacion-waers AND
- NOT e_compensado-augbl IS INITIAL. "20090308, CSC-GACM.
- CALL FUNCTION 'ZFIFU005'
- EXPORTING
- p_wrbtr1 = v_pago
- p_waers1 = e_compensado-waers
- p_waers2 = t_compensacion-waers
- p_budat = t_compensacion-budat
- IMPORTING
- p_wrbtr2 = v_pago.
- ENDIF.
- "FIN 20090205, CSC-GACM.
- "INICIO 20090129, CSC-GACM.
- IF p_inoco EQ 'I'.
- v_pago = v_pago * -1.
- ENDIF.
- "FIN 20090129, CSC-GACM.
- REFRESH r_hkont.
- "INICIO 20090129, CSC-GACM.
- IF p_inoco EQ 'I'.
- r_hkont-sign = 'I'.
- r_hkont-option = 'BT'.
- r_hkont-low = '0000400000'.
- r_hkont-high = '0000499999'.
- APPEND r_hkont.
- ENDIF.
- "FIN 20090129, CSC-GACM.
- IF p_inoco EQ 'C'. "20090129, CSC-GACM.
- r_hkont-sign = 'I'.
- r_hkont-option = 'BT'.
- r_hkont-low = '0000500000'.
- r_hkont-high = '0000599999'.
- APPEND r_hkont.
- r_hkont-sign = 'I'.
- r_hkont-option = 'BT'.
- r_hkont-low = '0000104010'.
- r_hkont-high = '0000104060'.
- APPEND r_hkont.
- "INICIO 20090130, CSC-GACM.
- r_hkont-sign = 'E'.
- r_hkont-option = 'EQ'.
- r_hkont-low = '0000520201'.
- r_hkont-high = '0000520201'.
- APPEND r_hkont.
- r_hkont-sign = 'E'.
- r_hkont-option = 'EQ'.
- r_hkont-low = '0000520202'.
- r_hkont-high = '0000520202'.
- APPEND r_hkont.
- r_hkont-sign = 'E'.
- r_hkont-option = 'EQ'.
- r_hkont-low = '0000520415'.
- r_hkont-high = '0000520415'.
- APPEND r_hkont.
- "FIN 20090130, CSC-GACM.
- ENDIF. "20090129, CSC-GACM.
- v_total = 0.
- LOOP AT t_factura WHERE
- hkont IN r_hkont.
- "v_total = v_total + t_factura-wrbtr.
- "20090206, CSC-GACM: Puse como comentario.
- "INICIO 20090212, CSC-GACM.
- IF t_factura-shkzg = 'S'.
- v_wrbtr = t_factura-wrbtr.
- ELSE.
- v_wrbtr = t_factura-wrbtr * -1.
- ENDIF.
- "FIN 20090212, CSC-GACM.
- ""INICIO 20090206, CSC-GACM.
- ""Cabe mencionar que lo siguiente es una CHICANADA que
- ""deberá ser sustituida por un procedimiento más correcto
- ""cuando haya oportunidad de hacerlo. La chicanada consiste
- ""en basarse en el sufijo del indicador de IVA para determinar
- ""el porcentaje de IVA correspondiente. Lo más correcto sería
- ""obtener de la base de datos dicho porcentaje, pero de
- ""momento ha resultado muy tardado hacerlo y mejor lo hago
- ""de esta forma para no perder más tiempo en este detalle.
- "IF t_factura-mwskz(1) NE 'S'.
- " CASE t_factura-mwskz+1(1).
- " WHEN '0'.
- " v_total = v_total + v_wrbtr.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '1' OR '3' OR '5' OR '7'.
- " v_total = v_total + v_wrbtr * '1.10'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '2' OR '4' OR '6' OR '8'.
- " v_total = v_total + v_wrbtr * '1.15'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " ENDCASE.
- "ELSE.
- " "Los indicadores de IVA que inician con 'S' los dieron
- " "de alta invertidos.
- " CASE t_factura-mwskz+1(1).
- " WHEN '0'.
- " v_total = v_total + v_wrbtr.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '1' OR '3' OR '5' OR '7'.
- " v_total = v_total + v_wrbtr * '1.15'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '2' OR '4' OR '6' OR '8'.
- " v_total = v_total + v_wrbtr * '1.10'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " ENDCASE.
- "ENDIF.
- ""FIN 20090206, CSC-GACM.
- "20100323, CSC-GACM: Puse lo anterior como comentario.
- "INICIO 20100323, CSC-GACM.
- IF t_factura-shkzg = 'S'.
- v_wrbtr = t_factura-wrbtr.
- ELSE.
- v_wrbtr = t_factura-wrbtr * -1.
- ENDIF.
- CALL FUNCTION 'ZFIFU010'
- EXPORTING
- p_mwskz = t_factura-mwskz
- IMPORTING
- p_piva = v_piva.
- v_total = v_total + v_wrbtr * ( 1 + v_piva / 100 ).
- "FIN 20100323, CSC-GACM.
- ENDLOOP.
- LOOP AT t_factura WHERE
- hkont IN r_hkont.
- t_pago-mandt = SY-MANDT.
- t_pago-bukrs = t_factura-bukrs.
- t_pago-factura = t_factura-belnr.
- t_pago-factpos = t_factura-buzei.
- t_pago-pago = t_compensacion-belnr.
- t_pago-pagopos = t_compensacion-buzei.
- t_pago-tipocomp = 'P'. "Pago.
- IF t_compensacion-belnr GE '1700000000' OR "20090629, CSC-GACM.
- t_compensacion-bschl EQ '22' OR
- t_compensacion-bschl EQ '12'. "20090129, CSC-GACM.
- t_pago-tipocomp = 'A'. "Anulación de factura.
- ENDIF.
- IF t_compensacion-bschl EQ '34' AND
- t_compensacion-mwskz NE ' ' AND "20090209, CSC-GACM.
- t_compensacion-rebzt EQ 'V'.
- t_pago-tipocomp = 'R'. "Retención de fondo de garantía.
- ENDIF.
- IF NOT t_compensacion-umskz IS INITIAL.
- t_pago-tipocomp = 'L'. "Liberación de fondo de garantía.
- ENDIF.
- t_pago-kunnr = t_compensacion-kunnr. "20090129, CSC-GACM.
- t_pago-lifnr = t_compensacion-lifnr.
- t_pago-budat = t_compensacion-budat.
- IF v_total NE 0.
- "t_pago-wrbtr = v_pago * t_factura-wrbtr / v_total.
- "20090206, CSC-GACM: Puse como comentario.
- ""INICIO 20090206, CSC-GACM.
- ""Cabe mencionar que lo siguiente es una CHICANADA que
- ""deberá ser sustituida por un procedimiento más correcto
- ""cuando haya oportunidad de hacerlo. La chicanada consiste
- ""en basarse en el sufijo del indicador de IVA para determinar
- ""el porcentaje de IVA correspondiente. Lo más correcto sería
- ""obtener de la base de datos dicho porcentaje, pero de
- ""momento ha resultado muy tardado hacerlo y mejor lo hago
- ""de esta forma para no perder más tiempo en este detalle.
- ""INICIO 20090212, CSC-GACM.
- "IF t_factura-shkzg = 'S'.
- " v_wrbtr = t_factura-wrbtr.
- "ELSE.
- " v_wrbtr = t_factura-wrbtr * -1.
- "ENDIF.
- ""FIN 20090212, CSC-GACM.
- "IF t_factura-mwskz(1) NE 'S'.
- " CASE t_factura-mwskz+1(1).
- " WHEN '0'.
- " t_pago-wrbtr = v_pago * v_wrbtr / v_total.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '1' OR '3' OR '5' OR '7'.
- " t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.10'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '2' OR '4' OR '6' OR '8'.
- " t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.15'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " ENDCASE.
- "ELSE.
- " "Los indicadores de IVA que inician con 'S' los dieron
- " "de alta invertidos.
- " CASE t_factura-mwskz+1(1).
- " WHEN '0'.
- " t_pago-wrbtr = v_pago * v_wrbtr / v_total.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '1' OR '3' OR '5' OR '7'.
- " t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.15'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " WHEN '2' OR '4' OR '6' OR '8'.
- " t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.10'.
- " "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
- " ENDCASE.
- "ENDIF.
- ""FIN 20090206, CSC-GACM.
- "20100323, CSC-GACM: Puse lo anterior como comentario.
- "INICIO 20100323, CSC-GACM.
- IF t_factura-shkzg = 'S'.
- v_wrbtr = t_factura-wrbtr.
- ELSE.
- v_wrbtr = t_factura-wrbtr * -1.
- ENDIF.
- CALL FUNCTION 'ZFIFU010'
- EXPORTING
- p_mwskz = t_factura-mwskz
- IMPORTING
- p_piva = v_piva.
- t_pago-wrbtr = v_pago * v_wrbtr / v_total * ( 1 + v_piva / 100 ).
- "FIN 20100323, CSC-GACM.
- ENDIF.
- t_pago-waers = t_compensacion-waers.
- t_pago-mwskz = t_factura-mwskz.
- IF NOT t_compensacion-bschl = '02'.
- "20150504, CSC-GACM: De acuerdo a lo indicado por CSC-LNC en tarea Asana
- "titulada "Ingreso Cobrado PFP / Anulaciones notas de crédito". No uso
- "t_compensacion-shkzg porque se inicializa a "X" en algunos casos.
- COLLECT t_pago.
- ENDIF.
- "20150504, CSC-GACM.
- ENDLOOP.
- SORT t_pago BY bukrs factura factpos pago pagopos.
- LOOP AT t_pago.
- t_tabla = t_pago.
- COLLECT t_tabla.
- ENDLOOP.
- READ TABLE t_factura WITH KEY buzei = p_buzei.
- LOOP AT t_compensacion WHERE
- "augbl IS NOT INITIAL AND
- "20090304, CSC-GACM: Puse como comentario.
- augbl NE t_compensacion-belnr.
- IF ( t_compensacion-rebzg EQ t_factura-belnr AND
- t_compensacion-rebzz EQ t_factura-buzei AND
- t_compensacion-augbl IS NOT INITIAL ) OR
- "20090306, CSC-GACM.
- ( t_compensacion-rebzg EQ e_compensado-belnr AND
- t_compensacion-rebzz EQ e_compensado-buzei AND
- t_compensacion-augbl IS NOT INITIAL ) OR
- "20090306, CSC-GACM.
- ( t_compensacion-rebzg IS INITIAL AND
- t_compensacion-rebzz IS INITIAL AND
- t_compensacion-augbl IS NOT INITIAL ) OR
- "20090306, CSC-GACM.
- "INICIO 20090307, CSC-GACM: Liberaciones parciales.
- ( t_compensacion-rebzg IS INITIAL AND
- t_compensacion-rebzz IS INITIAL AND
- t_compensacion-augbl IS INITIAL AND
- t_compensacion-umskz IS NOT INITIAL ).
- "FIN 20090307, CSC-GACM.
- "INICIO 20090204, CSC-GACM.
- "Caso especial: Cuando se trata de una liberación, es correcto
- "suponer que el saldo es igual a la compensación. Con ello se
- "evade el problema de la "contabilización de diferencias" del
- "proceso de liberación de retenciones de CME. Ya van a poder
- "seguir usando "contabilizar diferencias" en liberaciones sin
- "problema alguno, por lo menos para este caso.
- IF ( t_pago-tipocomp EQ 'L' AND "20090213, CSC-GACM.
- t_compensacion-umskz EQ ' ' ) OR "20090219, CSC-GACM.
- ( t_pago-tipocomp EQ 'R' AND "20090213, CSC-GACM.
- t_compensacion-umskz NE ' ' ). "20090213, CSC-GACM.
- t_compensacion-wrbtr = v_pago.
- "20090213, CSC-GACM: t_pago-wrbtr X v_pago.
- ENDIF.
- "FIN 20090204, CSC-GACM.
- IF t_pago-tipocomp NE 'R' OR "20090213, CSC-GACM.
- t_compensacion-rebzg EQ t_factura-belnr OR "20090213, CSC-GACM.
- t_compensacion-umskz NE ' '. "20090213, CSC-GACM.
- "20090213, CSC-GACM: Para evitar irme por lo de otras
- " facturas a las que se les haya retenido
- " con el mismo documento.
- CALL FUNCTION 'ZFIFU004'
- EXPORTING
- p_inoco = p_inoco "20090129, CSC-GACM.
- p_buzei = p_buzei
- e_compensado = t_compensacion
- TABLES
- t_factura = t_factura
- t_tabla = t_tabla.
- ENDIF. "20090213, CSC-GACM.
- ENDIF.
- ENDLOOP.
- ENDFUNCTION.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement