Advertisement
Guest User

Untitled

a guest
May 24th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 9.48 KB | None | 0 0
  1. * Funciton declaration
  2. FORM behandel_data USING wa TYPE zud_2_pcs
  3.                    CHANGING mysubrc LIKE sy-subrc.
  4. * Variable declarations
  5.   DATA: ls_qals TYPE qals.
  6.  
  7.   DATA: l_matnr TYPE matnr,
  8.         l_charg TYPE charg_d,
  9.         l_prueflos TYPE qplos,
  10.         l_reason TYPE p25_prtxt,
  11.         l_wkvst TYPE zkvalstat,
  12.         l_subrc LIKE sy-subrc.
  13.  
  14.   DATA:  l_item_read_wa       TYPE rcoopc_itemalias_read,
  15.          l_item_read_tab      TYPE rcoopc_itemalias_read_tab,
  16.          l_item_write_wa       TYPE rcoopc_itemalias_write,
  17.          l_item_write_tab      TYPE rcoopc_itemalias_write_tab.
  18.  
  19.   DATA: l_msg TYPE bal_s_msg.
  20.  
  21. * Pointer variables
  22.   FIELD-SYMBOLS: <value> TYPE ANY,
  23.                  <read_wa> TYPE rcoopc_itemalias_read,
  24.                  <write_wa> TYPE rcoopc_itemalias_write.
  25.  
  26.   mysubrc = 0.
  27.  
  28. * mysubrc = 0: Alt er gået godt og vi har skrevet kontrolparti og
  29. *              kvalitetsstatus til de rigtige OPC-items.
  30. * mysubrc = 9: Batch eller materiale var ikke på tanken.
  31. * mysubrc = 1: Fejl ved læsning of skrivning til OPC-items
  32. *        og 2
  33. * mysubrc = 3: Batch eller materiale var ikke på tanken men vi er ikke
  34. *              nået til timeout endnu,
  35. *              eller vi kunne ikke læse kontrolparti på tanken efter
  36. *              at den var skrevet
  37.  
  38.   CLEAR z002.
  39.  
  40.   IF wa-reason IS NOT INITIAL.
  41.     IF wa-werks <> p_plant.
  42.       IF   wa-erdat > g_erdat OR
  43.          ( wa-erdat = g_erdat AND
  44.            wa-erzeit > g_erzeit ).
  45.         mysubrc = 3.
  46.       ELSE.
  47.         mysubrc = 9.
  48.       ENDIF.
  49.       EXIT.
  50.     ENDIF.
  51.  
  52.     SELECT SINGLE *
  53.     FROM z002
  54.     WHERE plant = p_plant AND
  55.           zlagertank = wa-zzaofelt1.
  56.  
  57.     IF sy-subrc <> 0.
  58.       mysubrc = 9.
  59.       EXIT.
  60.     ENDIF.
  61.  
  62.   ELSE.
  63.     SELECT SINGLE *
  64.     FROM z002
  65.     WHERE plant = p_plant AND
  66.           zlagertank = wa-zzaofelt1 AND
  67.           ( ( zlagertank IN s_tank1 AND ztnkgrp IN s_grp1 ) OR
  68.             ( zlagertank IN s_tank2 AND ztnkgrp IN s_grp2 ) ).
  69.  
  70.     IF sy-subrc <> 0.
  71.       mysubrc = 9.
  72.       EXIT.
  73.     ENDIF.
  74.  
  75.     SELECT SINGLE *
  76.     INTO ls_qals
  77.     FROM qals
  78.     WHERE prueflos = wa-prueflos AND
  79.           werk = p_plant.
  80.     IF sy-subrc <> 0.
  81.       IF   wa-erdat > g_erdat OR
  82.          ( wa-erdat = g_erdat AND
  83.            wa-erzeit > g_erzeit ).
  84.         mysubrc = 3.
  85.       ELSE.
  86.         mysubrc = 9.
  87.       ENDIF.
  88.       EXIT.
  89.     ENDIF.
  90.   ENDIF.
  91.  
  92.   IF z002-zkvalstat_ia IS INITIAL.
  93.     mysubrc = 9.
  94.     EXIT.
  95.   ENDIF.
  96.  
  97.   REFRESH l_item_read_tab.
  98.  
  99. * Insert for reading matnr
  100.   CLEAR l_item_read_wa.
  101.   MOVE: z002-plant TO l_item_read_wa-plant,
  102.         z002-zmatnr_ia TO l_item_read_wa-itemalias,
  103.         ctopc_valtype_char TO l_item_read_wa-value_type.
  104.  
  105.   CREATE DATA l_item_read_wa-value TYPE string.
  106.   APPEND l_item_read_wa TO l_item_read_tab.
  107.  
  108. * Insert for reading charg
  109.   IF NOT z002-zbatch_ia IS INITIAL.
  110.     CLEAR l_item_read_wa.
  111.     MOVE: z002-plant TO l_item_read_wa-plant,
  112.           z002-zbatch_ia TO l_item_read_wa-itemalias,
  113.           ctopc_valtype_char TO l_item_read_wa-value_type.
  114.  
  115.     CREATE DATA l_item_read_wa-value TYPE string.
  116.     APPEND l_item_read_wa TO l_item_read_tab.
  117.   ENDIF.
  118.  
  119. * Insert for reading inspection lot
  120.   IF NOT z002-zprueflos_ia IS INITIAL.
  121.     CLEAR l_item_read_wa.
  122.     MOVE: z002-plant TO l_item_read_wa-plant,
  123.           z002-zprueflos_ia TO l_item_read_wa-itemalias,
  124.           ctopc_valtype_char TO l_item_read_wa-value_type.
  125.  
  126.     CREATE DATA l_item_read_wa-value TYPE f.
  127.     APPEND l_item_read_wa TO l_item_read_tab.
  128.   ENDIF.
  129.  
  130.   IF NOT z002-zreason_ia IS INITIAL.
  131.     CLEAR l_item_read_wa.
  132.     MOVE: z002-plant TO l_item_read_wa-plant,
  133.           z002-zreason_ia TO l_item_read_wa-itemalias,
  134.           ctopc_valtype_char TO l_item_read_wa-value_type.
  135.  
  136.     CREATE DATA l_item_read_wa-value TYPE string.
  137.     APPEND l_item_read_wa TO l_item_read_tab.
  138.   ENDIF.
  139.  
  140. * Read via OPC
  141.   CALL METHOD cl_opc_item=>read_value_multi
  142.     CHANGING
  143.       items = l_item_read_tab.
  144.  
  145. * Find matnr
  146.   READ TABLE l_item_read_tab ASSIGNING <read_wa>
  147.                         WITH KEY plant = z002-plant
  148.                                  itemalias = z002-zmatnr_ia.
  149.   IF sy-subrc = 0.
  150.     IF <read_wa>-msgty = 'S'.
  151.       ASSIGN <read_wa>-value->* TO <value>.
  152.       l_matnr = <value>.
  153.     ELSE.
  154.       CLEAR l_msg.
  155.       MOVE-CORRESPONDING <read_wa> TO l_msg.
  156.  
  157.       IF <read_wa>-msgty = 'W'.
  158.         MOVE probclass_low TO l_msg-probclass.
  159.       ELSE.
  160.         MOVE probclass_high TO l_msg-probclass.
  161.       ENDIF.
  162.  
  163.       PERFORM log_msg_add_t USING l_msg
  164.                                   wa-zzaofelt1.
  165.     ENDIF.
  166.  
  167.  
  168.   ENDIF.
  169.  
  170. * Find charg
  171.   READ TABLE l_item_read_tab ASSIGNING <read_wa>
  172.                         WITH KEY plant = z002-plant
  173.                                  itemalias = z002-zbatch_ia.
  174.   IF sy-subrc = 0.
  175.     IF <read_wa>-msgty = 'S'.
  176.       ASSIGN <read_wa>-value->* TO <value>.
  177.       l_charg = <value>.
  178.     ELSE.
  179.  
  180.       CLEAR l_msg.
  181.       MOVE-CORRESPONDING <read_wa> TO l_msg.
  182.  
  183.       IF <read_wa>-msgty = 'W'.
  184.         MOVE probclass_low TO l_msg-probclass.
  185.       ELSE.
  186.         MOVE probclass_high TO l_msg-probclass.
  187.       ENDIF.
  188.  
  189.       PERFORM log_msg_add_t USING l_msg
  190.                                   wa-zzaofelt1.
  191.  
  192.     ENDIF.
  193.  
  194.   ENDIF.
  195.  
  196. * Find inspection lot
  197.   READ TABLE l_item_read_tab ASSIGNING <read_wa>
  198.                         WITH KEY plant = z002-plant
  199.                                  itemalias = z002-zprueflos_ia.
  200.   IF sy-subrc = 0.
  201.     IF <read_wa>-msgty = 'S'.
  202.       ASSIGN <read_wa>-value->* TO <value>.
  203.       l_prueflos = <value>.
  204.     ELSE.
  205.       CLEAR l_msg.
  206.       MOVE-CORRESPONDING <read_wa> TO l_msg.
  207.  
  208.       IF <read_wa>-msgty = 'W'.
  209.         MOVE probclass_low TO l_msg-probclass.
  210.       ELSE.
  211.         MOVE probclass_high TO l_msg-probclass.
  212.       ENDIF.
  213.  
  214.       PERFORM log_msg_add_t USING l_msg
  215.                                   wa-zzaofelt1.
  216.  
  217.     ENDIF.
  218.  
  219.  
  220.   ENDIF.
  221.  
  222. * Find reason
  223.   READ TABLE l_item_read_tab ASSIGNING <read_wa>
  224.                         WITH KEY plant = z002-plant
  225.                                  itemalias = z002-zreason_ia.
  226.   IF sy-subrc = 0.
  227.     IF <read_wa>-msgty = 'S'.
  228.       ASSIGN <read_wa>-value->* TO <value>.
  229.       l_reason = <value>.
  230.     ELSE.
  231.       CLEAR l_msg.
  232.       MOVE-CORRESPONDING <read_wa> TO l_msg.
  233.  
  234.       IF <read_wa>-msgty = 'W'.
  235.         MOVE probclass_low TO l_msg-probclass.
  236.       ELSE.
  237.         MOVE probclass_high TO l_msg-probclass.
  238.       ENDIF.
  239.  
  240.       PERFORM log_msg_add_t USING l_msg
  241.                                   wa-zzaofelt1.
  242.  
  243.     ENDIF.
  244.  
  245.   ENDIF.
  246.  
  247.   IF l_matnr = wa-matnr AND
  248.      l_charg = wa-charg AND
  249.     l_reason IS NOT INITIAL AND wa-reason IS INITIAL.
  250.     PERFORM message_reason_exists USING wa.
  251.     mysubrc = 9.
  252.     EXIT.
  253.   ELSEIF l_matnr = wa-matnr AND
  254.      l_charg = wa-charg.
  255. * .. OK .. we continue and try to write UD and inspection lot
  256.   ELSE.
  257.     IF wa-reason IS NOT INITIAL.
  258.       mysubrc = 9.
  259.       EXIT.
  260.     ENDIF.
  261.  
  262.     IF   wa-erdat > g_erdat OR
  263.        ( wa-erdat = g_erdat AND
  264.          wa-erzeit > g_erzeit ).
  265.       mysubrc = 3.
  266.     ELSE.
  267.       mysubrc = 9.
  268.     ENDIF.
  269.     EXIT.
  270.   ENDIF.
  271.  
  272.   REFRESH l_item_write_tab.
  273. * Insert for writing UD
  274.   CLEAR l_item_write_wa.
  275.   MOVE: z002-plant TO l_item_write_wa-plant,
  276.         z002-zkvalstat_ia TO l_item_write_wa-itemalias.
  277.  
  278.   CREATE DATA l_item_write_wa-value TYPE string.
  279.   ASSIGN l_item_write_wa-value->* TO <value>.
  280.   IF wa-vcode IS INITIAL.
  281.     MOVE 0 TO <value>.
  282.   ELSEIF wa-vcode(1) = 'Z'.
  283.     MOVE wa-vcode+1(1) TO <value>.
  284.   ELSE.
  285.     MOVE wa-vcode(1) TO <value>.
  286.   ENDIF.
  287.  
  288.   APPEND l_item_write_wa TO l_item_write_tab.
  289.  
  290. * Insert for writing inspection lot
  291.   IF NOT z002-zprueflos_ia IS INITIAL.
  292.     CLEAR l_item_write_wa.
  293.     MOVE: z002-plant TO l_item_write_wa-plant,
  294.           z002-zprueflos_ia TO l_item_write_wa-itemalias.
  295.  
  296.     CREATE DATA l_item_write_wa-value TYPE string.
  297.     ASSIGN l_item_write_wa-value->* TO <value>.
  298.     MOVE wa-prueflos TO <value>.
  299.  
  300.     APPEND l_item_write_wa TO l_item_write_tab.
  301.   ENDIF.
  302.  
  303. * Insert for writing reason
  304.   IF NOT z002-zreason_ia IS INITIAL.
  305.     CLEAR l_item_write_wa.
  306.     MOVE: z002-plant TO l_item_write_wa-plant,
  307.           z002-zreason_ia TO l_item_write_wa-itemalias.
  308.  
  309.     CREATE DATA l_item_write_wa-value TYPE string.
  310.     ASSIGN l_item_write_wa-value->* TO <value>.
  311.     MOVE wa-reason TO <value>.
  312.  
  313.     APPEND l_item_write_wa TO l_item_write_tab.
  314.   ENDIF.
  315.  
  316. * Write via OPC
  317.   CALL METHOD cl_opc_item=>write_value_multi
  318.     CHANGING
  319.       items = l_item_write_tab.
  320.  
  321.   LOOP AT l_item_write_tab ASSIGNING <write_wa>.
  322.  
  323.     IF <write_wa>-msgty = 'S'. CONTINUE. ENDIF.
  324.  
  325.  
  326.     CLEAR l_msg.
  327.     MOVE-CORRESPONDING <write_wa> TO l_msg.
  328.  
  329.     IF <write_wa>-msgty = 'W'.
  330.       MOVE probclass_low TO l_msg-probclass.
  331.     ELSE.
  332.       MOVE probclass_high TO l_msg-probclass.
  333.     ENDIF.
  334.  
  335.     PERFORM log_msg_add_t USING l_msg
  336.                                 wa-zzaofelt1.
  337.  
  338.     IF <write_wa>-msgty <> 'W'.
  339.       mysubrc = 3.
  340.     ENDIF.
  341.  
  342.   ENDLOOP.
  343.  
  344.   CHECK mysubrc = 0.
  345.  
  346. * If the inspection lot is new for the tank
  347.   CHECK wa-prueflos <> l_prueflos.
  348.  
  349.   PERFORM check_already_writen USING wa
  350.                                CHANGING l_subrc.
  351.  
  352.   CHECK l_subrc = 0.
  353.  
  354.   PERFORM message_label_print USING wa.
  355.  
  356.   CALL FUNCTION 'Z_TNK_PRT_LABEL_NEWOIL'
  357.     EXPORTING
  358.       werks    = p_plant
  359.       tnk      = wa-zzaofelt1
  360.       prueflos = wa-prueflos
  361.       matnr    = wa-matnr
  362.       charg    = wa-charg.
  363.  
  364. ENDFORM.  
  365. * Function end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement