Módulo: DRAWBACK
Funcionalidade: Relatórios
Data/Hora da Publicação: 30/03/2007 00:00:00
Data/Hora Última Alteração: 01/03/2010 16:49:45
Descrição da Nota: DESENVOLVIMENTO DO RUD EXPORTAÇÃO, IMPORTAÇÃO E TERMO
Sintoma
Desenvolver novo Relatório Unificado de Drawback Importação
Desenvolver novo Relatório Unificado de Drawback Exportação
Desenvolver novo Relatório Termo
Solução
Desenvolver novo Relatório Unificado de Drawback Importação
Desenvolver novo Relatório Unificado de Drawback Exportação
Desenvolver novo Relatório Termo
6.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 03358 Data: 30/03/2007 Hora: 09:53:38
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 03358
Categoria : Melhoria
Prioridade : Média
Versão PW.CE : 6.0
Pacote : 00026
Agrupamento : 00156
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
DESENVOLVIMENTO DO RUD EXPORTAÇÃO, IMPORTAÇÃO E TERMO
----------------------------------------------------------------------------------------------------
Palavras Chave:
/PWS/ZYCRR002, /PWS/ZYCRR006, /PWS/ZYCRR008, /PWS/ZYCIT476
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCRR002
REPS /PWS/ZYCRR006
REPS /PWS/ZYCRR008
TABL /PWS/ZYCIT476
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCRR002
* --------------------------------------------------------------------
* 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
* --------------------------------------------------------------------
* 355730 18/01/07 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycrr002 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: /pws/zycrt003.
* 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,
cnpjmask(18) TYPE c,
sy_datlo(25) TYPE c,
anexo TYPE /pws/zycit476-anexo,
pagina TYPE i,
p_proc1 TYPE /pws/zycrt003-name,
p_proc2 TYPE /pws/zycrt003-name.
INCLUDE TYPE /pws/zycit244 AS zycit244.
TYPES: END OF s_cabecalho.
* Tipo da estrutura e tabela dos itens
TYPES: BEGIN OF s_itens.
TYPES: nrre TYPE /pws/zycit259-nrre,
dtre TYPE /pws/zycit259-dtre,
j_1bnbm TYPE /pws/zycit259-j_1bnbm,
gewei TYPE /pws/zycit259-gewei,
ntgew TYPE /pws/zycit259-ntgew,
qtd_iten TYPE /pws/zycit259-qtd_iten,
meins TYPE /pws/zycit259-meins,
vl_fob TYPE /pws/zycit259-vlfob,
waersfob TYPE /pws/zycit259-waersfob,
vl_cif TYPE /pws/zycit259-vlcif,
maktx TYPE makt-maktx,
subtot TYPE c,
j_1bnbmtot TYPE /pws/zycit259-j_1bnbm,
ntgewtot TYPE /pws/zycit259-ntgew,
qtd_tot TYPE /pws/zycit259-qtd_iten,
vl_fobtot TYPE /pws/zycit259-vlfob,
vl_ciftot TYPE /pws/zycit259-vlcif.
TYPES: END OF s_itens,
t_itens TYPE STANDARD TABLE OF s_itens.
TYPES: BEGIN OF s_tot_ncm.
TYPES: peso TYPE /pws/zycit259-ntgew,
qtd TYPE /pws/zycit259-qtd_iten,
fob TYPE /pws/zycit259-vlfob,
cif TYPE /pws/zycit259-vlcif,
totpeso TYPE /pws/zycit259-ntgew,
totqtd TYPE /pws/zycit259-qtd_iten,
totfob TYPE /pws/zycit259-vlfob,
totcif TYPE /pws/zycit259-vlcif,
END OF s_tot_ncm,
t_tot_ncm TYPE STANDARD TABLE OF s_tot_ncm.
TYPE-POOLS vrm.
DATA: list TYPE vrm_values,
value LIKE LINE OF list.
* VARIÁVEIS -----------------------------------------------------------*
DATA: v_total TYPE /pws/zycit259-vlcif, "Var. Vl. Tot em Dolar
v_peso TYPE /pws/zycit259-ntgew, "Var. Vl. Peso Liquido
v_quant TYPE /pws/zycit259-qtd_iten, "Var. Vl. Quantidade
v_vlemb TYPE /pws/zycit259-vlfob, "Var. Vl. Local de Emb.
v_totncm TYPE i, "Var. Contador de Reg.
v_ncm TYPE /pws/zycit259-j_1bnbm. "Var. do NCM.
DATA: BEGIN OF v_tab OCCURS 200,
value(40) TYPE c,
END OF v_tab.
DATA: BEGIN OF f_tab OCCURS 10.
INCLUDE STRUCTURE help_value.
DATA: END OF f_tab.
* Cabeçalho e itens
DATA: wa_cabecalho TYPE s_cabecalho,
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.
* Dados para o arquivo do excel
DATA: it_excel_content TYPE t_excel_content,
it_sect_height TYPE t_sect_height,
it_generation_options TYPE t_generation_options.
* Tabela para nomes
DATA: BEGIN OF itab_zycrt003 OCCURS 0.
INCLUDE STRUCTURE /pws/zycrt003.
DATA: END OF itab_zycrt003.
* TELA DE SELEÇÃO -----------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd OBLIGATORY MODIF ID key.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2.
PARAMETERS: p_proc1 TYPE /pws/zycrt003-name,
p_proc2 TYPE /pws/zycrt003-name.
SELECTION-SCREEN END OF BLOCK b2.
PARAMETERS: p_passwd(132) TYPE c LOWER CASE.
PARAMETERS: p_option TYPE xfeld NO-DISPLAY.
* PBO DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
* A chave não pode ser alterada quando a chamada for feita pela função.
IF p_option = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'KEY'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'P_PASSWD'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc1.
PERFORM trata_procurador CHANGING p_proc1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc2.
PERFORM trata_procurador CHANGING p_proc2.
* INÍCIO DA SELEÇÃO ---------------------------------------------------*
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 i015 WITH text-002.
EXIT.
ENDIF.
* Seleção de parâmetros para geração do report
PERFORM select_parameters
USING
'D'
'RUDE'
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 = 'D'.
msg_report = 'RUDE'.
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
wa_cabecalho
it_itens[]
wa_rep_param
it_matrix[]
it_report_fields[]
CHANGING
it_excel_content[]
it_sect_height[].
* Determinação do nome do arquivo do report
PERFORM generate_file_name
USING
wa_cabecalho-zycit244-nrseqd
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'
p_passwd
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
* --------------------------------------------------------------------
* 316455 13/11/2006 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,
v_tabix TYPE sy-tabix,
v_line TYPE sy-index,
it_itens TYPE t_itens 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
FROM t001w
INTO p_cabecalho-local_neg
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-cnpjmask
USING EDIT MASK '__.___.___/____-__'.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = sy-datlo
spras = 'P'
IMPORTING
data_extenso = p_cabecalho-sy_datlo.
p_cabecalho-p_proc1 = p_proc1.
p_cabecalho-p_proc2 = p_proc2.
SELECT MAX( anexo ) FROM /pws/zycit476
INTO p_cabecalho-anexo
WHERE nrseqd EQ p_nrseqd
AND tipo EQ 'I'.
IF p_cabecalho-anexo IS INITIAL.
MESSAGE i015(/pws/zycim) WITH text-003 text-004.
LEAVE PROGRAM.
ENDIF.
SELECT /pws/zycit259~nrre /pws/zycit259~dtre
/pws/zycit259~j_1bnbm /pws/zycit259~gewei
/pws/zycit259~ntgew /pws/zycit259~qtd_iten
/pws/zycit259~meins /pws/zycit259~vlfob
/pws/zycit259~waersfob /pws/zycit259~vlcif
makt~maktx
FROM ( /pws/zycit259 INNER JOIN makt
ON /pws/zycit259~codmat = makt~matnr )
INTO TABLE p_t_itens
WHERE /pws/zycit259~nrseqd EQ p_cabecalho-zycit244-nrcompos
AND makt~spras EQ 'P'.
it_itens[] = p_t_itens[].
REFRESH p_t_itens.
LOOP AT it_itens.
COLLECT it_itens INTO p_t_itens.
ENDLOOP.
SORT p_t_itens BY j_1bnbm.
LOOP AT p_t_itens INTO wa_itens.
v_tabix = sy-tabix.
CHECK wa_itens-subtot NE 'X'.
ON CHANGE OF wa_itens-j_1bnbm.
IF v_tabix NE 1.
MOVE: v_ncm TO wa_itens-j_1bnbmtot,
'X' TO wa_itens-subtot,
v_peso TO wa_itens-ntgewtot,
v_total TO wa_itens-vl_ciftot,
v_vlemb TO wa_itens-vl_fobtot,
v_quant TO wa_itens-qtd_tot.
INSERT wa_itens INTO p_t_itens INDEX v_tabix.
ENDIF.
CLEAR: v_ncm,
v_peso,
v_total,
v_vlemb,
v_quant.
ENDON.
MOVE wa_itens-j_1bnbm TO v_ncm.
ADD: wa_itens-ntgew TO v_peso,
wa_itens-vl_cif TO v_total,
wa_itens-vl_fob TO v_vlemb,
wa_itens-qtd_iten TO v_quant.
ENDLOOP.
DESCRIBE TABLE p_t_itens LINES v_line.
ADD 1 TO v_line.
MOVE: v_ncm TO wa_itens-j_1bnbmtot,
'X' TO wa_itens-subtot,
v_peso TO wa_itens-ntgewtot,
v_total TO wa_itens-vl_ciftot,
v_vlemb TO wa_itens-vl_fobtot,
v_quant TO wa_itens-qtd_tot.
INSERT wa_itens INTO p_t_itens INDEX v_line.
ENDFORM. " select_data
* --------------------------------------------------------------------
* Form create_excel_content_table
* --------------------------------------------------------------------
* Objetivo: Montar o report ACE59
* Cada página do ACE59 é composta da seguintes seções:
*
* 1 X seção "A"
* 11 X seção "B"
* 1 X seção "C"
* 6 X seção "D"
* 1 X seção "E"
*
* O documento tem estrutura fixa e as seções que se repetem
* ("B" e "D") devem ser inseridas mesmo que em branco.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_header Dados do cabeçalho do report
* p_t_items Tabela de itens do report
* p_t_sub_items Tabela de sub-itens do report
* p_rep_param Parâmetros específicos por report
* p_t_matrix Matriz de campos do report
* p_t_report_fields Campos disponíveis no programa
* <-- p_t_excel_content Conteúdo do report para o Excel
* p_t_sect_height Tabela de altura das seções do report
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 316455 13/11/2006 Codificação inicial
* --------------------------------------------------------------------
FORM create_excel_content_table
USING
p_header TYPE any
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_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: has_remaining_space TYPE abap_bool.
DATA: current_item TYPE i VALUE 1,
total_items TYPE i,
remaining_item_space TYPE f.
DATA: section_height TYPE f,
filled_section_height TYPE f.
DATA: subrc TYPE sy-subrc.
DATA: it_section_content LIKE p_t_excel_content[].
DATA: it_iteanexo LIKE p_t_excel_content[] WITH HEADER LINE.
DATA: itab_exel_temp TYPE t_excel_content,
wa_exel_temp LIKE LINE OF itab_exel_temp[].
*Variáveis
DATA: v_linetot TYPE f, "Linhas em pontos total da folha no Excel
v_linecab TYPE f, "Linhas em pontos do cabeçalho
v_lineite TYPE f, "Linhas em pontos dos itens
v_linesub TYPE f, "Linhas em pontos do sub_itens
v_linesub2 TYPE f, "Linhas em pontos do sub_itens2
v_linerod TYPE f, "Linhas em pontos do rodapé
v_linencm TYPE f, "Linhas em pontos do total do ncm
v_resto TYPE f, "Linhas em pontos restantes de itens
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_linharod TYPE i, "Linhas do rodapé
v_linhancm TYPE i. "Linha do total de ncm
*Work area de itens
DATA: wa_itens TYPE s_itens,
wa_iteanexo TYPE s_itens,
wa_totanexo TYPE s_tot_ncm,
wa_total TYPE s_tot_ncm.
PERFORM select_row_height_cache
USING
p_rep_param-spras
p_rep_param-file_id
CHANGING
p_t_sect_height[].
DESCRIBE TABLE p_t_items[] LINES total_items.
PERFORM get_section_height
USING
'REPORT'
p_t_sect_height[]
CHANGING
v_linetot.
PERFORM get_section_height
USING
'VIA I (2)'
p_t_sect_height[]
CHANGING
v_linecab.
PERFORM get_section_height
USING
'VIA I (3)'
p_t_sect_height[]
CHANGING
v_lineite.
PERFORM get_section_height
USING
'VIA I (4)'
p_t_sect_height[]
CHANGING
v_linesub.
PERFORM get_section_height
USING
'VIA I (5)'
p_t_sect_height[]
CHANGING
v_linesub2.
PERFORM get_section_height
USING
'VIA I (6)'
p_t_sect_height[]
CHANGING
v_linerod.
PERFORM get_section_height
USING
'VIA I (6)'
p_t_sect_height[]
CHANGING
v_linencm.
PERFORM get_section_rows
USING
'VIA I (2)'
p_t_sect_height[]
CHANGING
v_linhacab.
PERFORM get_section_rows
USING
'VIA I (3)'
p_t_sect_height[]
CHANGING
v_linhaite.
PERFORM get_section_rows
USING
'VIA I (4)'
p_t_sect_height[]
CHANGING
v_linhasub.
PERFORM get_section_rows
USING
'VIA I (5)'
p_t_sect_height[]
CHANGING
v_linhasub2.
PERFORM get_section_rows
USING
'VIA I (6)'
p_t_sect_height[]
CHANGING
v_linharod.
PERFORM get_section_rows
USING
'VIA I (8)'
p_t_sect_height[]
CHANGING
v_linhancm.
WHILE current_item <= total_items.
wa_cabecalho = p_header.
wa_cabecalho-pagina = wa_cabecalho-anexo = wa_cabecalho-anexo + 1.
PERFORM append_new_section
USING
'VIA I (2)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'VIA I (2)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhacab TO current_row.
remaining_item_space = v_linetot - v_linecab - v_linesub -
v_linesub2 - v_linerod.
has_remaining_space = abap_true.
CLEAR wa_totanexo.
WHILE has_remaining_space = abap_true.
REFRESH it_section_content[].
IF v_lineite <= remaining_item_space.
CLEAR wa_itens.
READ TABLE p_t_items INTO wa_itens INDEX current_item.
IF wa_itens-subtot = ' '.
PERFORM append_new_section
USING
'VIA I (3)'
current_row
CHANGING
p_t_excel_content[].
* Preenche campos de item
PERFORM fill_items_fields
USING
p_t_items[]
'VIA I (3)'
current_row
p_t_matrix[]
p_t_report_fields[]
p_t_sect_height[]
current_item
CHANGING
filled_section_height
it_section_content[]
subrc.
IF subrc = 0.
it_iteanexo[] = it_section_content[].
IF filled_section_height LE remaining_item_space.
READ TABLE p_t_items INTO wa_iteanexo INDEX current_item.
IF wa_iteanexo-subtot IS INITIAL.
wa_totanexo-peso = wa_totanexo-peso + wa_iteanexo-ntgew.
wa_totanexo-qtd = wa_totanexo-qtd + wa_iteanexo-qtd_iten.
wa_totanexo-fob = wa_totanexo-fob + wa_iteanexo-vl_fob.
wa_totanexo-cif = wa_totanexo-cif + wa_iteanexo-vl_cif.
wa_total-totpeso =
wa_total-totpeso + wa_iteanexo-ntgew.
wa_total-totqtd =
wa_total-totqtd + wa_iteanexo-qtd_iten.
wa_total-totfob =
wa_total-totfob + wa_iteanexo-vl_fob.
wa_total-totcif =
wa_total-totcif + wa_iteanexo-vl_cif.
ENDIF.
ENDIF.
ENDIF.
ELSE.
PERFORM append_new_section
USING
'VIA I (8)'
current_row
CHANGING
p_t_excel_content[].
* Preenche campos de item
PERFORM fill_items_fields
USING
p_t_items[]
'VIA I (8)'
current_row
p_t_matrix[]
p_t_report_fields[]
p_t_sect_height[]
current_item
CHANGING
filled_section_height
it_section_content[]
subrc.
ENDIF.
* Se não é possível usar a seção preenchida, deixar em branco.
IF subrc = 0.
IF filled_section_height <= remaining_item_space.
APPEND LINES OF it_section_content TO p_t_excel_content.
ADD 1 TO current_item.
ADD v_linhaite TO current_row.
SUBTRACT filled_section_height FROM remaining_item_space.
ENDIF.
ELSE.
ADD v_linhaite TO current_row.
SUBTRACT v_lineite FROM remaining_item_space.
ENDIF.
ELSE.
has_remaining_space = abap_false.
ENDIF.
ENDWHILE.
PERFORM append_new_section
USING
'VIA I (4)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_totanexo
'VIA I (4)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhasub TO current_row.
IF current_item > total_items.
PERFORM append_new_section
USING
'VIA I (5)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_total
'VIA I (5)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhasub2 TO current_row.
ENDIF.
PERFORM append_new_section
USING
'VIA I (6)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'VIA I (6)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linharod TO current_row.
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 2 TIMES.
LOOP AT itab_exel_temp INTO wa_exel_temp.
ADD current_row TO wa_exel_temp-row.
APPEND wa_exel_temp TO p_t_excel_content.
ENDLOOP.
ADD section_rows TO current_row.
ENDDO.
ENDFORM. " create_excel_content_table
*&---------------------------------------------------------------------*
*& Form trata_procurador
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM trata_procurador CHANGING p_proc.
FREE v_tab.
CLEAR: v_tab, f_tab.
REFRESH: v_tab, f_tab.
SELECT * FROM /pws/zycrt003
INTO TABLE itab_zycrt003.
LOOP AT itab_zycrt003.
MOVE itab_zycrt003-name TO v_tab.
APPEND v_tab.
ENDLOOP.
MOVE: '/PWS/ZYCRT003' TO f_tab-tabname,
'NAME' TO f_tab-fieldname,
'X' TO f_tab-selectflag.
APPEND f_tab.
CLEAR f_tab.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
EXPORTING
display = ' '
fieldname = 'NAME'
tabname = '/PWS/ZYCRT003'
IMPORTING
select_value = value
TABLES
valuetab = v_tab
fields = f_tab.
IF sy-subrc EQ 0.
MOVE value TO p_proc.
ENDIF.
ENDFORM. " trata_procurador
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCRR006
* --------------------------------------------------------------------
* 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
* --------------------------------------------------------------------
* 355730 18/01/07 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycrr006 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: /pws/zycrt003,
/pws/zycit476.
* 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,
sy_datlo(25) TYPE c,
anexo TYPE i,
pagina TYPE i,
p_proc1 TYPE /pws/zycrt003-name,
p_proc2 TYPE /pws/zycrt003-name.
INCLUDE TYPE /pws/zycit244 AS zycit244.
TYPES: END OF s_cabecalho.
* Tipo da estrutura e tabela dos itens
TYPES: BEGIN OF s_itens.
TYPES: nrdi TYPE /pws/zycit260-nrdi,
reg_di TYPE /pws/zycit260-reg_di,
adicao TYPE /pws/zycit260-adicao,
dtdi TYPE /pws/zycit260-dtdi,
j_1bnbm TYPE /pws/zycit260-j_1bnbm,
gewei TYPE /pws/zycit260-gewei,
ntgew TYPE /pws/zycit260-ntgew,
qtd_vinc TYPE /pws/zycit260-qtd_vinc,
meins TYPE /pws/zycit260-meins,
vlfob TYPE /pws/zycit260-vlfob,
waers TYPE /pws/zycit260-waers,
vlfobt TYPE /pws/zycit260-vlfob_t,
maktx TYPE makt-maktx,
subtot TYPE c,
j_1bnbmtot TYPE /pws/zycit260-j_1bnbm,
ntgewtot TYPE /pws/zycit260-ntgew,
qtd_tot TYPE /pws/zycit260-qtd_vinc,
vl_fembtot TYPE /pws/zycit260-vlfob,
vl_fobtot TYPE /pws/zycit260-vlfob_t,
diadic(14) TYPE c.
TYPES: END OF s_itens,
t_itens TYPE STANDARD TABLE OF s_itens.
TYPES: BEGIN OF s_tot_ncm.
TYPES: peso TYPE /pws/zycit260-ntgew,
qtd TYPE /pws/zycit260-qtd_vinc,
fob TYPE /pws/zycit260-vlfob,
fobt TYPE /pws/zycit260-vlfob_t,
totpeso TYPE /pws/zycit260-ntgew,
totqtd TYPE /pws/zycit260-qtd_vinc,
totfemb TYPE /pws/zycit260-vlfob,
totfob TYPE /pws/zycit260-vlfob_t,
END OF s_tot_ncm,
t_tot_ncm TYPE STANDARD TABLE OF s_tot_ncm.
TYPE-POOLS vrm.
DATA: list TYPE vrm_values,
value LIKE LINE OF list.
* VARIÁVEIS -----------------------------------------------------------*
DATA: v_total TYPE /pws/zycit260-vlfob_t, "Var. Vl. Tot em Dolar
v_peso TYPE /pws/zycit260-ntgew, "Var. Vl. Peso Liquido
v_quant TYPE /pws/zycit260-qtd_vinc, "Var. Vl. Quantidade
v_vlemb TYPE /pws/zycit260-vlfob, "Var. Vl. Local de Emb.
v_totncm TYPE i, "Var. Contador de Reg.
v_ncm TYPE /pws/zycit259-j_1bnbm. "Var. do NCM.
DATA: BEGIN OF v_tab OCCURS 200,
value(40) TYPE c,
END OF v_tab.
DATA: BEGIN OF f_tab OCCURS 10.
INCLUDE STRUCTURE help_value.
DATA: END OF f_tab.
* Cabeçalho e itens
DATA: wa_cabecalho TYPE s_cabecalho,
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.
* Dados para o arquivo do excel
DATA: it_excel_content TYPE t_excel_content,
it_sect_height TYPE t_sect_height,
it_generation_options TYPE t_generation_options.
* Tabela para nomes
DATA: BEGIN OF itab_zycrt003 OCCURS 0.
INCLUDE STRUCTURE /pws/zycrt003.
DATA: END OF itab_zycrt003.
DATA: BEGIN OF itab_zycit476 OCCURS 0.
INCLUDE STRUCTURE /pws/zycit476.
DATA: END OF itab_zycit476.
* TELA DE SELEÇÃO -----------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd OBLIGATORY MODIF ID key.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2.
PARAMETERS: p_proc1 TYPE /pws/zycrt003-name,
p_proc2 TYPE /pws/zycrt003-name.
SELECTION-SCREEN END OF BLOCK b2.
PARAMETERS: p_passwd(132) TYPE c LOWER CASE.
PARAMETERS: p_option TYPE xfeld NO-DISPLAY.
* PBO DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
* A chave não pode ser alterada quando a chamada for feita pela função.
IF p_option = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'KEY'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'P_PASSWD'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc1.
PERFORM trata_procurador CHANGING p_proc1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc2.
PERFORM trata_procurador CHANGING p_proc2.
* INÍCIO DA SELEÇÃO ---------------------------------------------------*
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 i015 WITH text-001.
EXIT.
ENDIF.
* Seleção de parâmetros para geração do report
PERFORM select_parameters
USING
'D'
'RUDI'
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 = 'D'.
msg_report = 'RUDI'.
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
wa_cabecalho
it_itens[]
wa_rep_param
it_matrix[]
it_report_fields[]
CHANGING
it_excel_content[]
it_sect_height[].
* Determinação do nome do arquivo do report
PERFORM generate_file_name
USING
wa_cabecalho-zycit244-nrseqd
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'
p_passwd
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
* --------------------------------------------------------------------
* 316455 13/11/2006 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,
v_tabix TYPE sy-tabix,
v_line TYPE sy-index,
it_itens TYPE t_itens 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
FROM t001w
INTO p_cabecalho-local_neg
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.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = sy-datlo
spras = 'P'
IMPORTING
data_extenso = p_cabecalho-sy_datlo.
p_cabecalho-p_proc1 = p_proc1.
p_cabecalho-p_proc2 = p_proc2.
SELECT /pws/zycit260~nrdi /pws/zycit260~reg_di
/pws/zycit260~adicao /pws/zycit260~dtdi
/pws/zycit260~j_1bnbm /pws/zycit260~gewei
/pws/zycit260~ntgew /pws/zycit260~qtd_vinc
/pws/zycit260~meins /pws/zycit260~vlfob
/pws/zycit260~waers /pws/zycit260~vlfob_t
makt~maktx
FROM ( /pws/zycit260 INNER JOIN makt
ON /pws/zycit260~codcomp = makt~matnr )
INTO TABLE p_t_itens
WHERE /pws/zycit260~nrseqd EQ p_cabecalho-zycit244-nrcompos
AND makt~spras EQ 'P'.
it_itens[] = p_t_itens[].
REFRESH p_t_itens.
LOOP AT it_itens.
CONCATENATE it_itens-reg_di '/' it_itens-adicao INTO
it_itens-diadic.
COLLECT it_itens INTO p_t_itens.
ENDLOOP.
SORT p_t_itens BY j_1bnbm.
LOOP AT p_t_itens INTO wa_itens.
v_tabix = sy-tabix.
CHECK wa_itens-subtot NE 'X'.
ON CHANGE OF wa_itens-j_1bnbm.
IF v_tabix NE 1.
MOVE: v_ncm TO wa_itens-j_1bnbmtot,
'X' TO wa_itens-subtot,
v_peso TO wa_itens-ntgewtot,
v_total TO wa_itens-vl_fobtot,
v_vlemb TO wa_itens-vl_fembtot,
v_quant TO wa_itens-qtd_tot.
INSERT wa_itens INTO p_t_itens INDEX v_tabix.
ENDIF.
CLEAR: v_ncm,
v_peso,
v_total,
v_vlemb,
v_quant.
ENDON.
MOVE wa_itens-j_1bnbm TO v_ncm.
ADD: wa_itens-ntgew TO v_peso,
wa_itens-vlfob TO v_total,
wa_itens-vlfobt TO v_vlemb,
wa_itens-qtd_vinc TO v_quant.
ENDLOOP.
DESCRIBE TABLE p_t_itens LINES v_line.
ADD 1 TO v_line.
MOVE: v_ncm TO wa_itens-j_1bnbmtot,
'X' TO wa_itens-subtot,
v_peso TO wa_itens-ntgewtot,
v_total TO wa_itens-vl_fobtot,
v_vlemb TO wa_itens-vl_fembtot,
v_quant TO wa_itens-qtd_tot.
INSERT wa_itens INTO p_t_itens INDEX v_line.
ENDFORM. " select_data
* --------------------------------------------------------------------
* Form create_excel_content_table
* --------------------------------------------------------------------
* Objetivo: Montar o report ACE59
* Cada página do ACE59 é composta da seguintes seções:
*
* 1 X seção "A"
* 11 X seção "B"
* 1 X seção "C"
* 6 X seção "D"
* 1 X seção "E"
*
* O documento tem estrutura fixa e as seções que se repetem
* ("B" e "D") devem ser inseridas mesmo que em branco.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_header Dados do cabeçalho do report
* p_t_items Tabela de itens do report
* p_t_sub_items Tabela de sub-itens do report
* p_rep_param Parâmetros específicos por report
* p_t_matrix Matriz de campos do report
* p_t_report_fields Campos disponíveis no programa
* <-- p_t_excel_content Conteúdo do report para o Excel
* p_t_sect_height Tabela de altura das seções do report
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 316455 13/11/2006 Codificação inicial
* --------------------------------------------------------------------
FORM create_excel_content_table
USING
p_header TYPE any
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_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: has_remaining_space TYPE abap_bool.
DATA: current_item TYPE i VALUE 1,
total_items TYPE i,
remaining_item_space TYPE f.
DATA: section_height TYPE f,
filled_section_height TYPE f.
DATA: subrc TYPE sy-subrc.
DATA: it_section_content LIKE p_t_excel_content[].
DATA: it_iteanexo LIKE p_t_excel_content[] WITH HEADER LINE.
DATA: itab_exel_temp TYPE t_excel_content,
wa_exel_temp LIKE LINE OF itab_exel_temp[].
*Variáveis
DATA: v_linetot TYPE f, "Linhas em pontos total da folha no Excel
v_linecab TYPE f, "Linhas em pontos do cabeçalho
v_lineite TYPE f, "Linhas em pontos dos itens
v_linesub TYPE f, "Linhas em pontos do sub_itens
v_linesub2 TYPE f, "Linhas em pontos do sub_itens2
v_linerod TYPE f, "Linhas em pontos do rodapé
v_linencm TYPE f, "Linhas em pontos do total do ncm
v_resto TYPE f, "Linhas em pontos restantes de itens
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_linharod TYPE i, "Linhas do rodapé
v_linhancm TYPE i. "Linha do total de ncm
*Work area de itens
DATA: wa_itens TYPE s_itens,
wa_iteanexo TYPE s_itens,
wa_totanexo TYPE s_tot_ncm,
wa_total TYPE s_tot_ncm.
PERFORM select_row_height_cache
USING
p_rep_param-spras
p_rep_param-file_id
CHANGING
p_t_sect_height[].
DESCRIBE TABLE p_t_items[] LINES total_items.
PERFORM get_section_height
USING
'REPORT'
p_t_sect_height[]
CHANGING
v_linetot.
PERFORM get_section_height
USING
'VIA I (2)'
p_t_sect_height[]
CHANGING
v_linecab.
PERFORM get_section_height
USING
'VIA I (3)'
p_t_sect_height[]
CHANGING
v_lineite.
PERFORM get_section_height
USING
'VIA I (4)'
p_t_sect_height[]
CHANGING
v_linesub.
PERFORM get_section_height
USING
'VIA I (5)'
p_t_sect_height[]
CHANGING
v_linesub2.
PERFORM get_section_height
USING
'VIA I (6)'
p_t_sect_height[]
CHANGING
v_linerod.
PERFORM get_section_height
USING
'VIA I (6)'
p_t_sect_height[]
CHANGING
v_linencm.
PERFORM get_section_rows
USING
'VIA I (2)'
p_t_sect_height[]
CHANGING
v_linhacab.
PERFORM get_section_rows
USING
'VIA I (3)'
p_t_sect_height[]
CHANGING
v_linhaite.
PERFORM get_section_rows
USING
'VIA I (4)'
p_t_sect_height[]
CHANGING
v_linhasub.
PERFORM get_section_rows
USING
'VIA I (5)'
p_t_sect_height[]
CHANGING
v_linhasub2.
PERFORM get_section_rows
USING
'VIA I (6)'
p_t_sect_height[]
CHANGING
v_linharod.
PERFORM get_section_rows
USING
'VIA I (7)'
p_t_sect_height[]
CHANGING
v_linhancm.
WHILE current_item <= total_items.
wa_cabecalho = p_header.
itab_zycit476-nrseqd = p_nrseqd.
itab_zycit476-tipo = 'I'.
itab_zycit476-anexo = wa_cabecalho-anexo = wa_cabecalho-anexo + 1.
wa_cabecalho-pagina = wa_cabecalho-pagina + 1.
PERFORM append_new_section
USING
'VIA I (2)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'VIA I (2)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhacab TO current_row.
remaining_item_space = v_linetot - v_linecab - v_linesub -
v_linesub2 - v_linerod.
has_remaining_space = abap_true.
CLEAR wa_totanexo.
WHILE has_remaining_space = abap_true.
REFRESH it_section_content[].
IF v_lineite <= remaining_item_space.
CLEAR wa_itens.
READ TABLE p_t_items INTO wa_itens INDEX current_item.
IF wa_itens-subtot = ' '.
PERFORM append_new_section
USING
'VIA I (3)'
current_row
CHANGING
p_t_excel_content[].
* Preenche campos de item
PERFORM fill_items_fields
USING
p_t_items[]
'VIA I (3)'
current_row
p_t_matrix[]
p_t_report_fields[]
p_t_sect_height[]
current_item
CHANGING
filled_section_height
it_section_content[]
subrc.
IF subrc = 0.
it_iteanexo[] = it_section_content[].
IF filled_section_height LE remaining_item_space.
READ TABLE p_t_items INTO wa_iteanexo INDEX current_item.
IF wa_iteanexo-subtot IS INITIAL.
*Calcula Total do Anexo
wa_totanexo-peso = wa_totanexo-peso + wa_iteanexo-ntgew.
wa_totanexo-qtd = wa_totanexo-qtd + wa_iteanexo-qtd_vinc
.
wa_totanexo-fob = wa_totanexo-fob + wa_iteanexo-vlfob.
wa_totanexo-fobt = wa_totanexo-fobt + wa_iteanexo-vlfobt
.
*Calcula Total dos Itens
wa_total-totpeso =
wa_total-totpeso + wa_iteanexo-ntgew.
wa_total-totqtd =
wa_total-totqtd + wa_iteanexo-qtd_vinc.
wa_total-totfemb =
wa_total-totfemb + wa_iteanexo-vlfob.
wa_total-totfob =
wa_total-totfob + wa_iteanexo-vlfobt.
ENDIF.
ENDIF.
ENDIF.
ELSE.
PERFORM append_new_section
USING
'VIA I (7)'
current_row
CHANGING
p_t_excel_content[].
* Preenche campos de item
PERFORM fill_items_fields
USING
p_t_items[]
'VIA I (7)'
current_row
p_t_matrix[]
p_t_report_fields[]
p_t_sect_height[]
current_item
CHANGING
filled_section_height
it_section_content[]
subrc.
ENDIF.
* Se não é possível usar a seção preenchida, deixar em branco.
IF subrc = 0.
IF filled_section_height <= remaining_item_space.
APPEND LINES OF it_section_content TO p_t_excel_content.
ADD 1 TO current_item.
ADD v_linhaite TO current_row.
SUBTRACT filled_section_height FROM remaining_item_space.
ENDIF.
ELSE.
ADD v_linhaite TO current_row.
SUBTRACT v_lineite FROM remaining_item_space.
ENDIF.
ELSE.
has_remaining_space = abap_false.
ENDIF.
ENDWHILE.
PERFORM append_new_section
USING
'VIA I (4)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_totanexo
'VIA I (4)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhasub TO current_row.
IF current_item > total_items.
PERFORM append_new_section
USING
'VIA I (5)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_total
'VIA I (5)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhasub2 TO current_row.
ENDIF.
PERFORM append_new_section
USING
'VIA I (6)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'VIA I (6)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linharod TO current_row.
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 2 TIMES.
LOOP AT itab_exel_temp INTO wa_exel_temp.
ADD current_row TO wa_exel_temp-row.
APPEND wa_exel_temp TO p_t_excel_content.
ENDLOOP.
ADD section_rows TO current_row.
ENDDO.
APPEND itab_zycit476.
* Grava histórico dos anexos para uso posterior.
DELETE FROM /pws/zycit476 WHERE nrseqd EQ p_nrseqd
AND tipo EQ 'I'.
INSERT /pws/zycit476 FROM TABLE itab_zycit476.
ENDFORM. " create_excel_content_table
*&---------------------------------------------------------------------*
*& Form trata_procurador
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM trata_procurador CHANGING p_proc.
FREE v_tab.
CLEAR: v_tab, f_tab.
REFRESH: v_tab, f_tab.
SELECT * FROM /pws/zycrt003
INTO TABLE itab_zycrt003.
LOOP AT itab_zycrt003.
MOVE itab_zycrt003-name TO v_tab.
APPEND v_tab.
ENDLOOP.
MOVE: '/PWS/ZYCRT003' TO f_tab-tabname,
'NAME' TO f_tab-fieldname,
'X' TO f_tab-selectflag.
APPEND f_tab.
CLEAR f_tab.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
EXPORTING
display = ' '
fieldname = 'NAME'
tabname = '/PWS/ZYCRT003'
IMPORTING
select_value = value
TABLES
valuetab = v_tab
fields = f_tab.
IF sy-subrc EQ 0.
MOVE value TO p_proc.
ENDIF.
ENDFORM. " trata_procurador
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCRR008
* --------------------------------------------------------------------
* 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
* --------------------------------------------------------------------
* 355730 18/01/07 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycrr008 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: /pws/zycrt003.
* TIPOS ---------------------------------------------------------------*
* Tipo da estrutura do cabeçalho
TYPES: BEGIN OF s_cabecalho.
TYPES: empresa TYPE t001-bukrs,
centro TYPE t001w-werks,
desc_emp TYPE t001-butxt,
local_neg TYPE t001w-j_1bbranch,
cnpjmask(18) TYPE c,
sy_datlo(25) TYPE c,
anexo TYPE /pws/zycit476-anexo,
pagina TYPE i,
p_proc1 TYPE /pws/zycrt003-name,
p_proc2 TYPE /pws/zycrt003-name,
endereco TYPE t001w-stras.
INCLUDE TYPE /pws/zycit244 AS zycit244.
TYPES: END OF s_cabecalho.
* Cabeçalho e itens
DATA: wa_cabecalho TYPE s_cabecalho.
* 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.
* Dados para o arquivo do excel
DATA: it_excel_content TYPE t_excel_content,
it_sect_height TYPE t_sect_height,
it_generation_options TYPE t_generation_options.
* TELA DE SELEÇÃO -----------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd OBLIGATORY MODIF ID key.
SELECTION-SCREEN END OF BLOCK b1.
PARAMETERS: p_passwd(132) TYPE c LOWER CASE.
PARAMETERS: p_option TYPE xfeld NO-DISPLAY.
* PBO DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
* A chave não pode ser alterada quando a chamada for feita pela função.
IF p_option = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'KEY'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'P_PASSWD'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
* INÍCIO DA SELEÇÃO ---------------------------------------------------*
START-OF-SELECTION.
* Seleção e preparação de dados do cabeçalho e itens
PERFORM select_data
USING
p_nrseqd
CHANGING
wa_cabecalho.
IF wa_cabecalho IS INITIAL.
MESSAGE i015 WITH text-002.
EXIT.
ENDIF.
* Seleção de parâmetros para geração do report
PERFORM select_parameters
USING
'D'
'TERMO'
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 = 'D'.
msg_report = 'TERMO'.
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
wa_cabecalho
wa_rep_param
it_matrix[]
it_report_fields[]
CHANGING
it_excel_content[]
it_sect_height[].
* Determinação do nome do arquivo do report
PERFORM generate_file_name
USING
wa_cabecalho-zycit244-nrseqd
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'
p_passwd
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
* --------------------------------------------------------------------
* 316455 13/11/2006 Codificação inicial
* --------------------------------------------------------------------
FORM select_data
USING
p_nrseqd TYPE /pws/zycit244-nrseqd
CHANGING
p_cabecalho TYPE s_cabecalho.
DATA: v_tabix TYPE sy-tabix,
v_line TYPE sy-index.
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 stras
INTO p_cabecalho-endereco
FROM t001w
WHERE werks = p_cabecalho-zycit244-werks.
SELECT SINGLE j_1bbranch
FROM t001w
INTO p_cabecalho-local_neg
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.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = sy-datlo
spras = 'P'
IMPORTING
data_extenso = p_cabecalho-sy_datlo.
ENDFORM. " select_data
* --------------------------------------------------------------------
* Form create_excel_content_table
* --------------------------------------------------------------------
* Objetivo: Montar o report ACE59
* Cada página do ACE59 é composta da seguintes seções:
*
* 1 X seção "A"
* 11 X seção "B"
* 1 X seção "C"
* 6 X seção "D"
* 1 X seção "E"
*
* O documento tem estrutura fixa e as seções que se repetem
* ("B" e "D") devem ser inseridas mesmo que em branco.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_header Dados do cabeçalho do report
* p_t_items Tabela de itens do report
* p_t_sub_items Tabela de sub-itens do report
* p_rep_param Parâmetros específicos por report
* p_t_matrix Matriz de campos do report
* p_t_report_fields Campos disponíveis no programa
* <-- p_t_excel_content Conteúdo do report para o Excel
* p_t_sect_height Tabela de altura das seções do report
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 316455 13/11/2006 Codificação inicial
* --------------------------------------------------------------------
FORM create_excel_content_table
USING
p_header TYPE any
p_rep_param TYPE /pws/zycrt013
p_t_matrix TYPE t_matrix
p_t_report_fields TYPE t_rep_fields
CHANGING
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: has_remaining_space TYPE abap_bool.
DATA: current_item TYPE i VALUE 1,
total_items TYPE i,
remaining_item_space TYPE f.
DATA: section_height TYPE f,
filled_section_height TYPE f.
DATA: subrc TYPE sy-subrc.
DATA: it_section_content LIKE p_t_excel_content[].
DATA: it_iteanexo LIKE p_t_excel_content[] WITH HEADER LINE.
DATA: itab_exel_temp TYPE t_excel_content,
wa_exel_temp LIKE LINE OF itab_exel_temp[].
*Variáveis
DATA: v_linetot TYPE f, "Linhas em pontos total da folha no Excel
v_linecab TYPE f, "Linhas em pontos do cabeçalho
v_linhacab TYPE i, "Linhas do cabeçalho
v_linhacab2 TYPE i, "Linhas do cabeçalho
v_linhacab3 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_linharod TYPE i, "Linhas do rodapé
v_linhancm TYPE i. "Linha do total de ncm
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
'CAPA (1)'
p_t_sect_height[]
CHANGING
v_linhacab.
PERFORM get_section_rows
USING
'CAPA (2)'
p_t_sect_height[]
CHANGING
v_linhacab2.
PERFORM get_section_rows
USING
'CAPA (3)'
p_t_sect_height[]
CHANGING
v_linhacab3.
PERFORM append_new_section
USING
'CAPA (1)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'CAPA (1)'
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
'CAPA (2)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'CAPA (2)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhacab2 TO current_row.
PERFORM append_new_section
USING
'CAPA (3)'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
wa_cabecalho
'CAPA (3)'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD v_linhacab3 TO current_row.
PERFORM add_page_break
USING
current_row
CHANGING
p_t_excel_content[].
ENDFORM. " create_excel_content_table
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TABL /PWS/ZYCIT476
MODIFICAR TABELA TRANSPARENTE: /PWS/ZYCIT476
DESCRIÇÃO BREVE: CI - Controle de anexos do RUD
CARACTERÍSTICAS
CATEGORIA DA TABELA: Tabela transparente
CLASSE DE ENTREGA: (A) Tabela de aplicação (dados mestre e de movimento)
(_) - AUTUALIZAÇÃO DE TABELAS PERMITIDA
CAMPOS NOVOS
CAMPOS: TP. CAMPO CH: INI: TAB.VERIF.: TAB.REF.: CPO.RE
MANDT MANDT X X
NRSEQD /PWS/ZYCIL436 X X
TIPO CHARX1 X X
ANEXO NUMC3
OPÇÕES TÉCNICAS
TIPO DE DADOS: APPL0
CATEGOR. TAMANHO: 4
(X) - 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.