SAPфорум.RU
https://www.sapboard.ru/forum/

XLSX Workbench
https://www.sapboard.ru/forum/viewtopic.php?f=13&t=86294
Страница 12 из 15

Автор:  Sam Stone [ Пт, май 24 2019, 09:45 ]
Заголовок сообщения:  Re: XLSX Workbench

На паттернах+циклах это по этому примеру? https://sites.google.com/site/sapxlwb/h ... mples/ex09

Таблица динамическая с данными уже создана? Если да, то можно ее засунуть в cl_salv_tree (иерархию не делать, всё верхним уровнем) и вывести под заголовком. Тогда не надо будет "переворачивать" таблицу для вывода как в примере.

Автор:  AbpJun [ Чт, май 30 2019, 10:34 ]
Заголовок сообщения:  Re: XLSX Workbench

Sam Stone написал(а):
На паттернах+циклах это по этому примеру? https://sites.google.com/site/sapxlwb/h ... mples/ex09

Таблица динамическая с данными уже создана? Если да, то можно ее засунуть в cl_salv_tree (иерархию не делать, всё верхним уровнем) и вывести под заголовком. Тогда не надо будет "переворачивать" таблицу для вывода как в примере.


Да на этом примере.

Написал разработчику, он помог с решением.
Единственное что не корректно указал в проблеме, что позиции должны схлопываться по matnr, если есть количества по разным заводам.

Обернул позиции в папку->цикл и внутри позиций ещё одна вложенная таблица с количеством, которую тоже обернул в папку и сделал вывод в строчку.
Вывод соответственно добил логикой.

Спасибо за ответ.

Автор:  Wise-Kaa [ Пн, дек 16 2019, 08:57 ]
Заголовок сообщения:  Re: XLSX Workbench

Добрый день, Игорь.
Внес небольшую доработку в Workbench, может она Вас заинтересует, и Вы добавите ее в новую версию.
Суть доработки - добавлен функционал, позволяющий импортировать новый файл Excel в готовый формуляр, с сохранением настроек формуляра.
Реализация:
Изменен
CLASS lcl_workbench
METHOD action_import

Code:
*   check existence
    IF lcl_form=>get_devclass( lv_formname ) IS NOT INITIAL .
*** + <
      me->reimport( lv_formname ).
      EXIT.
*** + >
***      MESSAGE i000(lp)
***         WITH v_text-t014                   " text: A form already exists with the name
***              lv_formname
***      RAISING process_terminated .
    ENDIF .


Добавлен метод reimport
Code:
  METHOD reimport.
    DATA: l_answer          TYPE char20,
          ls_head           TYPE lcl_form=>ty_s_head,
          lt_properties     TYPE lcl_form=>ty_t_properties,
          lt_hierarchy      TYPE lcl_form=>ty_t_hierarchy,
          ls_key            TYPE wwwdatatab,
          lv_devclass       TYPE tadir-devclass,
          lv_objid          TYPE wwwdatatab-objid,
          lt_document_table TYPE tsfmime,
          lv_document_size  TYPE i,
          lt_html_table     TYPE STANDARD TABLE OF w3html,
          cl_form           TYPE REF TO lcl_form,
          lv_formdescr      TYPE wwwdatatab-text.

    " Диалог с пользователем
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        titlebar              = 'Импорт'
        text_question         = 'Формуляр существует. Перегрузить?'
        default_button        = '2'
        display_cancel_button = ''
      IMPORTING
        answer                = l_answer
      EXCEPTIONS
        text_not_found        = 1
        OTHERS                = 2.
    CHECK l_answer EQ '1'.

    " Загрузка старого формуляра
    CREATE OBJECT r_formtemplate
      EXPORTING
        iv_formname   = iv_formname
        iv_create_new = space
        iv_editor     = abap_on
      EXCEPTIONS
        OTHERS        = 1.
    IF sy-subrc NE 0 .
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
      RAISE process_terminated .
    ENDIF .

    " Запоминаем настройки формуляра
    cl_form ?= r_formtemplate.
    lv_formdescr = cl_form->v_formdescr.
    r_formtemplate->r_exceltemplate->formparameters_struc_get(
                EXPORTING iv_path  = r_formtemplate->r_exceltemplate->c_path-formhead
                CHANGING  cs_struc = ls_head ) .
    r_formtemplate->r_exceltemplate->formparameters_table_get(
                EXPORTING iv_path  = r_formtemplate->r_exceltemplate->c_path-formproperties
                CHANGING  ct_tab   = lt_properties ) .
    r_formtemplate->r_exceltemplate->formparameters_table_get(
                EXPORTING iv_path  = r_formtemplate->r_exceltemplate->c_path-formhierarchy
                CHANGING  ct_tab   = lt_hierarchy ) .
    r_formtemplate->r_exceltemplate->free( ).
    CLEAR: r_formtemplate.


    " UPLOAD новый формуляр

*   lock an object
    IF lcl_form=>enq_lock( iv_formname = iv_formname ) IS NOT INITIAL .
      MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
      RAISING process_terminated .
    ENDIF .
*   upload file
    ls_key-relid = lcl_form=>c_relid .
    ls_key-objid = lcl_form=>conv_formname_ei( iv_formname ) .
    ls_key-text  = lv_formdescr .
    CALL FUNCTION 'UPLOAD_WEB_OBJECT'
      EXPORTING
        key = ls_key.
*   unlock the object
    lcl_form=>enq_unlock( iv_formname = iv_formname ) .


    " Считываем загруженный формуляр
    CREATE OBJECT r_formtemplate
      EXPORTING
        iv_formname   = iv_formname
        iv_create_new = space
        iv_editor     = abap_on
      EXCEPTIONS
        OTHERS        = 1.
    IF sy-subrc NE 0 .
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
      RAISE process_terminated .
    ENDIF .

    " Настройки формуляра
    r_formtemplate->r_exceltemplate->formparameters_struc_set(
                EXPORTING iv_path  = r_formtemplate->r_exceltemplate->c_path-formhead
                          is_struc = ls_head ) .
    r_formtemplate->r_exceltemplate->formparameters_table_set(
                EXPORTING iv_path  = r_formtemplate->r_exceltemplate->c_path-formproperties
                          it_tab   = lt_properties ) .
    r_formtemplate->r_exceltemplate->formparameters_table_set(
                EXPORTING iv_path  = r_formtemplate->r_exceltemplate->c_path-formhierarchy
                          it_tab   = lt_hierarchy ) .

    " Сохраняем
    lv_objid = r_formtemplate->conv_formname_ei( r_formtemplate->v_formname ).
    IF r_formtemplate->v_devclass IS INITIAL .
      lv_devclass = popup_devclass( iv_objid = lv_objid ) .
    ELSE .
      lv_devclass = r_formtemplate->v_devclass .
    ENDIF.
    CHECK lv_devclass IS NOT INITIAL .
    r_formtemplate->r_exceltemplate->rawdata_get_as_table(
               IMPORTING  et_document_table = lt_document_table
                          ev_document_size  = lv_document_size ) .

    CALL FUNCTION 'EXPORT_WEB_OBJECT'
      EXPORTING
        object_id          = lv_objid
        mimetype           = lcl_form=>c_mimetype
        text               = lv_formdescr
        size               = lv_document_size
        devclass           = lv_devclass
      TABLES
        html               = lt_html_table
        mime               = lt_document_table
      EXCEPTIONS
        size_not_specified = 1
        object_locked      = 2
        OTHERS             = 3.
    IF sy-subrc NE 0 .
      msg_syst_catch( ) .
      EXIT .
    ENDIF .

  ENDMETHOD.

Автор:  Бородин Игорь [ Пн, дек 16 2019, 19:08 ]
Заголовок сообщения:  Re: XLSX Workbench

Wise-Kaa написал(а):
Суть доработки - добавлен функционал, позволяющий импортировать новый файл Excel в готовый формуляр, с сохранением настроек формуляра.
Добрый день. Я правильно понимаю, что этот код обновляет форматирование, сохраняя дерево структуры формуляра? Спасибо, я вставлю этот код в будущих обновлениях.

Автор:  UncleV [ Пт, мар 20 2020, 18:36 ]
Заголовок сообщения:  Re: XLSX Workbench

Добрый день.
Есть проблемка: экспортирую в эксель дерево (класс - cl_hrpayna_gui_alv_tree, через вызов ФМ ZXLWB_CALLFORM),
но в fieldcatalog-е дерева есть поля-иконки (ICON = 'X').
Грид отрисовывает их нормально, однако в эксель такие ячейки передаются как пустые. Меня бы полностью устроило, если бы
значение передавалось как строка, я бы просто макросом их потом в экселе отработал. Есть вариант передачи таких полей в эксель?

Автор:  Бородин Игорь [ Пн, мар 23 2020, 05:54 ]
Заголовок сообщения:  Re: XLSX Workbench

UncleV написал(а):
Грид отрисовывает их нормально, однако в эксель такие ячейки передаются как пустые.
Это странно, потому, что иконки должны нормально вставляться в форму. Вот пример:
Code:
REPORT  ZTEST_ALVTREE.

TYPE-POOLS:
  abap ,
  icon .
TYPES:
  BEGIN OF ty_s_alvtree_outtab ,
    status_icon       TYPE icon_d ,
  END   OF ty_s_alvtree_outtab ,
  ty_t_alvtree_outtab TYPE STANDARD TABLE OF ty_s_alvtree_outtab .
DATA:
  go_alvtree          TYPE REF TO cl_hrpayna_gui_alv_tree ,  " -->> inherited from CL_GUI_ALV_TREE
  gt_alvtree_outtab   TYPE ty_t_alvtree_outtab .

* fill the context
PERFORM fill_context .

* call the form
CALL FUNCTION 'ZXLWB_CALLFORM'
  EXPORTING
    iv_formname        = 'ZTEST_ALVTREE'
    iv_context_ref     = go_alvtree
  EXCEPTIONS
    process_terminated = 1
    OTHERS             = 2.
IF sy-subrc NE 0 .
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
  EXIT .
ENDIF .

*&---------------------------------------------------------------------*
*&      Form  fill_context
*&---------------------------------------------------------------------*
FORM fill_context .

*---->> create tree
  CREATE OBJECT go_alvtree
    EXPORTING
      parent              = cl_gui_container=>default_screen
      node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
    EXCEPTIONS
      others              = 7.
  CHECK sy-subrc EQ 0 .

*---->> fieldcatalog
  DATA:
    ls_fct            TYPE lvc_s_fcat ,
    lt_fct            TYPE lvc_t_fcat .

  ls_fct-fieldname = 'STATUS_ICON' .
  ls_fct-icon        = 'X' .
  APPEND ls_fct TO lt_fct .

*---->> initialization
  go_alvtree->set_table_for_first_display(
    CHANGING  it_fieldcatalog     = lt_fct[]
              it_outtab           = gt_alvtree_outtab[] ) .

  cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .

*---->> add nodes to the tree
  DATA:
    ls_alvtree_outtab   TYPE ty_s_alvtree_outtab ,
    lv_nkey             TYPE lvc_nkey .

* ------------
  ls_alvtree_outtab-status_icon = icon_system_okay .

  go_alvtree->add_node(
        EXPORTING i_relat_node_key = space
                  i_relationship   = cl_gui_column_tree=>relat_last_child
                  i_node_text      = 'Parent'
                  is_outtab_line   = ls_alvtree_outtab
        IMPORTING e_new_node_key   = lv_nkey ) .

* ------------
  ls_alvtree_outtab-status_icon = icon_system_save .

  go_alvtree->add_node(
        EXPORTING i_relat_node_key = lv_nkey
                  i_relationship   = cl_gui_column_tree=>relat_last_child
                  i_node_text      = 'Child 1'
                  is_outtab_line   = ls_alvtree_outtab
        IMPORTING e_new_node_key   = lv_nkey ) .

* ------------
  ls_alvtree_outtab-status_icon = icon_system_back .

  go_alvtree->add_node(
        EXPORTING i_relat_node_key = lv_nkey
                  i_relationship   = cl_gui_column_tree=>relat_last_child
                  i_node_text      = 'Child 2'
                  is_outtab_line   = ls_alvtree_outtab ) .

* ------------
  ls_alvtree_outtab-status_icon = icon_system_cancel .

  go_alvtree->add_node(
        EXPORTING i_relat_node_key = lv_nkey
                  i_relationship   = cl_gui_column_tree=>relat_last_child
                  i_node_text      = 'Child 3'
                  is_outtab_line   = ls_alvtree_outtab ) .

  cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .

ENDFORM .                    "fill_context

Изображение

Автор:  UncleV [ Пн, мар 23 2020, 09:53 ]
Заголовок сообщения:  Re: XLSX Workbench

Бородин Игорь написал(а):
UncleV написал(а):
Грид отрисовывает их нормально, однако в эксель такие ячейки передаются как пустые.
Это странно, потому, что иконки должны нормально вставляться в форму. Вот пример...

А можно для этого примера скрин из ZXLWB_WORKBENCH с настройками?

Автор:  Бородин Игорь [ Пн, мар 23 2020, 11:46 ]
Заголовок сообщения:  Re: XLSX Workbench

UncleV написал(а):
А можно для этого примера скрин из ZXLWB_WORKBENCH с настройками?
Все настройки начальные
Изображение

Автор:  Бородин Игорь [ Вт, июл 21 2020, 18:42 ]
Заголовок сообщения:  Re: XLSX Workbench

Добрый день.
В новой версии 5.00 можно использовать инстанцию Класса в качестве Контекста. При этом, атрибуты класса (public section) будут доступны для биндинга.
Это позволит не плодить лишние структуры/табличные типы словаре.

Автор:  falazure123 [ Пт, июл 24 2020, 19:16 ]
Заголовок сообщения:  Re: XLSX Workbench

есть простенький формуляр. хэдер, таблица, футер.
Как можно настроить перенос на новые страницы?
сейчас вкривь и вкось переносит. может есть какие-то стандартные настройки?

Автор:  Бородин Игорь [ Сб, июл 25 2020, 23:51 ]
Заголовок сообщения:  Re: XLSX Workbench

falazure123 написал(а):
сейчас вкривь и вкось переносит
не могли бы Вы уточнить вопрос, как именно сейчас переносит, и как нужно

Автор:  logan1978 [ Вт, авг 04 2020, 12:28 ]
Заголовок сообщения:  Re: XLSX Workbench

Добрый день,
Есть вопрос по использованию XLSX Workbench:
импортируется excel шаблон нормально, но при любом изменении ячеек (стиля, ширины, типа и т.д.) внутри этого инструмента,
и дальнейшем сохранении, активировании - всегда падает в дамп.

Code:
Что произошло?                                                                                   
  Error in the ABAP Application Program                                                         
    The current ABAP program "SAPLZXLWB" had to be terminated because it has                     
    come across a statement that unfortunately cannot be executed.                               
Краткий текст                                                                                     
  Access via 'NULL' object reference not possible.                                             
Анализ ошибки                                                                                     
    An exception occurred that is explained in detail below.                                     
    The exception, which is assigned to class 'CX_SY_REF_IS_INITIAL', was not                     
     caught in                                                                                   
    procedure "BUFFERIZATION_BASEINFO" "(METHOD)", nor was it propagated by a                     
     RAISING clause.                                                                             
    Since the caller of the procedure could not have anticipated that the                         
    exception would occur, the current program is terminated.                                     
    The reason for the exception is:                                                             
    You attempted to use a 'NULL' object reference (points to 'nothing')                         
    access a component.                                                                           
    An object reference must point to an object (an instance of a class)                         
    before it can be used to access components.                                                   
    Either the reference was never set or it was set to 'NULL' using the                         
    CLEAR statement.   
Информация о месте прерывания                                                                     
    Termination occurred in the ABAP program "SAPLZXLWB" - in                                     
     "BUFFERIZATION_BASEINFO".                                                                   
    The main program was "ZXLWB ".                                                               
    In the source code you have the termination point in line 4323                               
    of the (Include) program "ZXLWB_INCLUDE".                                                     
    The termination is caused because exception "CX_SY_REF_IS_INITIAL" occurred in               
    procedure "BUFFERIZATION_BASEINFO" "(METHOD)", but it was neither handled                     
     locally nor declared                                                                         
    in the RAISING clause of its signature.                                                       
    The procedure is in program "SAPLZXLWB "; its source code begins in line                     
    4245 of the (Include program "ZXLWB_INCLUDE ".

Однако у других пользователей такие изменения корректно отрабатывают.

подскажите, пож-ста, что и где может быть не доустановлено?

Автор:  Бородин Игорь [ Чт, авг 06 2020, 00:48 ]
Заголовок сообщения:  Re: XLSX Workbench

logan1978 написал(а):
Однако у других пользователей такие изменения корректно отрабатывают.
Добрый день.
Трудно предполагать, ведь Вы не указали ни версию ZXLWB, ни фрагмент кода, на котором валится в дамп . Но наиболее вероятная причина в том, что установленная у Вас версия SAP GUI некорректно взаимодействует с MS Excel. Проверить это можно запустив стандартные примеры офис-интеграции (SAPRDEMO_SPREADSHEET_INTERFACE, SAPRDEMO_TABLES_IN_EXCEL, SAPRDEMOEXCELINTEGRATION2). Если это так, то установите последнюю версию/patch level, ну или ту, которая у коллег.

Автор:  logan1978 [ Чт, авг 06 2020, 09:08 ]
Заголовок сообщения:  Re: XLSX Workbench

Большое спасибо,
Помогла установка более новой версии sap gui со всеми патчами

Автор:  Endrews [ Вт, сен 15 2020, 09:07 ]
Заголовок сообщения:  Re: XLSX Workbench

Привет.
Подскажите , пытаюсь адаптировать формулу, чтобы после выгрузки эксель, оно считалось внутри
Смотрю в XML внутренее представление:
IFERROR(ROUND(IF(AO4="", AG4*R4/AN4,AG4*R4/AO4),2),0)
Вставляю его в EXCEL в ячейку
= IFERROR(ROUND(IF(AO4="", AG4*R4/AN4,AG4*R4/AO4),2),0)
Говорит ошибка в формуле и не дает сохранять
Формулу на русском сохраняет - но не рассчитывает после выгрузки

Страница 12 из 15 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/