Pomoc w optymalizacji programu.

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
natanielg
Posty: 15
Rejestracja: wt kwie 12, 2022 12:42 pm
Has thanked: 4 times
Been thanked: 5 times

Pomoc w optymalizacji programu.

Post autor: natanielg »

Witam wszystkich, po raz kolejny przychodzę po pomoc. Tym razem mam problem z optymalizacją programu. Sprawa wygląda następująco :

Pobieram wszystkich dostawców dla danej jednostki gospodarczej z tabeli LFB1. Tych rekordów jest ponad 15 tys. Następnie muszę każdy pojedyńczy rekord wrzucić w MF [BAPI_AP_ACC_GETOPENITEMS], ponieważ na podstawie danych zwracanych przez niego robię dalsze wyliczenia. Ogólnie chodzi o to że potrzebuję dostać niezapłacone faktury. Transakcja FBL1N zwraca niezapłacone faktury (robiąc to błyskawicznie) ale nie zwraca wszystkich danych których potrzebuję.

To co robię w poniższym kodzie zajmuje bardzo dużo czasu. Czy da się jakoś przyśpieszyć proces otrzymywania niezapłaconych faktur dla danej jednostki gospodarczej?

Kod: Zaznacz cały

    
    SELECT lifnr
      FROM lfb1
      INTO CORRESPONDING FIELDS OF TABLE gt_lifnr
      WHERE bukrs = pa_bukrs
      AND lifnr IN so_lifnr. 
    
    
    LOOP AT gt_lifnr INTO DATA(ls_lifnr).
    
      CALL FUNCTION 'BAPI_AP_ACC_GETOPENITEMS'
        EXPORTING
          companycode = pa_bukrs
          vendor      = ls_lifnr-lifnr
          keydate     = pa_datum
*         NOTEDITEMS  = ' '
*     IMPORTING
*         RETURN      =
        TABLES
          lineitems   = gt_bapi_temp. 
                
          MOVE-CORRESPONDING gt_bapi_temp TO gt_bapi KEEPING TARGET LINES.
    ENDLOOP. 
K602
Posty: 63
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 28 times
Been thanked: 48 times

Re: Pomoc w optymalizacji programu.

Post autor: K602 »

A w jaki sposób FBL1N nie pokazuje tego, co trzeba?
SAP ABAP Certified Developer
dominik.tylczynski
Posty: 8019
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1755 times
Been thanked: 1379 times

Re: Pomoc w optymalizacji programu.

Post autor: dominik.tylczynski »

K602 pisze: wt mar 14, 2023 2:26 pm A w jaki sposób FBL1N nie pokazuje tego, co trzeba?
Faktycznie to chyba najlepsze podejście - skoro FBL1N działa ok, tylko brakuje tam jakichś informacji to może warto je dodać do tej transakcji, zamiast pisać coś od zera.
dominik.tylczynski
Posty: 8019
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1755 times
Been thanked: 1379 times

Re: Pomoc w optymalizacji programu.

Post autor: dominik.tylczynski »

Jeśli musisz napisać własny raport na wzór i podobieństwo FBL1N to zamiast używać BAPI odczytaj dokumenty księgowe dostawców (faktury) z BSIK i odejmij od nich dokumenty z BSAK (dokumenty rozliczone). To jest +/- logika BAPI_AP_ACC_GETOPENITEMS tyle, że BAPI robi to tylko dla jednego dostawy na raz, a Ty możesz odczytać dane dla wszystkich od razu.
K602
Posty: 63
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 28 times
Been thanked: 48 times

Re: Pomoc w optymalizacji programu.

Post autor: K602 »

Nie idź drogą, aby tworzyć coś na wzór raportów FBL*N... Je się fajnie wykorzystuje w programach, a nie tracisz czasu na uzgadnianie sald i całego UI...
SAP ABAP Certified Developer
dominik.tylczynski
Posty: 8019
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1755 times
Been thanked: 1379 times

Re: Pomoc w optymalizacji programu.

Post autor: dominik.tylczynski »

K602 pisze: śr mar 15, 2023 10:12 am Nie idź drogą, aby tworzyć coś na wzór raportów FBL*N... Je się fajnie wykorzystuje w programach, a nie tracisz czasu na uzgadnianie sald i całego UI...
Pełna zgoda :!:


Tutaj 5 Easy Steps to Add New Line Item Fields to FBL1N jest opisane jak dodać własne pola do FBL1N
natanielg
Posty: 15
Rejestracja: wt kwie 12, 2022 12:42 pm
Has thanked: 4 times
Been thanked: 5 times

Re: Pomoc w optymalizacji programu.

Post autor: natanielg »

Dostałem zlecenie, aby wykonać program z zapisem do bazy danych na którym będą prowadzone dalsze operacje. FBL1N było tylko przykładem, że tam wyszukiwanie dostawców trwało bardzo szybko, a ja musiałem pobierać wszystkich i każdego z nich po kolei sprawdzać. Zrobiłem jednak tak że wykorzystałem trochę raport FBL1N, robiąc do niego submita i już nie mam 15 tys dostawców do sprawdzenia ale może z 500.
marek.turczynski
Posty: 209
Rejestracja: czw lip 10, 2014 7:53 pm
Has thanked: 21 times
Been thanked: 254 times

Re: Pomoc w optymalizacji programu.

Post autor: marek.turczynski »

Jesteś na systemie ECC czy S/4? Macie dostęp do FBL1H? Bo jak tak to tam jest jedna mocna opcja, która pozwala dodać jakąkolwiek akcję dodatkową dla zaznaczonych linii - np. księgowanie itp.
Marek Turczyński
K602
Posty: 63
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 28 times
Been thanked: 48 times

Re: Pomoc w optymalizacji programu.

Post autor: K602 »

Aaa... i jeszcze jedno, jak chcesz rozszerzać ten raport, to tak jak wskazał Dominik, przez BAdI, a nie przez BTE, bo tam nie ma optymalizacji, tylko cały kod per każda linia i to zabija wydajność...
SAP ABAP Certified Developer
RKISIEL
Posty: 552
Rejestracja: pn lut 14, 2011 9:10 pm
Has thanked: 385 times
Been thanked: 248 times

Re: Pomoc w optymalizacji programu.

Post autor: RKISIEL »

Cześć,
1. Prawdą jest, że jeśli używasz w FBL1/3/5N BTE 1650 to nie masz dostępu do implementacji BADI FAGL_ITEMS_CH_DATA.
2. Prawdą jest, że implementacja BADI FAGL_ITEMS_CH_DATA korzysta z całej tabeli zapisów a BTE 1650 tylko z pojedynczych zapisów.
3. Nieprawdą jest, że rozwiązanie dla implementacji BADI FAGL_ITEMS_CH_DATA działa szybciej niż rozwiązanie dla BTE 1650 - wszystko zależy od zakresu i sposobu wydłubywania danych dla pozycji RFPOS - to co jest niemożliwe do realizacji w CLASS-METHOD jest możliwe w FM więc można przyspieszyć tam w FM gdzie jest ułomna(?!) implementacja BADI.
4.Oczywiście mamy spowolnienie dla działania w pętli i wywoływania FM (BTE 1650) dla pozycji w porównaniu z wywołaniem metody BADI dla całej tabeli ale zgodnie z punktem 3 można nadrobić - tu opis takiego przypadku:
- dostałem do analizy i optymalizacji działanie BTE 1650 dla FBL1/3/5N a także dla FAGLL03 działania implementacji BADI FAGL_ITEMS_CH_DATA;
- po optymalizacji (tu dziękuję za wiedzę otrzymaną dzięki prowadzącemu dla mnie/nas szkolenie BC490- chyba yacol) udało się zoptymalizować działanie, które nie odbiega od tego, które zastosowałbym z użyciem prawidłowych/optymalnych rozwiązań w implementacji BADI FAGL_ITEMS_CH_DATA.
Wyniki w załączniku - złe rozwiązanie dla poprzedniej wersji BTE 1650 i niestety również dla źle napisanej implementacji BADI FAGL_ITEMS_CH_DATA.
FAGL_Delta.png
Czyli nie jest ważne co tylko ważne jest jak to robisz... :D
Reasumując - przydatne są szkolenia BC425 i BC490.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony czw mar 23, 2023 9:34 am przez RKISIEL, łącznie zmieniany 1 raz.
Rafał Kisiel
K602
Posty: 63
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 28 times
Been thanked: 48 times

Re: Pomoc w optymalizacji programu.

Post autor: K602 »

RKISIEL pisze: czw mar 23, 2023 1:22 am 4.Oczywiście mamy spowolnienie dla działania w pętli i wywoływania FM (BTE 1650) dla pozycji w porównaniu z wywołaniem metody BADI dla całej tabeli ale zgodnie z punktem 3 można nadrobić - tu opis takiego przypadku:
- dostałem do analizy i optymalizacji działanie BTE 1650 dla FBL1/3/5N a także dla FAGLL03 działania implementacji BADI FAGL_ITEMS_CH_DATA;
- po optymalizacji (tu dziękuję za wiedzę otrzymaną dzięki prowadzącemu dla mnie/nas szkolenie BC490- chyba yacol) udało się zoptymalizować działanie, które nie odbiega od tego, które zastosowałbym z użyciem prawidłowych/optymalnych rozwiązań w implementacji BADI FAGL_ITEMS_CH_DATA.
Wyniki w załączniku - złe rozwiązanie dla poprzedniej wersji BTE 1650 i niestety również dla źle napisanej implementacji BADI FAGL_ITEMS_CH_DATA.
FAGL_Delta.png

Czyli nie jest ważne co tylko ważne jest jak to robisz... :D
Reasumując - przydatne są szkolenia BC425 i BC490.
A w jaki sposób jesteś w stanie zoptymalizować to BTE, w porównaniu z BAdI FI_ITEMS_CH_DATA, biorąc pod uwagę dane, jakie masz dostarczone do poszczególnych technik? Jak chcesz optymalizować dostęp do danych, który jest na zasadzie 'row by row' i setki tysięcy razy wywoływanie tego kodu (przy dużej ilości danych), zamiast jednorazowego wywołania BTE dla całego wolumenu danych i użycia choćby BST, nie wspominając o możliwości zrównoleglenia opracowania paczki danych w np. SPT Framework? Możesz podrzucić jakiś kod lub opisać rozwiązanie? Nie planuję tego używać, bo swoje zdanie już mam wyrobione na ten temat, ale ciekawi mnie to.
SAP ABAP Certified Developer