Strona 1 z 2

SQVI MARA_MAPL_CDHDR_CPOS

: śr maja 22, 2019 8:28 am
autor: eryk81
Hej
Próbuję połączyć ze sobą table MARA_MAPL_CDHDR_CPO, ale niestety występują nielegalne warunki Join .Chciałbym w raporcie mieć dane kto zakładał kod ,status materiału dla kilku zakładów( 00 zablokowany ,01 odblokowany ) kiedy były ściągana blokada , czy są marszruty .
Czy mamy może jakąś tabelę pomiędzy która by połączyła jedno z drugim? Bądź jak to połączyć ? :D


MARA-MSTAE
MAPL-MATNR
MAPL-PLNNR
MAPL-DATUV
MAPL-ANDAT
MAPL-ANNAM
CDHDR
CDPOS

Re: SQVI MARA_MAPL_CDHDR_CPOS

: śr maja 22, 2019 8:37 am
autor: inspir
Hej, robiłem coś podobnego za pomocą query i po prostu pododawałem customowe pola do raporu i porobiłem selecty z tabeli CDHDR i CDPOS. Na przykład:
SELECT VALUE_NEW FROM CDPOS into LV_NEWVAL
WHERE OBJECTID = A552-KNUMH
AND FNAME = 'KBETR'.
ENDSELECT.

W Twoim przypadku objectid to prawdopodobnie bedzie mapl-matnr. Oczywiście musisz sam dobrać pola z cdpos i cdhdr które Cie interesują

niestety bezpośrednio nie idzie połączyć tabeli CDHDR i CDPOS z MAPL,MARA.

Pozdr.
Marcin

Re: SQVI MARA_MAPL_CDHDR_CPOS

: śr maja 22, 2019 9:02 am
autor: dominik.tylczynski
Zwróćcie uwagę na wydajność zapytań z tablic CDHDR i CDPOS. Zwykle są olbrzymie, bo te tablice przechowują wszystkie dokumenty zmian z całego systemu.

Re: SQVI MARA_MAPL_CDHDR_CPOS

: śr maja 22, 2019 9:24 am
autor: inspir
Racja, raport, który stworzyłem mieli bardzo długo, o tyle dobrze, że użytkownicy używają go raz, dwa na miesiąc i to im nie przeszkadza.
Z drugiej strony nie widzę innego sposobu, żeby to połączyć.

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 16, 2021 3:33 pm
autor: kpawlak
Podepnę się pod temat.
Zrobiłem zapytanie w SQ02 SQ01. Wynikiem zapytania jest raport z wprowadzonymi zmianami w RFQ.
Chciałbym porównać, a właściwie obliczyć różnice pomiędzy dwoma datami z tego raportu. Różnica powinna być podana w dniach.

Próbowałem korzystać z FM DAYS_BETWEEN_TWO_DATES , niestety bez sukcesów.

Macie jakieś pomysły co robię źle?

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 16, 2021 3:54 pm
autor: dominik.tylczynski
Dlaczego po prostu nie odejmiesz jednej daty od drugiej?

Nie napisałeś z czym konkretnie masz problem i jak implementujesz dodatkowe pole na różnicę dat. Zatem trudno coś konkretnego powiedzieć.
Zobacz w tych blogach jak się tworzy własne pola w SAP Query:

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 16, 2021 4:02 pm
autor: kpawlak
*DATE1
SELECT UDATE FROM CDHDR INTO LV_UDATE
WHERE OBJECTID = ekko-ebeln.
ENDSELECT.

*DATE2
SELECT angdt FROM ekko INTO LV_angdt
WHERE ebeln = ekpo-ebeln.
ENDSELECT.

Chciałbym uzyskać wynik LV_TEMR = LV_UDATE - LV_ANGDT

Wybacz za mało konkretów z mojej strony, ale jestem początkująca płotką w środowisku SAP i ABAP.

W załączniku wynik zwyczajnego odejmowania . Pole terminowośc

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 16, 2021 4:20 pm
autor: dominik.tylczynski
Przyznam, że zupełnie nie rozumiem co chcesz zrobić, do czego ma służyć ten raport. Jeśli go opiszesz bardziej szczegółowo, to może będę mógł więcej pomóc.

Na pewno zapytanie:

Kod: Zaznacz cały

*DATE1
SELECT UDATE FROM CDHDR INTO LV_UDATE
WHERE OBJECTID = ekko-ebeln.
ENDSELECT.
jest problematyczne.

Robisz tutaj selekcję z tabeli CDHDR, która zwiera wszystkie nagłówki dokumentów zmian, nie tylko dla zamówień, ale dla różnych innych dokumentów w SAP np. zleceń sprzedaży. Wybierasz jakoś datę zmiany w sposób przypadkowy - nie jest to ani pierwsza zmiana, ani ostatnia. Po prostu jakaś przypadkowa.

Jeśli chcesz odczytywać zmiany zamówień to musisz dodać do kryteriów zapytania rodzaj obiektu dokumentów zmian, czyli dla zamówień:

Kod: Zaznacz cały

*DATE1
SELECT UDATE FROM CDHDR INTO LV_UDATE
WHERE 
OBJECTCLAS = 'EINKBELEG' AND
OBJECTID = ekko-ebeln.
ENDSELECT.
EINKBELEG to obiekt dokumentów zmian dla zamówień.

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 16, 2021 4:29 pm
autor: kpawlak
Raport ma służyć do analizy terminowości dla RFQ tj. porównanie daty EKKO-ANGDT i moment zamknięcia RFQ co jest równoważne ze zmiana cechy RFQ .
Z tego powodu wyciągam datę zmiany pola EKPO-AGMEM z tabeli CDHDR.

Oczywiście w zapytaniu mam ograniczenia co do rodzaju dokumentu i zmiany pola EKPO-AGMEM

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 16, 2021 4:43 pm
autor: dominik.tylczynski
Jeśli chcesz odczytać zmiany dla konkretnego pola np. EKPO-AGMEM to musisz odczytać pozycję dokumentu zmiany z tablicy CDPOS, mniej więcej tak:

Kod: Zaznacz cały

SELECT CHANGENR INTO LV_NR FROM CDPOS
WHERE OBJECTCLAS = 'EINKBELEG'
AND OBJECTID = <nr zamówienia>
AND TABNAME = 'EKPO'
AND FNAME = 'AGMEM'.
ENDSELECT
Potem odczytujesz datę tej zmiany już z tablicy CDHDR:

Kod: Zaznacz cały

SELECT UDATE FROM CDHDR INTO LV_UDATE
WHERE OBJECTCLAS = 'EINKBELEG'
AND OBJECTID = <nr zamówienia>
AND CHANGENR = LV_NR.
ENDSELECT.
Możesz też skorzystać z operatora MAX lub MIN jeśli chcesz odczytać ostatnią lub pierwszą zmianę.

Re: SQVI MARA_MAPL_CDHDR_CPOS

: śr lis 17, 2021 11:09 am
autor: kpawlak
Ok. Dane do raportu wyciągam bez problemu.
Nie wiem tylko dlaczego terminowość (działanie na dwóch datach, polach które są w raporcie) źle się wylicza.
Przykład podałem wyżej. Czy powinien m w jakiś sposób przekonwertować typ danych w celu dokonania obliczeń?

Re: SQVI MARA_MAPL_CDHDR_CPOS

: śr lis 17, 2021 11:15 am
autor: inspir
Jaki masz typ danych na zmiennych lv_udate i lv_angdt? Najlepiej podeślij cały kod programu

Pozdr.
Marcin

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 23, 2021 2:03 pm
autor: kpawlak
DATA lv_udate LIKE cdhdr-udate. *dats
DATA lv_bedat LIKE ekko_bedat. *dats
DATA lv_roznica TYPE I.

SELECT udate INTO lv_udate FROM cdhdr
WHERE objectid = ekko-ebeln.
ENDSELECT.

lv_roznica = lv_udate - lv_bedat.

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 23, 2021 2:36 pm
autor: inspir
spróbuj zdefiniować zmienne lv_udate i lv_bedat jako sy-datum, czyli:

DATA: lv_udate TYPE sy-datum,
lv_bedat TYPE sy-datum,
lv_roznica TYPE I.

wtedy odejmowanie powinno działać tak jak tego oczekujesz.

Re: SQVI MARA_MAPL_CDHDR_CPOS

: wt lis 23, 2021 3:31 pm
autor: kpawlak
Niestety, wartość lv_bedat i lv_udate 00.00.0000
Ale różnica wyszła prawidłowo w tym przypadku 0 :P