Módulo: DRAWBACK
Funcionalidade: Relatórios
Data/Hora da Publicação: 21/08/2006 00:00:00
Data/Hora Última Alteração: 17/02/2011 14:26:23
Descrição da Nota: DESENVOLVIMENTO DO PROGRAMA INSUMOS ALTERNATIVOS
Sintoma
Desenvolvimento do programa Insumo Alternativo / Avanço Tecnológico
Solução
Desenvolvimento do programa Insumo Alternativo / Avanço Tecnológico
6.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 01960 Data: 21/08/2006 Hora: 09:17:15
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 01960
Categoria : Melhoria
Prioridade : Média
Versão PW.CE : 6.0
Pacote : 00024
Agrupamento : 00127
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
DESENVOLVIMENTO DO PROGRAMA INSUMOS ALTERNATIVOS
----------------------------------------------------------------------------------------------------
Palavras Chave:
INSUMOS, ALTERNATIVOS, AVANÇO TECNOLOGICO, GENÉRICO, NCM
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCIR342
REPS /PWS/ZYCIR342F01
REPS /PWS/ZYCIR342I01
REPS /PWS/ZYCIR342O01
REPS /PWS/ZYCIR342TOP
TABD /PWS/ZYCIT433
TABL /PWS/ZYCIE433
MODIFICAR TABELA TRANSPARENTE: /PWS/ZYCIT433____________________________
DESCRIÇÃO BREVE: CI - Insumos Alternativos - Drawback___________________
CARACTERÍSTICAS
CATEGORIA DA TABELA: ___________________________
CLASSE DE ENTREGA: ___________________________
(_) - AUTUALIZAÇÃO DE TABELAS PERMITIDA
CAMPOS NOVOS
CAMPOS: TP. CAMPO CH: INI: TAB.VERIF.: TAB.REF.: CPO.RE
GRUPO CHAR4 X X
DESC_G MAKTX
J_1BNBM J_1BNBMCO1 T604F
MEINS MEINS T006
MAKTX MAKTX
DTDE DATUM
DTATE DATUM
CAMPOS EXCLUÍDOS
CAMPOS: TP. CAMPO CH: INI: TAB.VERIF.: TAB.REF.: CPO.RE
OPÇÕES TÉCNICAS
TIPO DE DADOS: ________
CATEGOR. TAMANHO: _____
(_) - AR. BUFFER NÃO PERMITIDO
(_) - AR. BUFFER PERMITIDO, MAS DESATIVADO
(_) - AR. BUFFER ATIVADO
(_) - RGSTS. IND ARMAZENADOS
(_) - ÁREA GEN ARMAZENADA EM BUFFER Nº DE CPOS CHAVE: ______
(_) - TOTALMENTE ARMAZENADO
(_) - REGISTRAR MODIFICS. DDS. EM LOG.
MODIFICAR ESTRUTURA: /PWS/ZYCIE433_________________________________________________________
DESCRIÇÃO BREVE: CI - Insumos Alternativos - Drawback______________________________________
COMPONENTES NOVOS
COMPONENTE: TP. COMP: TAB.REF.: CPO.REF.: AJUD. PESQU.
GRUPO CHAR4
DESC_G MAKTX
J_1BNBM J_1BNBMCO1
MEINS MEINS H_T006
MAKTX MAKTX
DTDE DATUM
DTATE DATUM
COMPONENTES EXCLUÍDOS
COMPONENTE: TP. COMP: TAB.REF.: CPO.REF.: AJUD. PESQU.
--------------------------------------------------------------------------------------------
DESENVOLVIMENTO DO PROGRAMA /PWS/ZYCIR342
--------------------------------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Pool móds. /PWS/ZYCIR342 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
INCLUDE /pws/zycir342top . "
INCLUDE /pws/zycir342o01 .
INCLUDE /pws/zycir342i01 .
INCLUDE /pws/zycir342f01 .
*&---------------------------------------------------------------------*
*& Include /PWS/ZYCIR342TOP *
*& *
*&---------------------------------------------------------------------*
PROGRAM /pws/zycir342 MESSAGE-ID /pws/zycim .
*Tabela
TABLES: /pws/zycit433,
/pws/zycie433.
*Controles de tela
CONTROLS: ts_princ TYPE TABSTRIP ,
tc_grupo TYPE TABLEVIEW USING SCREEN '0101',
tc_insumo TYPE TABLEVIEW USING SCREEN '0102'.
*Tabelas internas
*Materiais cadastrados em tabela
DATA: BEGIN OF itab_zycit433 OCCURS 0.
INCLUDE STRUCTURE /pws/zycit433.
DATA: END OF itab_zycit433.
*Materiais a serem eliminados
DATA: BEGIN OF itab_zycit433_d OCCURS 0.
INCLUDE STRUCTURE /pws/zycit433.
DATA: END OF itab_zycit433_d.
*Tabela de modificações
DATA: BEGIN OF itab_zycit433_s OCCURS 0.
INCLUDE STRUCTURE /pws/zycit433.
DATA: END OF itab_zycit433_s.
*Tabela de exibição de grupo.
DATA: BEGIN OF itab_grupo OCCURS 0.
DATA: grupo TYPE /pws/zycit433-grupo , "grupo
desc_g TYPE /pws/zycit433-desc_g ,
j_1bnbm TYPE /pws/zycit433-j_1bnbm,
meins TYPE /pws/zycit433-meins ,
mark TYPE c .
DATA: END OF itab_grupo.
*Tabela de insumos por grupo.
DATA: BEGIN OF itab_insumo OCCURS 0.
INCLUDE STRUCTURE /pws/zycit433.
DATA: mark TYPE c .
DATA: END OF itab_insumo.
*Variaveis
DATA: v_ini TYPE c ,
v_mark TYPE c ,
v_okcode TYPE sy-ucomm ,
v_tela(4) TYPE c VALUE '0101' ,
v_pasta TYPE sy-ucomm VALUE 'TS_GR' ,
v_confirm(1) TYPE c VALUE 'N' ,
v_resposta TYPE c .
*----------------------------------------------------------------------*
* INCLUDE /PWS/ZYCIR342O01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module preenche_grupo OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE preenche_grupo OUTPUT.
MOVE: itab_grupo-grupo TO /pws/zycie433-grupo ,
itab_grupo-desc_g TO /pws/zycie433-desc_g ,
itab_grupo-j_1bnbm TO /pws/zycie433-j_1bnbm,
itab_grupo-meins TO /pws/zycie433-meins ,
itab_grupo-mark TO v_mark.
ENDMODULE. " preenche_grupo OUTPUT
*&---------------------------------------------------------------------*
*& Module tela_101 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE tela_101 OUTPUT.
IF NOT /pws/zycie433-grupo IS INITIAL.
READ TABLE itab_zycit433_s WITH KEY
grupo = /pws/zycie433-grupo.
IF sy-subrc EQ 0.
LOOP AT SCREEN .
IF screen-name NE 'V_MARK'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDMODULE. " tela_101 OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ST0100'.
SET TITLEBAR '0100'.
IF v_ini IS INITIAL.
v_ini = 'X'.
SORT itab_zycit433 BY grupo matnr.
SELECT * FROM /pws/zycit433 INTO TABLE itab_zycit433.
itab_zycit433_s[] = itab_zycit433[].
LOOP AT itab_zycit433.
itab_grupo-grupo = itab_zycit433-grupo .
itab_grupo-desc_g = itab_zycit433-desc_g .
itab_grupo-j_1bnbm = itab_zycit433-j_1bnbm.
itab_grupo-meins = itab_zycit433-meins .
COLLECT itab_grupo.
ENDLOOP.
DELETE itab_grupo WHERE grupo EQ space.
SORT itab_grupo BY grupo.
ENDIF.
ts_princ-activetab = v_pasta.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0101 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0101 OUTPUT.
DATA: v_linha TYPE i.
* SET PF-STATUS 'xxxxxxxx'.
DESCRIBE TABLE itab_grupo LINES v_linha.
tc_grupo-lines = v_linha + 20.
ENDMODULE. " STATUS_0101 OUTPUT
*&---------------------------------------------------------------------*
*& Module preenche_insumo OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE preenche_insumo OUTPUT.
/pws/zycie433-matnr = itab_insumo-matnr.
/pws/zycie433-dtde = itab_insumo-dtde.
/pws/zycie433-dtate = itab_insumo-dtate.
/pws/zycie433-maktx = itab_insumo-maktx.
v_mark = itab_insumo-mark.
ENDMODULE. " preenche_insumo OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0102 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0102 OUTPUT.
DATA: v_linha_102 TYPE i.
* SET PF-STATUS 'xxxxxxxx'.
DESCRIBE TABLE itab_insumo LINES v_linha_102.
tc_insumo-lines = v_linha_102 + 20.
ENDMODULE. " STATUS_0102 OUTPUT
*&---------------------------------------------------------------------*
*& Module tela_102 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE tela_102 OUTPUT.
IF NOT /pws/zycie433-matnr IS INITIAL.
LOOP AT SCREEN.
IF screen-name EQ '/PWS/ZYCIE433-MATNR'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE. " tela_102 OUTPUT
*----------------------------------------------------------------------*
* INCLUDE /PWS/ZYCIR342I01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module preenche_grupos INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE preenche_grupos INPUT.
IF /pws/zycie433-grupo IS INITIAL.
EXIT.
ENDIF.
READ TABLE itab_grupo INDEX tc_grupo-current_line.
IF sy-subrc NE 0 .
READ TABLE itab_grupo WITH KEY
grupo = /pws/zycie433-grupo.
IF sy-subrc EQ 0.
MESSAGE i015 WITH text-006.
EXIT.
ENDIF.
itab_grupo-grupo = /pws/zycie433-grupo .
itab_grupo-desc_g = /pws/zycie433-desc_g .
itab_grupo-j_1bnbm = /pws/zycie433-j_1bnbm.
itab_grupo-meins = /pws/zycie433-meins .
APPEND itab_grupo.
ELSE.
itab_grupo-grupo = /pws/zycie433-grupo .
itab_grupo-desc_g = /pws/zycie433-desc_g .
itab_grupo-j_1bnbm = /pws/zycie433-j_1bnbm.
itab_grupo-meins = /pws/zycie433-meins .
MODIFY itab_grupo INDEX tc_grupo-current_line.
ENDIF.
ENDMODULE. " preenche_grupos INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0101 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0101 INPUT.
ENDMODULE. " USER_COMMAND_0101 INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE v_okcode.
WHEN 'FS_GR'.
v_tela = '0101'.
v_pasta = v_okcode.
WHEN 'FS_IS'.
READ TABLE itab_grupo WITH KEY mark = 'X'.
IF sy-subrc NE 0.
MESSAGE s015 WITH text-007.
EXIT.
ENDIF.
v_tela = '0102'.
v_pasta = v_okcode.
PERFORM move_insumos.
WHEN 'DELE'.
CASE v_tela.
WHEN '0101'.
*Verifica se há itens selecionados para excluir.
READ TABLE itab_grupo WITH KEY mark = 'X'.
IF sy-subrc EQ 0.
PERFORM pergunta USING text-001
text-022
CHANGING v_resposta.
IF v_resposta EQ '1'.
READ TABLE itab_zycit433_s WITH KEY
grupo = itab_grupo-grupo.
IF sy-subrc EQ 0.
MESSAGE i015 WITH text-008.
EXIT.
ENDIF.
DELETE itab_grupo WHERE mark = 'X'.
ENDIF.
ENDIF.
WHEN '0102'.
READ TABLE itab_insumo WITH KEY mark = 'X'.
IF sy-subrc NE 0.
EXIT.
ELSE.
PERFORM pergunta USING text-001
text-019
CHANGING v_resposta.
ENDIF.
PERFORM deleta_insumo.
ENDCASE.
WHEN 'SAVE'.
PERFORM pergunta USING text-001
text-002
CHANGING v_resposta.
IF v_resposta EQ '1'.
PERFORM grava.
ENDIF.
WHEN 'EXIT'.
PERFORM pergunta USING text-001
text-017
CHANGING v_resposta.
IF v_resposta EQ '1'.
PERFORM grava.
ENDIF.
IF v_resposta NE 'A'.
LEAVE PROGRAM.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module marca_l101 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE marca_l101 INPUT.
READ TABLE itab_grupo INDEX tc_grupo-current_line.
IF sy-subrc EQ 0 .
itab_grupo-mark = v_mark.
MODIFY itab_grupo INDEX tc_grupo-current_line.
ENDIF.
ENDMODULE. " marca_l101 INPUT
*&---------------------------------------------------------------------*
*& Module preenche_insumo INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE preenche_insumo INPUT.
DATA: v_mensagem(50) TYPE c,
v_exist TYPE c.
IF /pws/zycie433-matnr IS INITIAL.
EXIT.
ENDIF.
CLEAR: itab_insumo.
READ TABLE itab_insumo INDEX tc_insumo-current_line.
IF sy-subrc NE 0 .
READ TABLE itab_insumo WITH KEY matnr = /pws/zycie433-matnr.
IF sy-subrc EQ 0.
MESSAGE i015 WITH text-016.
EXIT.
ENDIF.
CLEAR: v_exist.
LOOP AT itab_zycit433_s
WHERE matnr EQ /pws/zycie433-matnr
AND grupo NE itab_grupo-grupo
AND ( ( dtde >= /pws/zycie433-dtde
AND dtde <= /pws/zycie433-dtate )
OR ( dtate >= /pws/zycie433-dtde
AND dtate <= /pws/zycie433-dtate ) ).
v_exist = 'X'.
EXIT.
ENDLOOP.
LOOP AT itab_zycit433_s
WHERE matnr EQ /pws/zycie433-grupo
AND grupo NE itab_grupo-grupo
AND ( ( dtde <= /pws/zycie433-dtde
AND dtate >= /pws/zycie433-dtate )
OR ( dtde <= /pws/zycie433-dtde
AND dtate >= /pws/zycie433-dtate ) ).
v_exist = 'X'.
EXIT.
ENDLOOP.
IF v_exist EQ 'X'.
MESSAGE i015 WITH text-009 /pws/zycie433-matnr text-010.
EXIT.
ENDIF.
SELECT SINGLE a~steuc b~meins
INTO (itab_insumo-j_1bnbm, itab_insumo-meins)
FROM ( marc AS a INNER JOIN mara AS b ON
a~matnr EQ b~matnr )
WHERE a~matnr EQ /pws/zycie433-matnr.
IF itab_grupo-j_1bnbm NE itab_insumo-j_1bnbm.
CLEAR v_mensagem.
CONCATENATE text-009 /pws/zycie433-matnr text-012
INTO v_mensagem SEPARATED BY space.
MESSAGE i015 WITH v_mensagem itab_insumo-j_1bnbm text-014.
EXIT.
ENDIF.
IF itab_grupo-meins NE itab_insumo-meins.
CLEAR v_mensagem.
CONCATENATE text-009 /pws/zycie433-matnr text-013
INTO v_mensagem SEPARATED BY space.
MESSAGE i015 WITH v_mensagem itab_insumo-meins text-014.
EXIT.
ENDIF.
SELECT SINGLE maktx FROM makt
INTO itab_insumo-maktx
WHERE matnr EQ /pws/zycie433-matnr.
IF /pws/zycie433-dtde > /pws/zycie433-dtate.
MESSAGE i015 WITH text-015.
EXIT.
ENDIF.
MOVE:
itab_grupo-grupo TO itab_insumo-grupo ,
itab_grupo-j_1bnbm TO itab_insumo-j_1bnbm,
itab_grupo-meins TO itab_insumo-meins,
itab_grupo-desc_g TO itab_insumo-desc_g,
/pws/zycie433-matnr TO itab_insumo-matnr,
/pws/zycie433-dtde TO itab_insumo-dtde,
/pws/zycie433-dtate TO itab_insumo-dtate.
APPEND itab_insumo.
itab_zycit433_s = itab_insumo.
APPEND itab_zycit433_s.
ELSE.
CLEAR: v_exist.
LOOP AT itab_zycit433_s
WHERE matnr EQ /pws/zycie433-matnr
AND grupo NE itab_grupo-grupo
AND ( ( dtde >= /pws/zycie433-dtde
AND dtde <= /pws/zycie433-dtate )
OR ( dtate >= /pws/zycie433-dtde
AND dtate <= /pws/zycie433-dtate ) ).
v_exist = 'X'.
EXIT.
ENDLOOP.
LOOP AT itab_zycit433_s
WHERE matnr EQ /pws/zycie433-grupo
AND grupo NE itab_grupo-grupo
AND ( ( dtde <= /pws/zycie433-dtde
AND dtate >= /pws/zycie433-dtate )
OR ( dtde <= /pws/zycie433-dtde
AND dtate >= /pws/zycie433-dtate ) ).
v_exist = 'X'.
EXIT.
ENDLOOP.
IF v_exist EQ 'X'.
MESSAGE i015 WITH text-009 /pws/zycie433-matnr text-010.
EXIT.
ENDIF.
IF /pws/zycie433-dtde > /pws/zycie433-dtate.
MESSAGE i015 WITH text-015.
EXIT.
ENDIF.
MOVE:
/pws/zycie433-dtde TO itab_insumo-dtde,
/pws/zycie433-dtate TO itab_insumo-dtate.
MODIFY itab_insumo INDEX tc_insumo-current_line.
itab_zycit433_s = itab_insumo.
MODIFY itab_zycit433_s TRANSPORTING dtde dtate
WHERE matnr EQ /pws/zycie433-matnr
AND grupo = /pws/zycie433-grupo.
ENDIF.
ENDMODULE. " preenche_insumo INPUT
*&---------------------------------------------------------------------*
*& Module marca_l102 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE marca_l102 INPUT.
READ TABLE itab_insumo INDEX tc_insumo-current_line.
IF sy-subrc EQ 0 .
itab_insumo-mark = v_mark.
MODIFY itab_insumo INDEX tc_insumo-current_line.
ENDIF.
ENDMODULE. " marca_l102 INPUT
*----------------------------------------------------------------------*
* INCLUDE /PWS/ZYCIR342F01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form move_insumos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM move_insumos.
itab_insumo[] = itab_zycit433_s[].
DELETE itab_insumo WHERE grupo NE itab_grupo-grupo.
DELETE ADJACENT DUPLICATES FROM itab_insumo
COMPARING matnr.
MOVE: itab_grupo-grupo TO /pws/zycie433-grupo ,
itab_grupo-desc_g TO /pws/zycie433-desc_g ,
itab_grupo-j_1bnbm TO /pws/zycie433-j_1bnbm,
itab_grupo-meins TO /pws/zycie433-meins .
ENDFORM. " move_insumos
*&---------------------------------------------------------------------*
*& Form deleta_insumo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM deleta_insumo.
DATA: v_matnr_d TYPE mara-matnr.
CLEAR: v_matnr_d.
SELECT SINGLE matnr
FROM /pws/zycit279
INTO v_matnr_d
WHERE matnr EQ itab_insumo-matnr.
SELECT SINGLE codcomp
FROM /pws/zycit260
INTO v_matnr_d
WHERE codcomp EQ itab_insumo-matnr.
IF NOT v_matnr_d IS INITIAL.
MESSAGE i015 WITH text-005.
EXIT.
ENDIF.
IF v_resposta EQ '1'.
LOOP AT itab_zycit433_s WHERE grupo EQ itab_insumo-grupo
AND matnr EQ itab_insumo-matnr.
itab_zycit433_d = itab_zycit433_s.
APPEND itab_zycit433_d.
DELETE itab_zycit433_s.
ENDLOOP.
SORT itab_zycit433_d BY grupo matnr.
* Elimina registros repitidos.
DELETE ADJACENT DUPLICATES FROM itab_zycit433_d
COMPARING grupo matnr.
DELETE itab_insumo WHERE mark EQ 'X'.
ENDIF.
ENDFORM. " deleta_insumo
*&---------------------------------------------------------------------*
*& Form pergunta
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_RESPOSTA text
*----------------------------------------------------------------------*
FORM pergunta USING p_titulo
p_pergunta
CHANGING p_resposta.
CLEAR: p_resposta.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = p_titulo
* DIAGNOSE_OBJECT = ' '
text_question = p_pergunta
text_button_1 = text-003
* ICON_BUTTON_1 = ' '
text_button_2 = text-004
* ICON_BUTTON_2 = ' '
default_button = '1'
display_cancel_button = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
IMPORTING
answer = p_resposta
* TABLES
* PARAMETER =
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
ENDFORM. " pergunta
*&---------------------------------------------------------------------*
*& Form grava
*&---------------------------------------------------------------------*
* Grava alterações realizadas
*----------------------------------------------------------------------*
FORM grava.
SORT itab_zycit433_s BY grupo matnr.
DELETE ADJACENT DUPLICATES FROM itab_zycit433_s.
DELETE /pws/zycit433 FROM TABLE itab_zycit433_d.
MODIFY /pws/zycit433 FROM TABLE itab_zycit433_s.
ENDFORM. " grava.