Módulo: DOC. EXPORTAÇÃO
Funcionalidade: CE Reports
Data/Hora da Publicação: 30/03/2007 00:00:00
Data/Hora Última Alteração: 03/03/2010 13:10:15
Descrição da Nota: REPORT EXCEL PARA A EMISSÃO DO DOCUMENTO SAQUE A PRAZO
Sintoma
Necessário desenvolver o novo Reports Excel para a emissão do documento FORM A.
Solução
Desenvolvido relatório CE Report FORM A
6.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 03365 Data: 30/03/2007 Hora: 15:44:12
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 03365
Categoria : Melhoria
Prioridade : Alta
Versão PW.CE : 6.0
Pacote : 00026
Agrupamento : 00156
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
REPORT EXCEL PARA A EMISSÃO DO DOCUMENTO SAQUE A PRAZO
----------------------------------------------------------------------------------------------------
Palavras Chave:
RELATÓRIO CE REPORT, SAQUE A PRAZO, EXCEL
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCRR017
REPT /PWS/ZYCRR017
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCRR017
* --------------------------------------------------------------------
* PROCWORK Software
* Produto: pw.CE
* Módulo: CR - pw.CE Reports
* Descrição: Report gerador de Saque á Prazo
* Help Desk: (11) 5504-0270
* --------------------------------------------------------------------
* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 370173 23/03/2007 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycrr017 MESSAGE-ID /pws/zycrm.
* TABELAS TRANSPARENTES -----------------------------------------------*
TABLES: sscrfields.
* INCLUDES ------------------------------------------------------------*
INCLUDE: /pws/zycri004, " Up/download de arquivos xls
/pws/zycri003, " Interface com o Excel
/pws/zycri002. " Rotinas comuns
* TIPOS ---------------------------------------------------------------*
* Tipo da estrutura do cabeçalho
TYPES: BEGIN OF s_cabecalho,
zycet001 TYPE /pws/zycet001, " Cabeçalho do Embarque
zycet014 TYPE /pws/zycet014, " Dados para Documentos
zycet046 TYPE /pws/zycet046, " Dados Adic. do Emb.
zycet047 TYPE /pws/zycet047, " Número do BL
j_1bbranch TYPE j_1bbranch-branch, " Local negócio
sy_datlo TYPE d, " Data do dia
sy_datlo_t(255) TYPE c, " Dt. do dia por extenso
dtb_venc TYPE d, " Dt. base vencimento
dtb_venc_t(255) TYPE c, " Dt. base vencimento
dtb_venc_parc TYPE d, " Dt. base venc. parcela
dtb_venc_parc_t(255) TYPE c, " Dt. base venc por ext.
nome_paisdest TYPE t005t-landx, " Descrição: país dest.
meio_transp TYPE dd07t-ddtext, " Descr. tipo transporte
waers TYPE waers, " Moeda
perc_com(7) TYPE c, " % de comissão
com_total TYPE /pws/zycet008-vlme, " Comissão de Agente
frt_total TYPE /pws/zycet008-vlme, " Frete
seg_total TYPE /pws/zycet008-vlme, " Seguro
out_total TYPE /pws/zycet008-vlme, " Outras desp.
acr_total TYPE /pws/zycet008-vlme, " Acréscimo
des_total TYPE /pws/zycet008-vlme, " Desconto
fob_total TYPE /pws/zycet008-vlme, " Preço FOB
qua_total TYPE /pws/zycre018-fkimg, "Qua. faturada
descricao TYPE /pws/zycre018-arktx, "Descrição
volum TYPE volum_15, " Volume total
voleh TYPE voleh, " Unidade de vol. total
brgew TYPE brgew_15, " Peso bruto total
gewei TYPE gewei, " Un. de Peso líq. total
user_name_1(132) TYPE c, " Nome do usuário 1
user_function_1 TYPE adcp-function, " Cargo do usuário 1
user_name_2(132) TYPE c, " Nome do usuário 2
user_function_2 TYPE adcp-function, " Cargo do usuário 2
cp_zterm TYPE T052S-zterm, " Cond. de Pagamento
vl_tot_vend TYPE /pws/ZYCET002-VLME_R, "Valor Total Cond.Vend
vl_tot_vend_txt(255) TYPE c, " Valor Total Vend. TXT
adrc_ag TYPE adrc, " End. de Agente
adrc_rm TYPE adrc, " End. de Cli. Reserva
adrc_cf TYPE adrc, " End. de Cliente Final
adrc_co TYPE adrc, " End. de Consignatário
adrc_pi TYPE adrc, " End. de Emiss. Fatura
adrc_ex TYPE adrc, " End. de Exportador
adrc_im TYPE adrc, " End. de Importador
adrc_i2 TYPE adrc, " End. de Importador 2
adrc_i3 TYPE adrc, " End. de Importador 3
adrc_no TYPE adrc, " End. de Notificador
adrc_n2 TYPE adrc, " End. de Notificador 2
adrc_mr TYPE adrc, " End. de Receb. Mercad.
adrc_rp TYPE adrc, " End. de Repres. Pedido
END OF s_cabecalho.
* Tipo da estrutura e tabela dos itens
TYPES: BEGIN OF s_itens,
tabix TYPE sy-tabix, " Ìndice do item
zycet002 TYPE /pws/zycre018, " Itens do Embarque
vl_emb_unit TYPE /pws/zycet002-vlfob, " Valor Emb. Unitário
vl_cond_unit TYPE /pws/zycet002-vlfob, " Valor Cond. Unitário
perc_com(7) TYPE c,
END OF s_itens,
t_itens TYPE STANDARD TABLE OF s_itens.
*
TYPES: BEGIN OF s_zterm,
chave TYPE t052s-zterm, "Chave Cond. de pagamento
sequencial TYPE t052s-ratnr, "N. sequecial quota a pagar
percentagem TYPE t052s-ratpz, "Percentagem de quota
condicao TYPE t052s-ratzt, "Chave Cond. de pagamento
END OF s_zterm,
t_zterm TYPE STANDARD TABLE OF s_zterm.
* VARIÁVEIS -----------------------------------------------------------*
* Cabeçalho e itens
DATA: wa_cabecalho TYPE s_cabecalho,
it_zterm TYPE t_zterm,
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.
DATA: it_generation_options TYPE t_generation_options,
wa_generation_options LIKE LINE OF it_generation_options.
* TELA DE SELEÇÃO -----------------------------------------------------*
* Critérios de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.
PARAMETERS: p_nrseq TYPE /pws/zycet001-nrseq OBLIGATORY
MODIF ID key,
p_repmod TYPE /pws/zycrt010-report_module OBLIGATORY
MODIF ID key
VALUE CHECK,
p_report TYPE /pws/zycrt010-report_id OBLIGATORY
MODIF ID key.
SELECTION-SCREEN END OF BLOCK b1.
* Assinatura 1
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
* Assinatura 1: Usuário SAP
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS r_s1_db RADIOBUTTON GROUP s1 USER-COMMAND radio DEFAULT 'X'.
SELECTION-SCREEN COMMENT 4(15) text-003.
PARAMETERS p_s1_db TYPE usr02-bname MATCHCODE OBJECT user_comp
MODIF ID s1d
DEFAULT sy-uname.
SELECTION-SCREEN END OF LINE.
* Assinatura 1: Texto livre
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS r_s1_ft RADIOBUTTON GROUP s1.
SELECTION-SCREEN COMMENT 4(15) text-004.
PARAMETERS p_s1_ft(132) TYPE c MODIF ID s1f LOWER CASE
VISIBLE LENGTH 35.
PARAMETERS p_f1_ft(132) TYPE c MODIF ID s1f LOWER CASE
VISIBLE LENGTH 15.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
* Assinatura 2
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.
* Assinatura 2: Usuário SAP
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS r_s2_db RADIOBUTTON GROUP s2 DEFAULT 'X' USER-COMMAND radio.
SELECTION-SCREEN COMMENT 4(15) text-003.
PARAMETERS p_s2_db TYPE usr02-bname MATCHCODE OBJECT user_comp
MODIF ID s2d
DEFAULT sy-uname.
SELECTION-SCREEN END OF LINE.
* Assinatura 2: Texto livre
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS r_s2_ft RADIOBUTTON GROUP s2.
SELECTION-SCREEN COMMENT 4(15) text-004.
PARAMETERS p_s2_ft(132) TYPE c MODIF ID s2f LOWER CASE
VISIBLE LENGTH 35.
PARAMETERS p_f2_ft(132) TYPE c MODIF ID s2f LOWER CASE
VISIBLE LENGTH 15.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.
* Padrão de unidades
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-005.
PARAMETERS: p_un_vol TYPE t006-msehi OBLIGATORY DEFAULT 'M3'
MATCHCODE OBJECT h_unit_volume.
SELECTION-SCREEN END OF BLOCK b4.
* Opções padrão de geração
SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-006.
PARAMETERS: p_print TYPE /pws/zycrl017 AS CHECKBOX,
p_prev TYPE /pws/zycrl018 AS CHECKBOX,
p_email TYPE /pws/zycrl019 AS CHECKBOX,
p_noshow TYPE /pws/zycrl020 AS CHECKBOX,
p_passwd(132) TYPE c LOWER CASE.
SELECTION-SCREEN END OF BLOCK b5.
PARAMETERS: p_option TYPE xfeld NO-DISPLAY.
* PAI DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN.
* Ao executar o relatório, alertar opções de assinatura em branco
IF sscrfields-ucomm = 'ONLI' OR sscrfields-ucomm = 'PRIN'.
IF ( r_s1_ft = 'X' AND p_s1_ft IS INITIAL )
OR ( r_s1_db = 'X' AND p_s1_db IS INITIAL ).
MESSAGE w030 WITH 'Assinatura/Cargo 1'(001).
ENDIF.
IF ( r_s2_ft = 'X' AND p_s2_ft IS INITIAL )
OR ( r_s2_db = 'X' AND p_s2_db IS INITIAL ).
MESSAGE w030 WITH 'Assinatura/Cargo 2'(002).
ENDIF.
ENDIF.
* PBO DA TELA DE SELEÇÃO ----------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'P_PASSWD'.
screen-invisible = '1'.
MODIFY SCREEN.
EXIT.
ENDIF.
ENDLOOP.
* 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.
* Fechar os campos não usados no bloco Assinatura 1
IF r_s1_db = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'S1F'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE. " r_s1_ft = "X'
LOOP AT SCREEN.
IF screen-group1 = 'S1D'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
* Fechar os campos não usados no bloco Assinatura 2
IF r_s2_db = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'S2F'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE. " r_s2_ft = "X'
LOOP AT SCREEN.
IF screen-group1 = 'S2D'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
* 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_nrseq
CHANGING
wa_cabecalho
it_zterm
it_itens[].
IF wa_cabecalho IS INITIAL
OR it_itens[] IS INITIAL.
MESSAGE e031. " Dados para o report não encontrados
ENDIF.
* Seleção de parâmetros para geração do report
PERFORM select_parameters
USING
p_repmod
p_report
sy-langu
wa_cabecalho-zycet001-bukrs
wa_cabecalho-zycet001-werks
wa_cabecalho-j_1bbranch
wa_cabecalho-zycet001-inco1
wa_cabecalho-zycet046-zterm
''
''
''
''
''
''
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-zycet001-bukrs.
msg_werks = wa_cabecalho-zycet001-werks.
msg_branch = wa_cabecalho-j_1bbranch.
msg_inco1 = wa_cabecalho-zycet001-inco1.
msg_zterm = wa_cabecalho-zycet046-zterm.
MESSAGE e000. " Não foi encontrada parametrização adequada
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
wa_cabecalho
it_zterm
it_excel_content[]
it_sect_height[].
* Determinação do nome do arquivo do report
PERFORM generate_file_name
USING
wa_cabecalho-zycet001-nrseq
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.
* Trata opções de geração de report: Envio de e-mail
IF p_email = 'X'.
wa_generation_options-option = xl_email_file_after_generate.
APPEND wa_generation_options TO it_generation_options[].
ENDIF.
* Trata opções de geração de report: Pré-visualização de e-mail
IF p_prev = 'X'.
wa_generation_options-option = xl_prn_prev_after_generate.
APPEND wa_generation_options TO it_generation_options[].
ENDIF.
* Trata opções de geração de report: Impressão direta
IF p_print = 'X'.
wa_generation_options-option = xl_print_after_generate.
APPEND wa_generation_options TO it_generation_options[].
ENDIF.
* Trata opções de geração de report: Geração sem exibição
IF p_noshow = 'X'.
wa_generation_options-option = xl_dont_show_after_generate.
APPEND wa_generation_options TO it_generation_options[].
ENDIF.
* Cria o report
PERFORM create_report
USING
wa_gen_param-report_generator
v_file_name
c_report_sheet
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_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_cabecalho TYPE s_cabecalho
p_zterm TYPE t_zterm
p_t_itens TYPE t_itens.
DATA: l_subrc TYPE sy-subrc,
l_ntgew TYPE ntgew_15,
l_brgew TYPE brgew_15,
l_volum TYPE volum_15,
it_vtopis TYPE STANDARD TABLE OF vtopis, "# EC NEEDED
vl_fob TYPE /pws/zycet002-vlfob,
vl_des type /pws/zycet002-vldesconto,
vl_fre type /pws/zycet002-vlfrete,
vl_seg type /pws/zycet002-vlseguro,
vl_acr type /pws/zycet002-vlacrescimo,
vl_out type /pws/zycet002-vlod.
* Preenchimento do cabeçalho.
* CABEÇALHO: Cabeçalho do embarque
SELECT SINGLE *
INTO p_cabecalho-zycet001
FROM /pws/zycet001
WHERE nrseq = p_nrseq.
* O seqüencial do embarque será usado até o fim.
CHECK sy-subrc = 0.
* CABEÇALHO: Dados para Documentos
SELECT SINGLE *
INTO p_cabecalho-zycet014
FROM /pws/zycet014
WHERE nrseq = p_nrseq.
* CABEÇALHO: Dados Adicionais do Emb.
SELECT SINGLE *
INTO p_cabecalho-zycet046
FROM /pws/zycet046
WHERE nrseq = p_nrseq.
* CABEÇALHO: Dados Adicionais do Emb.
* Só traz a 1ª linha do seq. de embarque.
SELECT SINGLE *
INTO p_cabecalho-zycet047
FROM /pws/zycet047
WHERE nrseq = p_nrseq.
*CABEÇALHO: Condição de pagamento
* SELECT COUNT( * )
* INTO p_cabecalho-cp_zterm
* FROM T052S
* WHERE zterm = p_cabecalho-zycet046-zterm.
*
* IF SY-SUBRC <> 0.
* p_cabecalho-cp_zterm = 1.
* ENDIF.
SELECT zterm ratnr ratpz ratzt
INTO table p_zterm
FROM T052S
WHERE zterm = p_cabecalho-zycet046-zterm.
IF SY-SUBRC <> 0.
p_cabecalho-cp_zterm = 1.
ENDIF.
* CABEÇALHO: Local de negócio
CALL FUNCTION 'J_1B_BRANCH_DETERMINE'
EXPORTING
company = p_cabecalho-zycet001-bukrs
plant = p_cabecalho-zycet001-werks
IMPORTING
branch = p_cabecalho-j_1bbranch
* COMPANY =
* LAND1 =
* REGIO =
EXCEPTIONS
branch_not_found = 0
plant_not_found = 0
valuation_area_not_found = 0
company_not_found = 0
OTHERS = 0.
* CABEÇALHO: Data local do usuário
p_cabecalho-sy_datlo = sy-datlo.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = p_cabecalho-sy_datlo
spras = sy-langu
IMPORTING
data_extenso = p_cabecalho-sy_datlo_t.
* CABEÇALHO: Data base de vencimento
* CASE p_cabecalho-zycet001-modo_venc.
*
* WHEN 'E'.
*
p_cabecalho-dtb_venc = p_cabecalho-zycet001-dtemb.
*
* WHEN 'B'.
*
* p_cabecalho-dtb_venc = p_cabecalho-zycet047-dtbl.
*
* WHEN 'V'.
*
* p_cabecalho-dtb_venc = p_cabecalho-zycet001-dtaverb.
*
* WHEN 'S'.
*
* p_cabecalho-dtb_venc = p_cabecalho-zycet001-dtcruze.
*
* ENDCASE.
IF NOT p_cabecalho-dtb_venc IS INITIAL.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = p_cabecalho-dtb_venc
spras = sy-langu
IMPORTING
data_extenso = p_cabecalho-dtb_venc_t.
ENDIF.
* CABEÇALHO: Data base de vencimento da parcela
CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'
EXPORTING
bldat = p_cabecalho-dtb_venc
terms_of_payment = p_cabecalho-zycet046-zterm
IMPORTING
zfbdt = p_cabecalho-dtb_venc_parc
TABLES
top_text = it_vtopis
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
OTHERS = 2.
IF sy-subrc = 0 AND NOT p_cabecalho-dtb_venc_parc IS INITIAL.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = p_cabecalho-dtb_venc_parc
spras = sy-langu
IMPORTING
data_extenso = p_cabecalho-dtb_venc_parc_t.
ENDIF.
* CABEÇALHO: Descrição do nome do país destino
PERFORM get_country_name
USING
sy-langu
p_cabecalho-zycet001-paisdest
CHANGING
p_cabecalho-nome_paisdest.
* Descrição do Meio de transporte
PERFORM get_domain_description
USING
'/PWS/ZYCID081'
p_cabecalho-zycet001-viatrans
sy-langu
CHANGING
p_cabecalho-meio_transp
l_subrc.
* Moeda
SELECT SINGLE waers
INTO p_cabecalho-waers
FROM /pws/zycet008
WHERE nrseq = p_cabecalho-zycet001-nrseq.
*CABEÇALHO: Gera Valor total de condição de venda por extenso.
PERFORM spell_currency_amount
USING
p_cabecalho-vl_tot_vend
p_cabecalho-waers
CHANGING
p_cabecalho-vl_tot_vend_txt.
* Nomes de usuários
PERFORM fill_users_names_info
USING
r_s1_db
p_s1_db
p_s1_ft
p_f1_ft
r_s2_db
p_s2_db
p_s2_ft
p_f2_ft
CHANGING
p_cabecalho-user_name_1
p_cabecalho-user_function_1
p_cabecalho-user_name_2
p_cabecalho-user_function_2.
* Preenchimento dos itens
DATA: wa_itens LIKE LINE OF p_t_itens[].
FIELD-SYMBOLS: <fs_itens> LIKE LINE OF p_t_itens[].
* ITENS: Itens do embarque
DATA: it_zycet002 TYPE STANDARD TABLE OF /pws/zycre018.
CALL FUNCTION '/PWS/ZYCR_ITENS_EMBARQUE_EXP'
EXPORTING
nrseq = p_cabecalho-zycet001-nrseq
inco1 = p_cabecalho-zycet001-inco1
tpcalc = p_cabecalho-zycet001-tpcalc
inclui_nao_faturados = 'X'
inclui_dados_t604 = space
TABLES
e_t_itens = it_zycet002[]
EXCEPTIONS
itens_nao_encontrados = 1
OTHERS = 2.
IF sy-subrc = 0.
CLEAR wa_itens.
LOOP AT it_zycet002 INTO wa_itens-zycet002.
ADD wa_itens-zycet002-vl_loc_emb TO p_cabecalho-fob_total.
ADD wa_itens-zycet002-vlfrete_final TO p_cabecalho-frt_total.
ADD wa_itens-zycet002-vlseguro_final TO p_cabecalho-seg_total.
ADD wa_itens-zycet002-vlod_final TO p_cabecalho-out_total.
ADD wa_itens-zycet002-vldesconto_final TO p_cabecalho-des_total.
ADD wa_itens-zycet002-vlacrescimo_final TO p_cabecalho-acr_total.
ADD wa_itens-zycet002-vlagente_final TO p_cabecalho-com_total.
ADD wa_itens-zycet002-fkimg_r TO p_cabecalho-qua_total.
ADD wa_itens-zycet002-vlme_r TO p_cabecalho-vl_tot_vend.
MOVE wa_itens-zycet002-arktx TO p_cabecalho-descricao.
APPEND wa_itens TO p_t_itens[].
ENDLOOP.
ENDIF.
* Percentual de comissão total
DATA: l_perc_comissao(3) TYPE p DECIMALS 2.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
l_perc_comissao = p_cabecalho-com_total
/ p_cabecalho-fob_total
* 100.
ENDCATCH.
IF sy-subrc = 0.
WRITE l_perc_comissao TO p_cabecalho-perc_com DECIMALS 2
NO-SIGN
LEFT-JUSTIFIED.
CONCATENATE p_cabecalho-perc_com '%' INTO p_cabecalho-perc_com.
ELSE.
p_cabecalho-perc_com = '999.99'.
ENDIF.
* Endereços
READ TABLE it_zycet002[] INTO wa_itens-zycet002 INDEX 1.
IF sy-subrc = 0.
PERFORM fill_header_adrc_fields
USING
wa_itens-zycet002-vbeln_va
CHANGING
p_cabecalho.
ENDIF.
* Inicializa dados para totalização de pesos.
CLEAR p_cabecalho-volum.
p_cabecalho-voleh = p_un_vol.
* ITENS: Índice do item e totais
LOOP AT p_t_itens[] ASSIGNING <fs_itens>.
* Índice do item
<fs_itens>-tabix = sy-tabix.
* Valor unitário
<fs_itens>-vl_emb_unit = <fs_itens>-zycet002-vl_loc_emb
/ <fs_itens>-zycet002-fkimg_r.
<fs_itens>-vl_cond_unit = <fs_itens>-zycet002-vl_cond_venda
/ <fs_itens>-zycet002-fkimg_r.
* Volume total
IF <fs_itens>-zycet002-voleh <> p_cabecalho-voleh.
PERFORM convert_units
USING
<fs_itens>-zycet002-volum
<fs_itens>-zycet002-voleh
p_cabecalho-voleh
CHANGING
l_volum
l_subrc.
IF l_subrc = 0.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
ADD l_volum TO p_cabecalho-volum.
ENDCATCH.
ENDIF.
ELSE.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
ADD <fs_itens>-zycet002-volum TO p_cabecalho-volum.
ENDCATCH.
ENDIF.
* Peso bruto total
IF NOT p_cabecalho-zycet001-gewei IS INITIAL.
p_cabecalho-gewei = p_cabecalho-zycet001-gewei.
ELSE.
p_cabecalho-gewei = 'KG'.
ENDIF.
IF <fs_itens>-zycet002-gewei <> p_cabecalho-gewei.
PERFORM convert_units
USING
<fs_itens>-zycet002-brgew_r
<fs_itens>-zycet002-gewei
p_cabecalho-gewei
CHANGING
l_brgew
l_subrc.
IF l_subrc = 0.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
ADD l_brgew TO p_cabecalho-brgew.
ENDCATCH.
ENDIF.
ELSE.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
ADD <fs_itens>-zycet002-brgew_r TO p_cabecalho-brgew.
ENDCATCH.
ENDIF.
ENDLOOP.
UNASSIGN <fs_itens>.
ENDFORM. " select_data
* --------------------------------------------------------------------
* Form create_excel_content_table
* --------------------------------------------------------------------
* Objetivo: Montar o report de fatura
*
* 1ª página: 1 X seção "A"
* 1ª página: n X seção "B"
* 1ª página: 1 X seção "C"
* demais páginas: 1 X seção "A"
* demais páginas: n X seção "B"
* demais páginas: n X seção "D"
*
* n = itens
*
* O documento tem estrutura fixa e a seção "B" deve ser
* inserida 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_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 INDEX 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_zterm LIKE it_zterm
p_t_excel_content TYPE t_excel_content
p_t_sect_height TYPE t_sect_height.
DATA: current_row TYPE i VALUE 1,
CURRENT_LINE TYPE i VALUE 1,
section_rows_a TYPE i,
total_zterm TYPE i.
DATA: cover_created TYPE abap_bool VALUE abap_false,
need_footer TYPE abap_bool VALUE abap_true.
DATA: has_remaining_space TYPE abap_bool.
DATA: remaining_item_space TYPE f.
DATA: section_height_a TYPE f,
section_height_report TYPE f,
filled_section_height TYPE f.
DATA: subrc TYPE sy-subrc.
DATA: it_section_content LIKE p_t_excel_content[].
DATA: it_vtopis TYPE STANDARD TABLE OF vtopis. "# EC NEEDED
* Seleciona as informações sobre as linhas do report
PERFORM select_row_height_cache
USING
p_rep_param-spras
p_rep_param-file_id
CHANGING
p_t_sect_height[].
* Obtém a altura da página do report, em pontos
PERFORM get_section_height
USING
c_report_sheet
p_t_sect_height[]
CHANGING
section_height_report.
* Obtém a altura da seção "A" do report, em pontos
PERFORM get_section_height
USING
'A'
p_t_sect_height[]
CHANGING
section_height_a.
* Obtém a altura da seção "A" do report, em número de linhas
PERFORM get_section_rows
USING
'A'
p_t_sect_height[]
CHANGING
section_rows_a.
DATA: wa_it_vtopis LIKE LINE OF it_vtopis[].
DATA: wa_zterm LIKE LINE OF it_zterm[].
* Obtém o total de zterm¿s a processar
DESCRIBE TABLE p_zterm[] LINES total_zterm.
IF total_zterm IS INITIAL.
total_zterm = 1.
ENDIF.
DIVIDE p_header-vl_tot_vend BY total_zterm.
WHILE CURRENT_LINE <= total_zterm.
READ TABLE it_zterm[] INTO wa_zterm INDEX SY-INDEX.
CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'
EXPORTING
bldat = p_header-dtb_venc
budat = p_header-dtb_venc
cpudt = p_header-dtb_venc
terms_of_payment = wa_zterm-condicao
IMPORTING
zfbdt = p_header-dtb_venc_parc
TABLES
top_text = it_vtopis
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
OTHERS = 2.
IF sy-subrc = 0 AND NOT p_header-dtb_venc_parc IS INITIAL.
READ TABLE it_vtopis[] INTO wa_it_vtopis INDEX 1.
IF sy-subrc eq 0.
MOVE wa_it_vtopis-hdatum TO p_header-dtb_venc_parc.
ENDIF.
CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'
EXPORTING
data = p_header-dtb_venc_parc
spras = sy-langu
IMPORTING
data_extenso = p_header-dtb_venc_parc_t.
ENDIF.
*CABEÇALHO: Gera Valor total de condição de venda por extenso.
PERFORM spell_currency_amount
USING
p_header-vl_tot_vend
p_header-waers
CHANGING
p_header-vl_tot_vend_txt.
* Inclui uma seção 'A': Cabeçalho
PERFORM append_new_section
USING
'A'
current_row
CHANGING
p_t_excel_content[].
PERFORM fill_header_fields
USING
p_header
'A'
current_row
p_t_matrix[]
p_t_report_fields[]
CHANGING
p_t_excel_content[].
ADD section_rows_a TO current_row.
ADD 1 TO CURRENT_LINE.
ENDWHILE.
* Inclui a quebra de página
PERFORM add_page_break
USING
current_row
CHANGING
p_t_excel_content[].
ENDFORM. " create_excel_content_table
*---------------------------------------------------------------------*
* FORM FILL_HEADER_ADRC_FIELDS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> ENDFORM *
*---------------------------------------------------------------------*
FORM fill_header_adrc_fields
USING
p_vbeln TYPE vbeln
CHANGING
p_header TYPE s_cabecalho.
DATA: v_subrc TYPE sy-subrc,
v_codigo_r3 TYPE parvw,
v_adrnr TYPE adrnr.
* Agente
PERFORM translate_partner_code
USING
'AG'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_ag
v_subrc.
ENDIF.
ENDIF.
* Cliente da reserva
PERFORM translate_partner_code
USING
'RM'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_rm
v_subrc.
ENDIF.
ENDIF.
* Cliente final
PERFORM translate_partner_code
USING
'CF'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_cf
v_subrc.
ENDIF.
ENDIF.
* Consignatário
PERFORM translate_partner_code
USING
'CO'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_co
v_subrc.
ENDIF.
ENDIF.
* Emissor da Fatura
PERFORM translate_partner_code
USING
'PI'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_pi
v_subrc.
ENDIF.
ENDIF.
* Exportador
CLEAR v_adrnr.
IF NOT p_header-zycet001-werks IS INITIAL.
SELECT SINGLE adrnr
INTO v_adrnr
FROM t001w
WHERE werks = p_header-zycet001-werks.
ELSE.
SELECT SINGLE adrnr
INTO v_adrnr
FROM t001
WHERE bukrs = p_header-zycet001-bukrs.
ENDIF.
IF NOT v_adrnr IS INITIAL.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_ex
v_subrc.
ENDIF.
* Importador
PERFORM translate_partner_code
USING
'IM'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_im
v_subrc.
ENDIF.
ENDIF.
* Importador 2
PERFORM translate_partner_code
USING
'I2'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_i2
v_subrc.
ENDIF.
ENDIF.
* Importador 3
PERFORM translate_partner_code
USING
'I3'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_i3
v_subrc.
ENDIF.
ENDIF.
* Notificador
PERFORM translate_partner_code
USING
'NO'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_no
v_subrc.
ENDIF.
ENDIF.
* Notificador 2
PERFORM translate_partner_code
USING
'N2'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_n2
v_subrc.
ENDIF.
ENDIF.
* Recebedor da Mercadoria
PERFORM translate_partner_code
USING
'MR'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_mr
v_subrc.
ENDIF.
ENDIF.
* Representante do Pedido
PERFORM translate_partner_code
USING
'RP'
CHANGING
v_codigo_r3
v_subrc.
IF v_subrc = 0.
PERFORM get_partner_address_number
USING
p_vbeln
'000000'
v_codigo_r3
CHANGING
v_adrnr
v_subrc.
IF v_subrc = 0.
PERFORM get_adrc
USING
v_adrnr
CHANGING
p_header-adrc_rp
v_subrc.
ENDIF.
ENDIF.
ENDFORM. " fill_header_adrc_fields
*&---------------------------------------------------------------------*
*& Form fill_users_names_info
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_R_S1_DB text
* -->P_P_S1_DB text
* -->P_R_S1_FT text
* -->P_P_S1_FT text
* -->P_R_S2_DB text
* -->P_P_S2_DB text
* -->P_R_S2_FT text
* -->P_P_S2_FT text
* <--P_WA_USERS_NAMES text
*----------------------------------------------------------------------*
FORM fill_users_names_info
USING
p_flag_user1_sap TYPE flag
p_sap_user1 TYPE sy-uname
p_text_user_name1 TYPE c
p_text_user_func1 TYPE c
p_flag_user2_sap TYPE flag
p_sap_user2 TYPE sy-uname
p_text_user_name2 TYPE c
p_text_user_func2 TYPE c
CHANGING
p_name1 TYPE c
p_function1 TYPE adcp-function
p_name2 TYPE c
p_function2 TYPE adcp-function.
DATA: l_first_name TYPE adrp-name_first,
l_last_name TYPE adrp-name_last,
l_function TYPE adcp-function.
* Usuário 1
IF p_flag_user1_sap = 'X'.
PERFORM get_sap_user_info
USING
p_sap_user1
CHANGING
l_first_name
l_last_name
l_function.
CONCATENATE l_first_name l_last_name
INTO p_name1 SEPARATED BY space.
p_function1 = l_function.
ELSE.
p_name1 = p_text_user_name1.
p_function1 = p_text_user_func1.
ENDIF.
* Usuário 2
IF p_flag_user2_sap = 'X'.
PERFORM get_sap_user_info
USING
p_sap_user2
CHANGING
l_first_name
l_last_name
l_function.
CONCATENATE l_first_name l_last_name
INTO p_name2 SEPARATED BY space.
p_function2 = l_function.
ELSE.
p_name2 = p_text_user_name2.
p_function2 = p_text_user_func2.
ENDIF.
ENDFORM. " fill_users_names_info
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPT /PWS/ZYCRR017
Criados os símbolos de texto, idioma PT
Nº Texto Comp. máximo
000 Critérios de seleção 30
001 Assinatura/Cargo 1 30
002 Assinatura/Cargo 2 30
003 Usuário SAP 15
004 Texto livre 15
005 Unidades 15
006 Opções de geração do arquivo 30
Definidos os textos de seleção
Nome Texto Ref. DDIC
P_EMAIL X
P_NOSHOW X
P_NRSEQ X
P_PASSWD Proteger com senha
P_PREV X
P_PRINT X
P_REPMOD X
P_REPORT X
P_UN_VOL Volume total