Встретил такую штуку.
Code:
LOOP AT mt_data ASSIGNING <ls_data>.
CLEAR lt_output.
APPEND <ls_data> TO lt_output.
CALL FUNCTION 'ZXLWB_CALLFORM'
EXPORTING
iv_formname = mc_filename
iv_viewer_inplace = ''
iv_context_ref = lt_output
EXCEPTIONS
process_terminated = 1
OTHERS = 2.
ENDLOOOP.
Работает все ок, но порой пишет ошибку "Не удалось найти ..." файл.
В отладке выяснил, что передавая пустое имя файла в папку "SAP GUI/ ~tmp~", пишется файл с генерированным именем модулем
Code:
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = lv_guid_1.
и этот модуль в цикле выдает одинаковые guid.
Это пол беды...
При каждом запуске вашего модуля для формы в цикле, происходит удаление по этому гуид файла во временной папке - естественно в цикле удаление не отработает корректно , так как файл еще открыт Excel.
Пробовал делать вызов после вашего модуля
Code:
"" Решение проблемы генерации GUID - иногда генерится одно и тоже ...
"" И зависает открытие 2 файла - исправляем.
"" берем 2 гуида и сравниваем их если генерит 2 подрят разных то гуд
"" иначе повторяем еще 4 раза - через итерации цикла , чтобы была временная разница между вызовами.
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
cl_gui_cfw=>dispatch( ) .
DO 12 TIMES.
lv_mod = sy-index MOD 3.
CASE lv_mod.
WHEN 1.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = lv_guid_1.
CONTINUE.
WHEN 2.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = lv_guid_2.
CONTINUE.
WHEN 0.
IF lv_guid_1 <> lv_guid_2.
EXIT.
ELSE.
CONTINUE.
ENDIF.
ENDCASE.
ENDDO.
Но это не решает проблему ...
возможно лучшим решением будет генерация имени временного файла по времени ? (а не по guid)
ЗЫ: генерация гуида - как я понимаю это нативная функция системы, и недра её нам не доступны...
ЗЫ:ЗЫ: версия XLSX-Workbench(XLWB) components [Version 3.09]