위 와 같은 방식으로 모르는 부분을 GPT에 계속 물어보았습니다.
내용이 많아서 링크 공유드립니다.
https://chat.openai.com/share/58f8523c-84aa-4b78-a69e-5600a332d45f
위 링크는 ABAP소스코드에 대해서 내용설명과 소스코드 오류나는부분 수정한내용입니다.
참조부탁드립니다.
우선 엑셀업로드 프로그램 만드는 순서를 말씀드리자면
z로 만든 펑션모듈을 ABAPGIT으로 업로드하기
ZGPTER_T_2 이름의 테이블 만들기
ABAP 소스코드 복사해서 붙여넣기
SCREEN 100을 만들고 OK_CODE및 스크린페인터에서 CONT0100 컨테이너테이블생성
엑셀파일 데이터입력하기
엑셀업로드 실행해보기
ABAPGIT으로 업로드해보겠습니다.
(안되시는분 개인적으로 연락하면 도와드리겠습니다)
SE38에서 ‘ZABAPGIT_STANDAALONE’ 이름으로 프로그램을 생성합니다.
그리고 TXT파일에 있는 소스코드를 붙여넣기 합니다.
ZABAPGIT_STANDALONE.txthttps://www.gpters.org/language/post/sap-abap-program-can-b7kyLzfUjF9M3eO
import하는 글 작성한것 참조부탁드립니다.
ZGPTER_T_2 이름의 테이블 만들기
https://www.gpters.org/language/post/creating-table-recorded-videos-IG4QqMWoxw7kmWb
테이블만드는법 사례글 참조부탁드립니다.
ABAP 소스코드 복사해서 붙여넣기
토요일에 실습시 너무 복잡해서 단순하게 주석처리한부분 다 지우고
중복되거나 불필요한 부분 다 삭제하였습니다.
*&---------------------------------------------------------------------*
*& Report ZGPTERS_09_UP_01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZGPTERS_09_UP_01.
"z00co 패키지 type 을 라이브러리로 사용하기위해 선언함
TYPE-POOLS z00co.
* Tables을 스크린필드 기능을 사용하기위해 선언함
TABLES: sscrfields.
* Internal Tables & Structure
DATA: gt_z00cos0021 TYPE TABLE OF ZGPTER_T_2,
gs_z00cos0021 TYPE ZGPTER_T_2.
data: gt_fldcat TYPE lvc_t_fcat, "gt_fact
gs_fldcat TYPE lvc_s_fcat.
DATA: ok_code TYPE syucomm,
g_exit TYPE xfeld,
gr_cont0100 TYPE REF TO cl_gui_custom_container, "go_con con1
gr_tabl0100 TYPE REF TO cl_salv_table.
* Field Symbols 엑셀업로드한 데이터를 담기위해 선언함
FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE.
"alv, data 조회하기 위해 선언함
DATA : GO_ALV TYPE REF TO CL_GUI_ALV_GRID, "g_grid
GO_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "gr_cont0100 cont0100
GO_CONtainer TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
go_docking TYPE REF TO cl_gui_docking_container, "g_docking
go_splitter TYPE REF TO cl_gui_splitter_container,
go_top type REF TO cl_gui_container,
go_bottom type REF TO cl_gui_container,
"alv optionally alv조회하면 옵션 기능을 사용하기위해서 선언함
gs_layout type lvc_s_layo,
gs_variant type disvariant.
data : g_grid TYPE REF TO cl_gui_alv_grid. "go_alv
DATA: lt_z00cos0021 TYPE TABLE OF ZGPTER_T_2,
ls_z00cos0021 TYPE ZGPTER_T_2.
"lt_table 선언이 안되있어서, 실행이 안되었습니다.
DATA: lt_table like TABLE OF ZGPTER_T_2 .
DATA : LS_TABLE TYPE ZGPTER_T_2.
*
* DATA: l_struct TYPE strukname,
* lr_itab TYPE REF TO data.
*---------------------------------------------------------------------*
* Selection Screen Definition
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
PARAMETERS:
pa_fname TYPE cffile-filename ."MORY ID z00cofname.
SELECTION-SCREEN SKIP.
PARAMETERS: pa_rad01 TYPE c DEFAULT 'X' RADIOBUTTON GROUP grp1 USER-COMMAND rad1,
pa_rad03 TYPE c RADIOBUTTON GROUP grp1." USER-COMMAND rad1.
SELECTION-SCREEN END OF BLOCK b1.
* *----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_fname.
PERFORM get_filename.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
CASE 'X'.
WHEN pa_rad01. " SET TITLEBAR 'TTL0100' WITH text-021.
PERFORM select_data.
WHEN pa_rad03. " SET TITLEBAR 'TTL0100' WITH text-022.
CALL SCREEN 0100.
ENDCASE.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
CASE 'X'.
WHEN pa_rad01.
* SET TITLEBAR 'TTL0100' WITH text-021.
IF g_exit EQ 'X'.
LEAVE PROGRAM.
*ENDIF.
* ELSE.
*
* IF <fs_table> IS INITIAL.
** MESSAGE s017 DISPLAY LIKE 'E'.
ELSE.
* IF <fs_table> IS NOT INITIAL.
CALL SCREEN 0100.
* ELSE.
* LEAVE PROGRAM.
* ENDIF.
* ENDIF.
ENDIF.
WHEN pa_rad03.
IF g_exit EQ 'X'.
CALL SCREEN 0100.
* ELSE.
* CALL SCREEN 0100.
ENDIF.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form GET_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_FILENAME .
DATA: l_inifn LIKE pa_fname.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = l_inifn
* DEF_PATH = ' '
mask = ',*.*,*.*.'
mode = 'O'
title = text-001
IMPORTING
filename = pa_fname
EXCEPTIONS
OTHERS = 0.
ENDFORM. " GET_FILENAME
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SELECT_DATA .
DATA: l_struct TYPE strukname,
lr_itab TYPE REF TO data.
CASE 'X'.
WHEN pa_rad01." OR pa_rad02.
l_struct = 'ZGPTER_T_2'.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = l_struct
CHANGING
ct_fieldcat = gt_fldcat.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fldcat
i_length_in_byte = 'X'
IMPORTING
ep_table = lr_itab.
ASSIGN lr_itab->* TO <fs_table>.
CALL FUNCTION 'Z00FCM_EXCEL_UPLOAD'
EXPORTING
i_structure = l_struct
i_with_head = 'X'
i_fname = pa_fname
IMPORTING
e_canc = g_exit
TABLES
t_outtab = <fs_table>
EXCEPTIONS
conversion_failed = 1
amount_convert_fail = 2
OTHERS = 3.
WHEN pa_rad03 ."OR pa_rad04 OR pa_rad06.
ENDCASE.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STS0100'.
SET TITLEBAR 'TTL0100'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module PBO_SCR_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_SCR_0100 OUTPUT.
IF gr_cont0100 IS INITIAL. "GO_ALV
CASE 'X'.
WHEN pa_rad01. " SET TITLEBAR 'TTL0100' WITH text-021.
PERFORM dispaly_tabl0100.
WHEN pa_rad03. " SET TITLEBAR 'TTL0100' WITH text-022.
PERFORM dispaly_tabl0200.
ENDCASE.
ENDIF.
ENDMODULE. " PBO_SCR_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form DISPALY_TABL0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPALY_TABL0100 .
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table,
lr_functions TYPE REF TO cl_salv_functions_list.
CREATE OBJECT gr_cont0100 "go_container
EXPORTING
container_name = 'CONT0100'. "'con1'
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = gr_cont0100
IMPORTING
r_salv_table = gr_tabl0100
CHANGING
t_table = <fs_table> ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
lr_columns = gr_tabl0100->get_columns( ).
lr_columns->set_optimize( abap_true ).
LOOP AT gt_fldcat INTO gs_fldcat WHERE cfieldname IS NOT INITIAL.
TRY.
lr_column ?= lr_columns->get_column( gs_fldcat-fieldname ).
lr_column->set_currency_column( gs_fldcat-cfieldname ).
CATCH cx_salv_not_found. "#EC NO_HANDLER
ENDTRY.
ENDLOOP.
lr_functions = gr_tabl0100->get_functions( ).
lr_functions->set_default( abap_true ).
gr_tabl0100->display( ).
ENDFORM. " DISPALY_TABL0100
*&---------------------------------------------------------------------*
*& Form DISPALY_TABL0200
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPALY_TABL0200 .
data : gt_fldcat TYPE lvc_t_fcat, "gt_fact
gs_fldcat TYPE lvc_s_fcat.
select * from ZGPTER_T_2 into CORRESPONDING FIELDS OF table lt_table[].
IF go_alv is INITIAL.
* 필드명을 변경하지 않았더니 실행되었습니다.
*gs_fldcat-fieldname = 'ZS_PLANETYE3' .
*gs_fldcat-coltext = 'ZNAME'.
**gs_fldcat-just = 'L'.
**gs_fldcat-key = 'X'.
**gs_fldcat-outputlen = '2'.
*APPEND gs_fldcat TO gt_fldcat.
*
*gs_fldcat-fieldname = 'ZS_PLANETYE2' .
*gs_fldcat-coltext = 'ZNUMBER'.
CREATE OBJECT gr_cont0100 "go_container
EXPORTING
container_name = 'CONT0100'. "'con1'
CREATE OBJECT go_alv "g_grid
EXPORTING
i_parent = gr_cont0100.
gs_layout-sel_mode = 'A'.
gs_layout-cwidth_opt = 'X'.
gs_variant-report = sy-repid.
gs_variant-username = sy-uname.
gs_variant-handle = 1.
CALL METHOD GO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'ZGPTER_T_2'
IS_VARIANT = gs_variant
I_SAVE = 'A'
* I_DEFAULT = 'X'
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_OUTTAB = LT_TABLE[]
IT_FIELDCATALOG = gt_fldcat
.
ELSE.
DATA : LS_STABLE type lvc_s_stbl value 'X'.
CALL METHOD GO_ALV->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STABLE.
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDFORM. " DISPALY_TABL0200
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'CANC'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE 'X'.
WHEN pa_rad01.
CASE ok_code.
WHEN z00co_save. PERFORM proc_save_scr_0100.
ENDCASE.
WHEN pa_rad03.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form PROC_SAVE_SCR_0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROC_SAVE_SCR_0100 .
DATA: l_answer.
z00clcm_common=>popup_to_confirm( EXPORTING i_title = text-031
i_text1 = text-032
IMPORTING e_answer = l_answer ).
CHECK l_answer EQ 'J'.
CASE 'X'.
WHEN pa_rad01 ."OR pa_rad02.
PERFORM proc_bapi_by_period.
WHEN pa_rad03 ."OR pa_rad04 OR pa_rad06.
* PERFORM proc_bapi_by_year.
ENDCASE.
ENDFORM. " PROC_SAVE_SCR_0100
*&---------------------------------------------------------------------*
*& Form PROC_BAPI_BY_PERIOD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROC_BAPI_BY_PERIOD .
TABLES ZGPTER_T_2 .
DATA: lt_z00cos0021 TYPE TABLE OF ZGPTER_T_2,
ls_z00cos0021 TYPE ZGPTER_T_2,
l_tabix TYPE sytabix,
l_amount TYPE c LENGTH 25,
l_avlamt TYPE Z00COE0020,
l_error.
DATA: lt_table like TABLE OF ZGPTER_T_2 .
* CLEAR: gs_header.
* REFRESH: gt_plnatv, gt_prmobj, gt_prmval, gt_prmtot, gt_contrl,
* gt_return.
gt_z00cos0021[] = <fs_table>.
DELETE FROM ZGPTER_T_2.
* 테이블을 초기화합니다.
SORT gt_z00cos0021.
LOOP AT gt_z00cos0021 INTO gs_z00cos0021.
APPEND gs_z00cos0021 TO lt_table.
ENDLOOP.
* 새로업로드한 excel file로 수정
modify ZGPTER_T_2 from table lt_table. " INTO z00cos0021_T2 .
ENDFORM. " PROC_BAPI_BY_PERIOD
4.SCREEN 100을 만들고 OK_CODE및 스크린페인터에서 CONT0100 컨테이너테이블생성
5.엑셀파일 데이터 다운받기
707.xlsx6.엑셀업로드 실행해보기
이렇게 엑셀 업로드하는것을 해보았습니다.
필드명 , 버튼이름 , 메세지 박스 등 부족한게 많습니다.
차후 보완하도록 하겠습니다.
이상입니다.
#9기 SAP방