quinta-feira, 12 de junho de 2014

SE78 - Carregamento de imagem

Fiquei me batendo numa carga de imagem na SE78.. Eu tinha um logo de uma empresa.. eu tive que redimensionar a imagem e trabalhar o fundo dela.. eu utilizei o PAINT.NET editor free muito bom para isso,  eu coloquei um fundo branco para não atrapalhar na visualização na visualização do meu smartforms, só estava salvando como .BMP padrão para importação de imagens na SE78, quando importava o logo o fundo da imagem em vez de branco ficava cinza. Daí eu encontrei no SDN uma solução, na verdade uma deficiência no SAP para trabalhar imagens com mais de 8 bits.. e reparei que ao salvar a imagem ele salvava com uma resolução automática para BMP, eu simplesmente marquei para salvar em 8 bits e resolveu o problema.

ALV - campo com matchcode F4 - Implementação manual

 Esse é para os casos de se desejar colocar uma lista de valores (matchcode) especifico em um campo de uma lista ALV.


Não esquecer de colocar o flag no campo que vai ter o F4 no fieldcat.
      WHEN 'ORIGTP'.
        <lfsw_fcat>-edit       'X'.
        <lfsw_fcat>-f4availabl 'X'.


e tem q registrar o evento no objeto ALV.
  DATAlt_f4 TYPE lvc_t_f4.
  DATAlw_f4 TYPE lvc_s_f4.

  CLEAR lw_f4.
  lw_f4-fieldname  'ORIGTP'.
  lw_f4-register   'X'.
  APPEND lw_f4 TO lt_f4.

  CALL METHOD gcl_alv->register_f4_for_fields
    EXPORTING
      it_f4 lt_f4.


No meu caso coloquei o código acima antes do método SET_TABLE_FOR_FIRST_DISPLAY.

Abaixo restante do código.

=========================================================

Criação do evento.

CLASS gcl_alv_event DEFINITION.

    on_f4
       FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname
                  e_fieldvalue
                  es_row_no
                  er_event_data
                  et_bad_cells
                  e_display.




ENDCLASS.    



=========================================================
*Implementação da classe.

CLASS gcl_alv_event IMPLEMENTATION.



  METHOD on_f4.
    PERFORM on_f4 USING e_fieldname
                        e_fieldvalue
                        es_row_no
                        er_event_data
                        et_bad_cells
                        e_display.
  ENDMETHOD.                                                "on_f4

ENDCLASS.   



==================================================



"Implementaçao da rotina..
" As linhas em vermelho são obrigatórias pois elas modificam o valor em tela logo após a seleção do valor da lista.. e o m_event_handler evita um erro que dá no retorno a tela.


FORM on_f4  USING f_fieldname    TYPE lvc_fname
                  f_fieldvalue   TYPE lvc_value
                  fw_row_no      TYPE lvc_s_roid
                  fcl_event_data TYPE REF TO cl_alv_event_data
                  ft_bad_cells   TYPE lvc_t_modi
                  f_display      TYPE char01.

  DATA: lw_alv  TYPE ze_gnre_rel_lote,
        lw_modi TYPE lvc_s_modi.

  DATA: l_origtp TYPE zgnre_origtp.

  FIELD-SYMBOLS: <lfst_modi> TYPE lvc_t_modi.

  ASSIGN fcl_event_data->m_data->* TO <lfst_modi>.
  CHECK sy-subrc = 0.


  READ TABLE gt_alv INTO lw_alv INDEX fw_row_no-row_id.
  CHECK sy-subrc = 0.

  CASE f_fieldname.
    WHEN 'ORIGTP'.
      IF lw_alv-gnreid IS INITIAL.

        PERFORM f4_codreceita USING lw_alv-regio
                           CHANGING l_origtp.

        f_fieldvalue = l_origtp.

        CLEAR lw_modi.
        lw_modi-row_id    = fw_row_no-row_id.
        lw_modi-fieldname = f_fieldname.
        lw_modi-value = f_fieldvalue.
        APPEND lw_modi TO <lfst_modi>.

      ENDIF.

      fcl_event_data->m_event_handled = 'X'.

  ENDCASE.

ENDFORM.                                                    " ON_F4




*&---------------------------------------------------------------------*
*&      Form  F4_CODRECEITA
*&---------------------------------------------------------------------*
FORM f4_codreceita USING f_regio TYPE regio
                CHANGING f_origtp TYPE zgnre_origtp.

  DATA: lt_rettab TYPE TABLE OF ddshretval,
        lt_c023 TYPE TABLE OF zc023.

  DATA: lw_rettab TYPE ddshretval.

  SELECT *
    INTO TABLE lt_c023
    FROM zc023
   WHERE regio EQ f_regio.

  CHECK sy-subrc = 0.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      ddic_structure  = 'ZC023'
      retfield        = 'ORIGTP'
      value_org       = 'S'
    TABLES
      value_tab       = lt_c023
      return_tab      = lt_rettab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  CHECK sy-subrc = 0.

  READ TABLE lt_rettab INTO lw_rettab INDEX 1.

  CHECK sy-subrc = 0.

  f_origtp = lw_rettab-fieldval.

ENDFORM.                    " F4_CODRECEITA