Przekopałem materiały z BC470, przekopałem sap helpy
https://help.sap.com/docs/SAP_NETWEAVER ... cale=en-US
https://help.sap.com/docs/SAP_NETWEAVER ... ml?q=graph
przekopałem fora i coś mi się zdaje, że mogę mieć problem z wygenerowaniem z systemu (via gui albo fiori) pdf`a, na którym będzie... wykres kołowy.
Problem polega na tym, że dla każdego dokumentu (a ma być ich ponad 12k), podczas generowania ma się dynamicznie budować wykres, więc odpada wrzucanie gotowej grafiki jako statyczny obiekt.
Adobe Formsa nie jestem pewien, dopiero stawiałem pierwsze kroki w temacie, nie mam też dostępu do materiałów z S4D480 (psie oczy), ale pomoc SAPa i fora też nie dają wielkiej nadziei.
Udało się komuś z Was umieścić taki pie chart na generowanym pdf`ie?
Wykres kołowy na wydruku
-
- Posty: 8465
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1991 times
- Been thanked: 1501 times
Re: Wykres kołowy na wydruku
Spójrz:
Printing Charts / Graphs on Smart Forms Dynamically
Create a PDF form with charts
Nie używałem, nie próbowałem, nie testowałem, ale może to jest jakiś trop.
Printing Charts / Graphs on Smart Forms Dynamically
Create a PDF form with charts
Nie używałem, nie próbowałem, nie testowałem, ale może to jest jakiś trop.
-
- Posty: 567
- Rejestracja: śr kwie 04, 2007 4:32 pm
- Lokalizacja: Poznań
- Has thanked: 10 times
- Been thanked: 171 times
Re: Wykres kołowy na wydruku
Używałem kiedyś klasę CL_IGS_CHART_ENGINE u klienta, który uparł się, że chce mieć wykresy w customowych transakcjach w SAPGUI i mogę potwierdzić, że jest bardzo przydatna do takich zadań. Jeśli trzeba pobawić się z kolorami, czcionkami, itepe-itede to jest trochę zabawy z XML'em opisującym i definiującym generowany wykres ale wynik końcowy wygląda naprawdę dobrze i zadowoli nawet najbardziej wybrednych krytyków "sztuki wykresowej" (przysłowiowa Pani Grażynka z księgowości, która patrzy na otoczenie przez pryzmat arkuszy excelowych).
Pozdrawiam,
Jacek Witczak
http://novertio.pl
Jacek Witczak
http://novertio.pl
Re: Wykres kołowy na wydruku
Powiem Wam szczerze, że wcześniej już rozczytywałem link podany jako 2gi przez Dominika i nie widziałem dla siebie przydatnych informacji, a tu proszę, wystarczyło się wyspać i wszystko zaczęło nabierać sensu
Faktycznie, CL_IGS_CHART_ENGINE pozwoliła dość swobodnie na wykresie kołowym prezentować dane zależnie od wybranego rekordu w bazie źródłowej. Niestety, domyślny lay wykresu w wersji ciastkowej rani nawet moje poczucie estetyki:
Zerknąłem na https://answers.sap.com/questions/12319 ... color.html gdzie miałem informację na temat customizacji wykresu i prawie jest nieźle gdyby nie to, że custom w SAP nie uwzględnia typu prezentacji danych 'PIE'.
Czy powinienem na bezczela w utworzonym xml`u wpisać PIE?
Nie do końca też ogarniam, jak w takim układzie przenieść na wykres kołowy wartości wskazujące na elementu wykresu kolumnowego.
Faktycznie, CL_IGS_CHART_ENGINE pozwoliła dość swobodnie na wykresie kołowym prezentować dane zależnie od wybranego rekordu w bazie źródłowej. Niestety, domyślny lay wykresu w wersji ciastkowej rani nawet moje poczucie estetyki:
Zerknąłem na https://answers.sap.com/questions/12319 ... color.html gdzie miałem informację na temat customizacji wykresu i prawie jest nieźle gdyby nie to, że custom w SAP nie uwzględnia typu prezentacji danych 'PIE'.
Czy powinienem na bezczela w utworzonym xml`u wpisać PIE?
Kod: Zaznacz cały
<?xml version="1.0" encoding="utf-8"?>
<SAPChartCustomizing version="1.1">
<GlobalSettings>
<Dimension>PseudoThree</Dimension>
<TransparentColor>None</TransparentColor>
<CanvasColor>None</CanvasColor>
<ColorPalette>Streamline</ColorPalette>
<ColorOrder>Default</ColorOrder>
<Gaps>Void</Gaps>
<EqualizeValueAxes>false</EqualizeValueAxes>
<Mirrored>Automatic</Mirrored>
<Defaults>
<ChartType>Columns</ChartType>
<FontFamily>Arial</FontFamily>
</Defaults>
<Colors>
<Color id="1">RGB(0,0,0)</Color>
<Color id="2">RGB(0,0,0)</Color>
<Color id="3">None</Color>
<Color id="4">RGB(0,0,0)</Color>
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
-
- Posty: 567
- Rejestracja: śr kwie 04, 2007 4:32 pm
- Lokalizacja: Poznań
- Has thanked: 10 times
- Been thanked: 171 times
Re: Wykres kołowy na wydruku
Tak, w wykresie kołowym, znacznik <ChartType> powinien mieć wartość CL_IGS_CHART=>CO_TYPE_PIE
Zabawę z wykresami bardzo ułatwia Chart Designer. To malutkie narzędzie, którym można projektować wykresy a potem np. oglądać generowane pliki xml. Kiedyś to narzędzie było dostępne do pobrania na SDN czy SMP - dzisiaj jest dostępne jako załącznik ZIP do noty:
2072652 - SAP Chart Designer cannot be downloaded from SAP service marketplace
Z innych przydatnych rzeczy:
wygenerowany wykres można pobrać w jednym z dozwolonych formatów (JPG, BMP, PNG) przy pomocy metody CL_IGS_CHART_ENGINE->GET_IMAGE w formie tabeli wewnętrznej typu W3MIMETABTYPE. Bardzo przydatne jeśli wykres chcemy np. wysłać mailem czy zapisać na dysku.
Wykres można też od razu wydrukować na wskazanej drukarce przy pomocy tego kodu:
Zabawę z wykresami bardzo ułatwia Chart Designer. To malutkie narzędzie, którym można projektować wykresy a potem np. oglądać generowane pliki xml. Kiedyś to narzędzie było dostępne do pobrania na SDN czy SMP - dzisiaj jest dostępne jako załącznik ZIP do noty:
2072652 - SAP Chart Designer cannot be downloaded from SAP service marketplace
Z innych przydatnych rzeczy:
wygenerowany wykres można pobrać w jednym z dozwolonych formatów (JPG, BMP, PNG) przy pomocy metody CL_IGS_CHART_ENGINE->GET_IMAGE w formie tabeli wewnętrznej typu W3MIMETABTYPE. Bardzo przydatne jeśli wykres chcemy np. wysłać mailem czy zapisać na dysku.
Wykres można też od razu wydrukować na wskazanej drukarce przy pomocy tego kodu:
Kod: Zaznacz cały
data chart_win type ref to cl_gui_chart_engine_win.
try.
chart_win ?= chart->get_control( ).
chart_win->print( ).
catch cx_sy_move_cast_error ##no_handler.
endtry.
Pozdrawiam,
Jacek Witczak
http://novertio.pl
Jacek Witczak
http://novertio.pl
Re: Wykres kołowy na wydruku
Staram się teraz wykorzystać wspomniany przez Ciebie Chart Designer, bo pierwotnie dostałem taką oto formę wizualną (opierając się na https://blogs.sap.com/2021/09/29/printi ... namically/ ):
Nawet mnie to boli, więc jest źle
Wykorzystałem Chart Designer, wybierając na początek trzy najbardziej interesujące mnie elementy:
1 - Pie, to wiadomo, do tego "widok 3D"
2 - Paleta kolorów - streamline, chcę mieć coś żywszego niż to, co otrzymałem pierwotnie,
3 - Wyłączyłem widzialność tła, by nie mieć szarego placka na wydruku.
Na start, w FM stworzonym zgodnie z przytoczonym wcześniej artykułem, dorzuciłem sobie element wykresu definiujący paletę kolorów:
Kod: Zaznacz cały
l_element = p_ixml_doc->create_simple_element(
name = 'ColorPalette' parent = l_globalsettings ).
l_element->if_ixml_node~set_value( 'Streamline' ).
Nie wiem za bardzo, jak wymusić sztywne przypisanie wybranego koloru każdemu kawałkowi (ich akurat jest stała ilość = 6 ).
Jakieś sugestie?
[edit]
...i pytanie kolejne: nawet przy ustawieniu kolorów tła na białe:
Kod: Zaznacz cały
l_title = p_ixml_doc->create_simple_element(
name = 'Background' parent = l_chartelements ).
* Give the desired caption for the chart here
l_element =
p_ixml_doc->create_simple_element( name = 'Visibility' parent = l_title ).
l_element->if_ixml_node~set_value( 'True' ).
l_element =
p_ixml_doc->create_simple_element( name = 'Color' parent = l_title ).
l_element->if_ixml_node~set_value( 'RGB(255,255,255)' ).
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
-
- Posty: 567
- Rejestracja: śr kwie 04, 2007 4:32 pm
- Lokalizacja: Poznań
- Has thanked: 10 times
- Been thanked: 171 times
Re: Wykres kołowy na wydruku
Oczywiście nie pamiętam szczegółów więc rzuciłem okiem do swojego kodu i wygląda to tak:
1. zdefiniowałem atrybut ColorPalette i ustawiłem jego wartość na 'Custom'. Rodzicem atrybutu ColorPalette jest atrybut GlobalSettings:
2. zdefiniowałem atrybut Colors (jego rodzicem również jest GlobalSettings), który zawiera 64 podatrybuty Color - każdy definiuje jeden kolor wykresu:
global_settings, colors i color to referencja do if_ixml_element. Makro RGB to oczywiście określenie kolorów R = czerwony, G = zielony, B = niebieski - każdy to wartość z przedziału 0..255.
Wygenerowany wykres miał teraz kolory zdefiniowane przeze mnie.
Przy kawie: https://help.sap.com/saphelp_gbt10/help ... cache=true
1. zdefiniowałem atrybut ColorPalette i ustawiłem jego wartość na 'Custom'. Rodzicem atrybutu ColorPalette jest atrybut GlobalSettings:
Kod: Zaznacz cały
ixml_cust_doc->create_simple_element( name = 'ColorPalette' parent = global_settings )->set_value( 'Custom' ) ##no_text.
Kod: Zaznacz cały
data(color_table) = value wb2_char30( ( 'RGB(187,204,221)' ) ( 'RGB(204,222,240)' ) ( 'RGB(221,234,243)' ) ( 'RGB(221,234,243)' )
( 'RGB(236,244,249)' ) ( 'RGB(236,244,249)' ) ( 'RGB(255,255,255)' ) ( 'RGB(255,0,255)' )
( 'RGB(126,168,222)' ) ( 'RGB(107,152,202)' ) ( 'RGB(79,135,191)' ) ( 'RGB(44,106,174)' )
( 'RGB(190,75,72)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(0,0,0)' )
( 'RGB(198,222,127)' ) ( 'RGB(171,197,94)' ) ( 'RGB(147,174,68)' ) ( 'RGB(118,143,44)' )
( 'RGB(74,126,187)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(156,235,145)' )
( 'RGB(255,229,112)' ) ( 'RGB(248,211,61)' ) ( 'RGB(241,194,10)' ) ( 'RGB(220,180,0)' )
( 'RGB(200,163,0)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(255,250,102)' )
( 'RGB(196,179,236)' ) ( 'RGB(162,149,205)' ) ( 'RGB(135,123,176)' ) ( 'RGB(109,99,150)' )
( 'RGB(91,81,130)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(255,103,88)' )
( 'RGB(169,204,197)' ) ( 'RGB(137,167,161)' ) ( 'RGB(115,145,140)' ) ( 'RGB(88,115,110)' )
( 'RGB(61,82,77)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(220,255,197)' )
( 'RGB(199,172,137)' ) ( 'RGB(167,147,123)' ) ( 'RGB(145,129,109)' ) ( 'RGB(115,102,88)' )
( 'RGB(82,76,69)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(253,252,166)' )
( 'RGB(220,138,188)' ) ( 'RGB(195,103,158)' ) ( 'RGB(174,90,140)' ) ( 'RGB(155,61,115)' )
( 'RGB(126,38,89)' ) ( 'RGB(192,192,192)' ) ( 'RGB(192,192,192)' ) ( 'RGB(242,207,202)' ) ).
" chart colors
colors = ixml_cust_doc->create_simple_element( name = 'Colors' parent = global_settings ) ##no_text.
do 64 times.
color = ixml_cust_doc->create_simple_element( name = 'Color' parent = colors ) ##no_text.
color->set_value( conv #( color_table[ sy-index ] ) ).
color->set_attribute( name = 'id' value = |{ sy-index }| ) ##no_text.
enddo.
Wygenerowany wykres miał teraz kolory zdefiniowane przeze mnie.
Przy kawie: https://help.sap.com/saphelp_gbt10/help ... cache=true
Pozdrawiam,
Jacek Witczak
http://novertio.pl
Jacek Witczak
http://novertio.pl
Re: Wykres kołowy na wydruku
Yacol, a udało Ci się zejść z generowaną grafiką do 8 bitów?
Nie dałem rady wykastrować głębi na etapie tworzenia wykresu, więc na wydrukach zamiast białego tła - znów straszą szarości.
Nie dałem rady wykastrować głębi na etapie tworzenia wykresu, więc na wydrukach zamiast białego tła - znów straszą szarości.
-
- Posty: 567
- Rejestracja: śr kwie 04, 2007 4:32 pm
- Lokalizacja: Poznań
- Has thanked: 10 times
- Been thanked: 171 times
Re: Wykres kołowy na wydruku
Nie musiałem się tym przejmować bo wykres był prezentowany na ekranie albo zapisywany przez użytkowników jako plik graficzny w formacie PNG.
Próbowałeś eksperymentować z atrybutem <TransparentColor> w <GlobalSettings>?
Próbowałeś eksperymentować z atrybutem <TransparentColor> w <GlobalSettings>?
Pozdrawiam,
Jacek Witczak
http://novertio.pl
Jacek Witczak
http://novertio.pl