Wykres kołowy na wydruku

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
emil
Posty: 137
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 43 times

Wykres kołowy na wydruku

Post autor: emil »

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?
dominik.tylczynski
Posty: 8367
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1939 times
Been thanked: 1479 times

Re: Wykres kołowy na wydruku

Post autor: dominik.tylczynski »

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.
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times

Re: Wykres kołowy na wydruku

Post autor: yacol »

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
emil
Posty: 137
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 43 times

Re: Wykres kołowy na wydruku

Post autor: emil »

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:
chart0.png
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 do końca też ogarniam, jak w takim układzie przenieść na wykres kołowy wartości wskazujące na elementu wykresu kolumnowego.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times

Re: Wykres kołowy na wydruku

Post autor: yacol »

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:

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
emil
Posty: 137
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 43 times

Re: Wykres kołowy na wydruku

Post autor: emil »

yacol pisze: czw lis 02, 2023 10:57 amZabawę 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.
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/ ):
graph1.png
Nawet mnie to boli, więc jest źle ;)

Wykorzystałem Chart Designer, wybierając na początek trzy najbardziej interesujące mnie elementy:
graph2.png
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' ).
Trochę opadła mi szczęka, bo nadal ciemność leje się gęsto, natomiast pozostałe elementy ciastka i tak zamykają się w zieleniach, a chciałbym, by każdy z sześciu kawałków, miał swój własny kolor:
graph3.png
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)' ).
...jest szare tło, co pewnie wynika z faktu, że wygenerowana przez SAPSCRIPT_CONVERT_BITMAP_BDS bitmapa ma więcej, niż 156 kolorów?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times

Re: Wykres kołowy na wydruku

Post autor: yacol »

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:

Kod: Zaznacz cały

ixml_cust_doc->create_simple_element( name = 'ColorPalette' parent = global_settings )->set_value( 'Custom' ) ##no_text.
2. zdefiniowałem atrybut Colors (jego rodzicem również jest GlobalSettings), który zawiera 64 podatrybuty Color - każdy definiuje jeden kolor wykresu:

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.                         
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
Pozdrawiam,

Jacek Witczak
http://novertio.pl
emil
Posty: 137
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 43 times

Re: Wykres kołowy na wydruku

Post autor: emil »

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.
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times

Re: Wykres kołowy na wydruku

Post autor: yacol »

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>?
Pozdrawiam,

Jacek Witczak
http://novertio.pl
emil
Posty: 137
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 43 times

Re: Wykres kołowy na wydruku

Post autor: emil »

Tak, nie pomagało w moim przypadku.
emil
Posty: 137
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 43 times

Re: Wykres kołowy na wydruku

Post autor: emil »

yacol pisze: pn gru 11, 2023 11:43 am Nie musiałem się tym przejmować bo wykres był prezentowany na ekranie albo (...ciach)
Na ekranie - w GUI, czy jakiejś Fiorce?
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times

Re: Wykres kołowy na wydruku

Post autor: yacol »

GUI.
Pozdrawiam,

Jacek Witczak
http://novertio.pl