Módulo: DRAWBACK
Funcionalidade: CE Reports Formulários
Data/Hora da Publicação: 02/04/2007 00:00:00
Data/Hora Última Alteração: 01/03/2010 16:48:11
Descrição da Nota: DESENVOLVIMENTO DOS ANEXOS AO PEDIDO DE DRAWBACK "EXCEL"
Sintoma
Desenvolvimento dos anexos ao pedido de drawback "excel"
Solução
Desenvolvimento dos anexos ao pedido de drawback "excel"
6.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 03375 Data: 02/04/2007 Hora: 16:28:07
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 03375
Categoria : Melhoria
Prioridade : Baixa
Versão PW.CE : 6.0
Pacote : 00026
Agrupamento : 00156
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
DESENVOLVIMENTO DOS ANEXOS AO PEDIDO DE DRAWBACK "EXCEL"
----------------------------------------------------------------------------------------------------
Palavras Chave:
ANEXO - PEDIDO - DRAWBACK - EXCEL - /PWS/ZYCRR004
/PWS/ZYCRR005
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCRR004
REPS /PWS/ZYCRR005
TRAN /PWS/ZYCRR004
TRAN /PWS/ZYCRR005
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCRR004
***Programa novo
*Codigo fonte:
* --------------------------------------------------------------------
* PROCWORK Software
* Produto : pw.CE
* Módulo : CR - pw.CE Reports
* Descrição: Report gerador de ACE59
* Help Desk: (11) 5504-0270
* --------------------------------------------------------------------
* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 360378 13/02/07 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycrr004 MESSAGE-ID /pws/zycrm.
* INCLUDES ------------------------------------------------------------*
INCLUDE: /pws/zycri004, " Up/download de arquivos xls
/pws/zycri003, " Interface com o Excel
/pws/zycri002. " Rotinas comuns
*tables
TABLES: tcurx.
* TIPOS ---------------------------------------------------------------*
* Tipo da estrutura do cabeçalho
TYPES: BEGIN OF s_cabecalho.
TYPES: empresa TYPE t001-bukrs,
desc_emp TYPE t001-butxt,
local_neg TYPE t001w-j_1bbranch,
ender TYPE t001w-stras,
cgc(19) TYPE c ,
anexo TYPE /pws/zycit474-anexo,
qtd_tot TYPE /pws/zycit245-qtd_tot,
peso_tot TYPE /pws/zycit245-ntgew,
vltot TYPE /pws/zycit245-netpr_t,
moeda TYPE /pws/zycit245-waers,
gewei TYPE /pws/zycit245-gewei,
um_ncm TYPE /pws/zycit245-um_ncm.
INCLUDE TYPE /pws/zycit244 AS zycit244.
TYPES: END OF s_cabecalho.
* Tipo da estrutura e tabela dos itens
TYPES: BEGIN OF s_itens.
INCLUDE STRUCTURE /pws/zycit245.
TYPES: valor(30) TYPE c,
qtd(30) TYPE c,
END OF s_itens,
t_itens TYPE STANDARD TABLE OF s_itens.
* VARIÁVEIS -----------------------------------------------------------*
* Cabeçalho e itens
DATA: wa_cabecalho TYPE s_cabecalho,
v_filename(20) TYPE c,
it_itens TYPE t_itens.
* Parâmetros de geração de reports
DATA: wa_gen_param TYPE /pws/zycrt012,
wa_rep_param TYPE /pws/zycrt013,
it_matrix TYPE t_matrix,
it_report_fields TYPE t_rep_fields,
p_repmod TYPE /pws/zycrt010-report_module VALUE 'D' ,
p_report TYPE /pws/zycrt010-report_id VALUE 'ANEXOD_I'.
* Dados para o arquivo do excel
DATA: it_excel_content TYPE t_excel_content,
it_sect_height TYPE t_sect_height.
DATA: it_generation_options TYPE t_generation_options.
* TELA DE SELEÇÃO -----------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.
PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd OBLIGATORY
MODIF ID key.
SELECTION-SCREEN END OF BLOCK b1.
* PBO DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
* Seleção e preparação de dados do cabeçalho e itens
PERFORM select_data
USING
p_nrseqd
CHANGING
wa_cabecalho
it_itens.
IF wa_cabecalho IS INITIAL.
MESSAGE e015(/pws/zycim) WITH text-003.
ENDIF.
* Seleção de parâmetros para geração do report
PERFORM select_parameters
USING
p_repmod
p_report
sy-langu
wa_cabecalho-zycit244-bukrs
''
''
''
''
''
''
''
''
''
''
CHANGING
wa_gen_param
wa_rep_param
it_matrix[]
it_report_fields[].
IF wa_gen_param IS INITIAL
OR wa_rep_param IS INITIAL
OR it_matrix[] IS INITIAL.
msg_module = p_repmod.
msg_report = p_report.
msg_langu = sy-langu.
msg_bukrs = wa_cabecalho-bukrs.
MESSAGE e000.
ENDIF.
* Criação das tabelas de dados para o report
PERFORM create_excel_content_table
USING
it_itens[]
wa_rep_param
it_matrix[]
it_report_fields[]
CHANGING
wa_cabecalho
it_excel_content[]
it_sect_height[].
* Determinação do nome do arquivo do report
CLEAR: v_filename.
CONCATENATE 'ANEXOI' wa_cabecalho-zycit244-nrseqd INTO v_filename.
PERFORM generate_file_name
USING
v_filename
wa_gen_param
wa_rep_param
CHANGING
v_file_name.
* Baixa o report em branco na máquina do frontend
PERFORM download_file
USING
wa_rep_param
v_file_name.
* Cria o report
PERFORM create_report
USING
wa_gen_param-report_generator
v_file_name
'REPORT'
''
it_excel_content[]
it_sect_height[]
it_generation_options[].
LEAVE PROGRAM.
END-OF-SELECTION.
* --------------------------------------------------------------------
* Form select_data
* --------------------------------------------------------------------
* Objetivo: Selecionar os dados do report: cabeçalho, itens,
* sub_itens, etc.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Seqüencial do embarque
* <-- p_cabecalho Dados do cabeçalho do report
* p_t_itens Dados de itens do report
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 360378 13/02/2007 Codificação inicial
* --------------------------------------------------------------------
FORM select_data
USING
p_nrseqd TYPE /pws/zycit244-nrseqd
CHANGING
p_cabecalho TYPE s_cabecalho
p_t_itens TYPE t_itens.
DATA: wa_itens LIKE LINE OF p_t_itens,
itab_makt TYPE makt OCCURS 0 WITH HEADER LINE,
itab_604n TYPE t604n OCCURS 0 WITH HEADER LINE.
SELECT SINGLE *
INTO p_cabecalho-zycit244
FROM /pws/zycit244
WHERE nrseqd = p_nrseqd.
CHECK sy-subrc = 0.
SELECT SINGLE bukrs butxt
INTO (p_cabecalho-empresa, p_cabecalho-desc_emp)
FROM t001
WHERE bukrs = p_cabecalho-zycit244-bukrs.
SELECT SINGLE j_1bbranch stras
FROM t001w
INTO (p_cabecalho-local_neg, p_cabecalho-ender)
WHERE werks = p_cabecalho-zycit244-werks.
CALL FUNCTION 'J_1BREAD_BRANCH_DATA'
EXPORTING
branch = p_cabecalho-local_neg
bukrs = p_cabecalho-empresa
IMPORTING
cgc_number = p_cabecalho-zycit244-cnpj.
WRITE p_cabecalho-zycit244-cnpj TO p_cabecalho-cgc
USING EDIT MASK '__.___.___/____-__'.
SELECT *
FROM /pws/zycit245
INTO TABLE p_t_itens
WHERE nrseqd EQ p_nrseqd.
LOOP AT p_t_itens INTO wa_itens.
WRITE wa_itens-netpr_t TO wa_itens-valor
CURRENCY wa_itens-waers.
SHIFT wa_itens-valor BY 3 PLACES.
CONCATENATE wa_itens-waers wa_itens-valor INTO wa_itens-valor.
WRITE wa_itens-qtd_ncm TO wa_itens-qtd
UNIT wa_itens-um_ncm.
SHIFT wa_itens-qtd BY 3 PLACES.
CONCATENATE wa_itens-um_ncm wa_itens-qtd INTO wa_itens-qtd.
wa_itens-ntgew = wa_itens-ntgew * wa_itens-qtd_tot.
TRANSLATE wa_itens-j_1bnbm USING '. '.
CONDENSE wa_itens-j_1bnbm NO-GAPS.
MODIFY p_t_itens FROM wa_itens.
ENDLOOP.
SORT p_t_itens BY j_1bnbm nritem.
ENDFORM. " select_data
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 316455 13/11/2006 Codificação inicial
* --------------------------------------------------------------------
FORM create_excel_content_table
USING
p_t_items TYPE table
p_rep_param TYPE /pws/zycrt013
p_t_matrix TYPE t_matrix
p_t_report_fields TYPE t_rep_fields
CHANGING
p_header TYPE s_cabecalho
p_t_excel_content TYPE t_excel_content
p_t_sect_height TYPE t_sect_height.
DATA: current_row TYPE i VALUE 1,
section_rows TYPE i.
DATA: itab_exel_temp TYPE t_excel_content,
wa_exel_temp LIKE LINE OF itab_exel_temp[].
.
DATA: current_item TYPE i VALUE 1,
v_vltot TYPE /pws/zycit247-netpr_t,
v_linha TYPE i,
v_lines TYPE i.
DATA: filled_section_height TYPE f.
DATA: subrc TYPE sy-subrc.
DATA: it_section_content LIKE p_t_excel_content[].
DATA: v_linhacab TYPE i, "Linhas do cabeçalho
v_linhaite TYPE i, "Linhas dos itens
v_linhasub TYPE i, "Linhas do sub_itens
v_linhasub2 TYPE i, "Linhas do sub_itens2
v_completo TYPE c. "completou o preenchimento.
*Work area de itens
DATA: wa_itens TYPE s_itens,
itab_zycit474 TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE.
PERFORM select_row_height_cache
USING
p_rep_param-spras
p_rep_param-file_id
CHANGING
p_t_sect_height[].
PERFORM get_section_rows
USING
'CAB'
p_t_sect_height[]
CHANGING
v_linhacab.
PERFORM get_section_rows
USING
'ITENS'
p_t_sect_height[]
CHANGING
v_linhaite.
PERFORM get_section_rows
USING
'RODA1'
p_t_sect_height[]
CHANGING
v_linhasub.
PERFORM get_section_rows
USING
'RODA2'
p_t_sect_height[]
CHANGING
v_linhasub2.
DESCRIBE TABLE p_t_items LINES v_lines.
CLEAR: current_item, v_completo.
WHILE v_completo NE 'X'.
CLEAR: v_completo.
ADD 1 TO p_header-anexo.
PERFORM append_new_section
USING
'CAB'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
p_header
'CAB'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhacab TO current_row.
PERFORM append_new_section
USING
'ITENS'
current_row
CHANGING
p_t_excel_content[].
section_rows = current_row.
CLEAR: v_linha, p_header-qtd_tot,
p_header-peso_tot, p_header-vltot.
DO.
REFRESH it_section_content[].
CLEAR wa_itens.
ADD 1 TO current_item.
READ TABLE p_t_items INTO wa_itens INDEX current_item.
IF sy-subrc NE 0.
v_completo = 'X'.
EXIT.
ENDIF.
* Preenche campos de item
PERFORM fill_items_fields
USING
p_t_items[]
'ITENS'
current_row
p_t_matrix[]
p_t_report_fields[]
p_t_sect_height[]
current_item
CHANGING
filled_section_height
p_t_excel_content[]
subrc.
ADD 1 TO current_row.
ADD 1 TO v_linha.
itab_zycit474-anexo = p_header-anexo .
itab_zycit474-nrseqd = wa_itens-nrseqd.
itab_zycit474-nritem = wa_itens-nritem.
itab_zycit474-tipo = 'I'.
itab_zycit474-pasta = 'I'.
p_header-zycit244-waers = itab_zycit474-waers = wa_itens-waers.
itab_zycit474-ncm = wa_itens-j_1bnbm.
itab_zycit474-linha = v_linha.
p_header-um_ncm = itab_zycit474-meins = wa_itens-um_ncm.
itab_zycit474-qtd = wa_itens-qtd_ncm.
p_header-gewei = itab_zycit474-gewei = wa_itens-gewei.
itab_zycit474-ntgew = wa_itens-ntgew.
itab_zycit474-netpr_t = wa_itens-netpr_t.
itab_zycit474-matnr = wa_itens-codcomp.
itab_zycit474-grupo = wa_itens-grupo.
APPEND itab_zycit474.
ADD wa_itens-qtd_ncm TO p_header-qtd_tot.
ADD wa_itens-ntgew TO p_header-peso_tot.
PERFORM retorna_decimais USING wa_itens-waers
CHANGING wa_itens-netpr_t.
PERFORM converter_moeda USING wa_itens-netpr_t
wa_itens-waers
'USD'
sy-datlo
CHANGING v_vltot.
ADD v_vltot TO p_header-vltot.
IF v_linha = 20.
IF v_lines = current_item.
v_completo = 'X'.
ENDIF.
EXIT.
ENDIF.
ENDDO.
current_row = section_rows + v_linhaite.
PERFORM append_new_section
USING
'RODA1'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
p_header
'RODA1'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
current_row = current_row + v_linhasub.
PERFORM add_page_break
USING
current_row
CHANGING
p_t_excel_content[].
ENDWHILE.
itab_exel_temp[] = p_t_excel_content[].
SUBTRACT 1 FROM current_row.
section_rows = current_row.
DO 4 TIMES.
LOOP AT itab_exel_temp INTO wa_exel_temp.
ADD current_row TO wa_exel_temp-row.
IF wa_exel_temp-sheet EQ 'RODA1'.
wa_exel_temp-sheet = 'RODA2'.
ENDIF.
APPEND wa_exel_temp TO p_t_excel_content.
ENDLOOP.
ADD section_rows TO current_row.
ENDDO.
* Grava histórico dos anexos para uso posterior.
DELETE FROM /pws/zycit474 WHERE nrseqd EQ p_nrseqd
AND pasta EQ 'I'.
INSERT /pws/zycit474 FROM TABLE itab_zycit474.
ENDFORM. " create_excel_content_table
*&---------------------------------------------------------------------*
*& Form Converter_Moeda
*&---------------------------------------------------------------------*
* -->p_devlme "montante a ser convertido
* -->p_deme "Moeda original
* -->p_parame "Moeda destino
* -->p_data "Data para busca da taxa de cambio
* <->p_paravlme "Valor convertido
*----------------------------------------------------------------------
*
FORM converter_moeda USING p_devlme
p_deme
p_parame
p_data
CHANGING p_paravlme.
DATA: v_ctmoeda LIKE tcurr-kurst VALUE 'G',
v_devlme LIKE bsak-wrbtr,
v_paravlme LIKE bsak-wrbtr.
v_devlme = p_devlme .
IF p_devlme NE 0.
CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'
EXPORTING
i_montante = v_devlme
i_demoeda = p_deme
i_paramoeda = p_parame
i_ctmoeda = v_ctmoeda
i_dtbase = p_data
IMPORTING
e_montante = v_paravlme
EXCEPTIONS
i_demoeda_nao_encontrado = 1
i_paramoeda_nao_encontrado = 2
fator_nao_encontrado = 3
i_ctmoeda_nao_encontrado = 4
i_dtbase_nao_encontrada = 5
taxa_nao_encontrada = 6
i_montante_nao_encontrado = 7.
p_paravlme = v_paravlme.
ENDIF.
ENDFORM. " CONVERTER_MOEDA
*&---------------------------------------------------------------------*
*& Form retorna_decimais
*&---------------------------------------------------------------------*
* tratamento para casas decimais utilizadas por moeda
*----------------------------------------------------------------------*
* -->p_moeda Moeda
* <--p_valor Valor a ser ajustado.
*----------------------------------------------------------------------*
FORM retorna_decimais USING p_moeda
CHANGING p_valor.
IF tcurx-currkey <> p_moeda.
SELECT SINGLE * FROM tcurx WHERE currkey = p_moeda.
ENDIF.
IF sy-subrc <> 0.
tcurx-currdec = 2.
ENDIF.
p_valor = p_valor * ( 10 ** ( tcurx-currdec - 2 ) ).
ENDFORM. " retorna_decimais
****************************************************************************************************
**Elementos de texto:
*Simbolo Texto
003 Ato Concessório não exite!
**Textos de Seleção:
P_NRSEQD Nº Seq. Ato Concessório
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCRR005
***Programa novo
*Codigo fonte:
* --------------------------------------------------------------------
* PROCWORK Software
* Produto : pw.CE
* Módulo : CR - pw.CE Reports
* Descrição: Report gerador de ACE59
* Help Desk: (11) 5504-0270
* --------------------------------------------------------------------
* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 360378 13/02/07 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycrr005 MESSAGE-ID /pws/zycrm.
* INCLUDES ------------------------------------------------------------*
INCLUDE: /pws/zycri004, " Up/download de arquivos xls
/pws/zycri003, " Interface com o Excel
/pws/zycri002. " Rotinas comuns
* TIPOS ---------------------------------------------------------------*
TABLES: tcurx.
* Tipo da estrutura do cabeçalho
TYPES: BEGIN OF s_cabecalho.
TYPES: empresa TYPE t001-bukrs,
desc_emp TYPE t001-butxt,
local_neg TYPE t001w-j_1bbranch,
ender TYPE t001w-stras,
cgc(19) TYPE c ,
anexo TYPE /pws/zycit474-anexo,
qtd_tot TYPE /pws/zycit245-qtd_tot,
peso_tot TYPE /pws/zycit245-ntgew,
vltot TYPE /pws/zycit245-netpr_t,
moeda TYPE /pws/zycit245-waers,
gewei TYPE /pws/zycit245-gewei,
um_ncm TYPE /pws/zycit245-um_ncm.
INCLUDE TYPE /pws/zycit244 AS zycit244.
TYPES: END OF s_cabecalho.
* Tipo da estrutura e tabela dos itens
TYPES: BEGIN OF s_itens.
INCLUDE STRUCTURE /pws/zycit247.
TYPES: valor(30) TYPE c,
qtd(30) TYPE c,
END OF s_itens,
t_itens TYPE STANDARD TABLE OF s_itens.
* VARIÁVEIS -----------------------------------------------------------*
* Cabeçalho e itens
DATA: wa_cabecalho TYPE s_cabecalho,
v_filename(20) TYPE c,
it_itens TYPE t_itens.
* Parâmetros de geração de reports
DATA: wa_gen_param TYPE /pws/zycrt012,
wa_rep_param TYPE /pws/zycrt013,
it_matrix TYPE t_matrix,
it_report_fields TYPE t_rep_fields,
p_repmod TYPE /pws/zycrt010-report_module VALUE 'D' ,
p_report TYPE /pws/zycrt010-report_id VALUE 'ANEXOD_E'.
* Dados para o arquivo do excel
DATA: it_excel_content TYPE t_excel_content,
it_sect_height TYPE t_sect_height.
DATA: it_generation_options TYPE t_generation_options.
* TELA DE SELEÇÃO -----------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.
PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd OBLIGATORY
MODIF ID key.
SELECTION-SCREEN END OF BLOCK b1.
* PBO DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
* Seleção e preparação de dados do cabeçalho e itens
PERFORM select_data
USING
p_nrseqd
CHANGING
wa_cabecalho
it_itens.
IF wa_cabecalho IS INITIAL.
MESSAGE e015(/pws/zycim) WITH text-003.
ENDIF.
* Seleção de parâmetros para geração do report
PERFORM select_parameters
USING
p_repmod
p_report
sy-langu
wa_cabecalho-zycit244-bukrs
''
''
''
''
''
''
''
''
''
''
CHANGING
wa_gen_param
wa_rep_param
it_matrix[]
it_report_fields[].
IF wa_gen_param IS INITIAL
OR wa_rep_param IS INITIAL
OR it_matrix[] IS INITIAL.
msg_module = p_repmod.
msg_report = p_report.
msg_langu = sy-langu.
msg_bukrs = wa_cabecalho-bukrs.
MESSAGE e000.
ENDIF.
* Criação das tabelas de dados para o report
PERFORM create_excel_content_table
USING
it_itens[]
wa_rep_param
it_matrix[]
it_report_fields[]
CHANGING
wa_cabecalho
it_excel_content[]
it_sect_height[].
* Determinação do nome do arquivo do report
CLEAR: v_filename.
CONCATENATE 'ANEXOI' wa_cabecalho-zycit244-nrseqd INTO v_filename.
PERFORM generate_file_name
USING
v_filename
wa_gen_param
wa_rep_param
CHANGING
v_file_name.
* Baixa o report em branco na máquina do frontend
PERFORM download_file
USING
wa_rep_param
v_file_name.
* Cria o report
PERFORM create_report
USING
wa_gen_param-report_generator
v_file_name
'REPORT'
''
it_excel_content[]
it_sect_height[]
it_generation_options[].
LEAVE PROGRAM.
END-OF-SELECTION.
* --------------------------------------------------------------------
* Form select_data
* --------------------------------------------------------------------
* Objetivo: Selecionar os dados do report: cabeçalho, itens,
* sub_itens, etc.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Seqüencial do embarque
* <-- p_cabecalho Dados do cabeçalho do report
* p_t_itens Dados de itens do report
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 360378 13/02/2007 Codificação inicial
* --------------------------------------------------------------------
FORM select_data
USING
p_nrseqd TYPE /pws/zycit244-nrseqd
CHANGING
p_cabecalho TYPE s_cabecalho
p_t_itens TYPE t_itens.
DATA: wa_itens LIKE LINE OF p_t_itens,
itab_makt TYPE makt OCCURS 0 WITH HEADER LINE,
itab_604n TYPE t604n OCCURS 0 WITH HEADER LINE.
SELECT SINGLE *
INTO p_cabecalho-zycit244
FROM /pws/zycit244
WHERE nrseqd = p_nrseqd.
CHECK sy-subrc = 0.
SELECT SINGLE bukrs butxt
INTO (p_cabecalho-empresa, p_cabecalho-desc_emp)
FROM t001
WHERE bukrs = p_cabecalho-zycit244-bukrs.
SELECT SINGLE j_1bbranch stras
FROM t001w
INTO (p_cabecalho-local_neg, p_cabecalho-ender)
WHERE werks = p_cabecalho-zycit244-werks.
CALL FUNCTION 'J_1BREAD_BRANCH_DATA'
EXPORTING
branch = p_cabecalho-local_neg
bukrs = p_cabecalho-empresa
IMPORTING
cgc_number = p_cabecalho-zycit244-cnpj.
WRITE p_cabecalho-zycit244-cnpj TO p_cabecalho-cgc
USING EDIT MASK '__.___.___/____-__'.
SELECT MAX( anexo ) FROM /pws/zycit474
INTO p_cabecalho-anexo
WHERE nrseqd EQ p_nrseqd
AND pasta EQ 'I'.
IF p_cabecalho-anexo IS INITIAL.
MESSAGE i015(/pws/zycim) WITH text-002.
LEAVE PROGRAM.
ENDIF.
SELECT *
FROM /pws/zycit247
INTO TABLE p_t_itens
WHERE nrseqd EQ p_nrseqd.
LOOP AT p_t_itens INTO wa_itens.
wa_itens-ntgew = wa_itens-ntgew * wa_itens-qtd_iten.
WRITE wa_itens-netpr_t TO wa_itens-valor
CURRENCY wa_itens-waers.
SHIFT wa_itens-valor BY 3 PLACES.
CONCATENATE wa_itens-waers wa_itens-valor INTO wa_itens-valor.
WRITE wa_itens-qtd_ncm TO wa_itens-qtd
UNIT wa_itens-um_ncm.
SHIFT wa_itens-qtd BY 3 PLACES.
CONCATENATE wa_itens-um_ncm wa_itens-qtd INTO wa_itens-qtd.
TRANSLATE wa_itens-j_1bnbm USING '. '.
CONDENSE wa_itens-j_1bnbm NO-GAPS.
MODIFY p_t_itens FROM wa_itens.
ENDLOOP.
SORT p_t_itens BY j_1bnbm nritem.
ENDFORM. " select_data
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 316455 13/11/2006 Codificação inicial
* --------------------------------------------------------------------
FORM create_excel_content_table
USING
p_t_items TYPE table
p_rep_param TYPE /pws/zycrt013
p_t_matrix TYPE t_matrix
p_t_report_fields TYPE t_rep_fields
CHANGING
p_header TYPE s_cabecalho
p_t_excel_content TYPE t_excel_content
p_t_sect_height TYPE t_sect_height.
DATA: current_row TYPE i VALUE 1,
v_vltot TYPE /pws/zycit247-netpr_t,
section_rows TYPE i.
DATA: itab_exel_temp TYPE t_excel_content,
wa_exel_temp LIKE LINE OF itab_exel_temp[].
.
DATA: current_item TYPE i VALUE 1,
v_linha TYPE i,
v_lines TYPE i.
DATA: filled_section_height TYPE f.
DATA: subrc TYPE sy-subrc.
DATA: it_section_content LIKE p_t_excel_content[].
DATA: v_linhacab TYPE i, "Linhas do cabeçalho
v_linhaite TYPE i, "Linhas dos itens
v_linhasub TYPE i, "Linhas do sub_itens
v_linhasub2 TYPE i, "Linhas do sub_itens2
v_completo TYPE c. "completou o preenchimento..
*Work area de itens
DATA: wa_itens TYPE s_itens,
itab_zycit474 TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE.
PERFORM select_row_height_cache
USING
p_rep_param-spras
p_rep_param-file_id
CHANGING
p_t_sect_height[].
PERFORM get_section_rows
USING
'CAB'
p_t_sect_height[]
CHANGING
v_linhacab.
PERFORM get_section_rows
USING
'ITENS'
p_t_sect_height[]
CHANGING
v_linhaite.
PERFORM get_section_rows
USING
'RODA1'
p_t_sect_height[]
CHANGING
v_linhasub.
PERFORM get_section_rows
USING
'RODA2'
p_t_sect_height[]
CHANGING
v_linhasub2.
DESCRIBE TABLE p_t_items LINES v_lines.
CLEAR: current_item, v_completo.
WHILE v_completo NE 'X'.
CLEAR: v_completo.
ADD 1 TO p_header-anexo.
PERFORM append_new_section
USING
'CAB'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
p_header
'CAB'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhacab TO current_row.
PERFORM append_new_section
USING
'ITENS'
current_row
CHANGING
p_t_excel_content[].
section_rows = current_row.
CLEAR: v_linha, p_header-qtd_tot,
p_header-peso_tot, p_header-vltot.
DO.
REFRESH it_section_content[].
CLEAR wa_itens.
ADD 1 TO current_item.
READ TABLE p_t_items INTO wa_itens INDEX current_item.
IF sy-subrc NE 0.
v_completo = 'X'.
EXIT.
ENDIF.
* Preenche campos de item
PERFORM fill_items_fields
USING
p_t_items[]
'ITENS'
current_row
p_t_matrix[]
p_t_report_fields[]
p_t_sect_height[]
current_item
CHANGING
filled_section_height
p_t_excel_content[]
subrc.
ADD 1 TO current_row.
ADD 1 TO v_linha.
itab_zycit474-anexo = p_header-anexo .
itab_zycit474-nrseqd = wa_itens-nrseqd.
itab_zycit474-nritem = wa_itens-nritem.
itab_zycit474-tipo = 'I'.
itab_zycit474-pasta = 'E'.
p_header-zycit244-waers = itab_zycit474-waers = wa_itens-waers.
itab_zycit474-ncm = wa_itens-j_1bnbm.
itab_zycit474-linha = v_linha.
p_header-um_ncm = itab_zycit474-meins = wa_itens-um_ncm.
itab_zycit474-qtd = wa_itens-qtd_ncm.
p_header-gewei = itab_zycit474-gewei = wa_itens-gewei.
itab_zycit474-ntgew = wa_itens-ntgew.
itab_zycit474-netpr_t = wa_itens-netpr_t.
itab_zycit474-matnr = wa_itens-codmat.
APPEND itab_zycit474.
ADD wa_itens-qtd_ncm TO p_header-qtd_tot.
ADD wa_itens-ntgew TO p_header-peso_tot.
PERFORM retorna_decimais USING wa_itens-waers
CHANGING wa_itens-netpr_t.
PERFORM converter_moeda USING wa_itens-netpr_t
wa_itens-waers
'USD'
sy-datlo
CHANGING v_vltot.
ADD v_vltot TO p_header-vltot.
IF v_linha = 20.
IF v_lines = current_item.
v_completo = 'X'.
ENDIF.
EXIT.
ENDIF.
ENDDO.
current_row = section_rows + v_linhaite.
PERFORM append_new_section
USING
'RODA1'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
p_header
'RODA1'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
current_row = current_row + v_linhasub.
PERFORM add_page_break
USING
current_row
CHANGING
p_t_excel_content[].
ENDWHILE.
itab_exel_temp[] = p_t_excel_content[].
SUBTRACT 1 FROM current_row.
section_rows = current_row.
DO 4 TIMES.
LOOP AT itab_exel_temp INTO wa_exel_temp.
ADD current_row TO wa_exel_temp-row.
IF wa_exel_temp-sheet EQ 'RODA1'.
wa_exel_temp-sheet = 'RODA2'.
ENDIF.
APPEND wa_exel_temp TO p_t_excel_content.
ENDLOOP.
ADD section_rows TO current_row.
ENDDO.
* Grava histórico dos anexos para uso posterior.
DELETE FROM /pws/zycit474 WHERE nrseqd EQ p_nrseqd
AND pasta EQ 'E'.
INSERT /pws/zycit474 FROM TABLE itab_zycit474.
ENDFORM. " create_excel_content_table
*&---------------------------------------------------------------------*
*& Form Converter_Moeda
*&---------------------------------------------------------------------*
* -->p_devlme "montante a ser convertido
* -->p_deme "Moeda original
* -->p_parame "Moeda destino
* -->p_data "Data para busca da taxa de cambio
* <->p_paravlme "Valor convertido
*----------------------------------------------------------------------
*
FORM converter_moeda USING p_devlme
p_deme
p_parame
p_data
CHANGING p_paravlme.
DATA: v_ctmoeda LIKE tcurr-kurst VALUE 'G',
v_devlme LIKE bsak-wrbtr,
v_paravlme LIKE bsak-wrbtr.
v_devlme = p_devlme .
IF p_devlme NE 0.
CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'
EXPORTING
i_montante = v_devlme
i_demoeda = p_deme
i_paramoeda = p_parame
i_ctmoeda = v_ctmoeda
i_dtbase = p_data
IMPORTING
e_montante = v_paravlme
EXCEPTIONS
i_demoeda_nao_encontrado = 1
i_paramoeda_nao_encontrado = 2
fator_nao_encontrado = 3
i_ctmoeda_nao_encontrado = 4
i_dtbase_nao_encontrada = 5
taxa_nao_encontrada = 6
i_montante_nao_encontrado = 7.
p_paravlme = v_paravlme.
ENDIF.
ENDFORM. " CONVERTER_MOEDA
*&---------------------------------------------------------------------*
*& Form retorna_decimais
*&---------------------------------------------------------------------*
* tratamento para casas decimais utilizadas por moeda
*----------------------------------------------------------------------*
* -->p_moeda Moeda
* <--p_valor Valor a ser ajustado.
*----------------------------------------------------------------------*
FORM retorna_decimais USING p_moeda
CHANGING p_valor.
IF tcurx-currkey <> p_moeda.
SELECT SINGLE * FROM tcurx WHERE currkey = p_moeda.
ENDIF.
IF sy-subrc <> 0.
tcurx-currdec = 2.
ENDIF.
p_valor = p_valor * ( 10 ** ( tcurx-currdec - 2 ) ).
ENDFORM. " retorna_decimais
****************************************************************************************************
**Elementos de texto:
*Simbolo Texto
002 É necessario gerar os anexos de importação!
003 Ato Concessório não existe.
**Textos de Seleção:
P_NRSEQD Nº Seq. Ato Concessório