<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAP... i świat się otwiera</title>
	<atom:link href="http://www.sapclue.pl/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sapclue.pl</link>
	<description></description>
	<lastBuildDate>Tue, 16 Aug 2011 07:53:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Tematyka strony</title>
		<link>http://www.sapclue.pl/index.php/2011/08/16/tematyka-strony/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tematyka-strony</link>
		<comments>http://www.sapclue.pl/index.php/2011/08/16/tematyka-strony/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 07:53:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nie na temat]]></category>
		<category><![CDATA[kurs SAP]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[SAP kurs]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=479</guid>
		<description><![CDATA[O ile z zakresu programowania robię wpisy według własnego klucza, o tyle z funkcjonalności SAP musicie mi trochę pomóc w tematyce &#8211; a konkretnie, czego oczekujecie się dowiedzieć. Proszę najlepiej mi wysyłać prośby na maila sapclue@sapclue.pl lub mile widzane są komentrarze. &#160;]]></description>
			<content:encoded><![CDATA[<p>O ile z zakresu programowania robię wpisy według własnego klucza, o tyle z funkcjonalności SAP musicie mi trochę pomóc w tematyce &#8211; a konkretnie, czego oczekujecie się dowiedzieć. Proszę najlepiej mi wysyłać prośby na maila <a href="mailto:sapclue@sapclue.pl">sapclue@sapclue.pl</a> lub mile widzane są komentrarze.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/08/16/tematyka-strony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; pętla LOOP&#8230;ENDLOOP (2)</title>
		<link>http://www.sapclue.pl/index.php/2011/08/16/programowanie-abap-petla-loop-endloop-2/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-petla-loop-endloop-2</link>
		<comments>http://www.sapclue.pl/index.php/2011/08/16/programowanie-abap-petla-loop-endloop-2/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 07:48:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[ENDLOOP]]></category>
		<category><![CDATA[kurs SAP]]></category>
		<category><![CDATA[LOOP]]></category>
		<category><![CDATA[LOOP AT]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=473</guid>
		<description><![CDATA[Dzisiaj do naszej pętli dodamy warunkowe sprawdzanie po polu &#8211; dzięki temu będziemy mogli ograniczyć wybór, oraz przyspieszyć działanie programu. Korzystając z naszego pierwszego wpisu na temat pętli LOOP&#8230;ENDLOOP, wykorzystam kod z przykładu 2 - na końcu mieliśmy pętlę po tabeli lt_mara, czyli program nam przeleciał przez każdy rekord z tej tabeli. Ale dla nas jest ważne [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj do naszej pętli dodamy warunkowe sprawdzanie po polu &#8211; dzięki temu będziemy mogli ograniczyć wybór, oraz przyspieszyć działanie programu.</p>
<p><span id="more-473"></span></p>
<p>Korzystając z naszego pierwszego wpisu na temat pętli LOOP&#8230;ENDLOOP, wykorzystam kod z <a href="http://www.sapclue.pl/index.php/2011/08/01/programowanie-abap-petla-loop-endloop-1/" target="_blank">przykładu 2</a> - na końcu mieliśmy pętlę po tabeli lt_mara, czyli program nam przeleciał przez każdy rekord z tej tabeli.</p>
<p>Ale dla nas jest ważne żeby z tej tabeli program wyświetlił nam materiały które są towarami handlowymi &#8211; czyli pole mtart (typ materiału) musi być HAWA. Do tego używamy klauzuli WHERE dla pętli, czyli powinno to wyglądać następująco:</p>
<blockquote><p>LOOP AT lt_mara <span style="color: #ff0000;">WHERE</span> <span style="color: #0000ff;">mtart = &#8217;HAWA&#8217;</span>.<br />
WRITE:/ lt_mara-matnr, lt_mara-mtart.<br />
ENDLOOP.</p></blockquote>
<p>Widzimy że doszło nam wyrażenie WHERE, w naszym wolnym tłumaczeniu znaczy &#8211; gdzie, dla warunku pola &#8211; i teraz wpisujemy nazwę pola z tabeli lt_mara, czyli <span style="color: #0000ff;">mtart ma być równe &#8216;HAWA&#8217; <span style="color: #000000;">- czyli dla towaru handlowego.</span></span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;">W tym wypadku program w pętli będzie czytał tylko rekordy dla towarów handlowych. Równie dobrze to ograniczenie moglibyśmy zrobić w SELECT gdzie mamy WHERE użyte tylko dla materiału, a wyglądało by to tak:</span></span></p>
<blockquote><p><span style="color: #0000ff;"><span style="color: #000000;"> SELECT * FROM mara INTO TABLE lt_mara<br />
                <span style="color: #0000ff;">WHERE</span> matnr IN material<br />
                         <span style="color: #0000ff;">OR</span> mtart = &#8217;HAWA&#8217;. </span></span></p></blockquote>
<p><span style="color: #0000ff;"><span style="color: #000000;">W tym wypadku moglibyśmy zrezygnować w pętli z dodatkowego WHERE, ponieważ system wybrałby tylko takie rekordy do tabeli lokalnej.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/08/16/programowanie-abap-petla-loop-endloop-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; Lista ALV</title>
		<link>http://www.sapclue.pl/index.php/2011/08/09/programowanie-abap-lista-alv/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-lista-alv</link>
		<comments>http://www.sapclue.pl/index.php/2011/08/09/programowanie-abap-lista-alv/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 13:20:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[Lista ALV]]></category>
		<category><![CDATA[REUSE_ALV_GRID_DISPLAY]]></category>
		<category><![CDATA[REUSE_ALV_LIST_DISPLAY]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=466</guid>
		<description><![CDATA[Aby zakończyć pewien etap w naszym kursie programowania, dochodzimy do prezentacji raportu w pięknym ALV, które użyjemy zamiast naszej funkcji WRITE. Nie będziemy teraz omawiać całego ALV w detalach, ponieważ jest to niepotrzebne na tym etapie, skupimy się raczej na ładnym wyświetleniu wyniku naszego raportu. Żeby użyć funkcji ALV potrzebujemy ją najpierw zdefiniować w naszym [...]]]></description>
			<content:encoded><![CDATA[<p>Aby zakończyć pewien etap w naszym kursie programowania, dochodzimy do prezentacji raportu w pięknym ALV, które użyjemy zamiast naszej funkcji WRITE.</p>
<p><span id="more-466"></span></p>
<p>Nie będziemy teraz omawiać całego ALV w detalach, ponieważ jest to niepotrzebne na tym etapie, skupimy się raczej na ładnym wyświetleniu wyniku naszego raportu. Żeby użyć funkcji ALV potrzebujemy ją najpierw zdefiniować w naszym programie:</p>
<p>Pierwsze co, to deklarujemy grupę zmiennych i stałych typu SLIS &#8211; do tego używamy wyrażenia  TYPE-POOLS:</p>
<blockquote><p> TYPE-POOLS:  slis.</p></blockquote>
<p>Po drugie definiujemy zmienne tabel z polami, które są wykorzystywane do wyświetlania i operacji na polach ALV:</p>
<blockquote><p> DATA:   wa_fieldcat   TYPE slis_fieldcat_alv,<br />
              it_fieldcat     TYPE slis_t_fieldcat_alv.</p></blockquote>
<p>Po deklaracjach, mamy nasze linie kodu z wyborem pola, SELECT&#8217;em i dodatkowo teraz musimy podać pola z tabeli MARA które chcemy wyświetlić:</p>
<blockquote><p>     CLEAR wa_fieldcat.<br />
    wa_fieldcat-fieldname = &#8217;MATNR&#8217;.<br />
    wa_fieldcat-tabname = &#8217;LT_MARA&#8217;.<br />
    APPEND wa_fieldcat TO it_fieldcat.</p>
<p>    CLEAR wa_fieldcat.<br />
    wa_fieldcat-fieldname = &#8217;MTART&#8217;.<br />
    wa_fieldcat-tabname = &#8217;LT_MARA&#8217;.<br />
    APPEND wa_fieldcat TO it_fieldcat.</p></blockquote>
<p>Pojawiają się nam nowe funkcjie, i tak:</p>
<ul>
<li><span style="color: #ff0000;">CLEAR</span> &#8211; czyści nam obszar roboczy wa_fieldcat &#8211; chodzi o to samo co mieliśmy z wa_mara <img src='http://www.sapclue.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li><span style="color: #ff0000;">wa_fieldcat-fieldname = &#8217;MATNR&#8217;</span>. &#8211; ustawiamy dla naszego pola fieldname w obszarze wa_fieldcat pole MATNR, to samo analogicznie ustawiamy dla pola tabname, gdzie przypisujemy naszą tabelę LT_MARA</li>
<li><span style="color: #ff0000;">APPEND wa_fieldcat TO it_fieldcat</span>. &#8211; to co przypisaliśmy do obszaru roboczego, kopiujemy teraz do tabeli it_fieldcat</li>
</ul>
<p>Po tej operacji system w tabeli it_fieldcat powinien mieć 2 rekordy z danymi pól MATNR i MTART dla tabeli LT_MARA, można sobie to sprawdzić w debbugerze.</p>
<p>I ostatnią czynnością jest uruchomienie funkcji generującej nam raport ALV. Do uruchomienia funkcji używamy wyrażenia CALL FUNCTION i wpisujemy nazwę funkcji REUSE_ALV_GRID_DISPLAY, również można skorzystać z wzorców które można wywołać naciskając przycisk &#8216;Pattern&#8217;.</p>
<blockquote><p>  CALL FUNCTION &#8217;REUSE_ALV_GRID_DISPLAY&#8217;<br />
    EXPORTING<br />
      it_fieldcat              = it_fieldcat<br />
    TABLES<br />
      t_outtab                 = lt_mara<br />
    EXCEPTIONS<br />
      program_error            = 1<br />
      OTHERS                   = 2.</p></blockquote>
<p>W dużym skrócie, dla wyboru pól przypisujemy naszą tabelę it_fieldcat, a dla danych lt_mara.</p>
<p>Żeby trochę ułatwić i nie trzeba było sięgać do poprzednich postów po kod, wklejam całość &#8211; tak jak to powinno wyglądać:</p>
<blockquote><p> REPORT kurs_abap.</p>
<p>* Dane i zmienne środowiskowe<br />
TYPE-POOLS:  slis.<br />
TABLES: mara.<br />
DATA:   wa_fieldcat   TYPE slis_fieldcat_alv,<br />
        it_fieldcat   TYPE slis_t_fieldcat_alv.<br />
DATA: lt_mara TYPE TABLE OF mara WITH HEADER LINE.   &#8221;Tabela lokalna</p>
<p>* Wybór materiału na oknie seleckcji<br />
SELECT-OPTIONS: material FOR mara-matnr.</p>
<p>* Wybór danych z tabeli MARA<br />
SELECT * FROM mara INTO TABLE lt_mara<br />
                   WHERE matnr IN material.</p>
<p>* Dodanie pól, które wyświetlą się w ALV<br />
    CLEAR wa_fieldcat.<br />
    wa_fieldcat-fieldname = &#8217;MATNR&#8217;.<br />
    wa_fieldcat-tabname = &#8217;LT_MARA&#8217;.<br />
    APPEND wa_fieldcat TO it_fieldcat.</p>
<p>    CLEAR wa_fieldcat.<br />
    wa_fieldcat-fieldname = &#8217;MTART&#8217;.<br />
    wa_fieldcat-tabname = &#8217;LT_MARA&#8217;.<br />
    APPEND wa_fieldcat TO it_fieldcat.</p>
<p>* Wywołanie funkcji ALV<br />
 CALL FUNCTION &#8217;REUSE_ALV_GRID_DISPLAY&#8217;<br />
    EXPORTING<br />
      it_fieldcat              = it_fieldcat<br />
    TABLES<br />
      t_outtab                 = lt_mara<br />
    EXCEPTIONS<br />
      program_error            = 1<br />
      OTHERS                   = 2.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/08/09/programowanie-abap-lista-alv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; pętla LOOP&#8230;ENDLOOP (1)</title>
		<link>http://www.sapclue.pl/index.php/2011/08/01/programowanie-abap-petla-loop-endloop-1/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-petla-loop-endloop-1</link>
		<comments>http://www.sapclue.pl/index.php/2011/08/01/programowanie-abap-petla-loop-endloop-1/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 09:18:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[ENDLOOP]]></category>
		<category><![CDATA[LOOP]]></category>
		<category><![CDATA[LOOP AT]]></category>
		<category><![CDATA[WITH HEADER LINE]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=453</guid>
		<description><![CDATA[W poprzednim wpisie używaliśmy SELECT do pobierania danych z tabeli MARA do naszej wewnętrznej tabeli lt_mara &#8211; jeżeli chcielibyśmy wyświetlić dane z naszej tabeli wewnętrznej za pomocą WRITE to niestety system zwróci nam błąd syntetyczny, ponieważ może być więcej niż jeden rekord &#8211; do tego celu użyjemy pętli LOOP. Pętla to jedna z tych konstrukcji [...]]]></description>
			<content:encoded><![CDATA[<p>W poprzednim wpisie używaliśmy SELECT do pobierania danych z tabeli MARA do naszej wewnętrznej tabeli lt_mara &#8211; jeżeli chcielibyśmy wyświetlić dane z naszej tabeli wewnętrznej za pomocą WRITE to niestety system zwróci nam błąd syntetyczny, ponieważ może być więcej niż jeden rekord &#8211; do tego celu użyjemy pętli LOOP.</p>
<p><span id="more-453"></span></p>
<p>Pętla to jedna z tych konstrukcji bez której nie da się żyć w programowaniu, dzisiaj skupię się na pętli LOOP&#8230;.ENDLOOP dzięki której możemy odczytać wszystkie rekordy z tabeli wewnętrznej.</p>
<p>Sama konstrukcja jest prosta, bo zaczyna się zawsze od LOOP AT później wstawiamy nazwę tabeli wewnętrznej i kończymy zawsze ENDLOOP. Jeżeli tabela wewnętzna nie ma w definicji nagłówka to musimy jeszcze wspomóc się obszarem roboczym do którego pętla będzie kopiować dane. Zrobię 2 przykłady żeby pokazać jak to będzie wyglądać:</p>
<p><strong>Przykład 1</strong> &#8211; tabela wewnętrzna bez definicji nagłówka:</p>
<blockquote><p>DATA: wa_mara TYPE mara,            &#8221;Obszar roboczy<br />
      lt_mara TYPE TABLE OF mara.   &#8221;Tabela lokalna</p>
<p>SELECT-OPTIONS: material FOR wa_mara-matnr.</p>
<p>SELECT * FROM mara INTO TABLE lt_mara<br />
                   WHERE matnr IN material.</p>
<p>LOOP AT lt_mara <strong>INTO</strong> <span style="color: #ff0000;">wa_mara</span>.<br />
  WRITE:/ <span style="color: #ff0000;">wa_mara-matnr, wa_mara-mtart.</span><br />
ENDLOOP.</p></blockquote>
<p>Czyli dla definicji tabeli bez nagłówka, musimy użyć dodatkowo INTO &#8216;obszar roboczy&#8217;, za pomocą którego wyświetlimy dane na ekranie. Zauważcie że do funkcji WRITE używamy obszaru roboczego wa_mara, do którego kopiowane są dane z pętli.</p>
<p><strong>Przykład 2</strong> &#8211; tabela wewnętrzna z definicją nagłówka:</p>
<blockquote><p>TABLES: mara.<br />
DATA: lt_mara TYPE TABLE OF mara <span style="color: #ff0000;">WITH HEADER LINE</span>.   &#8221;Tabela lokalna z nagłówkiem</p>
<p>SELECT-OPTIONS: material FOR mara-matnr.</p>
<p>SELECT * FROM mara INTO TABLE lt_mara<br />
                   WHERE matnr IN material.</p>
<p>LOOP AT lt_mara.<br />
  WRITE:/ <span style="color: #ff0000;">lt_mara-matnr, lt_mara-mtart</span>.<br />
ENDLOOP.</p></blockquote>
<p>Dodaliśmy tylko do definicji tabeli nagłówek WITH HEADER LINE i na tym poziomie pętla może zapisywać sobie tymczasowe dane &#8211; dzięki temu zmienia nam się źródło danyc do funkcji WRITE &#8211; system korzysta z lt_mara</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/08/01/programowanie-abap-petla-loop-endloop-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Załatw kumpla &#8211; www.zalatwkumpla.pl</title>
		<link>http://www.sapclue.pl/index.php/2011/07/31/zalatw-kumpla-www-zalatwkumpla-pl/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zalatw-kumpla-www-zalatwkumpla-pl</link>
		<comments>http://www.sapclue.pl/index.php/2011/07/31/zalatw-kumpla-www-zalatwkumpla-pl/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 23:37:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nie na temat]]></category>
		<category><![CDATA[http://www.zalatwkumpla.pl/]]></category>
		<category><![CDATA[Załatw kumpla]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=449</guid>
		<description><![CDATA[Oprócz normalnych spraw związanych z SAP to dla rozrywki proponuję wejść na stronę i załatwić kumpla http://www.zalatwkumpla.pl/]]></description>
			<content:encoded><![CDATA[<p>Oprócz normalnych spraw związanych z SAP to dla rozrywki proponuję wejść na stronę i załatwić kumpla <img src='http://www.sapclue.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.zalatwkumpla.pl/">http://www.zalatwkumpla.pl/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/07/31/zalatw-kumpla-www-zalatwkumpla-pl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; SELECT, czyli pobieranie danych z bazy</title>
		<link>http://www.sapclue.pl/index.php/2011/07/26/programowanie-abap-select-czyli-pobieramy-dane-z-bazy/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-select-czyli-pobieramy-dane-z-bazy</link>
		<comments>http://www.sapclue.pl/index.php/2011/07/26/programowanie-abap-select-czyli-pobieramy-dane-z-bazy/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 10:43:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[kurs ABAP]]></category>
		<category><![CDATA[Programowanie w ABAP]]></category>
		<category><![CDATA[SELECT]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=424</guid>
		<description><![CDATA[Jest to jedna z podstawowych rzeczy we wszystkich językach programowania &#8211; każdy system zapisuje i odczutuje dane umieszczone w tabelach, niejednokrotnie je zmieniając w międzyczasie w obszarach roboczych i późniejszej aktualizacji. Nie wyczerpię w tym temacie wszystkich funkcji dotyczących funkcji SELECT, ze względu na to że każdy z Was po kolei by usnął i przestał [...]]]></description>
			<content:encoded><![CDATA[<p>Jest to jedna z podstawowych rzeczy we wszystkich językach programowania &#8211; każdy system zapisuje i odczutuje dane umieszczone w tabelach, niejednokrotnie je zmieniając w międzyczasie w obszarach roboczych i późniejszej aktualizacji.</p>
<p><span id="more-424"></span></p>
<p>Nie wyczerpię w tym temacie wszystkich funkcji dotyczących funkcji SELECT, ze względu na to że każdy z Was po kolei by usnął i przestał czytać ten post. Więc to co zrobimy to odczytamy dane z tabeli MARA i umieścimy je w zmiennych które poznaliśmy w poprzednim temacie &#8211; czyli obszarze roboczym oraz lokalnej tabelce.</p>
<p>Zacznijmy od zdefiniowania zmiennych:</p>
<blockquote><p> DATA: wa_mara TYPE mara,                   &#8221;Obszar roboczy<br />
            lt_mara TYPE TABLE OF mara.    &#8221;Tabela lokalna</p></blockquote>
<p> Czyli mamy obszar roboczy &#8216;wa_mara&#8217; i lokalną tabelę &#8216;lt_mara&#8217; &#8211; zgodnie z tym co już umiemy, na ekranie selekcji umieścimy pole z numerem materiału, tak żeby po tym polu system nam szukał po tabeli.</p>
<blockquote><p> SELECT-OPTIONS: material FOR wa_mara-matnr.</p></blockquote>
<p>I teraz przejdźmy do składni SELECT &#8211; dla obszaru i tabeli będą bardzo podobne, będą się tylko różniły tą samą częścią definicji co w zmiennych.</p>
<p><strong>Składnia do odczytu wszystkich pól do obszaru roboczego &#8216;wa_mara&#8217;</strong></p>
<blockquote><p> SELECT SINGLE * FROM mara INTO  wa_mara<br />
                                                   WHERE matnr IN material.</p></blockquote>
<p>Teraz wytłumaczmy po kolei  o co chodzi:</p>
<ul>
<li><span style="color: #ff0000;">SELECT SINGLE</span> &#8211; pobieramy 1 rekord z tabeli MARA, ponieważ jesteśmy tym ograniczeni w przypadku obszaru roboczego</li>
<li><span style="color: #ff0000;">*</span> &#8211; wszystkie pola które istnieją w tabeli MARA</li>
<li><span style="color: #ff0000;">FROM</span> &#8211; odczyt z tabeli</li>
<li><span style="color: #0000ff;">mara</span> &#8211; nazwa tabeli z której odczytujemy dane</li>
<li><span style="color: #ff0000;">INTO</span> &#8211; do obszaru roboczego o nazwie</li>
<li><span style="color: #0000ff;">wa_mara</span> &#8211; nazwa naszego obszaru roboczego</li>
<li><span style="color: #ff0000;">WHERE</span> &#8211; ograniczenie dla pola z tabeli mara</li>
<li><span style="color: #0000ff;">matnr</span> &#8211; nazwa pola, czyli numer materiału</li>
<li><span style="color: #ff0000;">IN</span> &#8211; zawiera się, IN używamy w przypadku gdy mamy zakres, czyli używamy SELECT-OPTIONS (dla PARAMETERS będziemy używać argumentu EQ &#8211; to samo co &#8216;=&#8217;)</li>
<li><span style="color: #0000ff;">material</span> &#8211; nasz zakres wpisywany w oknie selekcji</li>
</ul>
<p><strong>Składnia do odczytu wszystkich pól do tabeli lokalnej &#8216;lt_mara&#8217;</strong></p>
<blockquote><p> SELECT * FROM mara INTO TABLE lt_mara<br />
                                  WHERE matnr IN material.</p></blockquote>
<p>Składnia jest bardzo podobna, brakuje tylko słowa <span style="color: #ff0000;">SINGLE</span> &#8211; ponieważ możemy pobrać więcej rekordów do naszej lokalnej tabeli, oraz jest dodane<span style="color: #ff0000;"> INTO TABLE</span>, które dla systemu oznacza że wszystkie odczytane dane będą umieszczone w tabeli lt_mara.</p>
<p>To teraz wkleję cały kod poniżej do testów &#8211; na końcu postawię break pointa żebyśmy mogli odczytać nasze dane po odczycie danych.</p>
<blockquote><p> REPORT kurs_abap.</p>
<p>DATA: wa_mara TYPE mara,                   &#8221;Obszar roboczy<br />
           lt_mara TYPE TABLE OF mara.   &#8221;Tabela lokalna<br />
 </p>
<p>SELECT-OPTIONS: material FOR wa_mara-matnr.<br />
 </p>
<p>SELECT SINGLE * FROM mara INTO  wa_mara<br />
                              WHERE matnr IN material.</p>
<p>SELECT * FROM mara INTO TABLE lt_mara<br />
                                   WHERE matnr IN material.</p>
<p>BREAK-POINT.</p></blockquote>
<p>Bardzo ważne jest żeby ten temat zrozumieć &#8211; jest to absolutna podstawa w języku programowania i bez tego ani rusz dalej. Jeżeli jest coś niezrozumiałego to proszę o maila w tej sprawie <img src='http://www.sapclue.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  <a href="mailto:sapclue@sapclue.pl">sapclue@sapclue.pl</a> &#8211; postaram się podać jeszcze więcej przykładów.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/07/26/programowanie-abap-select-czyli-pobieramy-dane-z-bazy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; definicje tabel i obszarów</title>
		<link>http://www.sapclue.pl/index.php/2011/07/25/programowanie-abap-definicje-tabel-i-obszarow/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-definicje-tabel-i-obszarow</link>
		<comments>http://www.sapclue.pl/index.php/2011/07/25/programowanie-abap-definicje-tabel-i-obszarow/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 15:27:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[kurs SAP]]></category>
		<category><![CDATA[tables]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=419</guid>
		<description><![CDATA[Aby pójść krok dalej musimy poznać w jaki sposób tworzy się definicje obszarów roboczych oraz tabel lokalnych. O strukturach powiemy sobie trochę później, na razie chciałbym się skupić na poprawnym zdefiniowaniu naszych wszystkich zmiennych, które z czasem będziemy używać w programach. Zrobimy to na przykładzie najbardziej znanej tabeli, czyli MARA &#8211; która gromadzi dane ogólne [...]]]></description>
			<content:encoded><![CDATA[<p>Aby pójść krok dalej musimy poznać w jaki sposób tworzy się definicje obszarów roboczych oraz tabel lokalnych. O strukturach powiemy sobie trochę później, na razie chciałbym się skupić na poprawnym zdefiniowaniu naszych wszystkich zmiennych, które z czasem będziemy używać w programach.</p>
<p><span id="more-419"></span></p>
<p>Zrobimy to na przykładzie najbardziej znanej tabeli, czyli MARA &#8211; która gromadzi dane ogólne na temat materiału w systemie.</p>
<p><strong>DEFINICJA OBSZARU ROBOCZEGO:</strong></p>
<p>Obszarem roboczym będziemy nazywali przestrzeń którą możemy napełniać tylko 1 rekordem danych, czyli jest to definicja bardzo zbliżona do struktury &#8211; różnicą jest że definiując obszar roboczy referencją naszą jest już istniejąca tabela, natomiast w strukturze możemy definiować pola z różnych tabel.</p>
<p>Do definiowania obszaru roboczego używamy znanej już nam definincji DATA&#8230;TYPE&#8230; oraz róznież DATA&#8230;LIKE&#8230; Składnia z TYPE i LIKE ma dokładnie takie samo znaczenie w definicji, natomist LIKE używać możemy do zmiennych z referencją do utworzonoego wcześniej obszaru roboczego.</p>
<p>Dobra, wystarczy tej teorii &#8211; najprościej jest zawsze na przykładach <img src='http://www.sapclue.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  A więc definiujemy jakiś obszar roboczy dla naszej tabeli MARA:</p>
<blockquote><p> DATA: wa_mara TYPE mara.</p></blockquote>
<p>W tym momencie zdefiniowaliśmy nasz obszar roboczy &#8216;wa_mara&#8217; który ma te same pola co tabela MARA. Tak samo możemy zbudować zmienną z definicją LIKE:</p>
<blockquote><p> DATA: wa_mara LIKE mara.</p></blockquote>
<p>Dla programu nie będzie miało to znaczenia czy użyjemy TYPE czy LIKE, natomiast to czym się wyróżnia LIKE to dodatkowa możliwość tworzenia zmiennej z obszaru roboczego, czyli:</p>
<blockquote><p>DATA: <span style="color: #ff0000;">wa_mara </span>TYPE mara.<br />
DATA: waa_mara LIKE <span style="color: #ff0000;">wa_mara</span>.</p></blockquote>
<p>Żeby dodatkowo zooptymalizować kod, zamiast dwóch początków definicji DATA, możemy użyć przecinka:</p>
<blockquote><p> DATA: wa_mara TYPE mara<strong><span style="color: #ff0000;">,</span></strong><br />
            waa_mara LIKE wa_mara.</p></blockquote>
<p><strong>DEFINICJA LOKALNEJ TABELI:</strong></p>
<p>Sama koncepcja jest taka sama, więc to co wyróżnia tabelę lokalną to pomieszczenie większej ilości rekordów &#8211; dzięki temu napełniamy ją danymi, a później z niej odczytujemy.</p>
<p>Definicja jest taka sama, do składni TYPE i LIKE dodany jest element TABLE OF&#8230; &#8211; i tak to wygląda:</p>
<blockquote><p> DATA: lt_mara TYPE TABLE OF mara,<br />
            ltt_mara LIKE TABLE OF lt_mara.</p></blockquote>
<p>W następnej części już to sobie wykorzystamy przy użyciu składni SELECT, gdzie będziemy tworzyć zapytanie do tabeli MARA i będziemy oczekiwać odpowiedzi <img src='http://www.sapclue.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Zaczyna się robić coraz ciekawiej.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/07/25/programowanie-abap-definicje-tabel-i-obszarow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP – wybór z pola (3)</title>
		<link>http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-%e2%80%93-wybor-z-pola-3/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-%25e2%2580%2593-wybor-z-pola-3</link>
		<comments>http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-%e2%80%93-wybor-z-pola-3/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 11:45:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[kurs ABAP]]></category>
		<category><![CDATA[programowanie ABAP]]></category>
		<category><![CDATA[SELECT-OPTIONS]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=402</guid>
		<description><![CDATA[Oprócz naszej definicji z funkcją PARAMETERS, chcielibyśmy dać możliwość wyboru zakresu z okna selekcji &#8211; do tego służy funkcja SELECT-OPTIONS: Aby móc korzystać z referencji dla pola w tej składni, musimy najpierw zdeklarować tabelę w której to pole istnieje.Przypomnijmy sobie jak wyglądał program z użyciem funkcji PARAMETERS. REPORT kurs_abap. PARAMETERS: material TYPE mara-matnr. WRITE: material. Deklaracją referencji jest tu znacznik [...]]]></description>
			<content:encoded><![CDATA[<p>Oprócz naszej definicji z funkcją PARAMETERS, chcielibyśmy dać możliwość wyboru zakresu z okna selekcji &#8211; do tego służy funkcja SELECT-OPTIONS:</p>
<p><span id="more-402"></span></p>
<p>Aby móc korzystać z referencji dla pola w tej składni, musimy najpierw zdeklarować tabelę w której to pole istnieje.Przypomnijmy sobie jak wyglądał program z użyciem funkcji PARAMETERS.</p>
<blockquote><p>REPORT kurs_abap.<br />
PARAMETERS: material TYPE mara-matnr.<br />
WRITE: material.</p></blockquote>
<p>Deklaracją referencji jest tu znacznik &#8216;TYPE&#8217; przed mara-matnr, jeżeli chcemy używać zakresów i wyrażenia SELECT-OPTIONS to najpierw musimy zadeklarować tabelę/zmienną którą przypiszemy. Składnia wygląda następująco:</p>
<p> SELECT-OPTIONS: material FOR mara-matnr.</p>
<p>Czyli, wybierz zakres (SELECT-OPTIONS) ze zmiennej material dla (FOR) zakresu z pola MARA-MATNR. Do tego musimy zadeklarować tabelę z którego to pole (MATNR) się bierze &#8211; w tym przypadku jest to tabela MARA.</p>
<p>Ostatecznie program powinien wyglądać tak:</p>
<blockquote><p>REPORT kurs_abap.<br />
TABLES: MARA.<br />
SELECT-OPTIONS: material FOR mara-matnr.<br />
WRITE: material.</p></blockquote>
<p>Lub jeżeli chcemy użyć zmiennej typu c, to będzie to wyglądało jak poniżej:</p>
<blockquote><p>REPORT kurs_abap.<br />
DATA: nazwa(20) TYPE c.<br />
SELECT-OPTIONS: material FOR nazwa.<br />
WRITE: material.</p></blockquote>
<p> W kolejnych częściach kursu opiszę że deklarowanie poprzez TABLES nie jest zalecane &#8211; ale nie chiałem komplikować jeszcze kodu <img src='http://www.sapclue.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Na ekranie powinno nam się pojawić pole MATERIAL z możliwością wpisania zakresu.</p>
<p style="text-align: center;"><a href="http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-%e2%80%93-wybor-z-pola-3/dok1-5/" rel="attachment wp-att-403"><img class="aligncenter size-full wp-image-403" title="dok1" src="http://www.sapclue.pl/wp-content/uploads/2011/07/dok14.jpg" alt="" width="506" height="107" /></a></p>
<p>Wiadomo że wybór z pola będzie niezmiernie przydatny w wyszukiwaniu danych z tabel - ale to w kolejnych częściach kursu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-%e2%80%93-wybor-z-pola-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; Dubugowanie</title>
		<link>http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-dubugowanie/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-dubugowanie</link>
		<comments>http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-dubugowanie/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 07:32:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[Debuger]]></category>
		<category><![CDATA[Dubug]]></category>
		<category><![CDATA[programowanie ABAP]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=385</guid>
		<description><![CDATA[Jedno z tych narzędzie bez którego programista nie może żyć &#8211; Używanie debugera konieczne jest do sprawdzenia przepływu danych w zmiennych, wykonywania się funkcji programów &#8230;itd. Generalnie chodzi o prześledzenie kodu programu podczas jego użycia. Jak uruchamiamy debuger w programie? Mamy 2 możliwości, za pomocą składni korzystając z wyrażenia &#8216;BREAK&#8217; lub za pomocą wywołania na [...]]]></description>
			<content:encoded><![CDATA[<p>Jedno z tych narzędzie bez którego programista nie może żyć &#8211; Używanie debugera konieczne jest do sprawdzenia przepływu danych w zmiennych, wykonywania się funkcji programów &#8230;itd. Generalnie chodzi o prześledzenie kodu programu podczas jego użycia.</p>
<p><span id="more-385"></span></p>
<p>Jak uruchamiamy debuger w programie? Mamy 2 możliwości, za pomocą składni korzystając z wyrażenia &#8216;BREAK&#8217; lub za pomocą wywołania na poziomie linii kodu.</p>
<p><strong>Sposób 1:</strong></p>
<p>Wpisujemy bezpośrednio w miejscu których chcemy aby nam się uruchomił debuger &#8211; korzystamy z naszego ostatniego programu.</p>
<blockquote><p>PARAMETERS: material TYPE mara-matnr.<br />
BREAK-POINT.           &#8222;&lt;&#8211; dla każdego kto uruchomi program<br />
WRITE: material.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>PARAMETERS: material TYPE mara-matnr.<br />
BREAK nazwa_użytkownika.      &lt;&#8211; Tylko dla wybranego użytkownika<br />
WRITE: material.</p></blockquote>
<p><strong>Sposób 2:</strong></p>
<p>Używamy ikonek na pasku menu, pierwsza ma zastosowanie dla wszystkich użytkowników (BREAK-POINT) a druga stawia punkt zatrzymania tylko dla naszego użytkownika.</p>
<p style="text-align: center;"><a href="http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-dubugowanie/dok1-4/" rel="attachment wp-att-387"><img class="aligncenter size-full wp-image-387" title="dok1" src="http://www.sapclue.pl/wp-content/uploads/2011/07/dok13.jpg" alt="" width="488" height="49" /></a></p>
<p style="text-align: center;">Po tym jak ustawimy punkt zatrzymania w naszym programie i go uruchomimy, automatycznie system uruchomi nam Debugera. Dwukrotnie klikając na naszą zmienną &#8216;material&#8217;, przeniesiemy ją do drugiego okna, gdzie możemy śledzić jej wartość. Jeżeli chcemy przejść krok do przodu w debugerze to naciskamy F5 (krok pojedynczy) lub F6 (krok pojedynczy bez wchodzenia do środka funkcji), jeżeli chcemy aby program doszedł do swojego końca naciskamy F8:<a href="http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-dubugowanie/dok2-3/" rel="attachment wp-att-388"><img class="aligncenter size-full wp-image-388" title="dok2" src="http://www.sapclue.pl/wp-content/uploads/2011/07/dok22.jpg" alt="" width="526" height="114" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/07/22/programowanie-abap-dubugowanie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie ABAP &#8211; wybór z pola (2)</title>
		<link>http://www.sapclue.pl/index.php/2011/07/21/programowanie-abap-wybor-z-pola-2/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programowanie-abap-wybor-z-pola-2</link>
		<comments>http://www.sapclue.pl/index.php/2011/07/21/programowanie-abap-wybor-z-pola-2/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 20:10:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Programowanie - Kurs]]></category>
		<category><![CDATA[kurs SAP]]></category>
		<category><![CDATA[PARAMETERS]]></category>

		<guid isPermaLink="false">http://www.sapclue.pl/?p=370</guid>
		<description><![CDATA[Nasze zmienne możemy definiować jako pola z tabel standardowych SAP &#8211; dzięki temu system będzie używał wszystkich ustawień/parametrów związanych z tym polem: Więc dla naszej funkcji PARAMETERS ustawimy zmienną z tabeli MARA &#8211; numer materiału &#8211; pole MATNR. Tabele i nazy pól w tabelach możemy przeglądać w transakcji SE16N, ale na jej temat rozpiszę się [...]]]></description>
			<content:encoded><![CDATA[<p>Nasze zmienne możemy definiować jako pola z tabel standardowych SAP &#8211; dzięki temu system będzie używał wszystkich ustawień/parametrów związanych z tym polem:</p>
<p><span id="more-370"></span></p>
<p>Więc dla naszej funkcji PARAMETERS ustawimy zmienną z tabeli MARA &#8211; numer materiału &#8211; pole MATNR. Tabele i nazy pól w tabelach możemy przeglądać w transakcji SE16N, ale na jej temat rozpiszę się w osobnym wątku. Więc teraz naszą zmienną zdefiniujmy jako numer materiału SAP.</p>
<blockquote><p>REPORT zkurs .</p>
<p>PARAMETERS: material TYPE mara-matnr.</p>
<p>WRITE: material.</p></blockquote>
<p>W tym momencie po uruchomieniu raportu, nasze pole przypisało wszystkie parametry ze słownika dla pola MATNR z tabeli MARA i dzięki temu możemy w naszej nowej zmiennej korzystać z wyszukiwania.</p>
<p style="text-align: center;"><a href="http://www.sapclue.pl/index.php/2011/07/21/programowanie-abap-wybor-z-pola-2/dok1-3/" rel="attachment wp-att-371"><img class="aligncenter size-full wp-image-371" title="dok1" src="http://www.sapclue.pl/wp-content/uploads/2011/07/dok12.jpg" alt="" width="561" height="307" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sapclue.pl/index.php/2011/07/21/programowanie-abap-wybor-z-pola-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

