You are on page 1of 26

*&---------------------------------------------------------------------*

*& Programa..........: ZPP_TA_PRG0007


*
*& Transaccin.......: ZPP052
*
*& Autor.............: Luis Carbajal Luque - Ideas Source
*
*& Fecha de Trmino..: 27/05/2005
*
*& Descripcin.......: Mantenimiento de Precios Pactados por Semana.
*
*&---------------------------------------------------------------------*
REPORT ZPP_TA_PRG0007 MESSAGE-ID ztasa.
TYPE-POOLS:

slis.

*--------*
* Tablas *
*--------*
TABLES: ztb_precio_sem, ztb_aprbcld, ztb_precio_pact, ekbe, ztb_armador,
ztb_precio_arm.
*-----------------*
* Tablas Internas *
*-----------------*
* Tabla Interna a Utilizar como base para mostrar el ALV
DATA: BEGIN OF it_precio_sem OCCURS 0.
INCLUDE STRUCTURE ztb_precio_sem.
DATA: END OF it_precio_sem.
* Tabla Interna que mostrar el ALV (debe estar sin cabecera)
DATA: t_data LIKE TABLE OF it_precio_sem.
* Tabla Interna que almacena el nro. de registro seleccionado
DATA: BEGIN OF t_row OCCURS 0,
rowtype LIKE lvc_s_row-rowtype,
index
LIKE lvc_s_row-index.
DATA: END OF t_row.
* Tabla Interna que almacena pedidos que cumplan con los
* datos a guardar
DATA: BEGIN OF it_act_aprbcld OCCURS 0,
ebeln LIKE ekko-ebeln,
ebelp LIKE ekpo-ebelp,
menge LIKE ztb_aprbcld-menge,
prpact LIKE ztb_aprbcld-prpact,
ccespe LIKE ztb_aprbcld-ccespe,
porc LIKE ztb_aprbcld-porc,
porc2 LIKE ztb_aprbcld-porc2,
importe LIKE ztb_aprbcld-importe,
indlib LIKE ztb_aprbcld-indlib,
END OF it_act_aprbcld.
* Tabla interna que actualiza precios por armador en ZTB_ARMADOR
DATA: BEGIN OF it_armador OCCURS 0.
INCLUDE STRUCTURE ztb_armador.
DATA: END OF it_armador.
*-------------*
* Estructuras *
*-------------*
DATA: BEGIN OF it_aux_precio_sem OCCURS 0.
INCLUDE STRUCTURE ztb_precio_sem.
DATA: END OF it_aux_precio_sem.
*--------------------*
* Variables Globales *
*--------------------*
DATA: nlinea
TYPE i,
"Almacena el nro de lneas de Tabla Int.
ok_code
LIKE sy-ucomm, "Almacena el botn oprimido
w_werks
LIKE ztb_precio_sem-werks,

v_msg1(60) TYPE c,
v_msg2(40) TYPE c,
w_ok,
w_cant_debe LIKE ekbe-menge,
w_cant_haber LIKE ekbe-menge,
w_fact
LIKE ekbe-menge,
flag_nf
TYPE C,
Variables para el ALV
g_container TYPE scrfname VALUE 'GRID_PRECIOS',
grid1 TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
gok
TYPE char01, "Flag para grabar.
gs_layout
TYPE lvc_s_layo,
gt_t_row
TYPE lvc_t_row,
l_t_row
TYPE lvc_t_row WITH HEADER LINE,
gt_fieldcat TYPE lvc_t_fcat,
wa_fieldcat LIKE LINE OF gt_fieldcat,
answer
TYPE c.

*-------------------------*
* Parmetros de Seleccin
*-------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_werks FOR ztb_precio_sem-werks NO-EXTENSION
NO INTERVALS,
s_begda FOR ztb_precio_sem-begda NO-EXTENSION
NO INTERVALS,
s_endda FOR ztb_precio_sem-endda NO-EXTENSION
NO INTERVALS.
SELECTION-SCREEN: END OF BLOCK B1.
*---------------------*
* Inicio del Programa *
*---------------------*
START-OF-SELECTION.
PERFORM get_data.
IF NOT it_precio_sem[] IS INITIAL.
PERFORM arma_archivo_html.
ENDIF.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&
Form GET_DATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM GET_DATA.
CLEAR it_precio_sem.
REFRESH it_precio_sem.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_precio_sem
FROM ztb_precio_sem WHERE werks IN s_werks
AND begda IN s_begda
AND endda IN s_endda.
SORT it_precio_sem BY werks begda endda.
ENDFORM.
" GET_DATA
*&---------------------------------------------------------------------*
*&
Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'M100'.
SET TITLEBAR 'T100'.

ENDMODULE.

" STATUS_0100

OUTPUT

*&---------------------------------------------------------------------*
*&
Module CREATE_OBJECT OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE CREATE_OBJECT OUTPUT.
gs_layout-sel_mode = 'A'.
gs_layout-cwidth_opt = 'X'.
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container.
*---- TITULO DEL GRID
gs_layout-grid_title = text-tgd.
PERFORM cargar_grid.
ENDIF.
ENDMODULE.
" CREATE_OBJECT OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CLEAR: ok_code.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'CREAR'.
CLEAR: sy-ucomm, ztb_precio_sem, it_aux_precio_sem.
REFRESH it_aux_precio_sem.
ztb_precio_sem-waers = 'USD'.
CALL SCREEN 0200 STARTING AT 10 2 ENDING AT 80 18.
WHEN 'MODIFICAR'.
clear: sy-ucomm.
PERFORM get_reg_sel USING '1'.
WHEN 'VER'.
clear: sy-ucomm.
PERFORM get_reg_sel USING '2'.
WHEN 'DELETE'.
clear sy-ucomm.
PERFORM delete_row_selected.
PERFORM get_data.
PERFORM cargar_grid.
WHEN 'BACK'.
clear: sy-ucomm.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*&
Form CARGAR_GRID
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM CARGAR_GRID.
PERFORM cargar_campos.
APPEND LINES OF it_precio_sem TO t_data.
CALL METHOD grid1->set_table_for_first_display
EXPORTING i_structure_name = 'T_DATA'
is_layout
= gs_layout

CHANGING
ENDFORM.

it_outtab
= t_data
it_fieldcatalog = gt_fieldcat.
" CARGAR_GRID

*&---------------------------------------------------------------------*
*&
Form CARGAR_CAMPOS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM CARGAR_CAMPOS.
CLEAR: t_data,wa_fieldcat,gt_fieldcat.
**Campo 1**
wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Centro'.
wa_fieldcat-outputlen = 6.
wa_fieldcat-col_pos
= '1'.
wa_fieldcat-no_out
= space.
APPEND wa_fieldcat TO gt_fieldcat.
***Campo 2**
wa_fieldcat-fieldname = 'BEGDA'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Inicio Validez'.
wa_fieldcat-outputlen = 14.
wa_fieldcat-col_pos
= '2'.
wa_fieldcat-no_out
= space.
APPEND wa_fieldcat TO gt_fieldcat.
**Campo 3**
wa_fieldcat-fieldname = 'ENDDA'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Fin Validez'.
wa_fieldcat-outputlen = 14.
wa_fieldcat-col_pos
= '3'.
wa_fieldcat-no_out
= ' '.
APPEND wa_fieldcat TO gt_fieldcat.
**Campo 4**
wa_fieldcat-fieldname = 'PRCSEM'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Precio (desde)'.
wa_fieldcat-outputlen = 14.
wa_fieldcat-col_pos
= '4'.
wa_fieldcat-no_out
= ' '.
APPEND wa_fieldcat TO gt_fieldcat.
**Campo 5**
wa_fieldcat-fieldname = 'PRCSEM2'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Precio (hasta)'.
wa_fieldcat-outputlen = 14.
wa_fieldcat-col_pos
= '5'.
wa_fieldcat-no_out
= ' '.
APPEND wa_fieldcat TO gt_fieldcat.
**Campo 6**
wa_fieldcat-fieldname = 'WAERS'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Moneda'.
wa_fieldcat-outputlen = 6.
wa_fieldcat-col_pos
= '6'.
wa_fieldcat-no_out
= ' '.
APPEND wa_fieldcat TO gt_fieldcat.
**Campo 7**
wa_fieldcat-fieldname = 'TOPE'.
wa_fieldcat-tabname
= 'T_DATA'.
wa_fieldcat-coltext
= 'Precio Tope'.
wa_fieldcat-outputlen = 14.

wa_fieldcat-col_pos
wa_fieldcat-no_out
APPEND wa_fieldcat TO
**Campo 8**
wa_fieldcat-fieldname
wa_fieldcat-tabname
wa_fieldcat-coltext
wa_fieldcat-outputlen
wa_fieldcat-col_pos
wa_fieldcat-no_out
APPEND wa_fieldcat TO
**Campo 9**
wa_fieldcat-fieldname
wa_fieldcat-tabname
wa_fieldcat-coltext
wa_fieldcat-outputlen
wa_fieldcat-col_pos
wa_fieldcat-no_out
APPEND wa_fieldcat TO
**Campo 10**
wa_fieldcat-fieldname
wa_fieldcat-tabname
wa_fieldcat-coltext
wa_fieldcat-outputlen
wa_fieldcat-col_pos
wa_fieldcat-no_out
APPEND wa_fieldcat TO
**Campo 11**
wa_fieldcat-fieldname
wa_fieldcat-tabname
wa_fieldcat-coltext
wa_fieldcat-outputlen
wa_fieldcat-col_pos
wa_fieldcat-no_out
APPEND wa_fieldcat TO
ENDFORM.

= '7'.
= space.
gt_fieldcat.
= 'USR_CRE'.
= 'T_DATA'.
= 'Usuario Creacin'.
= 16.
= '8'.
= ' '.
gt_fieldcat.
= 'FEC_CRE'.
= 'T_DATA'.
= 'Fecha Creacin'.
= 14.
= '9'.
= ' '.
gt_fieldcat.
= 'USR_MOD'.
= 'T_DATA'.
= 'Usuario Modif.'.
= 14.
= '10'.
= ' '.
gt_fieldcat.
= 'FEC_MOD'.
= 'T_DATA'.
= 'Fecha Modif.'.
= 12.
= '11'.
= space.
gt_fieldcat.
" CARGAR_CAMPOS

*&---------------------------------------------------------------------*
*&
Form GET_REG_SEL
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0245
text
*----------------------------------------------------------------------*
FORM GET_REG_SEL USING wflag1.
REFRESH: gt_t_row.
CLEAR: l_t_row, it_precio_sem.
CALL METHOD grid1->get_selected_rows
IMPORTING
et_index_rows =
gt_t_row .
* Lee registros seleccionados
DESCRIBE TABLE gt_t_row LINES nlinea.
IF nlinea GT 0.
LOOP AT gt_t_row INTO t_row.
READ TABLE t_data INTO it_precio_sem INDEX t_row-index.
IF sy-subrc = 0.
IF wflag1 EQ '1'.
CALL SCREEN 0300 STARTING AT 2 1 ENDING AT 72 18.
ELSEIF wflag1 EQ '2'.
CALL SCREEN 0400 STARTING AT 2 1 ENDING AT 72 18.
ENDIF.
ENDIF.
ENDLOOP.
PERFORM get_data.
PERFORM cargar_grid.
ELSE.
MESSAGE i899(bd) WITH 'Debe marcar al menos un registro'.

ENDIF.
ENDFORM.

" GET_REG_SEL

*&---------------------------------------------------------------------*
*&
Form DELETE_ROW_SELECTED
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM DELETE_ROW_SELECTED.
DATA: msg_eli(50) TYPE c.
REFRESH: gt_t_row.
CLEAR: l_t_row.
CALL METHOD grid1->get_selected_rows
IMPORTING
et_index_rows =
gt_t_row .
* Lee registros seleccionados
DESCRIBE TABLE gt_t_row LINES nlinea.
IF nlinea GT 0.
*---- Mensaje de eliminacion
IF nlinea = 1.
msg_eli = 'Desea Eliminar el Registro'.
ELSE.
msg_eli = 'Desea Eliminar los Registros'.
ENDIF.
CALL FUNCTION 'POPUP_CONTINUE_YES_NO'
EXPORTING
defaultoption = 'N'
textline1
= msg_eli
*
TEXTLINE2
= ' '
titel
= 'Eliminacin de Registros'
start_column = 25
start_row
= 6
IMPORTING
answer
= answer.
IF answer EQ 'J'.
*-----Eliminacion de la data de ZTB_PESAJE
LOOP AT gt_t_row INTO t_row.
READ TABLE t_data INTO it_precio_sem INDEX t_row -index.
IF sy-subrc = 0.
PERFORM delete_data.
ENDIF.
ENDLOOP.
ENDIF.
ELSE.
MESSAGE i899(bd) WITH 'Debe marcar al menos un registro'.
ENDIF.
ENDFORM.
" DELETE_ROW_SELECTED
*&---------------------------------------------------------------------*
*&
Form DELETE_DATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM DELETE_DATA.
DATA: msg_eli_reg(40) TYPE c.
DELETE FROM ztb_precio_sem WHERE werks = it_precio_sem -werks
AND begda = it_precio_sem-begda
AND endda = it_precio_sem-endda.

IF sy-subrc NE 0. "Registro no pudo ser borrado


CONCATENATE 'Registro: ' it_precio_sem-werks ' ' it_precio_sem-begda
it_precio_sem-endda INTO msg_eli_reg SEPARATED BY space.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
titel
= 'Eliminacin de Registros'
textline1
= msg_eli_reg
textline2
= ' '
start_column = 20
start_row
= 6.
ENDIF.
ENDFORM.
" DELETE_DATA
*&---------------------------------------------------------------------*
*&
Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'M200'.
SET TITLEBAR 'T200'.
ENDMODULE.

" STATUS_0200

OUTPUT

*&---------------------------------------------------------------------*
*&
Module DISPLAY_200 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE DISPLAY_200 OUTPUT.
ENDMODULE.

" DISPLAY_200

OUTPUT

*&---------------------------------------------------------------------*
*&
Module NEW_WERKS_200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE NEW_WERKS_200 INPUT.
CLEAR: it_aux_precio_sem, w_werks.
REFRESH: it_aux_precio_sem.
w_werks = ztb_precio_sem-werks.
CHECK ztb_precio_sem-begda IS INITIAL.
SELECT * FROM ZTB_PRECIO_SEM INTO TABLE it_aux_precio_sem
WHERE werks EQ w_werks.
IF sy-subrc EQ 0.
SORT it_aux_precio_sem by begda descending.
READ TABLE it_aux_precio_sem index 1.
ztb_precio_sem-begda = it_aux_precio_sem-endda + 1.
ENDIF.
ENDMODULE.
" NEW_WERKS_200 INPUT
*&---------------------------------------------------------------------*
*&
Module NEW_BEGDA_200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE NEW_BEGDA_200 INPUT.
PERFORM VALIDA_BEGDA_200 USING '1'.
ENDMODULE.
" NEW_BEGDA_200 INPUT
*&---------------------------------------------------------------------*
*&
Module NEW_ENDDA_200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*

MODULE NEW_ENDDA_200 INPUT.


PERFORM valida_endda_200 USING '1'.
ENDMODULE.
" NEW_ENDDA_200

INPUT

*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
CLEAR: ok_code, w_ok.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'GRABAR'.
PERFORM validar_campos_200.
IF w_ok EQ '1'.
PERFORM inserta_data.
PERFORM get_data.
PERFORM cargar_grid.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
CLEAR w_ok.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*&
Module BACK_0200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE BACK_0200 INPUT.
IF sy-ucomm EQ 'CERRAR' OR sy-ucomm EQ 'CANC'.
clear sy-ucomm.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
ENDMODULE.
" BACK_0200 INPUT
*&---------------------------------------------------------------------*
*&
Module BEGDA_200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE BEGDA_200 INPUT.
CALL FUNCTION 'F4_DATE'
IMPORTING
select_date
= ztb_precio_sem-begda
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range
= 2
date_before_range
= 3
date_invalid
= 4
factory_calendar_not_found
= 5
holiday_calendar_not_found
= 6
parameter_conflict
= 7
OTHERS
= 8.
IF sy-subrc <> 0.
MESSAGE ID 'ZTASA' TYPE 'E' NUMBER '004' WITH sy-msgv1 sy-msgv2
sy-msgv3 sy-msgv4.
ENDIF.
ENDMODULE.
" BEGDA_200 INPUT
*&---------------------------------------------------------------------*
*&
Module ENDDA_200 INPUT
*&---------------------------------------------------------------------*

*
text
*----------------------------------------------------------------------*
MODULE ENDDA_200 INPUT.
CALL FUNCTION 'F4_DATE'
IMPORTING
select_date
= ztb_precio_sem-endda
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range
= 2
date_before_range
= 3
date_invalid
= 4
factory_calendar_not_found
= 5
holiday_calendar_not_found
= 6
parameter_conflict
= 7
OTHERS
= 8.
IF sy-subrc <> 0.
MESSAGE ID 'ZTASA' TYPE 'E' NUMBER '004' WITH sy-msgv1 sy-msgv2
sy-msgv3 sy-msgv4.
ENDIF.
ENDMODULE.
" ENDDA_200 INPUT
*&---------------------------------------------------------------------*
*&
Form VALIDAR_CAMPOS_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM VALIDAR_CAMPOS_200.
IF ztb_precio_sem-werks IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar el Centro.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
w_ok = 1.
ENDIF.
IF ztb_precio_sem-begda IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar Fecha de Inicio de Validez'.
v_msg2 = 'de Precio Pactado.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM VALIDA_BEGDA_200 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
IF ztb_precio_sem-endda IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar Fecha de Fin de Validez'.
v_msg2 = 'de Precio Pactado.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_endda_200 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
IF ztb_precio_sem-prcsem IS INITIAL.
CLEAR: v_msg1,v_msg2.

v_msg1 = 'Debe Ingresar el Precio Mnimo de la Semana.'.


PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_prcsem_200 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
IF ztb_precio_sem-prcsem2 IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar el Precio Mximo de la Semana.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_prcsem_200 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
IF ztb_precio_sem-tope IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar el Precio Tope de la Semana.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_tope_200 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
ENDFORM.
" VALIDAR_CAMPOS_200
*&---------------------------------------------------------------------*
*&
Form MOSTRAR_MSG
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_V_MSG1 text
*
-->P_V_MSG2 text
*----------------------------------------------------------------------*
FORM MOSTRAR_MSG USING
P_V_MSG1
P_V_MSG2.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
TITEL
= 'Ventana de Mensaje'
TEXTLINE1
= p_v_msg1
TEXTLINE2
= p_v_msg2
START_COLUMN = 20
START_ROW
= 5.
ENDFORM.
" MOSTRAR_MSG
*&---------------------------------------------------------------------*
*&
Form INSERTA_DATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM INSERTA_DATA.
ztb_precio_sem-fec_cre = sy-datum.
ztb_precio_sem-hor_cre = sy-uzeit.
ztb_precio_sem-usr_cre = sy-uname.

INSERT INTO ztb_precio_sem VALUES ztb_precio_sem.


IF sy-subrc NE 0.
MESSAGE e001 WITH 'Registro no pudo ser insertado'.
ELSE.
PERFORM actualiza_ztb_armador_200.
*
PERFORM actualiza_ztb_aprbcld_200.
CLEAR ztb_precio_sem.
ENDIF.
ENDFORM.
" INSERTA_DATA
*&---------------------------------------------------------------------*
*&
Form VALIDA_BEGDA_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0781
text
*----------------------------------------------------------------------*
FORM VALIDA_BEGDA_200 USING w_flag.
DATA: w_fechaini(10) TYPE C,
w_fechafin(10) TYPE C.
CLEAR: it_aux_precio_sem, w_werks.
REFRESH: it_aux_precio_sem.
CHECK NOT ztb_precio_sem-werks IS INITIAL
AND NOT ztb_precio_sem-begda IS INITIAL.
w_werks = ztb_precio_sem-werks.
SELECT * FROM ZTB_PRECIO_SEM INTO TABLE it_aux_precio_sem
WHERE werks EQ w_werks.
IF sy-subrc EQ 0.
LOOP AT it_aux_precio_sem.
IF ztb_precio_sem-begda
BETWEEN it_aux_precio_sem-begda AND it_aux_precio_sem-endda.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'Fecha de Inicio de Validez se encuentra dentro'.
v_msg2 = 'de una semana registrada'.
IF w_flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSEIF NOT ztb_precio_sem-endda IS INITIAL.
IF it_aux_precio_sem-begda
BETWEEN ztb_precio_sem-begda AND ztb_precio_sem-endda.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'El perodo de validez ingresado comprende'.
WRITE it_aux_precio_sem-begda TO w_fechaini.
WRITE it_aux_precio_sem-endda TO w_fechafin.
CONCATENATE w_fechaini 'a' w_fechafin
INTO v_msg2 SEPARATED BY SPACE.
*
v_msg1 = 'Ya existe un perodo de validez registrado'.
*
v_msg2 = 'dentro del perodo ingresado'.
IF w_flag EQ '1'.
MESSAGE E006 WITH v_msg1 'el perodo registrado:' v_msg2.
ELSE.
CONCATENATE v_msg1 'el perodo registrado:' INTO v_msg1
SEPARATED BY SPACE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSEIF ztb_precio_sem-endda LT ztb_precio_sem-begda
AND NOT ztb_precio_sem-begda IS INITIAL.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'Fecha de Fin de Validez no puede ser menor'.
v_msg2 = 'que la Fecha de Inicio de Validez'.
IF w_flag EQ '1'.

MESSAGE E006 WITH v_msg1 v_msg2.


ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
w_ok = 1.
ENDIF.
ENDFORM.
" VALIDA_BEGDA_200
*&---------------------------------- -----------------------------------*
*&
Form VALIDA_ENDDA_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0824
text
*----------------------------------------------------------------------*
FORM VALIDA_ENDDA_200 USING flag.
DATA: w_fechaini(10) TYPE C,
w_fechafin(10) TYPE C.
CLEAR: it_aux_precio_sem, w_werks, w_fechaini, w_fechafin.
REFRESH: it_aux_precio_sem.
CHECK NOT ztb_precio_sem-werks IS INITIAL
AND NOT ztb_precio_sem-endda IS INITIAL.
w_werks = ztb_precio_sem-werks.
SELECT * FROM ZTB_PRECIO_SEM INTO TABLE it_aux_precio_sem
WHERE werks EQ w_werks.
IF sy-subrc EQ 0.
LOOP AT it_aux_precio_sem.
IF ztb_precio_sem-endda
BETWEEN it_aux_precio_sem-begda AND it_aux_precio_sem-endda.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'Fecha de Fin de Validez se encuentra dentro'.
v_msg2 = 'de una semana registrada'.
IF flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSEIF NOT ztb_precio_sem-begda IS INITIAL.
IF it_aux_precio_sem-endda
BETWEEN ztb_precio_sem-begda AND ztb_precio_sem-endda.
CLEAR: v_msg1, v_msg2.
*
v_msg1 = 'Ya existe un perodo de validez registrado'.
v_msg1 = 'El perodo de validez ingresado comprende'.
*
v_msg2 = 'dentro del perodo ingresado'.
WRITE it_aux_precio_sem-begda TO w_fechaini.
WRITE it_aux_precio_sem-endda TO w_fechafin.
CONCATENATE w_fechaini 'a' w_fechafin
INTO v_msg2 SEPARATED BY SPACE.
IF flag EQ '1'.
MESSAGE E006 WITH v_msg1 'el perodo registrado:' v_msg2.
ELSE.
CONCATENATE v_msg1 'el perodo registrado:' INTO
v_msg1 SEPARATED BY SPACE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.

ELSEIF ztb_precio_sem-endda LT ztb_precio_sem-begda


AND NOT ztb_precio_sem-begda IS INITIAL.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'Fecha de Fin de Validez no puede ser menor'.
v_msg2 = 'que la Fecha de Inicio de Validez'.
IF flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
w_ok = 1.
ENDIF.
ENDFORM.
" VALIDA_ENDDA_200
*&---------------------------------------------------------------------*
*&
Module NEW_PRCSEM_200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE NEW_PRCSEM_200 INPUT.
PERFORM VALIDA_PRCSEM_200 USING '1'.
ENDMODULE.
" NEW_PRCSEM_200 INPUT
*&---------------------------------------------------------------------*
*&
Module NEW_TOPE_200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE NEW_TOPE_200 INPUT.
PERFORM VALIDA_TOPE_200 USING '1'.
ENDMODULE.
" NEW_TOPE_200 INPUT
*&---------------------------------------------------------------------*
*&
Form VALIDA_PRCSEM_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_1334
text
*----------------------------------------------------------------------*
FORM VALIDA_PRCSEM_200 USING w_flag.
DATA: w_prpact(14) TYPE C,
w_fecdes(10) TYPE C,
v_msg3(30)
TYPE C.
CLEAR: w_prpact, w_fecdes.
IF NOT ztb_precio_sem-tope IS INITIAL
AND NOT ztb_precio_sem-prcsem IS INITIAL
AND NOT ztb_precio_sem-prcsem2 IS INITIAL.
IF ztb_precio_sem-tope LT ztb_precio_sem-prcsem
OR ztb_precio_sem-tope LT ztb_precio_sem-prcsem2.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'El Precio Pactado de la Semana no puede'.
v_msg2 = 'ser mayor al Precio Tope.'.
IF w_flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.

ELSE.
IF ztb_precio_sem-prcsem2 LT ztb_precio_sem-prcsem.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'El Precio Mnimo de la Semana no puede'.
v_msg2 = 'ser mayor al Precio Mximo.'.
IF w_flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
CLEAR: ztb_precio_pact.
*
validar que el precio en ZTB_PRECIO_PACT no sea mayor
*
SELECT SINGLE * FROM ztb_precio_pact
*
WHERE werks EQ ztb_precio_sem-werks
*
AND ( fecdes BETWEEN ztb_precio_sem-begda
*
AND ztb_precio_sem-endda ).
*
IF sy-subrc EQ 0.
*
IF ztb_precio_pact-prpact GT ztb_precio_sem-tope.
*
CLEAR: v_msg1, v_msg2, v_msg3.
*
MOVE ztb_precio_pact-prpact TO w_prpact.
*
WRITE ztb_precio_pact-fecdes TO w_fecdes.
*
CONDENSE w_prpact NO-GAPS.
*
CONCATENATE 'El armador' ztb_precio_pact-lifnr INTO v_msg1
*
SEPARATED BY SPACE.
*
CONCATENATE 'con fecha de descarga' w_fecdes INTO v_msg2
*
SEPARATED BY SPACE.
*
CONCATENATE 'tiene como precio' w_prpact INTO v_msg3
*
SEPARATED BY SPACE.
*
IF w_flag EQ 1.
*
MESSAGE E004 WITH v_msg1 v_msg2 v_msg3
*
'en tabla ZTB_PRECIO_PACT'.
*
ELSE.
*
CONCATENATE v_msg3 'en tabla ZTB_PRECIO_PACT' INTO v_msg3
*
SEPARATED BY SPACE.
*
CONCATENATE v_msg1 v_msg2 INTO v_msg1 SEPARATED BY SPACE.
*
CLEAR v_msg2.
*
MOVE v_msg3 TO v_msg2.
*
PERFORM mostrar_msg USING v_msg1 v_msg2.
*
w_ok = 0.
*
EXIT.
*
ENDIF.
*
ELSE.
*
w_ok = 1.
*
ENDIF.
*
ELSE.
*
w_ok = 1.
*
ENDIF.
ENDIF.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDFORM.
" VALIDA_PRCSEM_200
*&---------------------------------------------------------------------*
*&
Form VALIDA_TOPE_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_1342
text
*----------------------------------------------------------------------*
FORM VALIDA_TOPE_200 USING w_flag.
DATA: w_prpact(14) TYPE C,
w_fecdes(10) TYPE C,

v_msg3(30)
TYPE C.
CLEAR: w_prpact, w_fecdes.
IF NOT ztb_precio_sem-prcsem IS INITIAL
AND NOT ztb_precio_sem-prcsem2 IS INITIAL
AND NOT ztb_precio_sem-tope IS INITIAL.
IF ztb_precio_sem-tope LT ztb_precio_sem-prcsem OR
ztb_precio_sem-tope LT ztb_precio_sem-prcsem2.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'El Precio Pactado de la Semana no puede'.
v_msg2 = 'ser mayor al Precio Tope.'.
IF w_flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
CLEAR: ztb_precio_pact.
*
validar que el precio en ZTB_PRECIO_PACT no sea mayor
SELECT SINGLE * FROM ztb_precio_pact
WHERE werks EQ ztb_precio_sem-werks
AND ( fecdes BETWEEN ztb_precio_sem-begda
AND ztb_precio_sem-endda ).
IF sy-subrc EQ 0.
IF ztb_precio_pact-prpact GT ztb_precio_sem-tope.
CLEAR: v_msg1, v_msg2, v_msg3.
MOVE ztb_precio_pact-prpact TO w_prpact.
WRITE ztb_precio_pact-fecdes TO w_fecdes.
CONDENSE w_prpact NO-GAPS.
CONCATENATE 'El armador' ztb_precio_pact-lifnr INTO v_msg1
SEPARATED BY SPACE.
CONCATENATE 'con fecha de descarga' w_fecdes INTO v_msg2
SEPARATED BY SPACE.
CONCATENATE 'tiene como precio' w_prpact INTO v_msg3
SEPARATED BY SPACE.
IF w_flag EQ 1.
MESSAGE E004 WITH v_msg1 v_msg2 v_msg3
'en tabla ZTB_PRECIO_PACT'.
ELSE.
CONCATENATE v_msg3 'en tabla ZTB_PRECIO_PACT' INTO v_msg3
SEPARATED BY SPACE.
CONCATENATE v_msg1 v_msg2 INTO v_msg1 SEPARATED BY SPACE.
CLEAR v_msg2.
MOVE v_msg3 TO v_msg2.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDFORM.
" VALIDA_TOPE_200
*&---------------------------------------------------------------------*
*&
Module STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE STATUS_0300 OUTPUT.

SET PF-STATUS 'M300'.


SET TITLEBAR 'T300'.
ENDMODULE.

" STATUS_0300

OUTPUT

*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0300 INPUT.
CLEAR: ok_code, w_ok.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'GRABAR'.
PERFORM validar_campos_300.
IF w_ok EQ '1'.
PERFORM modi_data.
PERFORM get_data.
PERFORM cargar_grid.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
CLEAR w_ok.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
*&
Form VALIDAR_CAMPOS_300
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM VALIDAR_CAMPOS_300.
* IF it_precio_sem-werks IS INITIAL.
*
CLEAR: v_msg1,v_msg2.
*
v_msg1 = 'Debe Ingresar el Centro.'.
*
PERFORM mostrar_msg USING v_msg1 v_msg2.
*
w_ok = 0.
*
EXIT.
* ELSE.
*
w_ok = 1.
* ENDIF.
* IF it_precio_sem-begda IS INITIAL.
*
CLEAR: v_msg1,v_msg2.
*
v_msg1 = 'Debe Ingresar Fecha de Inicio de Validez'.
*
v_msg2 = 'de Precio Pactado.'.
*
PERFORM mostrar_msg USING v_msg1 v_msg2.
*
w_ok = 0.
*
EXIT.
* ELSE.
*
PERFORM VALIDA_BEGDA_200 USING '2'.
*
IF w_ok EQ 0.
*
EXIT.
*
ENDIF.
* ENDIF.
* IF it_precio_sem-endda IS INITIAL.
*
CLEAR: v_msg1,v_msg2.
*
v_msg1 = 'Debe Ingresar Fecha de Fin de Validez'.
*
v_msg2 = 'de Precio Pactado.'.
*
PERFORM mostrar_msg USING v_msg1 v_msg2.
*
w_ok = 0.
*
EXIT.
* ELSE.
*
PERFORM valida_endda_200 USING '2'.
*
IF w_ok EQ 0.

*
*
*

EXIT.
ENDIF.
ENDIF.
IF it_precio_sem-prcsem IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar el Precio Mnimo de la Semana.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_prcsem_300 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
IF it_precio_sem-prcsem2 IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar el Precio Mximo de la Semana.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_prcsem_300 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
IF it_precio_sem-tope IS INITIAL.
CLEAR: v_msg1,v_msg2.
v_msg1 = 'Debe Ingresar el Precio Tope de la Semana.'.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ELSE.
PERFORM valida_tope_300 USING '2'.
IF w_ok EQ 0.
EXIT.
ENDIF.
ENDIF.
ENDFORM.
" VALIDAR_CAMPOS_300
*&---------------------------------------------------------------------*
*&
Form MODI_DATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM MODI_DATA.
it_precio_sem-fec_mod = sy-datum.
it_precio_sem-hor_mod = sy-uzeit.
it_precio_sem-usr_mod = sy-uname.
UPDATE ztb_precio_sem SET prcsem = it_precio_sem-prcsem
prcsem2 = it_precio_sem-prcsem2
tope
= it_precio_sem-tope
fec_mod = it_precio_sem-fec_mod
hor_mod = it_precio_sem-hor_mod
usr_mod = it_precio_sem-usr_mod
WHERE werks = it_precio_sem-werks
AND begda
= it_precio_sem-begda
AND endda
= it_precio_sem-endda.
IF sy-subrc NE 0.
MESSAGE e001 WITH 'Registro no pudo ser modificado'.
ELSE.
PERFORM actualiza_ztb_armaador_300.
ENDIF.

ENDFORM.

" MODI_DATA

*&---------------------------------------------------------------------*
*&
Module BACK_0300 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE BACK_0300 INPUT.
IF sy-ucomm EQ 'CERRAR' OR sy-ucomm EQ 'CANC'.
clear sy-ucomm.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
ENDMODULE.
" BACK_0300 INPUT
*&---------------------------------------------------------------------*
*&
Module NEW_PRCSEM_300 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE NEW_PRCSEM_300 INPUT.
PERFORM VALIDA_PRCSEM_300 USING '1'.
ENDMODULE.
" NEW_PRCSEM_300 INPUT
*&---------------------------------------------------------------------*
*&
Module NEW_TOPE_300 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE NEW_TOPE_300 INPUT.
PERFORM VALIDA_TOPE_300 USING '1'.
ENDMODULE.
" NEW_TOPE_300 INPUT
*&---------------------------------------------------------------------*
*&
Form VALIDA_PRCSEM_300
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_1539
text
*----------------------------------------------------------------------*
FORM VALIDA_PRCSEM_300 USING FLAG.
DATA: w_prpact(14) TYPE C,
w_fecdes(10) TYPE C,
v_msg3(30)
TYPE C.
CLEAR: w_prpact, w_fecdes.
IF NOT it_precio_sem-tope IS INITIAL
AND NOT it_precio_sem-prcsem IS INITIAL
AND NOT it_precio_sem-prcsem2 IS INITIAL.
IF it_precio_sem-tope LT it_precio_sem-prcsem
OR it_precio_sem-tope LT it_precio_sem-prcsem2.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'El Precio Pactado de la Semana no puede'.
v_msg2 = 'ser mayor al Precio Tope.'.
IF flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
IF it_precio_sem-prcsem2 LT it_precio_sem-prcsem.
CLEAR: v_msg1, v_msg2.
v_msg1 = 'El Precio Mnimo de la Semana no puede'.
v_msg2 = 'ser mayor al Precio Mximo.'.
IF flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.

ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
CLEAR: ztb_precio_pact.
*
validar que el precio en ZTB_PRECIO_PACT no sea mayor
SELECT SINGLE * FROM ztb_precio_pact
WHERE werks EQ it_precio_sem-werks
AND ( fecdes BETWEEN it_precio_sem -begda
AND it_precio_sem-endda ).
IF sy-subrc EQ 0.
IF ztb_precio_pact-prpact GT it_precio_sem-tope.
CLEAR: v_msg1, v_msg2, v_msg3.
MOVE ztb_precio_pact-prpact TO w_prpact.
WRITE ztb_precio_pact-fecdes TO w_fecdes.
CONDENSE w_prpact NO-GAPS.
CONCATENATE 'El armador' ztb_precio_pact-lifnr INTO v_msg1
SEPARATED BY SPACE.
CONCATENATE 'con fecha de descarga' w_fecdes INTO v_msg2
SEPARATED BY SPACE.
CONCATENATE 'tiene como precio' w_prpact INTO v_msg3
SEPARATED BY SPACE.
IF flag EQ 1.
MESSAGE E004 WITH v_msg1 v_msg2 v_msg3
'en tabla ZTB_PRECIO_PACT'.
ELSE.
CONCATENATE v_msg3 'en tabla ZTB_PRECIO_PACT' INTO v_msg3
SEPARATED BY SPACE.
CONCATENATE v_msg1 v_msg2 INTO v_msg1 SEPARATED BY SPACE.
CLEAR v_msg2.
MOVE v_msg3 TO v_msg2.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDIF.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDFORM.
" VALIDA_PRCSEM_300
*&---------------------------------------------------------------------*
*&
Form VALIDA_TOPE_300
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_1547
text
*----------------------------------------------------------------------*
FORM VALIDA_TOPE_300 USING FLAG.
DATA: w_prpact(14) TYPE C,
w_fecdes(10) TYPE C,
v_msg3(30)
TYPE C.
CLEAR: w_prpact, w_fecdes.
IF NOT it_precio_sem-prcsem IS INITIAL
AND NOT it_precio_sem-prcsem2 IS INITIAL
AND NOT it_precio_sem-tope IS INITIAL.
IF it_precio_sem-tope LT it_precio_sem-prcsem OR
it_precio_sem-tope LT it_precio_sem-prcsem2.

CLEAR: v_msg1, v_msg2.


v_msg1 = 'El Precio Pactado de la Semana no puede'.
v_msg2 = 'ser mayor al Precio Tope.'.
IF flag EQ '1'.
MESSAGE E006 WITH v_msg1 v_msg2.
ELSE.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
CLEAR: ztb_precio_pact.
*
validar que el precio en ZTB_PRECIO_PACT no sea mayor
SELECT SINGLE * FROM ztb_precio_pact
WHERE werks EQ it_precio_sem-werks
AND ( fecdes BETWEEN it_precio_sem-begda
AND it_precio_sem-endda ).
IF sy-subrc EQ 0.
IF ztb_precio_pact-prpact GT it_precio_sem-tope.
CLEAR: v_msg1, v_msg2, v_msg3.
MOVE ztb_precio_pact-prpact TO w_prpact.
WRITE ztb_precio_pact-fecdes TO w_fecdes.
CONDENSE w_prpact NO-GAPS.
CONCATENATE 'El armador' ztb_precio_pact-lifnr INTO v_msg1
SEPARATED BY SPACE.
CONCATENATE 'con fecha de descarga' w_fecdes INTO v_msg2
SEPARATED BY SPACE.
CONCATENATE 'tiene como precio' w_prpact INTO v_msg3
SEPARATED BY SPACE.
IF flag EQ 1.
MESSAGE E004 WITH v_msg1 v_msg2 v_msg3
'en tabla ZTB_PRECIO_PACT'.
ELSE.
CONCATENATE v_msg3 'en tabla ZTB_PRECIO_PACT' INTO v_msg3
SEPARATED BY SPACE.
CONCATENATE v_msg1 v_msg2 INTO v_msg1 SEPARATED BY SPACE.
CLEAR v_msg2.
MOVE v_msg3 TO v_msg2.
PERFORM mostrar_msg USING v_msg1 v_msg2.
w_ok = 0.
EXIT.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDIF.
ELSE.
w_ok = 1.
ENDIF.
ENDFORM.
" VALIDA_TOPE_300
*&---------------------------------------------------------------------*
*&
Module STATUS_0400 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE STATUS_0400 OUTPUT.
SET PF-STATUS 'M400'.
SET TITLEBAR 'T400'.
ENDMODULE.
" STATUS_0400 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0400 INPUT
*&---------------------------------------------------------------------*

*
text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0400 INPUT.
IF sy-ucomm EQ 'CERRAR' OR sy-ucomm EQ 'CANC'.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
ENDMODULE.
" USER_COMMAND_0400 INPUT
*&---------------------------------------------------------------------*
*&
Form ACTUALIZA_ZTB_APRBCLD_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM ACTUALIZA_ZTB_APRBCLD_200.
DATA: w_precio LIKE ztb_precio_sem -prcsem.
REFRESH it_act_aprbcld.
CLEAR: it_act_aprbcld, ztb_precio_pact, w_precio.
SELECT SINGLE * FROM ztb_precio_pact
WHERE werks EQ ztb_precio_sem-werks
AND ( fecdes BETWEEN ztb_precio_sem-begda AND ztb_precio_sem-endda ).
IF sy-subrc EQ 0.
SELECT ebeln ebelp menge prpact ccespe porc
porc2 importe indlib
INTO TABLE it_act_aprbcld
FROM ztb_aprbcld
WHERE werks EQ ztb_precio_pact -werks
AND lifnr EQ ztb_precio_pact-lifnr
AND fecdes EQ ztb_precio_pact-fecdes.
w_precio = ztb_precio_pact-prpact.
ELSE.
SELECT ebeln ebelp menge prpact ccespe porc
porc2 importe indlib
INTO TABLE it_act_aprbcld
FROM ztb_aprbcld
WHERE werks EQ ztb_precio_sem-werks
AND ( fecdes BETWEEN ztb_precio_sem-begda
AND ztb_precio_sem-endda ).
w_precio = ztb_precio_sem-prcsem.
ENDIF.
LOOP AT it_act_aprbcld.
CLEAR it_act_aprbcld-importe.
CLEAR: w_fact, ztb_aprbcld, flag_nf.
PERFORM valida_facturado USING it_act_aprbcld-ebeln
it_act_aprbcld-ebelp.
IF w_fact GT 0 AND flag_nf IS INITIAL.
ELSE.
IF it_act_aprbcld-porc2 IS INITIAL.
it_act_aprbcld-importe = ( 1 - ( it_act_aprbcld-porc / 100 ) ) *
w_precio * it_act_aprbcld-menge.
ELSE.
it_act_aprbcld-importe = ( 1 - ( it_act_aprbcld-porc2 / 100 ) ) *
w_precio * it_act_aprbcld-menge.
ENDIF.
UPDATE ztb_aprbcld SET prpact = ztb_precio_pact-prpact
importe = it_act_aprbcld-importe
WHERE ebeln EQ it_act_aprbcld-ebeln
AND ebelp EQ it_act_aprbcld-ebelp.
ENDIF.
ENDLOOP.
ENDFORM.
" ACTUALIZA_ZTB_APRBCLD_200
*&---------------------------------------------------------------------*
*&
Form VALIDA_FACTURADO

*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_IT_ACT_APRBCLD_EBELN text
*
-->P_IT_ACT_APRBCLD_EBELP text
*----------------------------------------------------------------------*
FORM VALIDA_FACTURADO USING NROPEDI POSICION.
CLEAR: w_cant_debe, w_cant_haber, ekbe.
SELECT SINGLE * FROM EKBE WHERE EBELN EQ NROPEDI
AND EBELP EQ POSICION.
IF SY-SUBRC NE 0.
flag_nf = 'X'.
ENDIF.
* Obtiene el Importe Facturado DEBE
SELECT SUM( MENGE ) INTO W_CANT_DEBE
FROM EKBE
WHERE EBELN EQ NROPEDI
AND
EBELP EQ POSICION AND
VGABE EQ '2'
AND
SHKZG = 'S' .
* Obtiene el Importe Facturado HABER
SELECT SUM( MENGE ) INTO W_CANT_HABER
FROM EKBE
WHERE EBELN EQ NROPEDI
AND
EBELP EQ POSICION AND
VGABE EQ '2'
AND
SHKZG = 'H' .
W_FACT = W_CANT_DEBE - W_CANT_HABER.
ENDFORM.
" VALIDA_FACTURADO
*&---------------------------------------------------------------------*
*&
Form ACTUALIZA_ZTB_ARMADOR_200
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM ACTUALIZA_ZTB_ARMADOR_200.
CLEAR it_armador.
REFRESH it_armador.
SELECT * FROM ztb_armador INTO TABLE it_armador
WHERE werks EQ ztb_precio_sem-werks
AND fecdes BETWEEN ztb_precio_sem-begda AND ztb_precio_sem-endda
AND ( indborr EQ space OR indborr IS NULL ).
LOOP AT it_armador.
CLEAR ztb_precio_arm.
SELECT SINGLE * FROM ztb_precio_arm WHERE werks EQ it_armador -werks
AND lifnr EQ it_armador-lifnr
AND begda LE it_armador-fecdes
AND endda GE it_armador-fecdes.
IF sy-subrc NE 0.
IF it_armador-indlib IS INITIAL
AND NOT it_armador-prsug IS INITIAL
AND it_armador-prsug LE ztb_precio_sem-prcsem2.
it_armador-prpact = it_armador-prsug.
it_armador-indlib = 'AUT'.
it_armador-fec_lib = sy-datum.
ENDIF.
ENDIF.
UPDATE ztb_armador SET prcsem = ztb_p recio_sem-prcsem
prcsem2 = ztb_precio_sem-prcsem2
prpact = it_armador-prpact
indlib = it_armador-indlib
fec_lib = it_armador-fec_lib
WHERE fecdes = it_armador-fecdes
AND werks = it_armador-werks

AND matriemb = it_armador-matriemb


AND ( indborr IS NULL
OR indborr EQ space ).
ENDLOOP.
ENDFORM.

" ACTUALIZA_ZTB_ARMADOR_200

*&---------------------------------------------------------------------*
*&
Form ACTUALIZA_ZTB_ARMAADOR_300
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM ACTUALIZA_ZTB_ARMAADOR_300.
CLEAR it_armador.
REFRESH it_armador.
SELECT * FROM ztb_armador INTO TABLE it_armador
WHERE werks EQ it_precio_sem-werks
AND fecdes BETWEEN it_precio_sem-begda AND it_precio_sem-endda
AND ( indborr EQ space OR indborr IS NULL ).
LOOP AT it_armador.
CLEAR ztb_precio_arm.
SELECT SINGLE * FROM ztb_precio_arm WHERE werks EQ it_armador -werks
AND lifnr EQ it_armador-lifnr
AND begda LE it_armador-fecdes
AND endda GE it_armador-fecdes.
IF sy-subrc NE 0.
IF it_armador-indlib IS INITIAL
AND NOT it_armador-prsug IS INITIAL
AND it_armador-prsug LE it_precio_sem-prcsem2.
it_armador-prpact = it_armador-prsug.
it_armador-indlib = 'AUT'.
it_armador-fec_lib = sy-datum.
ENDIF.
ENDIF.
UPDATE ztb_armador SET prcsem = it_precio_sem-prcsem
prcsem2 = it_precio_sem-prcsem2
prpact = it_armador-prpact
indlib = it_armador-indlib
fec_lib = it_armador-fec_lib
WHERE fecdes = it_armador-fecdes
AND werks = it_armador-werks
AND matriemb = it_armador-matriemb
AND ( indborr IS NULL
OR indborr EQ space ).
ENDLOOP.
ENDFORM.
" ACTUALIZA_ZTB_ARMAADOR_300
*&---------------------------------------------------------------------*
*&
Form ARMA_ARCHIVO_HTML
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM ARMA_ARCHIVO_HTML.
data: begin of html_field_names occurs 0,
spalten_name(60),
ddic_table like dd03d-fieldname,
ddic_name like dd03d-fieldname,
layout,
"I: invisible; F: fix; X:Key
end of html_field_names.
data: table_attributes like w3html,
html
type w3html
occurs 0 with header line,

new_html
type w3html
occurs 0 with header line,
HEAD LIKE W3HTML,
tail(510),
fields
type w3fields occurs 0,
text_
like w3head-text,
table_header like w3head,
row_header
type w3head occurs 0,
fgcolor_head
like w3fields-fg_color,
bgcolor_head
like w3fields-bg_color,
font_head
like w3fields-font,
size_head
like w3fields-size,
justified_head
like w3fields-just,
text_length,
fgcolor_body
like w3fields-fg_color,
bgcolor_body
like w3fields-bg_color,
font_body
like w3fields-font,
size_body
like w3fields-size,
justified_body
like w3fields-just,
l_user(80),
p_file(128).
CONSTANTS: CR(2) TYPE X VALUE '0D0A'.
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
html_field_names-spalten_name
html_field_names-layout
*
*

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

'Mandante'.
'F'.
append html_field_names."1
'Centro'.
'F'.
append html_field_names."2
'Inicio Validez'.
'F'.
append html_field_names."3
'Fin de Validez'.
'F'.
append html_field_names."4
'Precio (desde)'.
' '.
append html_field_names."5
'Precio (hasta)'.
' '.
append html_field_names."6
'Moneda'.
' '.
append html_field_names."
'Precio Tope'.
' '.
append html_field_names."
'Fecha de Creacin'.
' '.
append html_field_names."
'Hora de Creacin'.
' '.
append html_field_names."
'Usuario Creacin'.
' '.
append html_field_names."
'Fecha de Modificacin'.
' '.
append html_field_names."
'Hora de Modificacin'.
' '.
append html_field_names."
'Usuario Modificacin'.
' '.
append html_field_names."

text_length = 'M'.
bgcolor_head = '#BBB9B0'.
bgcolor_body = '#E6E6DE'.

loop at html_field_names.
move html_field_names-spalten_name to text_.
call function 'WWW_ITAB_TO_HTML_HEADERS'
exporting
field_nr
= sy-tabix
text
= text_
*
text_length = text_length
*
justified
= justified_head
*
size
= size_head
fgcolor
= '#FFFF00'
"fgcolor_head

bgcolor
font
tables
header

= '#000000'
= font_head

"bgcolor_head

= row_header.

call function 'WWW_ITAB_TO_HTML_LAYOUT'


exporting
field_nr = sy-tabix
*
justified = justified_body
size
= '1'
fgcolor
= 'green'
"fgcolor_body
*
bgcolor
= bgcolor_body
font
= '"Arial"'
tables
fields
= fields.
endloop.
CONCATENATE 'border=0 width="100%" cellspacing=1'
'cellpadding=2' INTO table_attributes -line
SEPARATED BY SPACE.
*
*
*

table_header-text = 'Precios de Semana'.


table_header-font = 'Arial'.
table_header-size = '2'.

REFRESH html.
call function 'WWW_ITAB_TO_HTML'
exporting
table_attributes = 'BORDER=1'
*
table_header
= table_header
all_fields
= 'X'
tables
html
= html
fields
= fields
row_header
= row_header
itable
= it_precio_sem.

"table_attributes

* Quita entre las lneas de cdigo HTML los cdigos basuracomo ###
LOOP AT HTML.
IF HTML-LINE(4) EQ 'face' OR HTML-LINE(5) EQ 'color'.
CONCATENATE TAIL HTML INTO TAIL SEPARATED BY SPACE.
ELSE.
CONCATENATE TAIL HTML INTO TAIL.
ENDIF.
IF HTML CS CR.
WHILE tail CS cr.
SPLIT tail AT cr INTO head tail.
APPEND HEAD TO NEW_HTML.
ENDWHILE.
ELSE.
APPEND HTML TO NEW_HTML.
ENDIF.
ENDLOOP.
APPEND tail TO new_html.
HTML[] = NEW_HTML[].
call function 'GUI_GET_DESKTOP_INFO'
exporting
type
= '12'
changing
return = l_user.
CONCATENATE l_user '\' sy-uzeit INTO p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING

def_filename
def_path
mask
mode
title
IMPORTING
filename
EXCEPTIONS
inv_winsys
no_batch
selection_cancel
selection_error
OTHERS

=
=
=
=
=

p_file
'/'
',*.html,*.html.'
'S'
'Guardar en ...'

= p_file
=
=
=
=
=

1
2
3
4
5.

IF sy-subrc NE 0.
STOP.
ELSE.
CONCATENATE p_file '.html' INTO p_file.
ENDIF.
DESCRIBE TABLE html LINES sy-tabix.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
*
bin_filesize
= sy-tabix
filename
= p_file
filetype
= 'ASC'
*
mode
= ' '
TABLES
data_tab
= html
EXCEPTIONS
file_open_error
= 1
file_write_error
= 2
invalid_filesize
= 3
invalid_type
= 4
no_batch
= 5
unknown_error
= 6
invalid_table_width
= 7
gui_refuse_filetransfer = 8
customer_error
= 9
OTHERS
= 10.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
ENDFORM.
" ARMA_ARCHIVO_HTML

You might also like