Escolar Documentos
Profissional Documentos
Cultura Documentos
C1
C2
C5
I1
I3
IF
H1
ID FATOR POR 1000
MIL
12,090.00 1000 12.09 500 6045
Corrigir o valor unitário
Valor total esta ok
15,775.69
29,614.29 J5
4,741.03
5,153.30
39,508.62
DH
J1 MM_ATIVO: ICMS(CIAP)/IPI
50,060.33
21,498.87
71,559.20
MM_ATIVO: ICMS(CIAP)/DIFAL/IPI
557,959.96
139,869.24
697,829.20
ICMS(CIAP)/IPI
)/DIFAL/IPI
K6
H1
CG
JP
1 Valor unitário deverá dividir por (exemplo 10.000) Fator de conversão não está dividindo. (campo ekpo-
2 Formatação do campo de valores e dos textos de impostos
BEGIN OF ty_ekpo_final,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
werks TYPE ekpo-werks,
netpr TYPE ekpo-netpr,
matkl TYPE ekpo-matkl,
END OF ty_ekpo_final.
*Variáveis e tabelas internas
DATA: lt_ekpo_mat TYPE TABLE OF uekpo,
ls_ekpo_mat TYPE bekpo,
lt_ekpo_prec TYPE TABLE OF ty_ekpo_prec,
ls_ekpo_prec TYPE ty_ekpo_prec,
lt_ekpo_final TYPE TABLE OF ty_ekpo_final,
ls_ekpo_final TYPE ty_ekpo_final,
lt_fields TYPE TABLE OF sval,
lt_preco TYPE TABLE OF zstmm_preco_liq,
ls_preco TYPE zstmm_preco_liq,
ls_fields TYPE sval,
lc_status_mat TYPE xfeld,
lv_percent TYPE p DECIMALS 2,
lv_msg1(50) TYPE c,
lv_msg2(50) TYPE c,
lv_msg3(50) TYPE c,
lv_log TYPE c,
lv_resposta TYPE c,
lv_texto(50) TYPE c,
lv_return TYPE c,
lv_matnr TYPE ekpo-matnr,
lv_altera TYPE c,
lv_data(10) TYPE c,
lv_servico TYPE c.
**Dados para Log de erros
DATA: ls_log_handle TYPE balloghndl,
ls_log TYPE bal_s_log,
ls_msg TYPE bal_s_msg,
ls_msgno TYPE symsgno,
ls_display_profile TYPE bal_s_prof.
*break c14080004.
*CHECK sy-uname EQ 'C14080004'.
CHECK sy-uname NE 'C14080007'.
* Função que busca se a Exit está ativa ou não
CALL FUNCTION 'Z_Y_BC_VALIDA_EXIT'
EXPORTING
i_programa = 'ZXM06U43'
i_include = 'ZSINC_PRECO_MAT_ME'
IMPORTING
e_status = lc_status_mat.
IF lc_status_mat EQ 'X' AND ( sy-tcode EQ 'ME21N' OR sy-tcode EQ
lt_ekpo_mat[] = tekpo[].
**Criando o log inicial
ls_log-extnumber = 'Log de pedidos fora do preço'.
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = ls_log_handle
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT lt_ekpo_mat INTO ls_ekpo_mat.
IF NOT ls_ekpo_mat-matnr IS INITIAL.
CLEAR: ls_ekpo_prec, lv_percent,
lv_msg1, lv_msg2, lv_msg3, ls_msg, lv_data.
SELECT ekpo~ebeln ekko~aedat ekko~lifnr ekpo~matnr ekpo~we
FROM ekpo INNER JOIN ekko ON ekpo~ebeln EQ ekko~ebe
INTO ls_ekpo_prec
WHERE ekpo~matnr EQ ls_ekpo_mat-matnr
AND ekpo~werks EQ ls_ekpo_mat-werks
AND ekko~lifnr EQ i_ekko-lifnr
ORDER BY ekpo~ebeln DESCENDING.
ENDSELECT.
IF sy-subrc IS INITIAL.
*Calculando porcentagem (15%) sobre o valor do preço líquido ref
lv_percent = ( 15 / 100 ) * ls_ekpo_prec-netpr.
ls_ekpo_prec-netpr = ls_ekpo_prec-netpr + lv_percent.
**Verificando se o valor somado os 15% é maior que o que esta en
IF ls_ekpo_mat-netpr GT ls_ekpo_prec-netpr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_ekpo_mat-matnr
IMPORTING
output = lv_matnr.
lv_log = 'X'.
**Adicionando log
ls_msg-msgty = 'E'.
ls_msg-msgid = 'ZMM'.
ls_msg-msgno = 000.
CONCATENATE ls_ekpo_prec-aedat+6(2) ls_ekpo_prec-aedat
CONCATENATE 'Material' lv_matnr 'excedeu 15%' INTO lv_
CONCATENATE 'da ultima compra,' ls_ekpo_prec-ebeln INT
CONCATENATE 'data' lv_data INTO lv_msg3 SEPARATED BY s
ls_msg-msgv1 = lv_msg1.
ls_msg-msgv2 = lv_msg2.
ls_msg-msgv3 = lv_msg3.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = ls_log_handle
i_s_msg = ls_msg
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**Preenchendo tabela final com os materias fora do preço
MOVE-CORRESPONDING ls_ekpo_mat TO ls_ekpo_final.
APPEND ls_ekpo_final TO lt_ekpo_final.
CLEAR ls_ekpo_final.
ENDIF.
ENDIF.
***Material em branco.
ELSE.
CLEAR: ls_ekpo_prec, lv_percent,
lv_msg1, lv_msg2, lv_msg3, ls_msg, lv_data.
SELECT ekpo~ebeln ekko~aedat ekko~lifnr ekpo~matnr ekpo~we
FROM ekpo INNER JOIN ekko ON ekpo~ebeln EQ ekko~ebe
INTO ls_ekpo_prec
WHERE ekpo~matkl EQ ls_ekpo_mat-matkl
AND ekpo~werks EQ ls_ekpo_mat-werks
AND ekko~lifnr EQ i_ekko-lifnr
ORDER BY ekpo~ebeln DESCENDING.
ENDSELECT.
IF sy-subrc IS INITIAL.
*Calculando porcentagem (15%) sobre o valor do preço líquido ref
lv_percent = ( 15 / 100 ) * ls_ekpo_prec-netpr.
ls_ekpo_prec-netpr = ls_ekpo_prec-netpr + lv_percent.
**Verificando se o valor somado os 15% é maior que o que esta en
IF ls_ekpo_mat-netpr GT ls_ekpo_prec-netpr.
lv_log = 'X'.
lv_servico = 'X'.
**Adicionando log
ls_msg-msgty = 'E'.
ls_msg-msgid = 'ZMM'.
ls_msg-msgno = 000.
CONCATENATE ls_ekpo_prec-aedat+6(2) ls_ekpo_prec-aedat
CONCATENATE 'Serviço' ls_ekpo_mat-matkl '(Item' ls_ekp
CONCATENATE 'da ultima compra,' ls_ekpo_prec-ebeln INT
CONCATENATE 'data' lv_data INTO lv_msg3 SEPARATED BY s
ls_msg-msgv1 = lv_msg1.
ls_msg-msgv2 = lv_msg2.
ls_msg-msgv3 = lv_msg3.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = ls_log_handle
i_s_msg = ls_msg
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**Preenchendo tabela final com os materias fora do preço
MOVE-CORRESPONDING ls_ekpo_mat TO ls_ekpo_final.
APPEND ls_ekpo_final TO lt_ekpo_final.
CLEAR ls_ekpo_final.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
**Caso alguma material tenho valor alterado - Exibir LOG e solic
IF NOT lv_log IS INITIAL.
CLEAR: ls_msg.
ls_msg-msgty = 'E'.
ls_msg-msgid = 'ZMM'.
ls_msg-msgno = 000.
ls_msg-msgv1 = 'Esta divergência de valores deverá ser justi
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = ls_log_handle
i_s_msg = ls_msg
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**Lendo características do log
CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
IMPORTING
e_s_display_profile = ls_display_profile
EXCEPTIONS
OTHERS = 1.
IF sy-subrc EQ 0.
**Alterando caracteristicas da janela de log
ls_display_profile-no_toolbar = 'X'.
IF lv_servico EQ 'X'.
ls_display_profile-title = 'Log de serviços fora do
ELSE.
ls_display_profile-title = 'Log de materias fora do
ENDIF.
ls_display_profile-cwidth_opt = 'X'.
ls_display_profile-start_col = '45'.
ls_display_profile-start_row = '4'.
ls_display_profile-end_col = '180'.
ls_display_profile-end_row = '25'.
ENDIF.
**Gerando o log na tela
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
EXPORTING
i_s_display_profile = ls_display_profile
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**Perguntando se o usuário quer justificar e criar o pedido.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Justificativa'
text_question = 'Deseja inserir uma justificativa, para
text_button_1 = 'Sim'
icon_button_1 = 'ICON_CREATE_NOTE'
text_button_2 = 'Não'
icon_button_2 = 'ICON_CANCEL'
start_column = '45'
start_row = '4'
IMPORTING
answer = lv_resposta.
IF lv_resposta EQ '1'.
LOOP AT lt_ekpo_final INTO ls_ekpo_final.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_ekpo_final-matnr
IMPORTING
output = ls_ekpo_final-matnr.
*--Preenchendo justificativa
ls_fields-tabname = 'ZSTMM_PRECO_LIQ'.
ls_fields-fieldname = 'JUST'.
ls_fields-field_obl = 'X'.
ls_fields-fieldtext = 'Texto'.
APPEND ls_fields TO lt_fields.
CLEAR ls_fields.
CLEAR: lv_texto,
lv_return.
IF lv_servico EQ 'X'.
CONCATENATE 'Justificativa para serviço:' ls_ekpo_fina
ELSE.
CONCATENATE 'Justificativa para material:' ls_ekpo_fin
ENDIF.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = lv_texto
start_column = '45'
start_row = '4'
IMPORTING
returncode = lv_return
TABLES
fields = lt_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc IS INITIAL.
READ TABLE lt_fields INTO ls_fields WITH KEY fieldname
IF sy-subrc IS INITIAL AND NOT ls_fields-value IS INIT
ls_preco-ebeln = i_ekko-ebeln.
ls_preco-ebelp = ls_ekpo_final-ebelp.
ls_preco-lifnr = i_ekko-lifnr.
ls_preco-werks = ls_ekpo_final-werks.
ls_preco-matnr = ls_ekpo_final-matnr.
ls_preco-just = ls_fields-value.
ls_preco-aedat = i_ekko-aedat.
ls_preco-netpr = ls_ekpo_final-netpr.
APPEND ls_preco TO lt_preco.
CLEAR: ls_preco, ls_fields.
REFRESH lt_fields.
ELSE.
***Deletando msg criada
CALL FUNCTION 'BAL_LOG_DELETE'
EXPORTING
i_log_handle = ls_log_handle
EXCEPTIONS
log_not_found = 1
OTHERS = 2.
***Gerando msg de erro parando o processamento
MESSAGE e000(zmm) WITH 'Preço líquido excedeu 15%, f
ENDIF.
ENDIF.
ENDLOOP.
***Deletando msg criada
CALL FUNCTION 'BAL_LOG_DELETE'
EXPORTING
i_log_handle = ls_log_handle
EXCEPTIONS
log_not_found = 1
OTHERS = 2.
ELSE.
***Deletando msg criada
CALL FUNCTION 'BAL_LOG_DELETE'
EXPORTING
i_log_handle = ls_log_handle
EXCEPTIONS
log_not_found = 1
OTHERS = 2.
MESSAGE e000(zmm) WITH 'Gravação cancelada preço líquido m
ENDIF.
ENDIF.
ENDIF.
IF NOT lt_preco[] IS INITIAL.
EXPORT lt_preco TO MEMORY ID 'PRECO_LIQ'.
ENDIF.
ificar os valores (consderar o campo EKPO-PEINH)
------------------------*
do *
*
ço líquido ao criar *
------------------------*
N' OR sy-tcode EQ 'ME23N' OR sy-tcode EQ 'ME22N' ) AND ( sy-ucomm EQ 'MESAVE' OR sy-ucomm EQ 'YES' ).
-msgv4.
lv_data.
kpo~matnr ekpo~werks ekpo~netpr UP TO 1 ROWS
ebeln EQ ekko~ebeln
preço líquido referente ao ultimo pedido
c-netpr.
+ lv_percent.
que o que esta entrando no pedido
OUTPUT'
s_ekpo_prec-aedat+4(2) ls_ekpo_prec-aedat(4) INTO lv_data SEPARATED BY '.'.
deu 15%' INTO lv_msg1 SEPARATED BY space.
po_prec-ebeln INTO lv_msg2 SEPARATED BY space.
g3 SEPARATED BY space.
UMBER sy-msgno
msgv3 sy-msgv4.
do preço
ekpo_final.
lv_data.
kpo~matnr ekpo~werks ekpo~netpr UP TO 1 ROWS
ebeln EQ ekko~ebeln
preço líquido referente ao ultimo pedido
c-netpr.
+ lv_percent.
que o que esta entrando no pedido
s_ekpo_prec-aedat+4(2) ls_ekpo_prec-aedat(4) INTO lv_data SEPARATED BY '.'.
kl '(Item' ls_ekpo_mat-ebelp ')' 'excedeu 15%' INTO lv_msg1 SEPARATED BY space.
po_prec-ebeln INTO lv_msg2 SEPARATED BY space.
g3 SEPARATED BY space.
UMBER sy-msgno
msgv3 sy-msgv4.
do preço
ekpo_final.
xibir LOG e solicitar Justificativa.
deverá ser justificada!'.
sy-msgno
sy-msgv4.
serviços fora do preço!'.
materias fora do preço!'.
sy-msgno
sy-msgv4.
iar o pedido.
tificativa, para criação do pedido?'
ço:' ls_ekpo_final-matkl INTO lv_texto SEPARATED BY space.
ial:' ls_ekpo_final-matnr INTO lv_texto SEPARATED BY space.
ITH KEY fieldname = 'JUST'.
lds-value IS INITIAL.
-ebelp.
-werks.
-matnr.
-netpr.
do excedeu 15%, favor inserir justificativas!'.
a preço líquido maior que 15%!'.
m EQ 'YES' ).