segunda-feira, 16 de maio de 2011

Select com campos de tipos diferentes

  "  Com o código abaixo conseguiremos trabalha num select comparando dois
" campos com tipos diferentes, kona-knuma é do tipo char10 e o campo
" cdhdr-objectid tem o tipo char90 portanto na hora de fazer a comparação
" e vc apertar Ctrl+f2 ( espero que vcs façam isso toda hora) irá aparecer
" este erro...


 

"  Para que não aconteça isso vc deverá alimentar a primeira tabela e depois
" jogar os dados pra dentro de uma tabela auxiliar onde o campo que vc irá
" usar no select será do mesmo tipo da tabela que vc que pegar os novos dados,
" parece dificil mas é sussa. Debuga este programa e conseguiram ver.
" Espero que vcs tenham dados na tabela KONA, na proxima eu uso outras tabelas.

REPORT zmj_fields_ne.

TYPES :
  " Estipulações ...
  BEGIN OF ty_kona,
    knuma  TYPE kona-knuma ," Estipulação
    vkorg  TYPE kona-vkorg ," Organização de Vendas
    vtweg  TYPE kona-vtweg ," Canal Distribuição
  END OF   ty_kona,

  " Estipulações aux para comparar tipo no select OBjectid/knuma
  BEGIN OF ty_kona_aux,
    knuma TYPE cdhdr-objectid," Estipulação
    vkorg TYPE kona-vkorg ,   "Organização de Vendas
    vtweg TYPE kona-vtweg ,   "Canal Distribuição
  END OF   ty_kona_aux,

  " Cabeçalho do documento de modificação
  BEGIN OF ty_cdhdr,
    objectclas TYPE cdhdr-objectclas,   " Classe de objetos
    objectid   TYPE cdhdr-objectid,     " Valor do objeto
    changenr   TYPE cdhdr-changenr,     " Nº modificação do documento
  END OF   ty_cdhdr
  .

" Tabelas Internas ....
DATA : it_kona     TYPE TABLE OF ty_kona,
       it_kona_aux TYPE TABLE OF ty_kona_aux,
       it_cdhdr    TYPE TABLE OF ty_cdhdr
       .

" Estruturas ...
DATA : st_kona     TYPE ty_kona,
       st_kona_aux TYPE ty_kona_aux,
       st_cdhdr    TYPE ty_cdhdr
       .

START-OF-SELECTION.

  PERFORM : z_seleciona_dados,
            z_mostra_dados
            .
*&---------------------------------------------------------------------*
*&      Form  Z_SELECIONA_DADOS
*&---------------------------------------------------------------------*
*       Seleciona os dados da tabela
*----------------------------------------------------------------------*
FORM z_seleciona_dados .

  " Seleção tabela KONA
  SELECT knuma
         vkorg
         vtweg
    FROM kona
    INTO TABLE it_kona
    .
  " Aki tah o pulo do gato ... olhem no form o comentário...
  PERFORM z_trata_it_kona_aux.

  " Seleção tabela CDHDR conforme dados da tabela IT_KONA_AUX
  SELECT objectclas
         objectid
         changenr
    FROM cdhdr
    INTO TABLE it_cdhdr
    FOR ALL ENTRIES IN it_kona_aux
    WHERE objectid = it_kona_aux-knuma.

ENDFORM.                    " Z_SELECIONA_DADOS

*&---------------------------------------------------------------------*
*&      Form  Z_TRATA_IT_KONA_AUX
*&---------------------------------------------------------------------*
*       Passa os dados da tabela it_kona para a it_kona_aux com tipo do
"  campo knuma modificado assim conseguindo compará-los no select.
*----------------------------------------------------------------------*
FORM z_trata_it_kona_aux .

  LOOP AT it_kona INTO st_kona.
    MOVE-CORRESPONDING st_kona TO st_kona_aux.
    st_kona_aux-knuma  = st_kona-knuma.
    APPEND st_kona_aux TO it_kona_aux.
  ENDLOOP.

ENDFORM.                    " Z_TRATA_IT_KONA_AUX

*&---------------------------------------------------------------------*
*&      Form  Z_MOSTRA_DADOS
*&---------------------------------------------------------------------*
*       Axibe os dados.
*----------------------------------------------------------------------*
FORM z_mostra_dados .

  LOOP AT it_cdhdr INTO st_cdhdr.
    WRITE st_cdhdr.
  ENDLOOP.

ENDFORM.                    " Z_MOSTRA_DADOS
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário