Problem z optymalizacją kolumn w ALV.

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
K602
Posty: 135
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 60 times
Been thanked: 86 times
Kontakt:

Re: Problem z optymalizacją kolumn w ALV.

Post autor: K602 »

Musisz sprawdzić, w którym momencie tracisz referencję do obiekty ALV, bo na to wskazuje błąd. Obiekt ALV najlepiej zrobić globalny, aby z dowolnego miejsca klasy, zawsze mieć dostęp do niego. Postaw STOPy w kilku miejscach i zobaczysz. Obstawiam, że metoda do refresh, nie widzi już ALV, czyli obiekt jest NULL, bo korzystasz z jego kopii, zamiast oryginału...
SAP ABAP Certified Developer
natanielg
Posty: 16
Rejestracja: wt kwie 12, 2022 12:42 pm
Has thanked: 4 times
Been thanked: 5 times

Re: Problem z optymalizacją kolumn w ALV.

Post autor: natanielg »

Kod: Zaznacz cały

 METHOD build_alv.
***********************************************************
* Print ALV
***********************************************************
    DATA: "lt_fcat   TYPE lvc_t_fcat,
      ls_layo   TYPE lvc_s_layo,
      lv_title  TYPE lvc_title,
      ls_layout TYPE disvariant.
    DATA: ls_stable TYPE lvc_s_stbl.

    CLEAR ls_stable.

*    ls_stable-row = 'X'.
*    ls_stable-col = 'X'.

    FIELD-SYMBOLS: <lt_tab>  TYPE ANY TABLE.
    ASSIGN mt_data TO <lt_tab>.
    CHECK sy-subrc = 0.
    IF mr_cc IS NOT BOUND.

      CREATE OBJECT mr_cc
        EXPORTING
          container_name = 'CC_0100'
        EXCEPTIONS
          OTHERS         = 99.
      IF sy-subrc = 0.

        CREATE OBJECT mr_alv
          EXPORTING
            i_parent = mr_cc
*           i_appl_events = 'X'
          EXCEPTIONS
            OTHERS   = 99.
        IF sy-subrc = 0.

          SET HANDLER handle_toolbar      FOR mr_alv.
          SET HANDLER handle_user_command FOR mr_alv.
          REFRESH mt_fcat.
          build_fcat( EXPORTING it_data_structure = <lt_tab>
                      IMPORTING et_fieldcat = mt_fcat ).
          modify_fieldcatalog( CHANGING ct_fieldcat = mt_fcat ).
          set_layout( IMPORTING es_layout = ls_layo ).
          ls_layout-report = sy-repid.


*          ls_layout-report = sy-repid.
*          ls_layout-username = sy-uname. "To jest ważne
*          ls_layout-handle = 'AML'. "To jest ważne

          CALL METHOD mr_alv->set_table_for_first_display
            EXPORTING
              is_variant      = ls_layout
              is_layout       = ls_layo
              i_save          = 'A'
            CHANGING
              it_outtab       = mt_data
              it_fieldcatalog = mt_fcat
            EXCEPTIONS
              OTHERS          = 99.

*          ls_stable-row = 'X'.
*          ls_stable-col = 'X'.

          CALL METHOD mr_alv->set_ready_for_input
            EXPORTING
              i_ready_for_input = 0.

        ENDIF.
      ENDIF.

      mr_alv->GET_FRONTEND_LAYOUT( IMPORTING es_layout = ls_layo ).
      mr_alv->SET_FRONTEND_LAYOUT( ls_layo ).
*      mr_alv->set
*      mr_alv->GET_FRONTEND_FIELDCATALOG( ).
      refresh_alv( ).
    ENDIF.
  ENDMETHOD.                    "build_alv
  METHOD build_fcat.
    CLEAR: et_fieldcat[].

    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name       = 'ZTM_CUSTOMER_ZONE_ALV_ST' " <-- Wpisać strukturę jaka będzie wyświetlana
        i_client_never_display = 'X'
      CHANGING
        ct_fieldcat            = et_fieldcat[].

  ENDMETHOD.                    "build_fcat

  METHOD set_layout.
*    es_layout-grid_title = TEXT-003.
    es_layout-cwidth_opt = 'X'.
    es_layout-col_opt = 'X'.
    es_layout-zebra = 'X'.
    es_layout-no_keyfix = 'X'.
    "es_layout-no_rowmark = 'X'.
    es_layout-sel_mode = 'A'.
*    es_layout-info_fname = 'ROWCOLOR'.
*     es_layout-ctab_fname = 'CELLCOLOR'.
  ENDMETHOD.                    "set_layout
Udało mi się naprawić metodę refresh tak że już nie wyrzuca błędu. Próbowałem odnieść się też do noty i przed refreshem wywołać te dwie metody
SET_FRONTEND_LAYOUT i GET_FRONTEND_LAYOUT jednak nic to nie zmieniło odnośnie optymalizacji kolumn. Dalej są zbyt małe w stosunko do danych które posiadają.
DenzelWaszyngton
Posty: 57
Rejestracja: czw maja 23, 2013 6:49 pm
Has thanked: 21 times
Been thanked: 14 times

Re: Problem z optymalizacją kolumn w ALV.

Post autor: DenzelWaszyngton »

natanielg pisze: śr mar 08, 2023 9:18 am
Zmieniłem to na Public i nadal mam ten sam błąd. W takim razie metoda refresh, gdzie powinna być wywoływana? Przepraszam za tak z pozoru głupie pytania, cały czas się uczę i nie chcę więcej popełniać błędów.
przed poniższym kodem dodaj proszę "ELSE." i należałoby sprawdzić czy mr_alv is bound, bo nie widzę w kodzie, abyś przechwytywał błędy tworzenia obiektów.

ELSE.
mr_alv->GET_FRONTEND_LAYOUT( IMPORTING es_layout = ls_layo ).
mr_alv->SET_FRONTEND_LAYOUT( ls_layo ).
* mr_alv->set
* mr_alv->GET_FRONTEND_FIELDCATALOG( ).
refresh_alv( ).
ENDIF.

a dlaczego masz zakomentowaną tę linię kodu?:
* <lf_fcat>-col_opt = 'X'.
ODPOWIEDZ