marcbyte

zvalidacio_preus

Sep 23rd, 2020
727
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *&---------------------------------------------------------------------*
  2. *&  Include           ZVALIDACIO_PREUS_F01
  3. *&---------------------------------------------------------------------*
  4.  
  5. AT SELECTION-SCREEN OUTPUT.                          " Abans de la pantalla de petició de límits
  6.  
  7.   LOOP AT s_data.
  8.     CONCATENATE sy-datum(4) '0101' INTO zdatini.    " Concatenem 0101+any a la variable que hem definit
  9.     s_data-low = zdatini.                           " per  agregarli al primer valor DATA de la capçalera, que serà el valor per defecte
  10.     MODIFY s_data.
  11.   ENDLOOP.
  12.  
  13.  
  14. ** FUNCIONS
  15. FORM inicialitzar.
  16.  
  17.   repid   = sy-repid.
  18.   CREATE OBJECT gui.
  19.  
  20. ENDFORM.                    "inicialitzar
  21. *&---------------------------------------------------------------------*
  22. *&      Form  SELECCIO
  23. *&---------------------------------------------------------------------*
  24. *       text
  25. *----------------------------------------------------------------------*
  26. *  -->  p1        text
  27. *  <--  p2        text
  28. *----------------------------------------------------------------------*
  29.  
  30.  
  31. FORM seleccio .
  32.  
  33. ** Introducció dades del SAP a taula_sap > it_sap
  34.  
  35.   SELECT  vbrk~vbeln vbrk~fkdat vbrk~spart vbrk~bukrs vbrk~vkorg vbrk~xblnr
  36.             vbrp~vbeln vbrp~matnr vbrp~fkimg vbrp~netwr
  37.             vbrp~kzwi1 vbrp~kzwi5 vbrp~kzwi6 vbrp~posnr vbrp~arktx
  38.             vbrk~kunrg vbrk~xblnr vbrp~mwsbp
  39.           INTO CORRESPONDING FIELDS OF TABLE it_sap
  40.             FROM vbrk AS vbrk INNER JOIN vbrp AS vbrp
  41.               ON vbrk~vbeln = vbrp~vbeln
  42.             WHERE vbrk~vbeln IN s_vbeln   AND
  43.                   vbrk~kunrg IN s_kunrg   AND
  44.                   vbrp~matnr IN s_matnr   AND
  45.                   vbrk~fkdat IN s_data    AND
  46.                   vbrk~vkorg IN s_vkorg."   AND
  47.   "vbrk~spart IN s_spart.
  48.  
  49.   codalm = s_vkorg+3(4).
  50.  
  51. ** Introducció dades de CMZ a taula_cmz > it_cmz
  52.  
  53.   DATA con_name LIKE dbcon-con_name.
  54.  
  55.   CLEAR wa_sap.
  56.  
  57.   IF sy-sysid = 'FEP'.
  58.     con_name = 'CMZ'.
  59.   ELSE.
  60.     con_name = 'CMZTEST'.
  61.   ENDIF.
  62.  
  63. * Tractament de les dates per poder comparar-les amb CMZ
  64.   CONCATENATE s_data-low+6(2) '/' s_data-low+4(2) '/' s_data-low(4) INTO z_desde.
  65.   CONCATENATE s_data-high+6(2) '/' s_data-high+4(2) '/' s_data-high(4) INTO z_hasta.
  66.  
  67.   EXEC SQL.
  68.     connect to :con_name
  69.   ENDEXEC.
  70.  
  71. ** Select a la db de CMZ per imputar pre cada iteració del loop les dades de cada referència a la seva línia
  72.  
  73.   EXEC SQL.
  74.  
  75.     OPEN dbcur for
  76.  
  77.     SELECT C.COD_ALBARAN, P.LINEA, P.CODART, P.CANTIDAD, P.DESCUENTO, P.PRECIO, P.PRECIO_TOTAL, P.IMPORTE, P.IMPORTE_TOTAL, C.ID_TIPO_DOCUMENTO
  78.     FROM [cmz].[D_CLIE_ALBARANES_CAB_TBL] AS C
  79.     INNER JOIN [cmz].[D_CLIE_ALBARANES_DET_TBL] AS P ON C.ID_CLIE_ALBARAN = P.ID_CLIE_ALBARAN
  80.     WHERE (P.FECHA BETWEEN :z_desde AND :z_hasta) AND (C.CODALM = :codalm)
  81.  
  82.   ENDEXEC.
  83.  
  84.   DO.
  85.  
  86.     EXEC SQL.
  87.       FETCH NEXT dbcur INTO     :wa_cmz-codalb,
  88.                                 :wa_cmz-linia,
  89.                                 :wa_cmz-codart,
  90.                                 :wa_cmz-cantid,
  91.                                 :wa_cmz-desc,
  92.                                 :wa_cmz-precio,
  93.                                 :wa_cmz-precio_total,
  94.                                 :wa_cmz-importe,
  95.                                 :wa_cmz-importe_total,
  96.                                 :wa_cmz-tipo_documento
  97.     ENDEXEC.
  98.  
  99.     IF sy-subrc <> 0.
  100.       EXIT.
  101.     ELSE.
  102.       APPEND wa_cmz TO it_cmz.
  103.     ENDIF.
  104.  
  105.   ENDDO.
  106.  
  107.   EXEC SQL.
  108.     CLOSE dbcur
  109.   ENDEXEC.
  110.  
  111.   LOOP AT it_cmz INTO wa_cmz.
  112.     IF wa_cmz-importe_total = 0.
  113.       DELETE it_cmz.
  114.     ENDIF.
  115.   ENDLOOP.
  116.  
  117.   LOOP AT it_sap INTO wa_sap.
  118.  
  119.     IF wa_sap-kunrg(4) = 'MAG-'.
  120.       DELETE it_sap.
  121.       CONTINUE.
  122.     ENDIF.
  123.  
  124.     wa_sap-tipo_documento = wa_sap-xblnr+2(1). " Linea
  125.  
  126.     tiquet = wa_sap-xblnr+9(7).
  127.     anycreacio = wa_sap-fkdat+0(4).
  128.  
  129.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " Funció per omplir de 0 una variable en funció de la longitud del camp
  130.       EXPORTING
  131.         input  = tiquet
  132.       IMPORTING
  133.         output = tiquet.
  134.  
  135.     CONCATENATE anycreacio '/' wa_sap-vkorg wa_sap-xblnr+7(2) '/' tiquet INTO wa_sap-codalb. " Creació del núm del tiquet per poder
  136.  
  137.     "CLEAR posicio.
  138.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
  139.       EXPORTING
  140.         input  = wa_sap-posnr
  141.       IMPORTING
  142.         output = posicio.
  143.  
  144.     CLEAR wa_cmz.
  145.  
  146.     READ TABLE it_cmz INTO wa_cmz
  147.     WITH KEY codalb = wa_sap-codalb
  148.              tipo_documento = wa_sap-tipo_documento
  149.              linia = posicio.
  150.  
  151.     IF sy-subrc = 0.
  152.       wa_sap-importe_total = wa_cmz-importe_total.
  153.       wa_sap-importe = wa_cmz-importe.
  154.       wa_sap-precio = wa_cmz-precio.
  155.       wa_sap-precio_total = wa_cmz-precio_total.
  156.       wa_sap-desc = wa_cmz-desc.
  157.       wa_sap-cantid = wa_cmz-cantid.
  158.     ENDIF.
  159.  
  160.     IF ( wa_sap-kzwi5 < 0 AND wa_sap-importe_total > 0 ) AND wa_sap-kzwi5 * -1 <> wa_sap-importe_total.
  161.       MODIFY it_sap FROM wa_sap.
  162.     ELSEIF ( wa_sap-importe_total < 0 AND wa_sap-kzwi5 > 0 ) AND wa_sap-importe_total * -1 <> wa_sap-kzwi5.
  163.       MODIFY it_sap FROM wa_sap.
  164.     ELSEIF ( wa_sap-importe_total < 0 AND wa_sap-importe_total < 0 ) AND wa_sap-importe_total <> wa_sap-kzwi5.
  165.       MODIFY it_sap FROM wa_sap.
  166.     ELSEIF ( wa_sap-kzwi5 > 0 AND wa_sap-importe_total > 0 ) AND wa_sap-kzwi5 <> wa_sap-importe_total.
  167.       MODIFY it_sap FROM wa_sap.
  168.     ELSEIF wa_sap-kzwi5 = wa_sap-importe_total OR ( wa_sap-linia <> '3' OR wa_sap-linia <> '1' )." OR wa_sap-kunrg+6(4) CS '1234'.
  169.       DELETE it_sap.
  170.     ENDIF.
  171.  
  172.   ENDLOOP.
  173.  
  174. ENDFORM.                    " SELECCIO
RAW Paste Data