powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Вопросы по IT [закрыт для гостей] / 3+ способа как импортировать xlsx в sap.
Модераторы: Шоколадный01
5 сообщений из 5, страница 1 из 1
3+ способа как импортировать xlsx в sap.
    #713041
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
Постоянно забываю и изобретаю велосипед поновой. нада заложить штобы делать копи паст. лутше резерва пт не вижу альтернативы.[:wacko]
...
Изменено: 29.01.2024, 17:22 - Шоколадный01
Рейтинг: 0 / 0
3+ способа как импортировать xlsx в sap.
    #713095
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
Первый::без пробежки через указатель по полям экселя.. все одним вызовом.Der Kern ist MOVE-CORRESPONDING,.
Число колонок фиксировано, имена полей в строгом соответствии с именами полей внутренней таблицы..и походу с DDIC Felder..
Добавлять легко в любую позиций между полями. Должно быть продублированно в вызове комбинированной альфа конверсии (в приведенном коде внизу). Бетраги и даты должны быть скoпированы 1:1..альфа конверсия само собой не катит. дата должна быть сконвертировна сo string в dats отдельной формой
Удобно прокачивать FI-Транзакции.
Es wird über den FM BAPI_ACC_DOCUMENT_POSTgebucht.
Nur die Felder übernommen werden, die überein stimmen. die Reinfolge macht keine sorge..
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
data: lv_filesize type w3param-cont_len,
        lv_filetype type w3param-cont_type,
        lt_bin_data type w3mimetabtype.

  types: begin of lst_tab_excel,
           bukrs type bukrs,
           gjahr type gjahr,
           poper type poper,
           blart type string,
           bldat type string,,
           budat type string,
           xblnr type xblnr,
           waers type waers,
           id    type id,
           buzei type buzei,
           koart type koart,
           shkzg type shkzg,
           gkont type gkont,
           mwskz type mwskz,
           landl type landl,
           lzbkz type lzbkz,
         end of lst_tab_excel.

  types: ltt_tab_excel type table of lst_tab_excel.

  types: begin of lst_tab_dconv,
           bukrs type bukrs,
           gjahr type gjahr,
           poper type poper,
           blart type blart,
           bldat type bldat,
           budat type budat,
           xblnr type xblnr,
           waers type waers,
           id    type id,
           buzei type buzei,
           koart type koart,
           shkzg type shkzg,
           gkont type gkont,
           mwskz type mwskz,
           landl type landl,
           lzbkz type lzbkz,
         end of lst_tab_dconv.

  types: ltt_tab_dconv type table of lst_tab_dconv.

  data:
    ls_tab_excel       type lst_tab_excel,
    lt_tab_excel       type ltt_tab_excel,

    ls_tab_dconv       type lst_tab_dconv,
    lt_tab_dconv       type ltt_tab_dconv,
    lv_datumbeginn(10) type n,
    lv_filename        type string.

  field-symbols: <lt_worksheet> type table.
  if gt_files is not initial.
    "READ TABLE gt_files INTO gs_files index 1.
    "lv_FILENAME = gs_files-filename.

    cl_gui_frontend_services=>gui_upload(
               exporting
                 filename = |{ gt_files[ 1 ]-filename }|
                 filetype = 'BIN'
                 importing
                 filelength = lv_filesize
                 changing
                 data_tab = lt_bin_data ).

    "Umwandlung von solix -> xstring
    data(lv_bin_data) = cl_bcs_convert=>solix_to_xstring(
                        it_solix = lt_bin_data ).

    data(o_excel) = new cl_fdt_xl_spreadsheet(
               document_name = conv #( gt_files[ 1 ]-filename )
                               xdocument = lv_bin_data ).

    "Auslesen der Namen der Arbeitsblätter
    data: lt_worksheet_names type
    if_fdt_doc_spreadsheet=>t_worksheet_names.

    o_excel->if_fdt_doc_spreadsheet~get_worksheet_names(
                importing worksheet_names = lt_worksheet_names )."it_worksheet_names[ 1 ] )

    if lines( lt_worksheet_names ) > 0.

      data(o_worksheet_itab) =
        o_excel->if_fdt_doc_spreadsheet~get_itab_for_alv_update( ).

** Worksheet_ITAB zu einem generischen Field Symbol referenzieren
      assign o_worksheet_itab->* to field-symbol(<worksheet>).
      assign o_worksheet_itab->* to <lt_worksheet>.
      clear lv_datumbeginn.
      refresh lt_tab_excel.
*
      loop at <lt_worksheet> assigning field-symbol(<ls_worksheet>).
        move-corresponding <ls_worksheet> to ls_tab_excel.
        append ls_tab_excel
          to lt_tab_excel.
      endloop.

      loop at lt_tab_excel into ls_tab_excel.
        move-corresponding ls_tab_excel  to ls_tab_dconv.
        perform date_convert using ls_tab_excel-bldat changing ls_tab_dconv-bldat.
        perform date_convert using ls_tab_excel-budat changing ls_tab_dconv-budat.
        append ls_tab_dconv
          to lt_tab_dconv.

      endloop.

    endif.

    gt_datatab_conv = value #( for unconverted
                                   in lt_tab_dconv
    (
         bukrs = |{ unconverted-bukrs alpha = in }|
         gjahr = |{ unconverted-gjahr alpha = in }|
         poper = |{ unconverted-poper alpha = in }|
         blart = |{ unconverted-blart alpha = in }|
         bldat = |{ unconverted-bldat }|
         budat = |{ unconverted-budat }|
         xblnr = |{ unconverted-xblnr alpha = in }|
         bktxt = |{ unconverted-bktxt alpha = in }|
         waers = |{ unconverted-waers alpha = in }|
         id =    |{ unconverted-id alpha = in }|
         buzei = |{ unconverted-buzei alpha = in }|
         koart = |{ unconverted-koart alpha = in }|
         shkzg = |{ unconverted-shkzg alpha = in }|
         gkont = |{ unconverted-gkont alpha = in }|
         mwskz = |{ unconverted-mwskz alpha = in }|
         landl = |{ unconverted-landl alpha = in }|
         lzbkz = |{ unconverted-lzbkz alpha = in }|
     )
     ).
  endif.
...
Изменено: 30.01.2024, 01:30 - Шоколадный01
Рейтинг: 0 / 0
3+ способа как импортировать xlsx в sap.
    #713171
Фотография Green
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Пользователь назначен модератором темы: Шоколадный01.
...
Green:
Пользователь назначен модератором темы: Шоколадный01.
Рейтинг: 0 / 0
3+ способа как импортировать xlsx в sap.
    #715214
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
Способ 2й. Альтернатива к move-corresponding, если не привязыватсья к именам колонок в xlsx а к порядковому номеру колонки.
Пробежка через указатель по номерам колонки и присвоение содержимого указателя <lv_field> к соотв. полю во внутренней таблице.
остальная начинка такая же как и в Способе 1.
p_numco - число колонок.
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
  field-symbols: <lv_field> type any.
  field-symbols: <lt_worksheet> type table.

  if gt_files is not initial.
        lv_filename = |{ gt_files[ 1 ]-filename }|.
     else.
        lv_filename = p_file.
   endif.

    cl_gui_frontend_services=>gui_upload(
               exporting
                 filename = lv_filename
                 filetype = 'BIN'
                 importing
                 filelength = lv_filesize
                 changing
                 data_tab = lt_bin_data ).

   if lt_bin_data is not initial.
    "Umwandlung von solix -> xstring
    data(lv_bin_data) = cl_bcs_convert=>solix_to_xstring(
                        it_solix = lt_bin_data ).

    data(o_excel) = new cl_fdt_xl_spreadsheet(
              document_name = lv_filename
                               xdocument = lv_bin_data ).

    "Auslesen der Namen der Arbeitsblätter
    data: lt_worksheet_names type
    if_fdt_doc_spreadsheet=>t_worksheet_names.

    o_excel->if_fdt_doc_spreadsheet~get_worksheet_names(
                importing worksheet_names = lt_worksheet_names )."it_worksheet_names[ 1 ] )

    if lines( lt_worksheet_names ) > 0.

      data(o_worksheet_itab) =
        o_excel->if_fdt_doc_spreadsheet~get_itab_for_alv_update( ).

** Worksheet_ITAB zu einem generischen Field Symbol referenzieren
      assign o_worksheet_itab->* to field-symbol(<worksheet>).
      assign o_worksheet_itab->* to <lt_worksheet>.
      clear lv_datumbeginn.
      refresh lt_tab_excel.

      loop at <lt_worksheet> assigning field-symbol(<ls_worksheet>).
      do p_numco times.
        assign component sy-index of structure <ls_worksheet> to <lv_field>.
        case sy-index.
        when 1.
          ls_tab_excel-BUKRS = <lv_field>.
        when 2.
          ls_tab_excel-BLART = <lv_field>.
        when 3.
          ls_tab_excel-BLDAT = <lv_field>.
        when 4.
          ls_tab_excel-BUDAT = <lv_field>.
        when 5.
          ls_tab_excel-MONAT = <lv_field>.
        when 6.
          ls_tab_excel-BKTXT = <lv_field>.
        when 7.
         ls_tab_excel-BSCHL = <lv_field>.
        when 8.
         ls_tab_excel-KOART = <lv_field>.
        when 9.
         ls_tab_excel-HKONT = <lv_field>.
        when 10.
         ls_tab_excel-WRBTR = <lv_field>.
        when 11.
         ls_tab_excel-MWSKZ = <lv_field>.
        when 12.
         ls_tab_excel-KOSTL = <lv_field>.
        when 13.
         ls_tab_excel-AUFNR = <lv_field>.
        when 14.
         ls_tab_excel-SGTXT = <lv_field>.
        when 15.
         ls_tab_excel-VBUND = <lv_field>.
        when 16.
         ls_tab_excel-AUFTEIL = <lv_field>.
        when 17.
         ls_tab_excel-ERSTBUCH = <lv_field>.

        append ls_tab_excel
          to lt_tab_excel.
        ENDCASE.
       ENDDO.
      endloop.

      loop at lt_tab_excel into ls_tab_excel.
        move-corresponding ls_tab_excel  to ls_tab_dconv.
        perform date_convert using ls_tab_excel-bldat changing ls_tab_dconv-bldat.
        perform date_convert using ls_tab_excel-budat changing ls_tab_dconv-budat.
        perform date_convert using ls_tab_excel-ERSTBUCH changing ls_tab_dconv-ERSTBUCH.
        ls_tab_dconv-gjahr = ls_tab_dconv-budat(4).
        "ls_tab_dconv-nebtr = ls_tab_excel-nebtr.
        ls_tab_dconv-wrbtr = ls_tab_excel-wrbtr.
        append ls_tab_dconv
          to lt_tab_dconv.
      endloop.

    endif.
...
Изменено: 01.02.2024, 22:56 - Шоколадный01
Рейтинг: 0 / 0
3+ способа как импортировать xlsx в sap.
    #715772
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
Кодирование/декодирование структурированных данных в/из внутреннюю "бинарную "таблиц(у)/(ы).

Обычно буффер пишут в бинарный файл в какой нибуть из каталогов в AL11.
Сделал такое. Не понравилось.. типа нам не нужын файловый буффер. нам нада только читать из экселя.
Подумал а чебы не впиихнутъ в бинар без файла.. оказывается довольно легко[:blink]
Удобно при многоуровевой древовидной буфферизации..
в примере A, B, C - уровни;
Таблица со структурой в которой одно поле уровень, другое XSTRING.
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
 TYPES: BEGIN OF ty_itabx,
   satzart(1) TYPE c,
   hex TYPE xstring,
 END OF ty_itabx.
DATA gt_itabx TYPE STANDARD TABLE OF ty_itabx.
DATA gs_itabx LIKE LINE OF gt_itabx.
Два экземпляра класса "Codepage- und Endian Konvertierung (Systemformat -> Extern)" : 1й - на вход, 2й - на выход
DATA(o_conv) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ). " IN
DATA(o_convo) = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' endian = 'L' ). " OUT


Вход: инициализация "легаси" view со стуктурой с данными для входа.
копирование в бинар, присвоение бинарной структуре, добавление в таблицу .
Спойлер
in.JPG
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    clear lv_buffer.
     DATA(o_viewA) = cl_abap_view_offlen=>create_legacy_view( wa_komfkgn ).
     o_conv->convert_struc( EXPORTING
                         data   = wa_komfkgn
                         view   = o_viewA
                       IMPORTING
                         buffer = lv_buffer ).

     gs_itabx-satzart = satzart.
     gs_itabx-HEX = lv_buffer.
     APPEND gs_itabx TO gt_itabx.
Выход - обратный процесс легаси для выхода. копирование в буффер, декодирование
Спойлер
out.JPG
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
LOOP AT  gt_itabx INTO gs_itabx.
DATA(o_viewF) = cl_abap_view_offlen=>create_legacy_view( wa_komfkgn ).
   DATA(lv_bufferF) = gs_itabx-HEX.
      o_convo->convert_struc( EXPORTING
                         input = lv_bufferF
                         view  = o_viewF
                       IMPORTING
                         data  = wa_komfkgn ).
endloop.
Таким образом кодировал чтобы импортировать "ворох" SD фактур с экселя. куски кода:
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
 TYPES: BEGIN OF ty_itabx,
   satzart(1) TYPE c,
   hex TYPE xstring,
 END OF ty_itabx.

 DATA gt_itabx TYPE STANDARD TABLE OF ty_itabx.
 DATA gs_itabx LIKE LINE OF gt_itabx.

* ENCODING
form daten__anlegen USING gt_data type standard table CHANGING cnt TYPE i.

  data: ls_pos type ty_pos.
  data: lv_bp  type bu_partner.
  data: lv_bp_alt  type bu_partner.
  "data cnt type i.
  data cnt_str type string.

 data : lv_numberofcolumns   type i,
         lv_zeileart(1)       type c,
         lv_date_string       type string,
         lv_target_date_field type datum.

DATA: lv_buffer type xstring.

DATA(o_conv) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
DATA(o_convo) = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' endian = 'L' ).

  field-symbols : <ls_data>  type any,
                  <ls_datak> type any,
                  <lv_field> type any.

  lv_numberofcolumns = p_ncol.

 LOOP at gt_data ASSIGNING <ls_data> from 2.
         clear:  ls_pos.

    ls_pos-auart   =  'TA'.
    ls_pos-spart   =  '01'.
    ls_pos-pstyv   =   'DLN'.        " 'TAD'.         "Positionstyp Vertr.beleg
    ls_pos-fkara   =  inv_type. "'FX'.                 "Vorschlag Fakturaart
    ls_pos-taxm1   =  '1'.
    ls_pos-taxk1   =  '1'.
    ls_pos-versg   =  '2'.

   do lv_numberofcolumns times.
      assign component sy-index of structure <ls_data> to <lv_field>.
      case sy-index.
        when 1.
            ls_pos-zlart =  <lv_field>.
          if ls_pos-zlart = 'N'.
            cnt = cnt + 1.
            cnt_str = cnt.
            clear a1_vgbel.
            move cnt_str to a1_vgbel.
            move sy-uzeit to a1_vgbel+1.
          endif.
          ls_pos-vgbel = a1_vgbel.

        when 2.
          ls_pos-VKORG = <lv_field>.
        when 3.
          ls_pos-VTWEG = <lv_field>.
        when 4.
         ls_pos-WERKS =  <lv_field>.
        when 5.
          ls_pos-vgpos  = <lv_field>.

        when 6.
          lv_date_string = <lv_field> .
          perform date_convert using lv_date_string changing lv_target_date_field .
          ls_pos-fkdat =  lv_target_date_field.
        when 7.

          call function 'CONVERSION_EXIT_ALPHA_INPUT'
            exporting
              input  = <lv_field>
            importing
              output = lv_bp.

          ls_pos-kunag   =  lv_bp.
          ls_pos-kunrg   =  lv_bp.
          ls_pos-kunre   =  lv_bp.
          ls_pos-kunwe   =  lv_bp.
        when 8.
          ls_pos-kbetr   =  <lv_field>.
        when 9.
           ls_pos-matnr =  <lv_field>.
          select single maktx from makt into wa_komfkgn-arktx where matnr = <lv_field>.

        when 10.
          ls_pos-kwmeng  =  <lv_field>.               "Auftragsmenge
      endcase.
    enddo.

    if ls_pos is not initial.
      satzart = 'A'.
      wa_komfkgn-mandt   =  sy-mandt.
      wa_komfkgn-auart   = ls_pos-auart.
      wa_komfkgn-vkorg   = ls_pos-vkorg.
      wa_komfkgn-vtweg   =  ls_pos-vtweg.
      wa_komfkgn-spart   =  ls_pos-spart.
      wa_komfkgn-fkdat =   ls_pos-fkdat.
      wa_komfkgn-prctr  = 'PC9999'.
      wa_komfkgn-VKBUR   =  '1000'.
      wa_komfkgn-kunag   =  ls_pos-kunag.
      wa_komfkgn-kunrg   =  ls_pos-kunrg.
      wa_komfkgn-kunre   =  ls_pos-kunre.
      wa_komfkgn-kunwe   =  ls_pos-kunwe.
      wa_komfkgn-kwmeng  =  ls_pos-kwmeng.
      wa_komfkgn-matnr   =  ls_pos-matnr.
      wa_komfkgn-vrkme   =  'ST'.
      wa_komfkgn-pstyv   =  ls_pos-pstyv.
      wa_komfkgn-kwmeng  =  ls_pos-kwmeng.
      wa_komfkgn-werks   =  ls_pos-werks.
      wa_komfkgn-vgbel   = ls_pos-vgbel.
      wa_komfkgn-vgpos   =  ls_pos-vgpos.
      wa_komfkgn-fkara   =  ls_pos-fkara.
      wa_komfkgn-taxm1   =  ls_pos-taxm1.
      wa_komfkgn-taxk1   =  ls_pos-taxk1.
      wa_komfkgn-versg   =  ls_pos-versg.

    clear lv_buffer.
     DATA(o_viewA) = cl_abap_view_offlen=>create_legacy_view( wa_komfkgn ).
     o_conv->convert_struc( EXPORTING
                         data   = wa_komfkgn
                         view   = o_viewA
                       IMPORTING
                         buffer = lv_buffer ).

     gs_itabx-satzart = satzart.
     gs_itabx-HEX = lv_buffer.
     APPEND gs_itabx TO gt_itabx.

      "transfer satzart to ds_name.
      "transfer wa_komfkgn to ds_name.
*           Preisteile
      clear wa_komfkko.
      satzart = 'B'.
      wa_komfkko-mandt   =  sy-mandt.
      wa_komfkko-knumv   =  wa_komfkgn-vgbel.
      wa_komfkko-kposn   =  wa_komfkgn-vgpos.
      wa_komfkko-kschl   =  'PR00'.
      wa_komfkko-kbetr   =   ls_pos-kbetr.

     clear lv_buffer.
     DATA(o_viewB1) = cl_abap_view_offlen=>create_legacy_view( wa_komfkko ).
     o_conv->convert_struc( EXPORTING
                         data   = wa_komfkko
                         view   = o_viewB1
                       IMPORTING
                         buffer = lv_buffer ).

     gs_itabx-satzart = satzart.
     gs_itabx-HEX = lv_buffer.
     APPEND gs_itabx TO gt_itabx.

      "transfer satzart to ds_name.
      "transfer wa_komfkko to ds_name.

* Positionstexte
      clear wa_komfktx.
      satzart               =  'C'.
      wa_komfktx-mandt      =  sy-mandt.
      wa_komfktx-vgbel      =  wa_komfkgn-vgbel.
      wa_komfktx-vgpos      =  wa_komfkgn-vgpos.
      wa_komfktx-tdobject   =  'VBBP'.
      wa_komfktx-tdid       =  '0002'.
      wa_komfktx-tdspras    =  'DE'.
      wa_komfktx-tdformat   =   '*'. " 'U1', 'AS'
      wa_komfktx-tdline     =  'Das ist ein Text'.

     clear lv_buffer.
     DATA(o_viewC) = cl_abap_view_offlen=>create_legacy_view( wa_komfktx ).
     o_conv->convert_struc( EXPORTING
                         data   = wa_komfktx
                         view   = o_viewC
                       IMPORTING
                         buffer = lv_buffer ).

     gs_itabx-satzart = satzart.
     gs_itabx-HEX = lv_buffer.
     APPEND gs_itabx TO gt_itabx.

    endif.

  endloop.

endform.

*DECODING

form externer_faktura_sammellauf_x
    using "ds_name
          ds_check
          fakliste.
*---------------------------------------------------------------------*
*       Ermitteln Sammelgangsnummer                                   *
*---------------------------------------------------------------------*
  check rv50s-sammg is initial.

  select single * from tvsa where smart = 'F'.
  if sy-subrc = 0.
    call function 'NUMBER_GET_NEXT'
      exporting
        nr_range_nr = tvsa-numki
        object      = 'RV_SAMMG'
      importing
        number      = rv50s-sammg.
  else.
    perform add_msg_to_appl_log1 using sammelgangsart gc_msgty_e.
  endif.
*---------------------------------------------------------------------*
*        Füllen Sammelgangsverwaltungssatz
*---------------------------------------------------------------------*
  clear vbsk.
  vbsk-mandt = sy-mandt.               "Mandant
  vbsk-ernam = sy-uname.               "Name des Sachbearbeiters
  vbsk-erdat = sy-datum.               "Datum des Hinzufügens
  vbsk-uzeit = sy-uzeit.               "Uhrzeit -"-
  vbsk-smart = 'F'.                    "Gruppenart
  vbsk-sammg = rv50s-sammg.            "Gruppennummer

*-------- Mappendaten: Dynpro RVAFS900 900
  clear bdc_tab.
"  move: 'ZRVAFSS00'    to bdc_tab-program,
   move: 'Z_REP_SD_FAKTURA_IMP' to bdc_tab-program,
        '0900'        to bdc_tab-dynpro,
        'X'           to bdc_tab-dynbegin.
  append bdc_tab.
  clear bdc_tab.
  write: 'bdc_okcode' to bdc_tab-fnam,
         '   '        to bdc_tab-fval.
  append bdc_tab.

*------- validate filename -------------------------------------------
*  call function 'FILE_VALIDATE_NAME'
*    exporting
*      logical_filename  = gc_filename
*    changing
*      physical_filename = ds_name
*    exceptions
*      others            = 1.
*  if sy-subrc <> 0.
*    message id sy-msgid type sy-msgty number sy-msgno
*      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*  endif.

*------- File öffnen / lesen -----------------------------------------

*  open dataset ds_name for input in binary mode.
*
*  if sy-subrc ne 0.
*    perform add_msg_to_appl_log
*      using ds_name gc_msgty_i '511' 'VF' space space.
*    exit.
*  endif.

  clear i.

"-------------------
"DATA lv_vgbel_alt TYPE vgbel.
DATA lv_fill_head TYPE abap_bool.
 clear lv_fill_head.

LOOP AT  gt_itabx INTO gs_itabx.
* read first record
*READ TABLE  gt_itabx INTO  gs_itabx INDEX 1.
*    if gs_itabx-satzart <> 'A' and gs_itabx-satzart <>  'B' and gs_itabx-satzart <>  'C' and gs_itabx-satzart <> 'X' .
*      exit.
*    endif.
   satzart = gs_itabx-satzart.

    if satzart <> 'A' and satzart <>  'B' and satzart <>  'C' and satzart <> 'X' .
      exit.
    endif.

    if satzart = fakturasatz.
      DATA(o_viewF) = cl_abap_view_offlen=>create_legacy_view( wa_komfkgn ).
      "DATA(lv_buffer) = CONV xstring( gs_itabx-HEX ).
      DATA(lv_bufferF) = gs_itabx-HEX.
      o_convo->convert_struc( EXPORTING
                         input = lv_bufferF
                         view  = o_viewF
                       IMPORTING
                         data  = wa_komfkgn ).

"    read dataset ds_name into wa_komfkgn.
  elseif satzart = preisteilsatz.
      DATA(o_viewP) = cl_abap_view_offlen=>create_legacy_view( wa_komfkko ).
      DATA(lv_bufferP) = gs_itabx-HEX.
      o_convo->convert_struc( EXPORTING
                         input = lv_bufferP
                         view  = o_viewP
                       IMPORTING
                         data  = wa_komfkko ).
"    read dataset ds_name into wa_komfkko.
  elseif satzart = textteilsatz.
      DATA(o_viewT) = cl_abap_view_offlen=>create_legacy_view( wa_komfktx ).
      DATA(lv_bufferT) = gs_itabx-HEX.
      o_convo->convert_struc( EXPORTING
                         input = lv_bufferP
                         view  = o_viewP
                       IMPORTING
                         data  = wa_komfktx ).
    "read dataset ds_name into wa_komfktx.
  elseif satzart = eof_satz.
    xeof = x.
  else.
*   MESSAGE A512 WITH DS_NAME.
    "perform add_msg_to_appl_log1 using ds_name gc_msgty_e.
  endif.
  if sy-subrc eq 4.
*------- End of File erreicht   --> Exit ------------------------------
    xeof = x.
  endif.
  if sy-subrc eq 8.
*------- Datei kann nicht geöffnet werden -----------------------------
*   MESSAGE A512 WITH DS_NAME.
   " perform add_msg_to_appl_log1 using ds_name gc_msgty_e.
    exit.
  endif.
    check satzart is not initial.

if xeof = 'X'.
    exit.
endif.
"-------------------------

  "LOOP AT  gt_itabx INTO gs_itabx FROM 2.

"  while xeof ne x.
    "check satzart is not initial.
    if satzart eq fakturasatz.
      "perform xkomfkgn_fuellen.
*      on change of wa_komfkgn-vkorg or
*                   wa_komfkgn-vtweg or
*                   wa_komfkgn-kunag or
*                   wa_komfkgn-fkdat.

        on change of wa_komfkgn-vgbel.

        if i > 0 and xkomfkgn is not INITIAL.
          perform gn_invoice_create
                  using "ds_name
                        ds_check
                        fakliste.
          clear i.
          clear lv_fill_head.
          refresh xkomfkgn.
          refresh xkomfkko.
          refresh xkomfktx.
        endif.
      endon.

     ELSEif satzart <> fakturasatz.
      perform fakturasatz_bearbeiten_x USING gs_itabx
                                              "ds_name
                                              ds_check
                                              fakliste
                                       CHANGING lv_fill_head.
      i = i + 1.
    endif.
    "endif.
*    if i > max_zahl.
** ----------  maximale Anzahl Sätze erreicht --------------------------
    "  perform gn_invoice_create
    "          using ds_name
    "                ds_check
    "                fakliste.
    "  clear i.
    "  refresh xkomfkgn.
    "  refresh xkomfkko.
    "  refresh xkomfktx.
*    endif.

  ENDLOOP.

  if i <> 0.
    perform gn_invoice_create
            using "ds_name
                  ds_check
                  fakliste.
    clear i.
    refresh xkomfkgn.
    refresh xkomfkko.
    refresh xkomfktx.
  endif.

endform.                               "externer_faktura_sammellauf
Базисный FM не BAPI sondern 'GN_INVOICE_CREATE'.. also keiin BAPI_COMMIT am Endeffekt.
Спойлер
basis.JPG
...
Изменено: 02.02.2024, 21:07 - Шоколадный01
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Вопросы по IT [закрыт для гостей] / 3+ способа как импортировать xlsx в sap.
Модераторы: Шоколадный01
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]