Advertisement
Guest User

ZFIFU004

a guest
Jul 31st, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 23.48 KB | None | 0 0
  1. FUNCTION zfifu004.
  2. *"----------------------------------------------------------------------
  3. *"*"Interfase local
  4. *"  IMPORTING
  5. *"     VALUE(P_INOCO) TYPE  CHAR1
  6. *"     REFERENCE(P_BUZEI) LIKE  BSIK-BUZEI
  7. *"     REFERENCE(E_COMPENSADO) LIKE  ZFIES019 STRUCTURE  ZFIES019
  8. *"  TABLES
  9. *"      T_FACTURA STRUCTURE  ZFIES021
  10. *"      T_TABLA STRUCTURE  ZFITA003P
  11. *"----------------------------------------------------------------------
  12. * COMPAÑIA: Centinela Servicios Corporativos                          *
  13. * AUTOR:    Gustavo Adolfo Carreño Monroy (CSC-GACM)                  *
  14. * FECHA:    Lunes 5 de enero del 2009                                 *
  15. * OBJETIVO: Consulta de Compensaciones para PFX                       *
  16. *---------------------------------------------------------------------*
  17. * 20090129, CSC-GACM: Agregué la parte de ingresos.                   *
  18. * 20090130, CSC-GACM: Agregué la parte de grafos.                     *
  19. * 20090204, CSC-GACM: Agregué caso especial para liberaciones.        *
  20. * 20090205, CSC-GACM: Modifiqué para pagos con diferente moneda.      *
  21. * 20090206, CSC-GACM: Mejor forma de repartir por lo del IVA.         *
  22. * 20090209, CSC-GACM: Agregué campo de indicador de IVA a la condi-   *
  23. *                     ción para determinar si una compensación es re- *
  24. *                     tención de fondo de garantía.                   *
  25. * 20090212, CSC-GACM: Modifiqué para tomar en cuenta indicador de de- *
  26. *                     be y haber de la factura original.              *
  27. * 20090213, CSC-GACM: Parché para retención a varias facturas.        *
  28. * 20090219, CSC-GACM: Agregué condición complementaria para caso espe-*
  29. *                     cial para liberaciones.                         *
  30. * 20090304, CSC-GACM: Eliminé parte que evitaba considerar liberacio- *
  31. *                     nes parciales.                                  *
  32. * 20090305, CSC-GACM: Agregué codigo para liberaciones parciales.     *
  33. * 20090306, CSC-GACM: Agregué codigo para evitar pagos malos que se   *
  34. *                     colaban con lo de liberaciones parciales.       *
  35. * 20090308, CSC-GACM: Solucioné casos de liberación parcial, tanto en *
  36. *                     documento con liberaciones totales como en docu-*
  37. *                     mento independiente.                            *
  38. * 20090310, CSC-GACM: Solucioné efecto secundario de lentitud causada *
  39. *                     por liberación parcial mediante tabla auxiliar. *
  40. * 20090629, CSC-GACM: Modifiqué para considerar como anulaciones de   *
  41. *                     factura las compensaciones 17s.                 *
  42. * 20100323, CSC-GACM: Actualicé para uso de nuevos indicadores de IVA.*
  43. * 20150504, CSC-GACM: Ignoré compensaciones de anulación de abono.    *
  44. *---------------------------------------------------------------------*
  45.   DATA: BEGIN OF t_compensacion OCCURS 0.
  46.     INCLUDE STRUCTURE zfies019.
  47.   DATA: END OF t_compensacion.
  48.   DATA: t_pago LIKE t_tabla OCCURS 0 WITH HEADER LINE.
  49.   DATA:
  50.     v_compensacion LIKE t_compensacion-wrbtr,
  51.     v_pago         LIKE t_compensacion-wrbtr,
  52.     v_total        LIKE t_compensacion-wrbtr,
  53.     v_wrbtr        LIKE t_factura-wrbtr, "20090212, CSC-GACM.
  54.     v_augbl        LIKE e_compensado-augbl, "20090305, CSC-GACM.
  55.     v_piva         TYPE zpiva. "20100323, CSC-GACM.
  56.   RANGES:
  57.     r_belnr FOR BSIK-BELNR, "20090305, CSC-GACM.
  58.     r_gjahr FOR BKPF-GJAHR,
  59.     r_hkont FOR BSIK-HKONT,
  60.     r_augdt FOR BSIK-AUGDT,
  61.     r_augbl FOR BSIK-AUGBL,
  62.     r_zuonr FOR BSIK-ZUONR,
  63.     r_buzei FOR BSIK-BUZEI.
  64.   READ TABLE t_factura WITH KEY buzei = p_buzei.
  65.   "INICIO 20090305, CSC-GACM.
  66.   IF e_compensado-augbl IS INITIAL.
  67.     "Es liberación es parcial y hay que recuperar el documento
  68.     "de compensación.
  69.     "SELECT SINGLE
  70.     "  BELNR
  71.     "  FROM BSEG
  72.     "  INTO v_augbl
  73.     "  WHERE
  74.     "    BUKRS EQ e_compensado-bukrs AND
  75.     "    BELNR IN r_belnr            AND
  76.     "    GJAHR IN r_gjahr            AND
  77.     "    BUZEI IN r_buzei            AND
  78.     "    REBZG EQ e_compensado-belnr AND
  79.     "    REBZZ EQ p_buzei.
  80.       "20090310, CSC-GACM: Puse lo anterior como comentario.
  81.     "INICIO, 20090310, CSC-GACM.
  82.     SELECT SINGLE
  83.       belnr
  84.       INTO v_augbl
  85.       FROM zfita005
  86.       WHERE
  87.         bukrs EQ e_compensado-bukrs AND
  88.         rebzg EQ e_compensado-belnr AND
  89.         rebzz EQ p_buzei.
  90.     "FIN, 20090310, CSC-GACM.
  91.   ELSE.
  92.     v_augbl = e_compensado-augbl.
  93.   ENDIF.
  94.   "FIN 20090305, CSC-GACM.
  95.   "INICIO 20090129, CSC-GACM.
  96.   IF p_inoco EQ 'I'.
  97.     SELECT
  98.       a~BUKRS
  99.       a~BELNR
  100.       a~BUDAT
  101.       a~USNAM
  102.       a~WAERS
  103.       b~KUNNR
  104.       b~KUNNR AS lifnr
  105.       b~UMSKZ
  106.       b~AUGBL
  107.       b~BUZEI
  108.       b~BSCHL
  109.       b~SHKZG
  110.       b~MWSKZ
  111.       b~WRBTR
  112.       b~KOSTL
  113.       b~AUFNR
  114.       b~HKONT
  115.       b~REBZG
  116.       b~REBZZ
  117.       b~REBZT
  118.       b~PROJK
  119.       FROM
  120.                      BKPF AS a
  121.           INNER JOIN BSID AS b
  122.             ON
  123.               b~BUKRS EQ a~BUKRS AND
  124.               b~BELNR EQ a~BELNR
  125.       INTO TABLE t_compensacion
  126.       WHERE
  127.         a~BUKRS EQ e_compensado-bukrs AND
  128.         a~BELNR EQ v_augbl            AND
  129.           "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
  130.         a~GJAHR IN r_gjahr            AND
  131.         b~HKONT IN r_hkont            AND
  132.         b~AUGDT IN r_augdt            AND
  133.         b~AUGBL IN r_augbl            AND
  134.         b~ZUONR IN r_zuonr            AND
  135.         b~GJAHR IN r_gjahr            AND
  136.         b~BUZEI IN r_buzei.
  137.     SELECT
  138.       a~BUKRS
  139.       a~BELNR
  140.       a~BUDAT
  141.       a~USNAM
  142.       a~WAERS
  143.       b~KUNNR
  144.       b~KUNNR AS lifnr
  145.       b~UMSKZ
  146.       b~AUGBL
  147.       b~BUZEI
  148.       b~BSCHL
  149.       b~SHKZG
  150.       b~MWSKZ
  151.       b~WRBTR
  152.       b~KOSTL
  153.       b~AUFNR
  154.       b~HKONT
  155.       b~REBZG
  156.       b~REBZZ
  157.       b~REBZT
  158.       b~PROJK
  159.       FROM
  160.                      BKPF AS a
  161.           INNER JOIN BSAD AS b
  162.             ON
  163.               b~BUKRS EQ a~BUKRS AND
  164.               b~BELNR EQ a~BELNR
  165.       APPENDING TABLE t_compensacion
  166.       WHERE
  167.         a~BUKRS EQ e_compensado-bukrs AND
  168.         a~BELNR EQ v_augbl            AND
  169.           "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
  170.         a~GJAHR IN r_gjahr            AND
  171.         b~HKONT IN r_hkont            AND
  172.         b~AUGDT IN r_augdt            AND
  173.         b~AUGBL IN r_augbl            AND
  174.         b~ZUONR IN r_zuonr            AND
  175.         b~GJAHR IN r_gjahr            AND
  176.         b~BUZEI IN r_buzei.
  177.     LOOP AT t_compensacion.
  178.       CLEAR t_compensacion-lifnr.
  179.       MODIFY t_compensacion TRANSPORTING lifnr.
  180.     ENDLOOP.
  181.   ENDIF.
  182.   "FIN 20090129, CSC-GACM.
  183.   IF p_inoco EQ 'C'. "20090129, CSC-GACM.
  184.     SELECT
  185.       a~BUKRS
  186.       a~BELNR
  187.       a~BUDAT
  188.       a~USNAM
  189.       a~WAERS
  190.       b~LIFNR AS kunnr "20090129, CSC-GACM.
  191.       b~LIFNR
  192.       b~UMSKZ
  193.       b~AUGBL
  194.       b~BUZEI
  195.       b~BSCHL
  196.       b~SHKZG
  197.       b~MWSKZ
  198.       b~WRBTR
  199.       b~KOSTL
  200.       b~AUFNR
  201.       b~HKONT
  202.       b~REBZG
  203.       b~REBZZ
  204.       b~REBZT
  205.       b~PROJK
  206.       FROM
  207.                      BKPF AS a
  208.           INNER JOIN BSIK AS b
  209.             ON
  210.               b~BUKRS EQ a~BUKRS AND
  211.               b~BELNR EQ a~BELNR
  212.       INTO TABLE t_compensacion
  213.       WHERE
  214.         a~BUKRS EQ e_compensado-bukrs AND
  215.         a~BELNR EQ v_augbl            AND
  216.           "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
  217.         a~GJAHR IN r_gjahr            AND
  218.         b~HKONT IN r_hkont            AND
  219.         b~AUGDT IN r_augdt            AND
  220.         b~AUGBL IN r_augbl            AND
  221.         b~ZUONR IN r_zuonr            AND
  222.         b~GJAHR IN r_gjahr            AND
  223.         b~BUZEI IN r_buzei.
  224.     SELECT
  225.       a~BUKRS
  226.       a~BELNR
  227.       a~BUDAT
  228.       a~USNAM
  229.       a~WAERS
  230.       b~LIFNR AS kunnr "20090129, CSC-GACM.
  231.       b~LIFNR
  232.       b~UMSKZ
  233.       b~AUGBL
  234.       b~BUZEI
  235.       b~BSCHL
  236.       b~SHKZG
  237.       b~MWSKZ
  238.       b~WRBTR
  239.       b~KOSTL
  240.       b~AUFNR
  241.       b~HKONT
  242.       b~REBZG
  243.       b~REBZZ
  244.       b~REBZT
  245.       b~PROJK
  246.       FROM
  247.                      BKPF AS a
  248.           INNER JOIN BSAK AS b
  249.             ON
  250.               b~BUKRS EQ a~BUKRS AND
  251.               b~BELNR EQ a~BELNR
  252.       APPENDING TABLE t_compensacion
  253.       WHERE
  254.         a~BUKRS EQ e_compensado-bukrs AND
  255.         a~BELNR EQ v_augbl            AND
  256.           "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
  257.         a~GJAHR IN r_gjahr            AND
  258.         b~HKONT IN r_hkont            AND
  259.         b~AUGDT IN r_augdt            AND
  260.         b~AUGBL IN r_augbl            AND
  261.         b~ZUONR IN r_zuonr            AND
  262.         b~GJAHR IN r_gjahr            AND
  263.         b~BUZEI IN r_buzei.
  264.     "INICIO 20090129, CSC-GACM.
  265.     LOOP AT t_compensacion.
  266.       CLEAR t_compensacion-kunnr.
  267.       MODIFY t_compensacion TRANSPORTING kunnr.
  268.     ENDLOOP.
  269.     "FIN 20090129, CSC-GACM.
  270.   ENDIF. "20090129, CSC-GACM.
  271.   IF LINES( t_compensacion ) EQ 0.
  272.     "Necesito que no esté vacía la tabla interna.
  273.     SELECT
  274.       a~BUKRS
  275.       a~BELNR
  276.       a~BUDAT
  277.       a~USNAM
  278.       a~WAERS
  279.       FROM
  280.         BKPF AS a
  281.       INTO CORRESPONDING FIELDS OF TABLE t_compensacion
  282.       WHERE
  283.         a~BUKRS EQ e_compensado-bukrs AND
  284.         a~BELNR EQ v_augbl AND
  285.           "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
  286.         a~GJAHR IN r_gjahr.
  287.     LOOP AT t_compensacion.
  288.       t_compensacion-kunnr = e_compensado-kunnr. "20090129, CSC-GACM.
  289.       t_compensacion-lifnr = e_compensado-lifnr.
  290.       MODIFY t_compensacion TRANSPORTING
  291.         kunnr "20090129, CSC-GACM.
  292.         lifnr.
  293.     ENDLOOP.
  294.   ENDIF.
  295.   SORT t_compensacion BY bukrs belnr buzei.
  296.   READ TABLE t_compensacion WITH KEY
  297.     rebzg = t_factura-belnr
  298.     rebzz = t_factura-buzei.
  299.   IF SY-SUBRC NE 0.
  300.     READ TABLE t_compensacion WITH KEY
  301.       rebzg = e_compensado-belnr
  302.       rebzz = e_compensado-buzei.
  303.   ENDIF.
  304.   IF SY-SUBRC EQ 0 AND
  305.      e_compensado-augbl IS NOT INITIAL.
  306.        "20090306, CSC-GACM: Para forzar irse por ELSE en casos de
  307.        "                    liberación parcial.
  308.     IF e_compensado-waers NE t_compensacion-waers.
  309.       CALL FUNCTION 'ZFIFU005'
  310.         EXPORTING
  311.           p_wrbtr1 = t_compensacion-wrbtr
  312.           p_waers1 = t_compensacion-waers
  313.           p_waers2 = e_compensado-waers
  314.           p_budat  = t_compensacion-budat
  315.         IMPORTING
  316.           p_wrbtr2 = v_compensacion.
  317.     ELSE.
  318.       v_compensacion = t_compensacion-wrbtr.
  319.     ENDIF.
  320.     IF e_compensado-shkzg = 'H'.
  321.       v_pago = + e_compensado-wrbtr.
  322.     ELSE.
  323.       v_pago = - e_compensado-wrbtr.
  324.     ENDIF.
  325.     IF t_compensacion-shkzg = 'H'.
  326.       v_pago = v_pago - v_compensacion.
  327.         "20090205, CSC-GACM: t_compensacion-wrbtr X v_compensacion.
  328.     ELSE.
  329.       v_pago = v_pago + v_compensacion.
  330.         "20090205, CSC-GACM: t_compensacion-wrbtr X v_compensacion.
  331.     ENDIF.
  332. *    IF e_compensado-waers NE t_compensacion-waers.
  333. *      CALL FUNCTION 'ZFIFU005'
  334. *        EXPORTING
  335. *          p_wrbtr1 = v_pago
  336. *          p_waers1 = e_compensado-waers
  337. *          p_waers2 = t_compensacion-waers
  338. *          p_budat  = t_compensacion-budat
  339. *        IMPORTING
  340. *          p_wrbtr2 = v_pago.
  341. *    ENDIF.
  342.     "200902025, CSC-GACM: Puse lo anterior como comentario.
  343.   ELSE.
  344.     IF NOT e_compensado-augbl IS INITIAL.
  345.       "20090308, CSC-GACM: Esto aplica cuando no es una
  346.       "                    liberación parcial.
  347.       LOOP AT t_compensacion WHERE belnr EQ v_augbl.
  348.         "20090305, CSC-GACM: e_compensado-augbl X v_augbl.
  349.         "Esto es para quedarme con el indicador de CME, si es que
  350.         "existe.
  351.         IF NOT t_compensacion-umskz IS INITIAL.
  352.           EXIT.
  353.         ENDIF.
  354.       ENDLOOP.
  355.       t_compensacion-shkzg = 'X'.
  356.       IF e_compensado-shkzg = 'H'.
  357.         v_pago = + e_compensado-wrbtr.
  358.       ELSE.
  359.         v_pago = - e_compensado-wrbtr.
  360.       ENDIF.
  361.     "INICIO 20090308, CSC-GACM.
  362.     ELSE.
  363.       "Esto aplica cuando es una liberación parcial, no importa
  364.       "que sea junto con liberaciones totales de otros documentos
  365.       "o si sea independiente en su propio documento.
  366.       LOOP AT t_compensacion WHERE belnr EQ v_augbl.
  367.         "Esto es para quedarme con el indicador de CME, si es que
  368.         "existe.
  369.         IF NOT t_compensacion-umskz IS INITIAL            AND
  370.                t_compensacion-rebzg EQ e_compensado-belnr AND
  371.                t_compensacion-rebzz EQ e_compensado-buzei.
  372.           EXIT.
  373.         ENDIF.
  374.       ENDLOOP.
  375.       IF t_compensacion-shkzg = 'S'.
  376.         v_pago = + t_compensacion-wrbtr.
  377.       ELSE.
  378.         v_pago = - t_compensacion-wrbtr.
  379.       ENDIF.
  380.     ENDIF.
  381.     "FIN 20090308, CSC-GACM.
  382.   ENDIF.
  383.   "INICIO 20090205, CSC-GACM.
  384.   IF     e_compensado-waers  NE t_compensacion-waers AND
  385.      NOT e_compensado-augbl IS INITIAL. "20090308, CSC-GACM.
  386.     CALL FUNCTION 'ZFIFU005'
  387.       EXPORTING
  388.         p_wrbtr1 = v_pago
  389.         p_waers1 = e_compensado-waers
  390.         p_waers2 = t_compensacion-waers
  391.         p_budat  = t_compensacion-budat
  392.       IMPORTING
  393.         p_wrbtr2 = v_pago.
  394.   ENDIF.
  395.   "FIN 20090205, CSC-GACM.
  396.   "INICIO 20090129, CSC-GACM.
  397.   IF p_inoco EQ 'I'.
  398.     v_pago = v_pago * -1.
  399.   ENDIF.
  400.   "FIN 20090129, CSC-GACM.
  401.   REFRESH r_hkont.
  402.   "INICIO 20090129, CSC-GACM.
  403.   IF p_inoco EQ 'I'.
  404.     r_hkont-sign   = 'I'.
  405.     r_hkont-option = 'BT'.
  406.     r_hkont-low    = '0000400000'.
  407.     r_hkont-high   = '0000499999'.
  408.     APPEND r_hkont.
  409.   ENDIF.
  410.   "FIN 20090129, CSC-GACM.
  411.   IF p_inoco EQ 'C'. "20090129, CSC-GACM.
  412.     r_hkont-sign   = 'I'.
  413.     r_hkont-option = 'BT'.
  414.     r_hkont-low    = '0000500000'.
  415.     r_hkont-high   = '0000599999'.
  416.     APPEND r_hkont.
  417.     r_hkont-sign   = 'I'.
  418.     r_hkont-option = 'BT'.
  419.     r_hkont-low    = '0000104010'.
  420.     r_hkont-high   = '0000104060'.
  421.     APPEND r_hkont.
  422.     "INICIO 20090130, CSC-GACM.
  423.     r_hkont-sign   = 'E'.
  424.     r_hkont-option = 'EQ'.
  425.     r_hkont-low    = '0000520201'.
  426.     r_hkont-high   = '0000520201'.
  427.     APPEND r_hkont.
  428.     r_hkont-sign   = 'E'.
  429.     r_hkont-option = 'EQ'.
  430.     r_hkont-low    = '0000520202'.
  431.     r_hkont-high   = '0000520202'.
  432.     APPEND r_hkont.
  433.     r_hkont-sign   = 'E'.
  434.     r_hkont-option = 'EQ'.
  435.     r_hkont-low    = '0000520415'.
  436.     r_hkont-high   = '0000520415'.
  437.     APPEND r_hkont.
  438.     "FIN 20090130, CSC-GACM.
  439.   ENDIF. "20090129, CSC-GACM.
  440.   v_total = 0.
  441.   LOOP AT t_factura WHERE
  442.     hkont IN r_hkont.
  443.     "v_total = v_total + t_factura-wrbtr.
  444.       "20090206, CSC-GACM: Puse como comentario.
  445.     "INICIO 20090212, CSC-GACM.
  446.     IF t_factura-shkzg = 'S'.
  447.       v_wrbtr = t_factura-wrbtr.
  448.     ELSE.
  449.       v_wrbtr = t_factura-wrbtr * -1.
  450.     ENDIF.
  451.     "FIN 20090212, CSC-GACM.
  452.     ""INICIO 20090206, CSC-GACM.
  453.     ""Cabe mencionar que lo siguiente es una CHICANADA que
  454.     ""deberá ser sustituida por un procedimiento más correcto
  455.     ""cuando haya oportunidad de hacerlo. La chicanada consiste
  456.     ""en basarse en el sufijo del indicador de IVA para determinar
  457.     ""el porcentaje de IVA correspondiente. Lo más correcto sería
  458.     ""obtener de la base de datos dicho porcentaje, pero de
  459.     ""momento ha resultado muy tardado hacerlo y mejor lo hago
  460.     ""de esta forma para no perder más tiempo en este detalle.
  461.     "IF t_factura-mwskz(1) NE 'S'.
  462.     "  CASE t_factura-mwskz+1(1).
  463.     "    WHEN '0'.
  464.     "      v_total = v_total + v_wrbtr.
  465.     "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  466.     "    WHEN '1' OR '3' OR '5' OR '7'.
  467.     "      v_total = v_total + v_wrbtr * '1.10'.
  468.     "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  469.     "    WHEN '2' OR '4' OR '6' OR '8'.
  470.     "      v_total = v_total + v_wrbtr * '1.15'.
  471.     "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  472.     "  ENDCASE.
  473.     "ELSE.
  474.     "  "Los indicadores de IVA que inician con 'S' los dieron
  475.     "  "de alta invertidos.
  476.     "  CASE t_factura-mwskz+1(1).
  477.     "    WHEN '0'.
  478.     "      v_total = v_total + v_wrbtr.
  479.     "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  480.     "    WHEN '1' OR '3' OR '5' OR '7'.
  481.     "      v_total = v_total + v_wrbtr * '1.15'.
  482.     "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  483.     "    WHEN '2' OR '4' OR '6' OR '8'.
  484.     "      v_total = v_total + v_wrbtr * '1.10'.
  485.     "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  486.     "  ENDCASE.
  487.     "ENDIF.
  488.     ""FIN 20090206, CSC-GACM.
  489.       "20100323, CSC-GACM: Puse lo anterior como comentario.
  490.     "INICIO 20100323, CSC-GACM.
  491.     IF t_factura-shkzg = 'S'.
  492.       v_wrbtr = t_factura-wrbtr.
  493.     ELSE.
  494.       v_wrbtr = t_factura-wrbtr * -1.
  495.     ENDIF.
  496.     CALL FUNCTION 'ZFIFU010'
  497.       EXPORTING
  498.         p_mwskz = t_factura-mwskz
  499.       IMPORTING
  500.         p_piva  = v_piva.
  501.     v_total = v_total + v_wrbtr * ( 1 + v_piva / 100 ).
  502.     "FIN 20100323, CSC-GACM.
  503.   ENDLOOP.
  504.   LOOP AT t_factura WHERE
  505.     hkont IN r_hkont.
  506.     t_pago-mandt    = SY-MANDT.
  507.     t_pago-bukrs    = t_factura-bukrs.
  508.     t_pago-factura  = t_factura-belnr.
  509.     t_pago-factpos  = t_factura-buzei.
  510.     t_pago-pago     = t_compensacion-belnr.
  511.     t_pago-pagopos  = t_compensacion-buzei.
  512.     t_pago-tipocomp = 'P'. "Pago.
  513.     IF t_compensacion-belnr GE '1700000000' OR "20090629, CSC-GACM.
  514.        t_compensacion-bschl EQ '22'         OR
  515.        t_compensacion-bschl EQ '12'.           "20090129, CSC-GACM.
  516.       t_pago-tipocomp = 'A'. "Anulación de factura.
  517.     ENDIF.
  518.     IF t_compensacion-bschl EQ '34' AND
  519.        t_compensacion-mwskz NE '  ' AND "20090209, CSC-GACM.
  520.        t_compensacion-rebzt EQ 'V'.
  521.       t_pago-tipocomp = 'R'. "Retención de fondo de garantía.
  522.     ENDIF.
  523.     IF NOT t_compensacion-umskz IS INITIAL.
  524.       t_pago-tipocomp = 'L'. "Liberación de fondo de garantía.
  525.     ENDIF.
  526.     t_pago-kunnr = t_compensacion-kunnr. "20090129, CSC-GACM.
  527.     t_pago-lifnr = t_compensacion-lifnr.
  528.     t_pago-budat = t_compensacion-budat.
  529.     IF v_total NE 0.
  530.       "t_pago-wrbtr = v_pago * t_factura-wrbtr / v_total.
  531.         "20090206, CSC-GACM: Puse como comentario.
  532.       ""INICIO 20090206, CSC-GACM.
  533.       ""Cabe mencionar que lo siguiente es una CHICANADA que
  534.       ""deberá ser sustituida por un procedimiento más correcto
  535.       ""cuando haya oportunidad de hacerlo. La chicanada consiste
  536.       ""en basarse en el sufijo del indicador de IVA para determinar
  537.       ""el porcentaje de IVA correspondiente. Lo más correcto sería
  538.       ""obtener de la base de datos dicho porcentaje, pero de
  539.       ""momento ha resultado muy tardado hacerlo y mejor lo hago
  540.       ""de esta forma para no perder más tiempo en este detalle.
  541.       ""INICIO 20090212, CSC-GACM.
  542.       "IF t_factura-shkzg = 'S'.
  543.       "  v_wrbtr = t_factura-wrbtr.
  544.       "ELSE.
  545.       "  v_wrbtr = t_factura-wrbtr * -1.
  546.       "ENDIF.
  547.       ""FIN 20090212, CSC-GACM.
  548.       "IF t_factura-mwskz(1) NE 'S'.
  549.       "  CASE t_factura-mwskz+1(1).
  550.       "    WHEN '0'.
  551.       "      t_pago-wrbtr = v_pago * v_wrbtr / v_total.
  552.       "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  553.       "    WHEN '1' OR '3' OR '5' OR '7'.
  554.       "      t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.10'.
  555.       "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  556.       "    WHEN '2' OR '4' OR '6' OR '8'.
  557.       "      t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.15'.
  558.       "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  559.       "  ENDCASE.
  560.       "ELSE.
  561.       "  "Los indicadores de IVA que inician con 'S' los dieron
  562.       "  "de alta invertidos.
  563.       "  CASE t_factura-mwskz+1(1).
  564.       "    WHEN '0'.
  565.       "      t_pago-wrbtr = v_pago * v_wrbtr / v_total.
  566.       "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  567.       "    WHEN '1' OR '3' OR '5' OR '7'.
  568.       "      t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.15'.
  569.       "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  570.       "    WHEN '2' OR '4' OR '6' OR '8'.
  571.       "      t_pago-wrbtr = v_pago * v_wrbtr / v_total * '1.10'.
  572.       "        "20090212, CSC-GACM: t_factura-wrbtr X v_wrbtr.
  573.       "  ENDCASE.
  574.       "ENDIF.
  575.       ""FIN 20090206, CSC-GACM.
  576.         "20100323, CSC-GACM: Puse lo anterior como comentario.
  577.       "INICIO 20100323, CSC-GACM.
  578.       IF t_factura-shkzg = 'S'.
  579.         v_wrbtr = t_factura-wrbtr.
  580.       ELSE.
  581.         v_wrbtr = t_factura-wrbtr * -1.
  582.       ENDIF.
  583.       CALL FUNCTION 'ZFIFU010'
  584.         EXPORTING
  585.           p_mwskz = t_factura-mwskz
  586.         IMPORTING
  587.           p_piva  = v_piva.
  588.       t_pago-wrbtr = v_pago * v_wrbtr / v_total * ( 1 + v_piva / 100 ).
  589.       "FIN 20100323, CSC-GACM.
  590.     ENDIF.
  591.     t_pago-waers = t_compensacion-waers.
  592.     t_pago-mwskz = t_factura-mwskz.
  593.     IF NOT t_compensacion-bschl = '02'.
  594.       "20150504, CSC-GACM: De acuerdo a lo indicado por CSC-LNC en tarea Asana
  595.       "titulada "Ingreso Cobrado PFP /  Anulaciones notas de crédito". No uso
  596.       "t_compensacion-shkzg porque se inicializa a "X" en algunos casos.
  597.       COLLECT t_pago.
  598.     ENDIF.
  599.       "20150504, CSC-GACM.
  600.   ENDLOOP.
  601.   SORT t_pago BY bukrs factura factpos pago pagopos.
  602.   LOOP AT t_pago.
  603.     t_tabla = t_pago.
  604.     COLLECT t_tabla.
  605.   ENDLOOP.
  606.   READ TABLE t_factura WITH KEY buzei = p_buzei.
  607.   LOOP AT t_compensacion WHERE
  608.     "augbl IS NOT INITIAL AND
  609.       "20090304, CSC-GACM: Puse como comentario.
  610.     augbl NE t_compensacion-belnr.
  611.     IF ( t_compensacion-rebzg EQ t_factura-belnr    AND
  612.          t_compensacion-rebzz EQ t_factura-buzei    AND
  613.          t_compensacion-augbl IS NOT INITIAL )        OR
  614.            "20090306, CSC-GACM.
  615.        ( t_compensacion-rebzg EQ e_compensado-belnr AND
  616.          t_compensacion-rebzz EQ e_compensado-buzei AND
  617.          t_compensacion-augbl IS NOT INITIAL )        OR
  618.            "20090306, CSC-GACM.
  619.        ( t_compensacion-rebzg IS INITIAL            AND
  620.          t_compensacion-rebzz IS INITIAL            AND
  621.          t_compensacion-augbl IS NOT INITIAL )        OR
  622.            "20090306, CSC-GACM.
  623.        "INICIO 20090307, CSC-GACM: Liberaciones parciales.
  624.        ( t_compensacion-rebzg IS INITIAL            AND
  625.          t_compensacion-rebzz IS INITIAL            AND
  626.          t_compensacion-augbl IS INITIAL            AND
  627.          t_compensacion-umskz IS NOT INITIAL ).
  628.        "FIN 20090307, CSC-GACM.
  629.       "INICIO 20090204, CSC-GACM.
  630.       "Caso especial: Cuando se trata de una liberación, es correcto
  631.       "suponer que el saldo es igual a la compensación. Con ello se
  632.       "evade el problema de la "contabilización de diferencias" del
  633.       "proceso de liberación de retenciones de CME. Ya van a poder
  634.       "seguir usando "contabilizar diferencias" en liberaciones sin
  635.       "problema alguno, por lo menos para este caso.
  636.       IF ( t_pago-tipocomp      EQ 'L' AND  "20090213, CSC-GACM.
  637.            t_compensacion-umskz EQ ' ' ) OR "20090219, CSC-GACM.
  638.          ( t_pago-tipocomp      EQ 'R' AND  "20090213, CSC-GACM.
  639.            t_compensacion-umskz NE ' ' ).   "20090213, CSC-GACM.
  640.         t_compensacion-wrbtr = v_pago.
  641.           "20090213, CSC-GACM: t_pago-wrbtr X v_pago.
  642.       ENDIF.
  643.       "FIN 20090204, CSC-GACM.
  644.       IF t_pago-tipocomp      NE 'R'             OR "20090213, CSC-GACM.
  645.          t_compensacion-rebzg EQ t_factura-belnr OR "20090213, CSC-GACM.
  646.          t_compensacion-umskz NE ' '.               "20090213, CSC-GACM.
  647.         "20090213, CSC-GACM: Para evitar irme por lo de otras
  648.         "                    facturas a las que se les haya retenido
  649.         "                    con el mismo documento.
  650.         CALL FUNCTION 'ZFIFU004'
  651.           EXPORTING
  652.             p_inoco      = p_inoco "20090129, CSC-GACM.
  653.             p_buzei      = p_buzei
  654.             e_compensado = t_compensacion
  655.           TABLES
  656.             t_factura    = t_factura
  657.             t_tabla      = t_tabla.
  658.       ENDIF. "20090213, CSC-GACM.
  659.     ENDIF.
  660.   ENDLOOP.
  661. ENDFUNCTION.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement