Abap 使用不带转换出口的输出和SALV类

Abap 使用不带转换出口的输出和SALV类,abap,alv,sap-data-dictionary,Abap,Alv,Sap Data Dictionary,在SE16N的“技术设置”中,有一个复选框,用于在不退出转换的情况下输出。 在我的程序中,我使用类CL_SALV_表来创建ALV。是否可以在程序中设置一个与SE16N类似的复选框,当用户启用它时,我的ALV将显示与SE16N类似的数据? 谢谢 Elias在SAP中一切都是可能的,但是我不确定您的请求是否可以使用class CL_SALV_表。我建议您使用类CL_GUI_ALV_GRID,它是真正动态的,可以根据您的场景来实现 网上有很多教程,但我会尽量做一个小总结 创建父容器CL\u GUI\u

在SE16N的“技术设置”中,有一个复选框,用于在不退出转换的情况下输出。
在我的程序中,我使用类CL_SALV_表来创建ALV。是否可以在程序中设置一个与SE16N类似的复选框,当用户启用它时,我的ALV将显示与SE16N类似的数据?
谢谢

Elias

在SAP中一切都是可能的,但是我不确定您的请求是否可以使用class CL_SALV_表。我建议您使用类CL_GUI_ALV_GRID,它是真正动态的,可以根据您的场景来实现

网上有很多教程,但我会尽量做一个小总结

  • 创建父容器CL\u GUI\u CUSTOMCONTAINER
  • 创建ALV栅格并设置父栅格
  • 获取字段目录(也可以是动态的,以适应任何表)
  • 创建输出表并传递操作
  • 显示ALV
  • 确保可以根据用户的选择设置显示的表格(复选框)


    如果您需要更多帮助,请写下

    这是我想要的,因为我正在广泛使用SALV

    ** Display the data Without Conversion
      DATA: l_tabledescr_ref TYPE REF TO cl_abap_tabledescr,
            l_descr_ref      TYPE REF TO cl_abap_structdescr,
            wa_table         TYPE abap_compdescr.
      IF p_woconv = 'X'.
        TRY.
            columns = oref_table->get_columns( ).
            l_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( <fs_itab> ).
            l_descr_ref ?= l_tabledescr_ref->get_table_line_type( ).
    
            LOOP AT l_descr_ref->components INTO wa_table.
              DATA(edit_mask) = columns->get_column( wa_table-name )->get_edit_mask( ).
              IF edit_mask(2) = '=='.
                columns->get_column( wa_table-name )->set_edit_mask( ' ' ).
              ENDIF.
              IF wa_table-type_kind = 'C' OR wa_table-type_kind = 'N'.
                columns->get_column( wa_table-name )->set_leading_zero( ).
              ENDIF.
            ENDLOOP.
    
          CATCH cx_salv_not_found.
        ENDTRY.
      ENDIF.
    
    **无需转换即可显示数据
    数据:l_tabledescr_ref TYPE ref至cl_abap_tabledescr,
    l_descr_ref TYPE ref TO cl_abap_structdescr,
    wa_表类型abap_compdescr。
    如果p_woconv='X'。
    尝试
    columns=oref\u table->get\u columns()。
    l\u tabledescr\u ref?=cl\u abap\u typedescr=>description\u by\u data()。
    l\u descr\u ref?=l\u tabledescr\u ref->get\u table\u line\u type()。
    在l_descr_ref->组件处循环到wa_表中。
    数据(编辑掩码)=列->获取列(wa表名)->获取编辑掩码()。
    如果编辑_掩码(2)='='='。
    列->获取列(wa\U表格名称)->设置编辑掩码(“”)。
    恩迪夫。
    如果wa_table-type_-kind='C'或wa_table-type_-kind='N'。
    columns->get_column(wa_table-name)->set_leading_zero()。
    恩迪夫。
    结束循环。
    未找到捕获残次。
    结束。
    恩迪夫。
    
    如果有人对SALV有更好的解决方案,我将非常感谢与我们分享。
    谢谢大家的回答。

    Elias

    这并不是问题的真正答案,OP不需要创建网格的一般方法,而是关于数据元素显示模式的特定问题是否有字段目录?字段目录的编辑掩码字段可用于此操作。例如,如果字段长度为10个字符,则可以添加编辑掩码,该值为:“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,因此字段值将在没有任何内部转换的情况下被接管。@JózsefSzikszai可能值得将其转换为answer最后,答案在SET_EDIT_MASK中,特别是在下面的命令中:columns->get_column('MATNR')->SET_EDIT_MASK('')。现在,我正在寻找一种方法来为所有具有转换的字段执行此操作。谢谢