You are on page 1of 10

COR1 – COR2-COVHPI

LIBERACION O MODIFICACION DEL LOTE.

EXIT_SAPLV01Z_002
INCLUDE ZXVBZU02

*&---------------------------------------------------------------------*
*& Include ZXVBZU02
*&---------------------------------------------------------------------*

*BREAK osvstarke.

*IF sy-uname EQ 'OSJASCONA'.


* Generación de Lote
DATA: ls_new_charg(50).
* CLEAR: ls_new_charg.
PERFORM generacion_lote IN PROGRAM zospp_amp_generacion_lote
USING x_bncom
CHANGING allow_existing_batch
ls_new_charg
IF FOUND.
new_charg = ls_new_charg.
*ENDIF.
PROGRAMA ZOSPP_AMP_GENERACION_LOTE

*&---------------------------------------------------------------------*
*& Subroutinenpool ZOSPP_AMP_GENERACION_LOTE
*&---------------------------------------------------------------------*
* INFORMACION GENERAL
*----------------------------------------------------------------------*
* Módulo : PP
* Descripción : Generación de Lote
* Proyecto : Life - Omnia Solution SAC
* Autor : John W. Ascona Briceño
* Fecha : 03-10-22
*----------------------------------------------------------------------*
* Módulo : PP
* Descripción : Generación de Lote
* Proyecto : Corp. Life - Omnia Solution SAC
* Autor : Vïctor A. Starke
* Fecha : 11.01.2023
* Marca : @001
*----------------------------------------------------------------------*
PROGRAM zospp_amp_generacion_lote.

CONSTANTS: gc_const TYPE char15 VALUE 'NATURALEZA',


gc_const2 TYPE char15 VALUE 'NATURALEZA2',
gc_const3 TYPE char15 VALUE 'NATURALEZA3',
gc_const4 TYPE char15 VALUE 'NATURALEZA4',
gc_const5 TYPE char15 VALUE 'NATURALEZA5',
ls_zcp1 TYPE auart VALUE 'ZCP1',
ls_zcp2 TYPE auart VALUE 'ZCP2',
ls_zcp3 TYPE auart VALUE 'ZCP3',
ls_zcp4 TYPE auart VALUE 'ZCP4',
ls_zcp5 TYPE auart VALUE 'ZCP5',
ls_zip1 TYPE auart VALUE 'ZIP1'.

*&---------------------------------------------------------------------*
*& Definición de tipos de datos
*&---------------------------------------------------------------------*
TYPES: BEGIN OF gty_const.
INCLUDE STRUCTURE zostb_constantes.
TYPES: END OF gty_const.

DATA: BEGIN OF gdt_sede OCCURS 15.


INCLUDE STRUCTURE spopli.
DATA: END OF gdt_sede.
DATA: gdt_const TYPE STANDARD TABLE OF gty_const,
gr_mvgr4 TYPE RANGE OF mvgr4,
gr_mvgr5 TYPE RANGE OF mvgr5,
gr_mtart TYPE RANGE OF mtart,
gr_bsart TYPE RANGE OF bsart,
gr_tcode TYPE RANGE OF sy-tcode,
gr_vkorg TYPE RANGE OF likp-vkorg,
gr_vtweg TYPE RANGE OF lips-vtweg,
gs_matnr TYPE matnr,
gs_lote_x(1),
gs_lote_mm(2) ,
gs_lote_yy(2) ,
gs_lote_rango TYPE nrlevel,
antwort TYPE c.

FORM generacion_lote USING x_bncom TYPE bncom


CHANGING allow_existing_batch TYPE xfeld
new_charg TYPE char50.

DATA: lv_activo TYPE xfeld.

* ampliación activa?
PERFORM validar_ampliacion CHANGING lv_activo.

CHECK lv_activo EQ abap_true.


PERFORM get_constantes.

CLEAR: gs_lote_x,
gr_mtart.

IF sy-tcode IN gr_tcode AND gr_tcode[] IS NOT INITIAL. "EQ 'COR2' OR sy


-tcode EQ 'COR1' OR sy-tcode EQ 'COHVPI'.
CASE x_bncom-werks.
WHEN '1000'.
CASE x_bncom-auart.
WHEN 'ZCP1'. "FABRICACIÓN
PERFORM get_ranges USING 'P' '01' x_bncom-mtart CHANGING gs_l
ote_rango.
gs_lote_x = 'A'.
WHEN 'ZCP4'. "INSUMOS INTERNOS
PERFORM get_ranges USING 'P' '03' x_bncom-mtart CHANGING gs_l
ote_rango.
gs_lote_x = 'N'.
WHEN 'ZCP5'. "SANITIZANTES
PERFORM get_ranges USING 'P' '04' x_bncom-mtart CHANGING gs_l
ote_rango.
gs_lote_x = 'S'.
WHEN 'ZCP2' OR 'ZCP3'.
DATA: ls_order_objects TYPE bapi_pi_order_objects,
ls_order_header1 TYPE STANDARD TABLE OF bapi_order_he
ader1,
ls_order_component TYPE STANDARD TABLE OF bapi_order_co
mponent.

ls_order_objects-header = 'X'.
ls_order_objects-components = 'X'.

CALL FUNCTION 'BAPI_PROCORD_GET_DETAIL'


EXPORTING
number = x_bncom-aufnr
order_objects = ls_order_objects
TABLES
header = ls_order_header1
component = ls_order_component.

IF NOT ls_order_component IS INITIAL.


SELECT matnr, mtart INTO TABLE @DATA(ldt_mara)
FROM mara
FOR ALL ENTRIES IN @ls_order_component
WHERE matnr EQ @ls_order_component-material_long.
ENDIF.

DATA(ldt_const_mtart) = gdt_const[].
DELETE ldt_const_mtart WHERE campo NE gc_const2 OR valor1 NE
'MTART'.
CLEAR gr_mtart.
LOOP AT ldt_const_mtart INTO DATA(lwa_mtart).
APPEND VALUE #( sign = 'I' option = 'EQ' low = lwa_mtart-
valor2 ) TO gr_mtart.
ENDLOOP.

LOOP AT ls_order_component ASSIGNING FIELD-


SYMBOL(<fs_compo>).
READ TABLE ldt_mara INTO DATA(lwa_mara) WITH KEY matnr = <f
s_compo>-material_long.
IF sy-subrc EQ 0.
IF lwa_mara-mtart NOT IN gr_mtart.
<fs_compo>-material_long = 'XXX'.
ENDIF.
ENDIF.
ENDLOOP.

DELETE ls_order_component WHERE material_long EQ 'XXX'.

READ TABLE ls_order_component ASSIGNING <fs_compo> INDEX 1.


IF sy-subrc EQ 0.
new_charg = <fs_compo>-batch.
ENDIF.

IF x_bncom-auart EQ 'ZCP3'.
DATA(ldt_const_mvgr5) = gdt_const[].
DELETE ldt_const_mvgr5 WHERE campo NE 'MVGR5'.
LOOP AT ldt_const_mvgr5 ASSIGNING FIELD-SYMBOL(<fs_mvgr5>).
APPEND VALUE #( sign = 'I' option = 'EQ' low = <fs_mvgr5>
-valor1 ) TO gr_mvgr5.
ENDLOOP.

SELECT SINGLE mvgr5 INTO @DATA(lv_mvgr5)


FROM mvke
WHERE matnr EQ @x_bncom-matnr
AND vkorg IN @gr_vkorg "EQ '1001'
AND vtweg IN @gr_vtweg. "EQ 'TR'.
IF lv_mvgr5 IS NOT INITIAL AND lv_mvgr5 IN gr_mvgr5.
CLEAR: new_charg.
gs_lote_x = 'K'.
PERFORM get_ranges USING 'P' '02' x_bncom-mtart CHANGING
gs_lote_rango.
ENDIF.
ENDIF.
ENDCASE.
WHEN '1200'.
gs_lote_x = 'I'.
PERFORM get_ranges USING 'I' '01' x_bncom-mtart CHANGING gs_lote_
rango.
ENDCASE.
ELSE.
SELECT SINGLE mtart INTO @DATA(lv_mtart)
FROM mara
WHERE matnr EQ @x_bncom-matnr.
IF sy-subrc EQ 0.
IF x_bncom-bsart EQ 'ZSCO'.
READ TABLE gdt_const ASSIGNING FIELD-SYMBOL(<fs_const>) WITH KEY
valor1 = x_bncom-bsart

valor2 = x_bncom-lifnr.
IF sy-subrc EQ 0.
gs_lote_x = <fs_const>-comentario.
ENDIF.
ELSE.
CASE lv_mtart.
WHEN 'ZROH'.
gs_lote_x = 'M'.
WHEN 'ZLEE'.
gs_lote_x = 'E'.
WHEN 'ZVER'.
gs_lote_x = 'P'.
WHEN 'ZSUM'.
gs_lote_x = 'U'.
WHEN 'ZHAW'.
gs_lote_x = 'W'.
ENDCASE.
ENDIF.

PERFORM get_ranges USING 'M' space lv_mtart CHANGING gs_lote_rango.

ENDIF.
ENDIF.

IF new_charg IS INITIAL.
IF sy-tcode IN gr_tcode AND gr_tcode[] IS NOT INITIAL. "EQ 'COR2' OR
sy-tcode EQ 'COR1' OR sy-tcode EQ 'COHVPI'.
DATA(lv_gstrs) = '(SAPLCOKO)CAUFVD-GSTRS'.
ASSIGN (lv_gstrs) TO FIELD-SYMBOL(<fs_gstrs>).
if <fs_gstrs> is NOT INITIAL and <fs_gstrs> NE '00000000'. "I JBO26
052023 3000021927
gs_lote_mm = <fs_gstrs>+4(2).
gs_lote_yy = <fs_gstrs>+2(2).
ELSE. "I JBO26052023 3000021927
gs_lote_mm = sy-datum+4(2). "I JBO26052023 3000021927
gs_lote_yy = sy-datum+2(2). "I JBO26052023 3000021927
ENDIF. "I JBO26052023 3000021927
ELSE.
gs_lote_mm = sy-datum+4(2).
gs_lote_yy = sy-datum+2(2).
ENDIF.
CONCATENATE gs_lote_x gs_lote_rango+15(5) gs_lote_mm gs_lote_yy INTO
new_charg.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form validar_ampliacion
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- LV_ACTIVO
*&---------------------------------------------------------------------*
FORM validar_ampliacion CHANGING po_activo.

zosge_utilities=>validar_ampliacion(
EXPORTING
i_modulo = 'PP'
i_repid = 'ZOSPP_AMP_GEN_LOTE_AUTO'
CHANGING
c_activo = po_activo ).

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_constantes
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_constantes .

REFRESH: gr_tcode,
gr_vkorg,
gr_vtweg.

gdt_const = zosge_utilities=>get_constants(
i_modul = 'PP'
i_aplic = 'GEN_LOTE'
i_cprog = 'EXIT_SAPLV01Z_002' ).
CLEAR gdt_sede.
DATA(ldt_const_sede) = gdt_const[].
DELETE ldt_const_sede WHERE campo NE 'NATURALEZA'.

CLEAR gdt_sede. REFRESH gdt_sede.


LOOP AT ldt_const_sede INTO DATA(lwa_const).
APPEND INITIAL LINE TO gdt_sede ASSIGNING FIELD-SYMBOL(<fs_sede>).
<fs_sede>-varoption = |{ lwa_const-valor2 }|.
ENDLOOP.

LOOP AT gdt_const ASSIGNING FIELD-SYMBOL(<fs_const>).

CASE <fs_const>-campo.
WHEN 'TCODE'.
gr_tcode = VALUE #( BASE gr_tcode ( sign = <fs_const>-signo optio
n = <fs_const>-opcion low = <fs_const>-valor1 ) ).

WHEN 'VKORG'.
gr_vkorg = VALUE #( BASE gr_vkorg ( sign = <fs_const>-signo optio
n = <fs_const>-opcion low = <fs_const>-valor1 ) ).

WHEN 'VTWEG'.
gr_vtweg = VALUE #( BASE gr_vtweg ( sign = <fs_const>-signo optio
n = <fs_const>-opcion low = <fs_const>-valor1 ) ).
ENDCASE.

ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_ranges
*&---------------------------------------------------------------------*
*& I-@001
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_ranges USING i_type TYPE c
i_nrnr TYPE nrnr
i_mtart TYPE mtart
CHANGING o_range TYPE nrlevel.

CASE i_type.
WHEN 'P'.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = i_nrnr
object = 'ZNUM_LOTE'
toyear = sy-datum+0(4)
IMPORTING
number = o_range.
WHEN 'M'.
* Obtener rango por tipo de material
SELECT SINGLE * INTO @DATA(ls_ran_lote)
FROM zostb_ran_lote
WHERE mtart = @i_mtart
AND gjahr = @sy-datum+0(4).

* Actualizar rango por año y tipo de material


ls_ran_lote-mtart = i_mtart.
ls_ran_lote-gjahr = sy-datum+0(4).

IF sy-subrc NE 0.
ls_ran_lote-correl = 1.
ELSE.
ADD 1 TO ls_ran_lote-correl.
ENDIF.

MODIFY zostb_ran_lote FROM ls_ran_lote.


o_range = ls_ran_lote-correl.
o_range = |{ o_range ALPHA = IN }|.
WHEN 'I'.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = i_nrnr
object = 'ZRANG_LOTE'
toyear = sy-datum+0(4)
IMPORTING
number = o_range.
ENDCASE.

ENDFORM.

You might also like