miercuri, 9 septembrie 2009

Module functionale SAP R/3

In versiunea completa a pachetului SAP R/3 exista multe module, dar majoritatea companiilor folosesc doar o parte dintre acestea. Mai degraba, achizitioneaza si instaleaza sau implementeaza doar acele module care le servesc activitatilor pe care le gestioneaza.
Modulele alese spre implementare sunt integrate si interconectate cu serverele de baza de date si serverele-client de catre programatori, iar interfetele sunt adaptate cerintelor firmei. Odate instalate modulele numai cunosc granite si lucreaza ca un singur sistem informatic, permitand firmei sa adauge oricand in functie de necesitati alte module fara a perturba sistemul informatic.

luni, 7 septembrie 2009

In ce limbaj a fost dezvoltat SAP?

Daca va intrebati ce limbaj sta in spatele SAP-ului aflati ca este vorba de un limbaj dezvoltat de cei de la SAP special pentru aplicatiile de tip business asemanator limbajului COBOL.
Numele sau ABAP (Advanced Business Application Programming) a fost o alaturare potrivita de cuvinte care sugereaza in primul rand specificul acestui limbaj si faptul ca provine dintr-o prima generatie de programe ce au inclus conceptul de Logical Database.
Ca sa ne dam seama la nivel structural unde s-ar pozitiona si care este rolul acestor programe trebuie sa avem in vedere arhitectura sistemului SAP prezentata in postul anterior si anume:
daca nivelul bazei de date contine in general date acestea trebuie preluate prin intermediul unei aplicatii si furnizate utilizatorului spre a se folosi de ele, ca urmare programele ABAP ruleaza la nivelul de aplicatie(application layer) si au rolul de a extrage datele de la nivelul bazei de date si de a le aduce la nivelul de prezentare(interfetei cu utilizatorul).
Pentru a va face o idee despre cum arata codul sursa al unui program va exemplific urmatorul cod sursa ce verifica o lista de documente intr-un fisier si adauga un x in fata documentului in momentul in care il gaseste:
************************************************************************
*Program name : XXXXXXXXX *
*Analyst name : XXXXXXXXX *
* Programmer's name : XXXXXXXXXXXXXX *
*Created on : XX/XX/XXXX *
* Function description : XXXXXXXXXXXXXXXX*
* Requested by : XXXXXXXXX *
************************************************************************
* Modification 001 : *
* Done by : *
* Requested by : *
* Date : *
*----------------------------------------------------------------------*

REPORT XXXXXXX MESSAGE-ID 00.

*--------------------------TABLES---------------------------------------
TABLES: likp.

*--------------------SELECTION-SCREEN-----------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl1.
PARAMETERS: p_ddname TYPE zsdsn-ddname OBLIGATORY.
SELECT-OPTIONS: s_vbeln FOR likp-vbeln OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.

*----------------------------TYPES--------------------------------------
TYPES: BEGIN OF ty_dsname,
dsname TYPE zsdsn-dsname,
END OF ty_dsname.

TYPES: BEGIN OF ty_vbeln,
vbeln TYPE likp-vbeln,
END OF ty_vbeln.

*----------------------------DATA--------------------------------------
DATA: it_dsname TYPE TABLE OF ty_dsname,
it_vbeln TYPE TABLE OF ty_vbeln,
it_vbeln2 TYPE TABLE OF ty_vbeln.

DATA: wa_dsname TYPE ty_dsname,
wa_vbeln TYPE ty_vbeln.

DATA: BEGIN OF it_input OCCURS 0,
line(225) TYPE c,
END OF it_input.

DATA: lv_vbeln(10),
gv_modified(1),
gv_file_mod(1),
lv_tabix TYPE sy-tabix,
va_index LIKE sy-tabix.

*----------------------START-OF-SELECTION------------------------------
START-OF-SELECTION.

SELECT dsname INTO TABLE it_dsname
FROM zsdsn
WHERE ddname = p_ddname.

READ TABLE it_dsname INTO wa_dsname INDEX 1.

*--- open dataset to read it
call method zcl_xxxxx_base=>open_dataset_text_mode
exporting
iv_filename = WA_DSNAME-DSNAME
iv_for = zcl_xxxxx_base=>for_INPUT
exceptions
cannot_open = 8.

IF sy-subrc NE 0.
MESSAGE i001 WITH text-001.
ELSE.
DO.
READ DATASET wa_dsname-dsname INTO it_input-line.
IF sy-subrc = 0.
APPEND it_input.
ELSE.
EXIT.
ENDIF.
ENDDO.

CLEAR gv_modified.

CLOSE DATASET wa_dsname-dsname.

LOOP AT s_vbeln.
CLEAR gv_modified.

READ TABLE it_input WITH KEY line(10) = s_vbeln-low.
CLEAR lv_tabix.
IF sy-subrc = 0.
CONCATENATE 'X' it_input-line INTO it_input-line.
gv_modified = 'X'.
gv_file_mod = 'X'.
lv_tabix = sy-tabix.
ENDIF.

READ TABLE it_input WITH KEY line(1) = 'X'
line+1(10) = s_vbeln-low.

IF sy-subrc <> 0 AND gv_modified <> 'X'.
READ TABLE it_input WITH KEY line(1) = 'x'
line+1(10) = s_vbeln-low.
IF sy-subrc <> 0.
wa_vbeln-vbeln = s_vbeln-low.
APPEND wa_vbeln TO it_vbeln.
ENDIF.
ENDIF.

IF NOT lv_tabix IS INITIAL.
MODIFY it_input INDEX lv_tabix TRANSPORTING line.
ENDIF.
ENDLOOP.


*---if modifications were made
IF gv_file_mod = 'X'.

*---open dataset to modify it
call method zcl_xxxxx_base=>open_dataset_text_mode
exporting
iv_filename = WA_DSNAME-DSNAME
iv_for = zcl_xxxxx_base=>for_OUTPUT
exceptions
cannot_open = 8.

LOOP AT it_input.
TRANSFER it_input-line TO wa_dsname-dsname.
ENDLOOP.

CLOSE DATASET wa_dsname-dsname.

ENDIF.


CLEAR wa_vbeln.

*---print the deliveries that were not found

IF it_vbeln IS INITIAL. " all deliveries were found
WRITE text-003.
ELSE.
WRITE: text-002.
LOOP AT it_vbeln INTO wa_vbeln.
WRITE: / wa_vbeln-vbeln.
ENDLOOP.
ENDIF.

ENDIF.

sâmbătă, 5 septembrie 2009

Ce este "SAP"?

Poate ati auzit pe cineva vorbind recent in cercul vostru de prieteni de SAP si v-ati intrebat ce inseamna SAP? la ce foloseste?
Evident este vorba de un sistem informatic complex utilizat in gestiunea bazelor de date, fiind preferatul companiilor mari. SAP vine de la System Applications and Products, si se imparte in module individuale care realizeaza diferite sarcini informatice in cadrul unei companii. Compania care a dezvoltat acest sistem informatic isi are radacinile in Germania la Walldorf si a fost fondata in 1972 de 4 fosti angajati ai companiei IBM.
Ganditi-va doar la faptul ca in acest moment SAP detine cea mai mare parte a pietei de aplicatii business fiind utilizat in peste 76.ooo de companii internationale si are în prezent reprezentanţe de vânzări şi unităţi de producţie în peste 120 de ţări fiind listată la mai multe burse, inclusiv Bursa din Frankfurt şi NYSE cu simbolul "SAP".
Scopul acestui blog nu este acela de a lauda si dezbate brandul SAP ci de a aduce informatii suplimentare practice celor interesati.
O sa trecem asadar la structura sistemului si ce face el mai exact:
- structura SAP se bazeaza pe o arhitectura client-server structurata pe mai multe segmente(o aplicatie(client) solicita o actiune unei alte aplicatii(server) si aceasta o indeplineste ) si anume:
- nivelul bazei de date care gestioneaza datele folosind un sistem de gestionare al bazei de date relational(SGBDR) . Tot aici sunt gestionate datele generale (master data) datele tranzactionale si sunt stocate programele si metadatele care descriu sistemul si structura sa;
-nivelul de aplicatie unde au loc executii ale programelor ABAP;
- nivelul de prezentare care contine interfata utilizator prin intermediul careia utilizatorii introduc date si apoi le afiseaza.

Am adus in discutie in cele de mai sus cateva elemente noi a caror insemnatate trebuie mentionata si anume:
date generale(master data) = o colectie de informatii despre o persoana sau obiect cum ar fi adresa, date legate de plata, cont, caracteristici, etc.
date tranzactionale(transactional data) = se refera la un singur eveniment, crearea unui document de achizitie, ori a unui ordin de vanzare. La crearea unui document SAP aloca documentului respectiv un numar si adauga documentul creat datelor tranzactionale deja existente.