ABAP Code 740 zu 702

Neue Schreibweise im ABAP 740 lässt sich schnell korrigieren

In den neueren Spielereien unseren hochgeschätztem Enno Wulff wird der überarbeitete ABAP Befehlssatz verwendet. Ich verwende noch den Stand 702 und kann so einfach seinen Code nicht übernehmen.

So verwendet er gerne die neue Kurzschreibweise mit der eine Klasse instanziiert wird: NEW x(  ).

Seht in seinen Code unter den Zeilen 20 und 98 und erinnern wir uns an BC401 Seite 59.

Die Zeile 20 mit „timer = NEW #( )“ ändern wir durch –> „CREATE OBJECT timer.“ und das „NEW main( )>start( ).“ ersetzen wir mit

„DATA m TYPE REF TO main.
CREATE OBJECT m.
m->start( ).“

Dann läuft die Sache auch und ist eine tolle Vorlage für so manch Lösung.

 

Kalkulierende Felder

In der Praxis sind die rechnenden Felder im Dynamics NAV sehr praktisch. Unter Umständen ist die Punkt vor Strich Regel nicht von Vorteil.

Sehr praktisch im täglichen Umgang sind kalkulierende, also selbst rechnende Felder. Will man zB. im Buchungsvorgang Skonto für Teilbeträge buchen, kann die Rechenoperation einfach in das Soll/Haben Feld eingetragen werden. Das ist im Microsoft Dynamics NAV in jedem numerischen Feld vorgesehen – es wird nach der „Punkt vor Strich“ Regel gerechnet. In der Praxis ist das nicht immer gewollt.

Der Chef legt zum Beispiel eine Tankquittung vor auf der auch neben dem abzugsfähigen Treibstoff und einer Dose Öl auch Zigarretten und ein Lolli für das Kind aufgeführt ist. Praktischer Weise rechnen wir 10 Euro plus 5 Euro mal 19% und nicht (10+5)*19/100. Im NAVISION bleibt keine Wahl, das Verfahren ist nicht änderbar. Es funktioniert nur Punkt-vor-Strich.

In unserem SAP System sind die Möglichkeiten offen. Als Demo habe ich einmal alle Möglichkeiten aufgeführte.

Der Standard Funktionsbaustein ‚EVAL_FORMULA‘ ist in der Lage ein String mit „10+5*0,19“ zu verarbeiten und nach der PvS Regel zu berechnen. Es ist also keine Schwierigkeit in einem PAI das Eingabefeld durch diesen Funktionsbaustein verarbeiten zu lassen und das selbt rechnende Feld ist realisiert.

Ich persönlich halte das für unpraktisch. Ähnlich wie der SAP Calculator, den wir mit dem Funktionsbaustein ‚FITRV_CALCULATOR‘ aufrufen können, läßt sich auch der Eingabestring zerlegen und sequenziell verarbeiten.

Wie in dem Listing zu sehen ist, zerlege ich den Eingabestring in eine Interne Tabelle. Die Zeichen + – * / separieren die Zahlen und rechnen entsprechend der Operation sequenziell.

Letztendlich mag es eine Sache der Gewöhnung sein. Mich interessieren die Erfahrungen die andere gemacht haben.

SAP und Agorum DMS

AgorumCore DMS integration in SAP

Die SAP-Integration von agorum® core verbindet Ihr Dokumentenmanagement-System über den SAP ArchiveLink nahtlos mit Ihren Anwendungen in SAP. So nutzen Sie alle Vorteile eines systemübergreifenden Dokumentenmanagements.

Link

SAP Netweaver 6.4 ausprobiert

SAP Netweaver 6.4 Linux DB2 ausprobiert.

Auf der Suche nach einem Basissystem für Linux, habe ich auf ftp.sap.com eine ältere Version gefunden. Zum üben, dachte ich, wohl ausreichend – leider, obwohl verfügbar, ist die Version unbrauchbar.

Schnell ein älteres Linux ( OpenSuSe 12.1 32 bit ) herbei; COMPAT und ein Original Java nach installiert und die Installation läuft problemlos durch. Im übrigen, unter Windows eine torture!

Das System läuft, wenn man ihm durch die Systemzeit das Jahr 2005 vorgauckelt. Lizenzen sind leider weder von SAP noch von IBM zu erhalten. Dadurch wird weder ein Mandant noch ein Developmentuser angelegt. Lediglich SAP* kann sich einloggen – dieser darf aber keine Entwicklung vornehmen.

Schade! Warum der Download überhaupt noch möglich ist, weiss wahrscheinlich niemand.

SAP GfUD Faktura Teil 1

Nach dem wir ein SAP Basis System nun vollständig installiert und mit einigen Grunddaten befüllt haben, geht es an ein paar Fingerübungen. Das derzeitige Entwicklerteam besteht übrigens aus drei Personen, in Deutschland verteilt und arbeitet an einem Terminalserver der GfUD an der Realisierung des Projekts. Ziel ist es, einige Übungen, Tipps und Tricks rund um das „miniSAP“, dem SAP Netweaver Basissystem, zu erarbeiten. Wenn sich jemand dafür interessiert und mitmachen möchte, kann sich melden.

Projekt GfUD Faktura

Elementar ist das Verständnis des SAP Business Address Services (BAS), der zentralen Adressverwaltung.

In unserer ersten Transaktion werden die gewählten Adressen, also der Empfänger und der Absender eines Dokumentes ausgewählt und abgeglichen. Der Absender ergibt sich aus dem Userstamm. In den Transaktionen SU01 sowie SUCOMP ist der Benutzer sowie die Firma, für die der User fakturiert, hinterlegt.

Die Transaktionen BUP1, BUP2, BUP3 dienen uns zum anlegen, ändern und anzeigen der Geschäftspartner.

Während die Daten des Geschäftspartners vollständig vorliegen (Steuernummer, Bankdaten) müssen wir für die hinterlegte User bezogene Firma, eine weitere Tabelle anlegen. Auch muss im Hinblick auf eine gesetzkonforme Archivierung an die Speicherung der Daten gedacht werden. Das heisst: Adress- und steuerrelevante Daten können sich ändern. Ein angelegter Beleg soll aber, unabhängig von der Archivierung des SAP SmartForms, vom System reproduzierbar sein. Adressänderungen werden im BAS durch Änderungsbelege dokumentiert, weshalb wir die zusätzliche Speicherung in Frage stellen können.

Grundsätzlich ist der Umgang sehr einfach. Der Umgang mit Userdaten, externer Adressen und Geschäftspartnern ist durch zahlreiche Funktionsbausteine vorbereitet.

Von der Transaktion BUP3 (Anzeige Geschäftspartner) aus, wird die Partnernummer des Geschäftspartners über einen SET/GET Parameter transportiert. Den greifen wir auf

GET PARAMETER ID 'BPA' FIELD partner.

Um jetzt von der Partnernummer aus, Adressen aus zu lesen, müssen einige Tabellen befragt werden. Wenn die Daten vorhanden sind, liefer der Funktionsbaustein BUA_ADDRESS_GET_ALL einen Geschäftspartner Adresssatz als interne Tabelle.

SELECT addrnumber INTO adrnum FROM but020 WHERE partner = partner.
  ENDSELECT.
 
  SELECT * FROM adrp INTO it_person WHERE persnumber = ( SELECT persnumber FROM adcp WHERE addrnumber = adrnum ).
  ENDSELECT.
 
  CALL FUNCTION 'BUA_ADDRESS_GET_ALL'
   EXPORTING
     i_partner               = partner
 
   TABLES
*   T_ADDRNUMBER_GUID       =
     t_address               = it_adr

Die Userdaten und die hinterlegte Firmenadresse sind teilweise auch im BAS gespeichert und können über den Funktionsbaustein ADDR_GET abgerufen werden.

SELECT addrnumber FROM usr21 INTO selektion-addrnumber WHERE bname = username.
  ENDSELECT.
 
  SELECT name_text from v_usr_name INTO name where bname = username.
    ENDSELECT.
 
 
  CALL FUNCTION 'ADDR_GET'
    EXPORTING
      address_selection             = selektion
 
   IMPORTING
     ADDRESS_VALUE                 = adresse

 

SAP Fundstücke 1

Fundstücke im Standard ABAP Code

Symbole zu Standardgrussformeln kann man in der Transaktion SE75 (Symbolnamen) oder mit der SE16 in der Tabelle TTDTG (maximale Trefferzahl nicht begrenzen) finden.

SE75TTDTGD
SE75TTDTGD

Schön ist auch die eigene Zeitzone WDFT – die Walldorfzeit.

Walldorfzeit
WDFT

IBAN – Fehlerquelle vermeiden

Immer wieder kommt es vor: Man wartet auf Zahlungen oder möchte selbst das Skonto bei einem Lieferanten nutzen. IBAN Kontonummern sind oft die Quelle für verpasste Skontofristen da sie ziemlich schwierig zu lesen sind.

iban_strukturWenn man sich mit der Programmierung oder Verbesserung von betriebswirtschaftlicher Software beschäftigt, muss man sich über Eingabeprüfungen Gedanken machen.

In der Zahlenkolonne sind die ersten beiden Ziffern nach dem Länderkürzel, eine Prüfziffer. Rechnet man mit der verbleibenden Zahl, die sich aus Bankleitzahl und Kontonummer zusammen setzt, läßt sich die Eingabe überprüfen und Fehlüberweisungen vermeiden. Bei mir, gehört das ab sofort zum Standard.

Bildschirmfoto - 26.07.2016 - 14:37:21

 

Das würde man so einfach wie in dem Test hier rechts im produktiven Betrieb nicht machen. Die Schwierigkeit liegt darin, das die Buchstaben des Ländercodes in Zahlen übersetzt werden und als Ganzes, also Bankleitzahl, Kontonummer, Zahlencode des Länderschlüssels sowie Prüfziffer dividiert werden. Die meissten Programme können eine derart lange Zahl garnicht berechnen!

Im SAP System natürlich kein Problem.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
FUNCTION y_fiban.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(IBAN) TYPE  IBAN
*"  EXPORTING
*"     REFERENCE(GUELTIG) TYPE  YGUELTIG
*"----------------------------------------------------------------------
 
* geprueft werden europaeische IBAN Nummern
* Laendercode wird durch ASCII Wert -55 ersetzt
 
DATA pz TYPE c LENGTH 2.
DATA pruef TYPE n LENGTH 40.
DATA test TYPE i.
DATA: l1,l2,c1(2) TYPE c,c2(2) TYPE c, ll(4) TYPE c.
 
l1 = iban+0(1).
l2 = iban+1(1).
 
*try.
CALL METHOD cl_abap_conv_out_ce=>uccpi
EXPORTING
char = l1
RECEIVING
uccp = c1.
* CATCH cx_sy_codepage_converter_init .
* CATCH cx_sy_conversion_codepage .
* CATCH cx_parameter_invalid_range .
*ENDTRY.
c1 = c1 - 55.
 
*try.
CALL METHOD cl_abap_conv_out_ce=>uccpi
EXPORTING
char = l2
RECEIVING
uccp = c2.
* CATCH cx_sy_codepage_converter_init .
* CATCH cx_sy_conversion_codepage .
* CATCH cx_parameter_invalid_range .
*ENDTRY.
c2 = c2 - 55.
CONCATENATE c1 c2 INTO ll.
 
pz = iban+2(2).
SHIFT iban BY 4 PLACES.
CONCATENATE iban ll pz INTO pruef.
 
test = pruef MOD 97.
 
IF test EQ 1 .
 
gueltig = abap_true.
 
ELSE.
 
gueltig = abap_false.
 
 
ENDIF.
 
ENDFUNCTION.