Esse é um código desenvolvido para estorno de NFe feito para aqueles programas malucos onde além de fazer um processo de SD ou MM eu tenho um processo de estorno do mesmo e como hoje a maioria das NF são eletrônicas peguei uma parte da rotina do monitor J1BNFE para fazer no programa sem a necessidade de solicitar o cancelamento pelo monitor.
FUNCTION zfsd_cancela_nfe.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(I_DOCNUM) TYPE J_1BNFDOC-DOCNUM
*" REFERENCE(I_REASON) TYPE J_1BNFE_ACTIVE-REASON
*" TABLES
*" IT_RETURN STRUCTURE BAPIRET2
*" EXCEPTIONS
*" ERROR_MESSAGE
*"----------------------------------------------------------------------
DATA: lt_tab_active TYPE TABLE OF j_1bnfe_active WITH HEADER LINE,
lt_tab_active_mod TYPE TABLE OF j_1bnfe_active WITH HEADER LINE,
lt_et_active_mod TYPE TABLE OF j_1bnfe_active WITH HEADER LINE,
lt_et_errtab TYPE TABLE OF j_1bnfe_active WITH HEADER LINE.
DATA: lw_doc TYPE j_1bnfdoc.
SELECT SINGLE *
INTO lw_doc
FROM j_1bnfdoc
WHERE docnum EQ i_docnum.
CHECK sy-subrc = 0 AND lw_doc-cancel = space.
CALL FUNCTION 'ENQUEUE_EJ_1BNFE'
EXPORTING
docnum = i_docnum
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '224'
i_docnum '' '' ''.
RAISE error_message.
ELSE.
CALL FUNCTION 'DEQUEUE_EJ_1BNFE'
EXPORTING
docnum = i_docnum.
ENDIF.
CLEAR lt_tab_active.
* Busca dados da NFE p/ NF de saída
SELECT SINGLE *
INTO lt_tab_active
FROM j_1bnfe_active
WHERE docnum EQ i_docnum.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '209'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
* O código 3 é o scan
IF lt_tab_active-conting = 'X'.
SELECT SINGLE *
INTO lw_doc
FROM j_1bnfdoc
WHERE docnum EQ i_docnum.
IF ( sy-subrc = 0 AND lw_doc-docstat = space ) OR
( sy-subrc <> 0 ).
RAISE contingencia.
ENDIF.
ELSEIF lt_tab_active-docsta = space. "Status enviado sem retorno
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '210'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
DO 60 TIMES.
SELECT SINGLE *
INTO lt_tab_active
FROM j_1bnfe_active
WHERE docnum EQ i_docnum.
IF lt_tab_active-docsta <> ''.
EXIT.
ENDIF.
WAIT UP TO 5 SECONDS.
ENDDO.
APPEND lt_tab_active.
lt_tab_active_mod[] = lt_tab_active[].
* Dados do cancelamento da NF
lt_tab_active_mod-reason = i_reason.
SELECT SINGLE reason1
INTO lt_tab_active_mod-reason1
FROM j_1bnfe_cancelrt
WHERE reason EQ lt_tab_active_mod-reason
AND spras EQ sy-langu.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '211'
'' '' '' ''.
RAISE error_message.
ENDIF.
MODIFY lt_tab_active_mod TRANSPORTING reason reason1
WHERE docnum EQ i_docnum.
CALL FUNCTION 'J_1B_NFE_SEND_REQUESTS'
TABLES
it_acttab = lt_tab_active
et_errtab = lt_et_errtab
et_active_mod = lt_et_active_mod
it_acttab_mod = lt_tab_active_mod
EXCEPTIONS
status_error = 1
rfc_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '212'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
DATA l_line TYPE i.
IF lines( lt_et_errtab ) <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '212'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
DO 100 TIMES.
SELECT COUNT( * )
FROM j_1bnfdoc
WHERE docnum EQ i_docnum
AND cancel EQ 'X'.
IF sy-subrc = 0.
EXIT.
ENDIF.
WAIT UP TO 1 SECONDS.
ENDDO.
IF sy-dbcnt = 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '214'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
ENDFUNCTION.
quarta-feira, 16 de julho de 2014
terça-feira, 15 de julho de 2014
Programa para copiar estratégia de liberação em um ambiente e copiar para outro (por arquivo)
Esse programa eu fiz para gerar um arquivo com as estratégias de liberação criadas em DEV para serem importados em QA ou PRD.
REPORT zmmb0009 MESSAGE-ID zmm NO STANDARD PAGE HEADING LINE-COUNT 65
LINE-SIZE 255.
TYPE-POOLS: icon.
TABLES: t16fs.
TYPES: BEGIN OF tp_file,
tipo TYPE char1, "(N)num,(C)char,(X)Curr
objectkey TYPE bapi1003_key-object,
objecttable TYPE bapi1003_key-objecttable,
classnum TYPE bapi1003_key-classnum,
classtype TYPE bapi1003_key-classtype,
charact TYPE char30,
value_from TYPE char30,
value_to TYPE char30,
value_relation TYPE char1,
unit_from TYPE char3,
unit_to TYPE char3,
unit_from_iso TYPE char3,
unit_to_iso TYPE char3,
inherited TYPE char1,
instance TYPE numc3,
charact_descr TYPE char30,
value_char TYPE char30,
value_neutral TYPE char30,
currency_from TYPE char5,
currency_to TYPE char5,
currency_from_iso TYPE char30,
currency_to_iso TYPE char30,
END OF tp_file.
DATA: t_grpest TYPE TABLE OF t16fs WITH HEADER LINE,
t_file TYPE TABLE OF tp_file WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE text-002.
PARAMETERS: pr_imp RADIOBUTTON GROUP g1 MODIF ID G1 USER-COMMAND USCOM,
pr_exp RADIOBUTTON GROUP g1 DEFAULT 'X' MODIF ID G1.
SELECTION-SCREEN END OF BLOCK b11.
PARAMETERS: p_frggr TYPE frggr OBLIGATORY DEFAULT 'G3',
p_clsnum TYPE bapi1003_key-classnum
DEFAULT 'LIBERACAO_PEDIDO' OBLIGATORY,
p_clstyp TYPE bapi1003_key-classtype
DEFAULT '032' OBLIGATORY.
SELECT-OPTIONS: s_frgsx FOR t16fs-frgsx.
SELECTION-SCREEN SKIP.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b1.
******************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
******************************
PERFORM value_request_file.
******************************
START-OF-SELECTION.
******************************
PERFORM seleciona_dados.
PERFORM processa_dados.
PERFORM exportar_dados.
******************************
END-OF-SELECTION.
******************************
*&---------------------------------------------------------------------*
*& Form SELECIONA_DADOS
*&---------------------------------------------------------------------*
FORM seleciona_dados .
IF pr_exp = 'X'.
SELECT *
INTO TABLE t_grpest
FROM t16fs
WHERE frggr EQ p_frggr
AND frgsx IN s_frgsx.
IF sy-subrc <> 0.
MESSAGE i000 WITH text-mo1.
STOP.
ENDIF.
ELSE.
PERFORM importar_dados.
IF t_file[] IS INITIAL.
MESSAGE i000 WITH text-mo1.
STOP.
ENDIF.
ENDIF.
ENDFORM. " SELECIONA_DADOS
*&---------------------------------------------------------------------*
*& Form PROCESSA_DADOS
*&---------------------------------------------------------------------*
FORM processa_dados .
DATA: lt_num TYPE TABLE OF bapi1003_alloc_values_num,
lt_char TYPE TABLE OF bapi1003_alloc_values_char,
lt_curr TYPE TABLE OF bapi1003_alloc_values_curr,
lt_return TYPE TABLE OF bapiret2.
DATA: lt_head TYPE TABLE OF tp_file WITH HEADER LINE.
DATA: ls_bapi TYPE bapi1003_key,
ls_num TYPE bapi1003_alloc_values_num,
ls_char TYPE bapi1003_alloc_values_char,
ls_curr TYPE bapi1003_alloc_values_curr,
ls_return TYPE bapiret2.
IF pr_exp = 'X'.
LOOP AT t_grpest.
CLEAR ls_bapi.
CONCATENATE t_grpest-frggr t_grpest-frgsx INTO ls_bapi-object.
ls_bapi-objecttable = 'T16FS'.
ls_bapi-classnum = p_clsnum.
ls_bapi-classtype = p_clstyp.
REFRESH: lt_num, lt_char, lt_curr, lt_return.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = ls_bapi-object
objecttable = ls_bapi-objecttable
classnum = ls_bapi-classnum
classtype = ls_bapi-classtype
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
WRITE: / icon_red_light AS ICON, text-002, ls_bapi-object.
PERFORM lista_erros TABLES lt_return.
ELSE.
WRITE: / icon_green_light AS ICON, text-002, ls_bapi-object.
LOOP AT lt_num INTO ls_num.
CLEAR t_file.
t_file-tipo = 'N'.
t_file-objectkey = ls_bapi-object.
t_file-objecttable = ls_bapi-objecttable.
t_file-classnum = ls_bapi-classnum.
t_file-classtype = ls_bapi-classtype.
t_file-charact = ls_num-charact.
t_file-value_from = ls_num-value_from.
t_file-value_to = ls_num-value_to.
t_file-value_relation = ls_num-value_relation.
t_file-unit_from = ls_num-unit_from.
t_file-unit_to = ls_num-unit_to.
t_file-unit_from_iso = ls_num-unit_from_iso.
t_file-unit_to_iso = ls_num-unit_to_iso.
t_file-inherited = ls_num-inherited.
t_file-instance = ls_num-instance.
t_file-charact_descr = ls_num-charact_descr.
APPEND t_file.
ENDLOOP.
LOOP AT lt_char INTO ls_char.
CLEAR t_file.
t_file-tipo = 'C'.
t_file-objectkey = ls_bapi-object.
t_file-objecttable = ls_bapi-objecttable.
t_file-classnum = ls_bapi-classnum.
t_file-classtype = ls_bapi-classtype.
t_file-charact = ls_char-charact.
t_file-value_char = ls_char-value_char.
t_file-inherited = ls_char-inherited.
t_file-instance = ls_char-instance.
t_file-value_neutral = ls_char-value_neutral.
t_file-charact_descr = ls_char-charact_descr.
APPEND t_file.
ENDLOOP.
LOOP AT lt_curr INTO ls_curr.
CLEAR t_file.
t_file-tipo = 'X'.
t_file-objectkey = ls_bapi-object.
t_file-objecttable = ls_bapi-objecttable.
t_file-classnum = ls_bapi-classnum.
t_file-classtype = ls_bapi-classtype.
t_file-charact = ls_curr-charact.
t_file-value_from = ls_curr-value_from.
t_file-value_to = ls_curr-value_to.
t_file-value_relation = ls_curr-value_relation.
t_file-currency_from = ls_curr-currency_from.
t_file-currency_to = ls_curr-currency_to.
t_file-currency_from_iso = ls_curr-currency_from_iso.
t_file-currency_to_iso = ls_curr-currency_to_iso.
t_file-inherited = ls_curr-inherited.
t_file-instance = ls_curr-instance.
t_file-charact_descr = ls_curr-charact_descr.
APPEND t_file.
ENDLOOP.
ENDIF.
ENDLOOP.
ELSE.
lt_head[] = t_file[].
SORT lt_head BY objectkey objecttable classnum classtype.
DELETE ADJACENT DUPLICATES FROM lt_head
COMPARING objectkey objecttable classnum classtype.
LOOP AT lt_head.
REFRESH: lt_num, lt_char, lt_curr, lt_return.
LOOP AT t_file WHERE objectkey EQ lt_head-objectkey
AND objecttable EQ lt_head-objecttable
AND classnum EQ lt_head-classnum
AND classtype EQ lt_head-classtype.
CASE t_file-tipo.
WHEN 'N'.
CLEAR ls_num.
ls_num-charact = t_file-charact.
ls_num-value_from = t_file-value_from.
ls_num-value_to = t_file-value_to.
ls_num-value_relation = t_file-value_relation.
ls_num-unit_from = t_file-unit_from.
ls_num-unit_to = t_file-unit_to.
ls_num-unit_from_iso = t_file-unit_from_iso.
ls_num-unit_to_iso = t_file-unit_to_iso.
ls_num-inherited = t_file-inherited.
ls_num-instance = t_file-instance.
ls_num-charact_descr = t_file-charact_descr.
APPEND ls_num TO lt_num.
WHEN 'C'.
CLEAR ls_char.
ls_char-charact = t_file-charact.
ls_char-value_char = t_file-value_char.
ls_char-inherited = t_file-inherited.
ls_char-instance = t_file-instance.
ls_char-value_neutral = t_file-value_neutral.
ls_char-charact_descr = t_file-charact_descr.
APPEND ls_char TO lt_char.
WHEN 'X'.
CLEAR ls_curr.
ls_curr-charact = t_file-charact.
ls_curr-value_from = t_file-value_from.
ls_curr-value_to = t_file-value_to.
ls_curr-value_relation = t_file-value_relation.
ls_curr-currency_from = t_file-currency_from.
ls_curr-currency_to = t_file-currency_to.
ls_curr-currency_from_iso = t_file-currency_from_iso.
ls_curr-currency_to_iso = t_file-currency_to_iso.
ls_curr-inherited = t_file-inherited.
ls_curr-instance = t_file-instance.
ls_curr-charact_descr = t_file-charact_descr.
APPEND ls_curr TO lt_curr.
ENDCASE.
ENDLOOP.
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = lt_head-objectkey
objecttablenew = lt_head-objecttable
classnumnew = lt_head-classnum
classtypenew = lt_head-classtype
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
WRITE: / icon_red_light AS ICON, text-002, lt_head-objectkey.
PERFORM lista_erros TABLES lt_return.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
WRITE: / icon_green_light AS ICON, text-002, lt_head-objectkey.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " PROCESSA_DADOS
*&---------------------------------------------------------------------*
*& Form EXPORTAR_DADOS
*&---------------------------------------------------------------------*
FORM exportar_dados .
DATA: l_string TYPE string.
CHECK pr_exp = 'X'.
l_string = p_file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_string
TABLES
data_tab = t_file
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
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. " EXPORTAR_DADOS
*&---------------------------------------------------------------------*
*& Form VALUE_REQUEST_FILE
*&---------------------------------------------------------------------*
FORM value_request_file.
DATA: l_string TYPE string.
IF pr_exp = 'X'.
CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
EXPORTING
window_title = 'Salvar'
initial_directory = 'C:/'
IMPORTING
fullpath = l_string.
ELSE.
CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'
EXPORTING
window_title = 'Abrir'
initial_directory = 'C:/'
IMPORTING
fullpath = l_string.
ENDIF.
p_file = l_string.
ENDFORM. " VALUE_REQUEST_FILE
*&---------------------------------------------------------------------*
*& Form IMPORTAR_DADOS
*&---------------------------------------------------------------------*
FORM importar_dados .
DATA: l_string TYPE string.
REFRESH t_file.
l_string = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_string
TABLES
data_tab = t_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
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. " IMPORTAR_DADOS
*&---------------------------------------------------------------------*
*& Form LISTA_ERROS
*&---------------------------------------------------------------------*
FORM lista_erros TABLES ft_return STRUCTURE bapiret2.
LOOP AT ft_return.
CASE ft_return-type.
WHEN 'E'.
WRITE: /5 icon_message_error_small AS ICON.
WHEN 'W'.
WRITE: /5 icon_message_warning_small AS ICON.
WHEN OTHERS.
WRITE: /5 icon_message_information_small AS ICON.
ENDCASE.
WRITE: ft_return-message.
ENDLOOP.
ENDFORM. " LISTA_ERROS
REPORT zmmb0009 MESSAGE-ID zmm NO STANDARD PAGE HEADING LINE-COUNT 65
LINE-SIZE 255.
TYPE-POOLS: icon.
TABLES: t16fs.
TYPES: BEGIN OF tp_file,
tipo TYPE char1, "(N)num,(C)char,(X)Curr
objectkey TYPE bapi1003_key-object,
objecttable TYPE bapi1003_key-objecttable,
classnum TYPE bapi1003_key-classnum,
classtype TYPE bapi1003_key-classtype,
charact TYPE char30,
value_from TYPE char30,
value_to TYPE char30,
value_relation TYPE char1,
unit_from TYPE char3,
unit_to TYPE char3,
unit_from_iso TYPE char3,
unit_to_iso TYPE char3,
inherited TYPE char1,
instance TYPE numc3,
charact_descr TYPE char30,
value_char TYPE char30,
value_neutral TYPE char30,
currency_from TYPE char5,
currency_to TYPE char5,
currency_from_iso TYPE char30,
currency_to_iso TYPE char30,
END OF tp_file.
DATA: t_grpest TYPE TABLE OF t16fs WITH HEADER LINE,
t_file TYPE TABLE OF tp_file WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE text-002.
PARAMETERS: pr_imp RADIOBUTTON GROUP g1 MODIF ID G1 USER-COMMAND USCOM,
pr_exp RADIOBUTTON GROUP g1 DEFAULT 'X' MODIF ID G1.
SELECTION-SCREEN END OF BLOCK b11.
PARAMETERS: p_frggr TYPE frggr OBLIGATORY DEFAULT 'G3',
p_clsnum TYPE bapi1003_key-classnum
DEFAULT 'LIBERACAO_PEDIDO' OBLIGATORY,
p_clstyp TYPE bapi1003_key-classtype
DEFAULT '032' OBLIGATORY.
SELECT-OPTIONS: s_frgsx FOR t16fs-frgsx.
SELECTION-SCREEN SKIP.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b1.
******************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
******************************
PERFORM value_request_file.
******************************
START-OF-SELECTION.
******************************
PERFORM seleciona_dados.
PERFORM processa_dados.
PERFORM exportar_dados.
******************************
END-OF-SELECTION.
******************************
*&---------------------------------------------------------------------*
*& Form SELECIONA_DADOS
*&---------------------------------------------------------------------*
FORM seleciona_dados .
IF pr_exp = 'X'.
SELECT *
INTO TABLE t_grpest
FROM t16fs
WHERE frggr EQ p_frggr
AND frgsx IN s_frgsx.
IF sy-subrc <> 0.
MESSAGE i000 WITH text-mo1.
STOP.
ENDIF.
ELSE.
PERFORM importar_dados.
IF t_file[] IS INITIAL.
MESSAGE i000 WITH text-mo1.
STOP.
ENDIF.
ENDIF.
ENDFORM. " SELECIONA_DADOS
*&---------------------------------------------------------------------*
*& Form PROCESSA_DADOS
*&---------------------------------------------------------------------*
FORM processa_dados .
DATA: lt_num TYPE TABLE OF bapi1003_alloc_values_num,
lt_char TYPE TABLE OF bapi1003_alloc_values_char,
lt_curr TYPE TABLE OF bapi1003_alloc_values_curr,
lt_return TYPE TABLE OF bapiret2.
DATA: lt_head TYPE TABLE OF tp_file WITH HEADER LINE.
DATA: ls_bapi TYPE bapi1003_key,
ls_num TYPE bapi1003_alloc_values_num,
ls_char TYPE bapi1003_alloc_values_char,
ls_curr TYPE bapi1003_alloc_values_curr,
ls_return TYPE bapiret2.
IF pr_exp = 'X'.
LOOP AT t_grpest.
CLEAR ls_bapi.
CONCATENATE t_grpest-frggr t_grpest-frgsx INTO ls_bapi-object.
ls_bapi-objecttable = 'T16FS'.
ls_bapi-classnum = p_clsnum.
ls_bapi-classtype = p_clstyp.
REFRESH: lt_num, lt_char, lt_curr, lt_return.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = ls_bapi-object
objecttable = ls_bapi-objecttable
classnum = ls_bapi-classnum
classtype = ls_bapi-classtype
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
WRITE: / icon_red_light AS ICON, text-002, ls_bapi-object.
PERFORM lista_erros TABLES lt_return.
ELSE.
WRITE: / icon_green_light AS ICON, text-002, ls_bapi-object.
LOOP AT lt_num INTO ls_num.
CLEAR t_file.
t_file-tipo = 'N'.
t_file-objectkey = ls_bapi-object.
t_file-objecttable = ls_bapi-objecttable.
t_file-classnum = ls_bapi-classnum.
t_file-classtype = ls_bapi-classtype.
t_file-charact = ls_num-charact.
t_file-value_from = ls_num-value_from.
t_file-value_to = ls_num-value_to.
t_file-value_relation = ls_num-value_relation.
t_file-unit_from = ls_num-unit_from.
t_file-unit_to = ls_num-unit_to.
t_file-unit_from_iso = ls_num-unit_from_iso.
t_file-unit_to_iso = ls_num-unit_to_iso.
t_file-inherited = ls_num-inherited.
t_file-instance = ls_num-instance.
t_file-charact_descr = ls_num-charact_descr.
APPEND t_file.
ENDLOOP.
LOOP AT lt_char INTO ls_char.
CLEAR t_file.
t_file-tipo = 'C'.
t_file-objectkey = ls_bapi-object.
t_file-objecttable = ls_bapi-objecttable.
t_file-classnum = ls_bapi-classnum.
t_file-classtype = ls_bapi-classtype.
t_file-charact = ls_char-charact.
t_file-value_char = ls_char-value_char.
t_file-inherited = ls_char-inherited.
t_file-instance = ls_char-instance.
t_file-value_neutral = ls_char-value_neutral.
t_file-charact_descr = ls_char-charact_descr.
APPEND t_file.
ENDLOOP.
LOOP AT lt_curr INTO ls_curr.
CLEAR t_file.
t_file-tipo = 'X'.
t_file-objectkey = ls_bapi-object.
t_file-objecttable = ls_bapi-objecttable.
t_file-classnum = ls_bapi-classnum.
t_file-classtype = ls_bapi-classtype.
t_file-charact = ls_curr-charact.
t_file-value_from = ls_curr-value_from.
t_file-value_to = ls_curr-value_to.
t_file-value_relation = ls_curr-value_relation.
t_file-currency_from = ls_curr-currency_from.
t_file-currency_to = ls_curr-currency_to.
t_file-currency_from_iso = ls_curr-currency_from_iso.
t_file-currency_to_iso = ls_curr-currency_to_iso.
t_file-inherited = ls_curr-inherited.
t_file-instance = ls_curr-instance.
t_file-charact_descr = ls_curr-charact_descr.
APPEND t_file.
ENDLOOP.
ENDIF.
ENDLOOP.
ELSE.
lt_head[] = t_file[].
SORT lt_head BY objectkey objecttable classnum classtype.
DELETE ADJACENT DUPLICATES FROM lt_head
COMPARING objectkey objecttable classnum classtype.
LOOP AT lt_head.
REFRESH: lt_num, lt_char, lt_curr, lt_return.
LOOP AT t_file WHERE objectkey EQ lt_head-objectkey
AND objecttable EQ lt_head-objecttable
AND classnum EQ lt_head-classnum
AND classtype EQ lt_head-classtype.
CASE t_file-tipo.
WHEN 'N'.
CLEAR ls_num.
ls_num-charact = t_file-charact.
ls_num-value_from = t_file-value_from.
ls_num-value_to = t_file-value_to.
ls_num-value_relation = t_file-value_relation.
ls_num-unit_from = t_file-unit_from.
ls_num-unit_to = t_file-unit_to.
ls_num-unit_from_iso = t_file-unit_from_iso.
ls_num-unit_to_iso = t_file-unit_to_iso.
ls_num-inherited = t_file-inherited.
ls_num-instance = t_file-instance.
ls_num-charact_descr = t_file-charact_descr.
APPEND ls_num TO lt_num.
WHEN 'C'.
CLEAR ls_char.
ls_char-charact = t_file-charact.
ls_char-value_char = t_file-value_char.
ls_char-inherited = t_file-inherited.
ls_char-instance = t_file-instance.
ls_char-value_neutral = t_file-value_neutral.
ls_char-charact_descr = t_file-charact_descr.
APPEND ls_char TO lt_char.
WHEN 'X'.
CLEAR ls_curr.
ls_curr-charact = t_file-charact.
ls_curr-value_from = t_file-value_from.
ls_curr-value_to = t_file-value_to.
ls_curr-value_relation = t_file-value_relation.
ls_curr-currency_from = t_file-currency_from.
ls_curr-currency_to = t_file-currency_to.
ls_curr-currency_from_iso = t_file-currency_from_iso.
ls_curr-currency_to_iso = t_file-currency_to_iso.
ls_curr-inherited = t_file-inherited.
ls_curr-instance = t_file-instance.
ls_curr-charact_descr = t_file-charact_descr.
APPEND ls_curr TO lt_curr.
ENDCASE.
ENDLOOP.
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = lt_head-objectkey
objecttablenew = lt_head-objecttable
classnumnew = lt_head-classnum
classtypenew = lt_head-classtype
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
WRITE: / icon_red_light AS ICON, text-002, lt_head-objectkey.
PERFORM lista_erros TABLES lt_return.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
WRITE: / icon_green_light AS ICON, text-002, lt_head-objectkey.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " PROCESSA_DADOS
*&---------------------------------------------------------------------*
*& Form EXPORTAR_DADOS
*&---------------------------------------------------------------------*
FORM exportar_dados .
DATA: l_string TYPE string.
CHECK pr_exp = 'X'.
l_string = p_file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_string
TABLES
data_tab = t_file
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
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. " EXPORTAR_DADOS
*&---------------------------------------------------------------------*
*& Form VALUE_REQUEST_FILE
*&---------------------------------------------------------------------*
FORM value_request_file.
DATA: l_string TYPE string.
IF pr_exp = 'X'.
CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
EXPORTING
window_title = 'Salvar'
initial_directory = 'C:/'
IMPORTING
fullpath = l_string.
ELSE.
CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'
EXPORTING
window_title = 'Abrir'
initial_directory = 'C:/'
IMPORTING
fullpath = l_string.
ENDIF.
p_file = l_string.
ENDFORM. " VALUE_REQUEST_FILE
*&---------------------------------------------------------------------*
*& Form IMPORTAR_DADOS
*&---------------------------------------------------------------------*
FORM importar_dados .
DATA: l_string TYPE string.
REFRESH t_file.
l_string = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_string
TABLES
data_tab = t_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
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. " IMPORTAR_DADOS
*&---------------------------------------------------------------------*
*& Form LISTA_ERROS
*&---------------------------------------------------------------------*
FORM lista_erros TABLES ft_return STRUCTURE bapiret2.
LOOP AT ft_return.
CASE ft_return-type.
WHEN 'E'.
WRITE: /5 icon_message_error_small AS ICON.
WHEN 'W'.
WRITE: /5 icon_message_warning_small AS ICON.
WHEN OTHERS.
WRITE: /5 icon_message_information_small AS ICON.
ENDCASE.
WRITE: ft_return-message.
ENDLOOP.
ENDFORM. " LISTA_ERROS
quinta-feira, 12 de junho de 2014
SE78 - Carregamento de imagem
Fiquei me batendo numa carga de imagem na SE78.. Eu tinha um logo de uma empresa.. eu tive que redimensionar a imagem e trabalhar o fundo dela.. eu utilizei o PAINT.NET editor free muito bom para isso, eu coloquei um fundo branco para não atrapalhar na visualização na visualização do meu smartforms, só estava salvando como .BMP padrão para importação de imagens na SE78, quando importava o logo o fundo da imagem em vez de branco ficava cinza. Daí eu encontrei no SDN uma solução, na verdade uma deficiência no SAP para trabalhar imagens com mais de 8 bits.. e reparei que ao salvar a imagem ele salvava com uma resolução automática para BMP, eu simplesmente marquei para salvar em 8 bits e resolveu o problema.
ALV - campo com matchcode F4 - Implementação manual
Esse é para os casos de se desejar colocar uma lista de valores (matchcode) especifico em um campo de uma lista ALV.
Não esquecer de colocar o flag no campo que vai ter o F4 no fieldcat.
WHEN 'ORIGTP'.
<lfsw_fcat>-edit = 'X'.
<lfsw_fcat>-f4availabl = 'X'.
e tem q registrar o evento no objeto ALV.
DATA: lt_f4 TYPE lvc_t_f4.
DATA: lw_f4 TYPE lvc_s_f4.
CLEAR lw_f4.
lw_f4-fieldname = 'ORIGTP'.
lw_f4-register = 'X'.
APPEND lw_f4 TO lt_f4.
CALL METHOD gcl_alv->register_f4_for_fields
EXPORTING
it_f4 = lt_f4.
No meu caso coloquei o código acima antes do método SET_TABLE_FOR_FIRST_DISPLAY.
Abaixo restante do código.
=========================================================
Criação do evento.
CLASS gcl_alv_event DEFINITION.
on_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
=========================================================
*Implementação da classe.
CLASS gcl_alv_event IMPLEMENTATION.
METHOD on_f4.
PERFORM on_f4 USING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "on_f4
ENDCLASS.
==================================================
"Implementaçao da rotina..
" As linhas em vermelho são obrigatórias pois elas modificam o valor em tela logo após a seleção do valor da lista.. e o m_event_handler evita um erro que dá no retorno a tela.
FORM on_f4 USING f_fieldname TYPE lvc_fname
f_fieldvalue TYPE lvc_value
fw_row_no TYPE lvc_s_roid
fcl_event_data TYPE REF TO cl_alv_event_data
ft_bad_cells TYPE lvc_t_modi
f_display TYPE char01.
DATA: lw_alv TYPE ze_gnre_rel_lote,
lw_modi TYPE lvc_s_modi.
DATA: l_origtp TYPE zgnre_origtp.
FIELD-SYMBOLS: <lfst_modi> TYPE lvc_t_modi.
ASSIGN fcl_event_data->m_data->* TO <lfst_modi>.
CHECK sy-subrc = 0.
READ TABLE gt_alv INTO lw_alv INDEX fw_row_no-row_id.
CHECK sy-subrc = 0.
CASE f_fieldname.
WHEN 'ORIGTP'.
IF lw_alv-gnreid IS INITIAL.
PERFORM f4_codreceita USING lw_alv-regio
CHANGING l_origtp.
f_fieldvalue = l_origtp.
CLEAR lw_modi.
lw_modi-row_id = fw_row_no-row_id.
lw_modi-fieldname = f_fieldname.
lw_modi-value = f_fieldvalue.
APPEND lw_modi TO <lfst_modi>.
ENDIF.
fcl_event_data->m_event_handled = 'X'.
ENDCASE.
ENDFORM. " ON_F4
*&---------------------------------------------------------------------*
*& Form F4_CODRECEITA
*&---------------------------------------------------------------------*
FORM f4_codreceita USING f_regio TYPE regio
CHANGING f_origtp TYPE zgnre_origtp.
DATA: lt_rettab TYPE TABLE OF ddshretval,
lt_c023 TYPE TABLE OF zc023.
DATA: lw_rettab TYPE ddshretval.
SELECT *
INTO TABLE lt_c023
FROM zc023
WHERE regio EQ f_regio.
CHECK sy-subrc = 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
ddic_structure = 'ZC023'
retfield = 'ORIGTP'
value_org = 'S'
TABLES
value_tab = lt_c023
return_tab = lt_rettab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
CHECK sy-subrc = 0.
READ TABLE lt_rettab INTO lw_rettab INDEX 1.
CHECK sy-subrc = 0.
f_origtp = lw_rettab-fieldval.
ENDFORM. " F4_CODRECEITA
Não esquecer de colocar o flag no campo que vai ter o F4 no fieldcat.
WHEN 'ORIGTP'.
<lfsw_fcat>-edit = 'X'.
<lfsw_fcat>-f4availabl = 'X'.
e tem q registrar o evento no objeto ALV.
DATA: lt_f4 TYPE lvc_t_f4.
DATA: lw_f4 TYPE lvc_s_f4.
CLEAR lw_f4.
lw_f4-fieldname = 'ORIGTP'.
lw_f4-register = 'X'.
APPEND lw_f4 TO lt_f4.
CALL METHOD gcl_alv->register_f4_for_fields
EXPORTING
it_f4 = lt_f4.
No meu caso coloquei o código acima antes do método SET_TABLE_FOR_FIRST_DISPLAY.
Abaixo restante do código.
=========================================================
Criação do evento.
CLASS gcl_alv_event DEFINITION.
on_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
=========================================================
*Implementação da classe.
CLASS gcl_alv_event IMPLEMENTATION.
METHOD on_f4.
PERFORM on_f4 USING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "on_f4
ENDCLASS.
==================================================
"Implementaçao da rotina..
" As linhas em vermelho são obrigatórias pois elas modificam o valor em tela logo após a seleção do valor da lista.. e o m_event_handler evita um erro que dá no retorno a tela.
FORM on_f4 USING f_fieldname TYPE lvc_fname
f_fieldvalue TYPE lvc_value
fw_row_no TYPE lvc_s_roid
fcl_event_data TYPE REF TO cl_alv_event_data
ft_bad_cells TYPE lvc_t_modi
f_display TYPE char01.
DATA: lw_alv TYPE ze_gnre_rel_lote,
lw_modi TYPE lvc_s_modi.
DATA: l_origtp TYPE zgnre_origtp.
FIELD-SYMBOLS: <lfst_modi> TYPE lvc_t_modi.
ASSIGN fcl_event_data->m_data->* TO <lfst_modi>.
CHECK sy-subrc = 0.
READ TABLE gt_alv INTO lw_alv INDEX fw_row_no-row_id.
CHECK sy-subrc = 0.
CASE f_fieldname.
WHEN 'ORIGTP'.
IF lw_alv-gnreid IS INITIAL.
PERFORM f4_codreceita USING lw_alv-regio
CHANGING l_origtp.
f_fieldvalue = l_origtp.
CLEAR lw_modi.
lw_modi-row_id = fw_row_no-row_id.
lw_modi-fieldname = f_fieldname.
lw_modi-value = f_fieldvalue.
APPEND lw_modi TO <lfst_modi>.
ENDIF.
fcl_event_data->m_event_handled = 'X'.
ENDCASE.
ENDFORM. " ON_F4
*&---------------------------------------------------------------------*
*& Form F4_CODRECEITA
*&---------------------------------------------------------------------*
FORM f4_codreceita USING f_regio TYPE regio
CHANGING f_origtp TYPE zgnre_origtp.
DATA: lt_rettab TYPE TABLE OF ddshretval,
lt_c023 TYPE TABLE OF zc023.
DATA: lw_rettab TYPE ddshretval.
SELECT *
INTO TABLE lt_c023
FROM zc023
WHERE regio EQ f_regio.
CHECK sy-subrc = 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
ddic_structure = 'ZC023'
retfield = 'ORIGTP'
value_org = 'S'
TABLES
value_tab = lt_c023
return_tab = lt_rettab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
CHECK sy-subrc = 0.
READ TABLE lt_rettab INTO lw_rettab INDEX 1.
CHECK sy-subrc = 0.
f_origtp = lw_rettab-fieldval.
ENDFORM. " F4_CODRECEITA
quinta-feira, 22 de maio de 2014
Geração de arquivo XML
Essa é para ficar no meu histórico.
DATA: lcl_xml TYPE REF TO cl_xml_document.
CREATE OBJECT lcl_xml.
CALL METHOD lcl_xml->create_empty_document
RECEIVING
retcode = l_subrc.
IF l_subrc <> 0.
RAISE erro_xml.
ENDIF.
CALL METHOD lcl_xml->set_encoding
EXPORTING
charset = 'UTF-8'.
CALL METHOD lcl_xml->m_document->set_standalone
EXPORTING
standalone = l_boolean.
CALL METHOD lcl_xml->m_document->create_element
EXPORTING
name = 'TLote_GNRE'
RECEIVING
rval = lcl_lotes_element.
"Atributos ---------------------------------------------------
"xmlns
CALL METHOD lcl_lotes_element->set_attribute
EXPORTING
name = 'xmlns'
value = 'http://www.gnre.pe.gov.br'
RECEIVING
rval = l_rval.
CALL METHOD lcl_xml->m_document->create_element
EXPORTING
name = 'guias'
RECEIVING
rval = lcl_guias_element.
LOOP AT it_gnre INTO lw_gnre.
PERFORM f_xml_lote USING lw_gnre
lcl_lotes_element
lcl_guias_element
CHANGING lcl_xml.
ENDLOOP.
CALL METHOD lcl_lotes_element->append_child
EXPORTING
new_child = lcl_guias_element
RECEIVING
rval = l_rval.
CALL METHOD lcl_xml->m_document->append_child
EXPORTING
new_child = lcl_lotes_element
RECEIVING
rval = l_rval.
IF i_display = '1'.
CALL METHOD lcl_xml->display.
ENDIF.
lcl_xml->export_to_file( filename = l_full_path ).
=========================== CÓDIGO DO PERFORM
FORM f_xml_lote USING fw_gnre TYPE ztgnre
fcl_lote TYPE REF TO if_ixml_element
fcl_guias TYPE REF TO if_ixml_element
CHANGING fcl_xml TYPE REF TO cl_xml_document.
DATA: lcl_dados_e TYPE REF TO if_ixml_element,
lcl_emi_e TYPE REF TO if_ixml_element,
lcl_des_e TYPE REF TO if_ixml_element,
lcl_aux TYPE REF TO if_ixml_element.
DATA: lw_nfdoc TYPE ztnfdoc,
lw_sadr TYPE sadr,
lw_parnad TYPE j_1binnad.
DATA: l_cgc TYPE c LENGTH 20,
l_nome TYPE zze_nome_emp70.
DATA: l_rval TYPE i,
l_insc TYPE char20,
l_stains TYPE j_1bstains,
l_value TYPE string,
l_descr TYPE sf_descr50.
DEFINE lm_set_att.
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = &2
RECEIVING
rval = lcl_aux.
call method lcl_aux->set_value
exporting
value = &3
receiving
rval = &4.
CALL METHOD &1->append_child
EXPORTING
new_child = lcl_aux
RECEIVING
rval = l_rval.
END-OF-DEFINITION.
SELECT SINGLE *
INTO lw_nfdoc
FROM j_1bnfdoc
WHERE docnum EQ fw_gnre-docnum.
CHECK sy-subrc = 0.
"Dados do favorecido
CALL FUNCTION 'ZGET_BRANCH_NAME'
EXPORTING
i_bukrs = lw_nfdoc-bukrs
i_branch = lw_nfdoc-branch
IMPORTING
e_nome = l_nome
e_cgc = l_cgc
e_address = lw_sadr
e_insc_estadual = l_stains.
"Dados do cliente
CALL FUNCTION 'ZNF_PARTNER_READ'
EXPORTING
partner_type = lw_nfdoc-partyp
partner_id = lw_nfdoc-parid
IMPORTING
parnad = lw_parnad
EXCEPTIONS
partner_not_found = 1
partner_type_not_found = 2
OTHERS = 3.
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = 'TDadosGNRE'
RECEIVING
rval = lcl_dados_e.
l_value = lw_parnad-regio.
lm_set_att lcl_dados_e 'c01_UfFavorecida' l_value l_rval.
l_value = fw_gnre-origtp.
lm_set_att lcl_dados_e 'c02_receita' l_value l_rval.
SELECT SINGLE descr
INTO l_descr
FROM z023t
WHERE spras EQ sy-langu
AND regio EQ lw_parnad-regio
AND origtp EQ fw_gnre-origtp.
l_value = l_descr.
lm_set_att lcl_dados_e 'c25_detalhamentoReceita' l_value l_rval.
l_value = fw_gnre-codproduto.
lm_set_att lcl_dados_e 'c26_produto' l_value l_rval.
l_value = '1'.
lm_set_att lcl_dados_e 'c27_tipoIdentificacaoEmitente' l_value l_rval.
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = 'c03_idContribuinteEmitente'
RECEIVING
rval = lcl_emi_e.
l_value = space.
lm_set_att lcl_emi_e 'CPF' l_value l_rval.
l_value = l_cgc.
lm_set_att lcl_emi_e 'CNPJ' l_value l_rval.
CALL METHOD lcl_dados_e->append_child
EXPORTING
new_child = lcl_emi_e
RECEIVING
rval = l_rval.
l_value = '10'. "Nota Fiscal
lm_set_att lcl_dados_e 'c28_tipoDocOrigem' l_value l_rval.
IF lw_nfdoc-nfe = 'X'.
l_value = lw_nfdoc-nfenum.
ELSE.
l_value = lw_nfdoc-nfnum.
ENDIF.
lm_set_att lcl_dados_e 'c04_docOrigem' l_value l_rval. "NF
l_value = fw_gnre-vlr_princ.
lm_set_att lcl_dados_e 'c06_valorPrincipal' l_value l_rval.
l_value = fw_gnre-vlr_princ + fw_gnre-vlr_atua +
fw_gnre-vlr_multa + fw_gnre-vlr_juros.
lm_set_att lcl_dados_e 'c10_valorTotal' l_value l_rval.
l_value = fw_gnre-vencimento.
lm_set_att lcl_dados_e 'c14_dataVencimento' l_value l_rval.
l_value = space.
lm_set_att lcl_dados_e 'c15_convenio' l_value l_rval.
l_value = l_nome.
lm_set_att lcl_dados_e 'c16_razaoSocialEmitente' l_value l_rval.
CALL FUNCTION 'ZGFGNRE_INSC_ESTAD'
EXPORTING
i_bukrs = fw_gnre-bukrs
i_branch = fw_gnre-branch
i_regio = fw_gnre-regio
CHANGING
c_inscr_estadual = l_insc.
l_value = l_insc.
lm_set_att lcl_dados_e 'c17_inscricaoEstadualEmitente' l_value l_rval.
l_value = lw_sadr-stras.
lm_set_att lcl_dados_e 'c18_enderecoEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-ort01.
lm_set_att lcl_dados_e 'c19_municipioEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-regio.
lm_set_att lcl_dados_e 'c20_ufEnderecoEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-pstlz.
lm_set_att lcl_dados_e 'c21_cepEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-telf1.
lm_set_att lcl_dados_e 'c22_telefoneEmitente' l_value l_rval. "Local de negócio
IF lw_parnad-cgc IS NOT INITIAL.
l_value = '1'.
ELSE.
l_value = '2'.
ENDIF.
lm_set_att lcl_dados_e 'c34_tipoIdentificacaoDestinatario' l_value l_rval. "1 ou 2
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = 'c35_idContribuinteDestinatario'
RECEIVING
rval = lcl_des_e.
l_value = lw_parnad-cpf.
lm_set_att lcl_des_e 'CPF' l_value l_rval.
l_value = lw_parnad-cgc.
lm_set_att lcl_des_e 'CNPJ' l_value l_rval.
CALL METHOD lcl_dados_e->append_child
EXPORTING
new_child = lcl_des_e
RECEIVING
rval = l_rval.
l_value = lw_parnad-stains.
lm_set_att lcl_dados_e 'c36_inscricaoEstadualDestinatario' l_value l_rval.
l_value = lw_parnad-name1.
lm_set_att lcl_dados_e 'c37_razaoSocialDestinatario' l_value l_rval.
l_value = lw_parnad-ort01.
lm_set_att lcl_dados_e 'c38_municipioDestinatario' l_value l_rval.
l_value = fw_gnre-vencimento.
lm_set_att lcl_dados_e 'c33_dataPagamento' l_value l_rval.
CALL METHOD fcl_guias->append_child
EXPORTING
new_child = lcl_dados_e
RECEIVING
rval = l_rval.
CALL METHOD fcl_lote->append_child
EXPORTING
new_child = fcl_guias
RECEIVING
rval = l_rval.
ENDFORM. " F_XML_LOTE
+++++++++++++++++++++++++++++++++++++++++++=
saída do arquivo
+++++++++++++++++++++++++++++++++++++++++++=
DATA: lcl_xml TYPE REF TO cl_xml_document.
CREATE OBJECT lcl_xml.
CALL METHOD lcl_xml->create_empty_document
RECEIVING
retcode = l_subrc.
IF l_subrc <> 0.
RAISE erro_xml.
ENDIF.
CALL METHOD lcl_xml->set_encoding
EXPORTING
charset = 'UTF-8'.
CALL METHOD lcl_xml->m_document->set_standalone
EXPORTING
standalone = l_boolean.
CALL METHOD lcl_xml->m_document->create_element
EXPORTING
name = 'TLote_GNRE'
RECEIVING
rval = lcl_lotes_element.
"Atributos ---------------------------------------------------
"xmlns
CALL METHOD lcl_lotes_element->set_attribute
EXPORTING
name = 'xmlns'
value = 'http://www.gnre.pe.gov.br'
RECEIVING
rval = l_rval.
CALL METHOD lcl_xml->m_document->create_element
EXPORTING
name = 'guias'
RECEIVING
rval = lcl_guias_element.
LOOP AT it_gnre INTO lw_gnre.
PERFORM f_xml_lote USING lw_gnre
lcl_lotes_element
lcl_guias_element
CHANGING lcl_xml.
ENDLOOP.
CALL METHOD lcl_lotes_element->append_child
EXPORTING
new_child = lcl_guias_element
RECEIVING
rval = l_rval.
CALL METHOD lcl_xml->m_document->append_child
EXPORTING
new_child = lcl_lotes_element
RECEIVING
rval = l_rval.
IF i_display = '1'.
CALL METHOD lcl_xml->display.
ENDIF.
lcl_xml->export_to_file( filename = l_full_path ).
=========================== CÓDIGO DO PERFORM
FORM f_xml_lote USING fw_gnre TYPE ztgnre
fcl_lote TYPE REF TO if_ixml_element
fcl_guias TYPE REF TO if_ixml_element
CHANGING fcl_xml TYPE REF TO cl_xml_document.
DATA: lcl_dados_e TYPE REF TO if_ixml_element,
lcl_emi_e TYPE REF TO if_ixml_element,
lcl_des_e TYPE REF TO if_ixml_element,
lcl_aux TYPE REF TO if_ixml_element.
DATA: lw_nfdoc TYPE ztnfdoc,
lw_sadr TYPE sadr,
lw_parnad TYPE j_1binnad.
DATA: l_cgc TYPE c LENGTH 20,
l_nome TYPE zze_nome_emp70.
DATA: l_rval TYPE i,
l_insc TYPE char20,
l_stains TYPE j_1bstains,
l_value TYPE string,
l_descr TYPE sf_descr50.
DEFINE lm_set_att.
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = &2
RECEIVING
rval = lcl_aux.
call method lcl_aux->set_value
exporting
value = &3
receiving
rval = &4.
CALL METHOD &1->append_child
EXPORTING
new_child = lcl_aux
RECEIVING
rval = l_rval.
END-OF-DEFINITION.
SELECT SINGLE *
INTO lw_nfdoc
FROM j_1bnfdoc
WHERE docnum EQ fw_gnre-docnum.
CHECK sy-subrc = 0.
"Dados do favorecido
CALL FUNCTION 'ZGET_BRANCH_NAME'
EXPORTING
i_bukrs = lw_nfdoc-bukrs
i_branch = lw_nfdoc-branch
IMPORTING
e_nome = l_nome
e_cgc = l_cgc
e_address = lw_sadr
e_insc_estadual = l_stains.
"Dados do cliente
CALL FUNCTION 'ZNF_PARTNER_READ'
EXPORTING
partner_type = lw_nfdoc-partyp
partner_id = lw_nfdoc-parid
IMPORTING
parnad = lw_parnad
EXCEPTIONS
partner_not_found = 1
partner_type_not_found = 2
OTHERS = 3.
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = 'TDadosGNRE'
RECEIVING
rval = lcl_dados_e.
l_value = lw_parnad-regio.
lm_set_att lcl_dados_e 'c01_UfFavorecida' l_value l_rval.
l_value = fw_gnre-origtp.
lm_set_att lcl_dados_e 'c02_receita' l_value l_rval.
SELECT SINGLE descr
INTO l_descr
FROM z023t
WHERE spras EQ sy-langu
AND regio EQ lw_parnad-regio
AND origtp EQ fw_gnre-origtp.
l_value = l_descr.
lm_set_att lcl_dados_e 'c25_detalhamentoReceita' l_value l_rval.
l_value = fw_gnre-codproduto.
lm_set_att lcl_dados_e 'c26_produto' l_value l_rval.
l_value = '1'.
lm_set_att lcl_dados_e 'c27_tipoIdentificacaoEmitente' l_value l_rval.
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = 'c03_idContribuinteEmitente'
RECEIVING
rval = lcl_emi_e.
l_value = space.
lm_set_att lcl_emi_e 'CPF' l_value l_rval.
l_value = l_cgc.
lm_set_att lcl_emi_e 'CNPJ' l_value l_rval.
CALL METHOD lcl_dados_e->append_child
EXPORTING
new_child = lcl_emi_e
RECEIVING
rval = l_rval.
l_value = '10'. "Nota Fiscal
lm_set_att lcl_dados_e 'c28_tipoDocOrigem' l_value l_rval.
IF lw_nfdoc-nfe = 'X'.
l_value = lw_nfdoc-nfenum.
ELSE.
l_value = lw_nfdoc-nfnum.
ENDIF.
lm_set_att lcl_dados_e 'c04_docOrigem' l_value l_rval. "NF
l_value = fw_gnre-vlr_princ.
lm_set_att lcl_dados_e 'c06_valorPrincipal' l_value l_rval.
l_value = fw_gnre-vlr_princ + fw_gnre-vlr_atua +
fw_gnre-vlr_multa + fw_gnre-vlr_juros.
lm_set_att lcl_dados_e 'c10_valorTotal' l_value l_rval.
l_value = fw_gnre-vencimento.
lm_set_att lcl_dados_e 'c14_dataVencimento' l_value l_rval.
l_value = space.
lm_set_att lcl_dados_e 'c15_convenio' l_value l_rval.
l_value = l_nome.
lm_set_att lcl_dados_e 'c16_razaoSocialEmitente' l_value l_rval.
CALL FUNCTION 'ZGFGNRE_INSC_ESTAD'
EXPORTING
i_bukrs = fw_gnre-bukrs
i_branch = fw_gnre-branch
i_regio = fw_gnre-regio
CHANGING
c_inscr_estadual = l_insc.
l_value = l_insc.
lm_set_att lcl_dados_e 'c17_inscricaoEstadualEmitente' l_value l_rval.
l_value = lw_sadr-stras.
lm_set_att lcl_dados_e 'c18_enderecoEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-ort01.
lm_set_att lcl_dados_e 'c19_municipioEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-regio.
lm_set_att lcl_dados_e 'c20_ufEnderecoEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-pstlz.
lm_set_att lcl_dados_e 'c21_cepEmitente' l_value l_rval. "Local de negócio
l_value = lw_sadr-telf1.
lm_set_att lcl_dados_e 'c22_telefoneEmitente' l_value l_rval. "Local de negócio
IF lw_parnad-cgc IS NOT INITIAL.
l_value = '1'.
ELSE.
l_value = '2'.
ENDIF.
lm_set_att lcl_dados_e 'c34_tipoIdentificacaoDestinatario' l_value l_rval. "1 ou 2
CALL METHOD fcl_xml->m_document->create_element
EXPORTING
name = 'c35_idContribuinteDestinatario'
RECEIVING
rval = lcl_des_e.
l_value = lw_parnad-cpf.
lm_set_att lcl_des_e 'CPF' l_value l_rval.
l_value = lw_parnad-cgc.
lm_set_att lcl_des_e 'CNPJ' l_value l_rval.
CALL METHOD lcl_dados_e->append_child
EXPORTING
new_child = lcl_des_e
RECEIVING
rval = l_rval.
l_value = lw_parnad-stains.
lm_set_att lcl_dados_e 'c36_inscricaoEstadualDestinatario' l_value l_rval.
l_value = lw_parnad-name1.
lm_set_att lcl_dados_e 'c37_razaoSocialDestinatario' l_value l_rval.
l_value = lw_parnad-ort01.
lm_set_att lcl_dados_e 'c38_municipioDestinatario' l_value l_rval.
l_value = fw_gnre-vencimento.
lm_set_att lcl_dados_e 'c33_dataPagamento' l_value l_rval.
CALL METHOD fcl_guias->append_child
EXPORTING
new_child = lcl_dados_e
RECEIVING
rval = l_rval.
CALL METHOD fcl_lote->append_child
EXPORTING
new_child = fcl_guias
RECEIVING
rval = l_rval.
ENDFORM. " F_XML_LOTE
+++++++++++++++++++++++++++++++++++++++++++=
saída do arquivo
+++++++++++++++++++++++++++++++++++++++++++=
<?xml
version="1.0" encoding="utf-8" standalone="yes" ?>
<c01_UfFavorecida>PR</c01_UfFavorecida>
<c02_receita>1210</c02_receita>
<c25_detalhamentoReceita>Recolhimento Antecipado - Entradas do
Exterior.</c25_detalhamentoReceita>
<c26_produto />
<c27_tipoIdentificacaoEmitente>1</c27_tipoIdentificacaoEmitente>
<CPF />
<CNPJ>74.544.297/0001-92</CNPJ>
</c03_idContribuinteEmitente>
<c28_tipoDocOrigem>10</c28_tipoDocOrigem>
<c04_docOrigem>000000046</c04_docOrigem>
<c06_valorPrincipal>213.50</c06_valorPrincipal>
<c10_valorTotal>213.50</c10_valorTotal>
<c14_dataVencimento>20100731</c14_dataVencimento>
<c15_convenio />
<c16_razaoSocialEmitente>FH Consultoria Empresarial Ltda</c16_razaoSocialEmitente>
<c17_inscricaoEstadualEmitente>1017622974</c17_inscricaoEstadualEmitente>
<c18_enderecoEmitente>Rua Visconde de Nac 1440, 13º
andar</c18_enderecoEmitente>
<c19_municipioEmitente>Curitiba</c19_municipioEmitente>
<c20_ufEnderecoEmitente>PR</c20_ufEnderecoEmitente>
<c21_cepEmitente>80410-201</c21_cepEmitente>
<c22_telefoneEmitente>(41) 3593-3223</c22_telefoneEmitente>
<c34_tipoIdentificacaoDestinatario>1</c34_tipoIdentificacaoDestinatario>
<CPF>00000000000</CPF>
<CNPJ>61194080000158</CNPJ>
</c35_idContribuinteDestinatario>
<c36_inscricaoEstadualDestinatario />
<c37_razaoSocialDestinatario>Fornecedor nacional Paraná</c37_razaoSocialDestinatario>
<c38_municipioDestinatario>Curitiba</c38_municipioDestinatario>
<c33_dataPagamento>20100731</c33_dataPagamento>
</TDadosGNRE>
</guias>
</TLote_GNRE>
Assinar:
Postagens (Atom)