SAP etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SAP etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Aralık 2014 Çarşamba

SAPScript Nedir - What is Sapscript

SE71, bir isim yazıp  Create butonuna basılırsa aşağıdaki gibi bir ekran ile sapscript yaratma işine başlanmış olur:


"Pages" sekmesinden aşağıdaki gibi Edit-> "Create Element" diyerek yeni bir page yaratılır. 




Ok den sonra aşağıdaki gibi ilk Page oluşturulmuş olur. İstenirse bu şekilde Page sayıları artırılabilir.Sayfaların sırasını belirlerken "Next Page" kısmı kullanılır.






"Page Windows"  tıklandığında otomatik olarak MAIN penceresinin yaratılmış olduğu görülebilir.
Şimdi istenen şekilde windows değişiklik yapmak için (F9) "Text Elements" e basılır.



Aşağıdaki gibi çok user-friend olmayan  bir editor açılır. Bu editor anlaşılır şekle çevirmek için, GOTO-> Change Editor.



Aşağıdaki gibi format kısımlarının olduğu, satırların ayrı ayrı gösterildiği üzerinda rahat değişiklik yapacağınız bir editor açılır.

Şimdi daha herşeye hakim olabilirsiniz. Sadece satırların başına satırın ne olduğunu gösteren ifadeleri yazmanız yeterli olacaktır. Aşağıda satırları ne şekilde kullanacağını gösterecek belirteçlerin bir listesi var.  Örneğin, sap kod satırı yazmak için  "/:" kullanıyoruz:    /:          SET TIME MASK = 'HH:MM'
Veya Comment yazmak için "/*" kullanılır.  /* This line is for header. 
*
Default Paragraph

Continuous Text
=
Extended Line
(
Raw Line
/
Line Feed
/=
Line Feed and Extended Line
/(
Line Feed and Raw Line
/:
Command Line
/*
Comment Line
/E
Text Element



Ayrıca aşağıdaki gibi tanımladığınız, fontları, veya paragrafları burada kullanabilirsiniz.


AS
Default paragraph
C
Centered
IL
Item line
IT
Item title
TI
LayoutSet title in INFO window
UL
Paragraph for separator

Örnek : UL        &uline(67)&
             IT         Ges,,Linie,,Flugdatum,,Abflug,,Preis,,Währung

Paragraf Değerlerinin değiştirilmesi için aşağıdaki butonlar yardımıyla istenen kısımlarda istenen değişiklikler yapılır. Sonra Sapscritp içinde row başına yazınca verilen alanların tanımlanan şekillerdeki gibi değiştiği görülür.





 Sapscript in tanımlamaları bu kadar. Bir örnek incelemek istenirse  S_EXAMPLE_1  scripti kullanılabilir.
Şimdi bu sapscripti kontrol edecek programı yazmaya geldi.
Yazılacak programda, Sapscripti kullanmak için  aşağıdaki  functionlar kullanılır.
Open_form => İlk olarak kullanılır. Form ve yazıcının atanması için kullanılır.
Start_form => Yazma kısmından önce kullanılır. Sapscript  başlatılır.
Write_form => Loop içinde veya ekrana tek tek yazılacak alanlar için kullanılır.
End_form => Geçerli sayfanın yazılmasını sonlandırır. Tekrar çalıştırmak için Start_form kulanmak gerekir.
Close_form => Bundan sonra form bitirilmiş olur ve tekar başlatılamaz. 

Örnek program :
REPORT  zexample_sapscript.

TABLES: scustom, sbook, spfli.

SELECT-OPTIONS: s_id FOR scustom-id DEFAULT 1 TO 1,
                s_fli 
FOR sbook-carrid DEFAULT 'LH' TO 'LH'.

DATA customers LIKE scustom OCCURS 100
     
WITH HEADER LINE.
DATA bookings  LIKE sbook   OCCURS 1000
     
WITH HEADER LINE.
DATA connections LIKE spfli OCCURS 1000
     
WITH HEADER LINE.
DATA: BEGIN OF sums OCCURS 10,
        forcuram  
LIKE sbook-forcuram,
        forcurkey 
LIKE sbook-forcurkey,
      
END OF sums.

* Get data
SELECT * FROM  scustom INTO TABLE customers
       
WHERE id IN s_id
       
ORDER BY PRIMARY KEY.
SELECT * FROM  sbook   INTO TABLE bookings
       
WHERE customid IN s_id AND carrid IN s_fli
       
ORDER BY PRIMARY KEY.
SELECT * FROM  spfli   INTO TABLE connections
       
FOR ALL ENTRIES IN bookings
       
WHERE carrid = bookings-carrid
       
AND   connid = bookings-connid
       
ORDER BY PRIMARY KEY.

* Open print job
CALL FUNCTION 'OPEN_FORM'
  
EXPORTING
    device   
= 'PRINTER'
    
form     = 'S_EXAMPLE_1'
    
dialog   = 'X'
  
EXCEPTIONS
    canceled 
= 1
    device   
= 2
    
form     = 3
    options  
= 4
    unclosed 
= 5
    
OTHERS   = 6.
IF sy-subrc <> 0.
  
WRITE 'Error in open_form'(001).
  
EXIT.
ENDIF.

* Print form for all customers
LOOP AT customers.
* Set customer address
  scustom 
= customers.
* Open form of respective customer
  
CALL FUNCTION 'START_FORM'
    
EXCEPTIONS
      
OTHERS = 1.
  
IF sy-subrc <> 0.
    
WRITE 'Error in start_form'(002).
    
EXIT.
  
ENDIF.

* Display column headings of main window
  
CALL FUNCTION 'WRITE_FORM'
    
EXPORTING
      element  
= 'HEADING'
      
function = 'SET'
      
type     = 'TOP'
      
window   = 'MAIN'
    
EXCEPTIONS
      
OTHERS   = 1.
  
IF sy-subrc <> 0.
    
WRITE 'Error in write_form printing top element of main'(003).
    
EXIT.
  
ENDIF.
* Customer bookings
  
CLEAR sums. REFRESH sums.
  
LOOP AT bookings
       
WHERE customid = customers-id.
    sbook 
= bookings.
*   Get departure time
    
READ TABLE connections WITH KEY carrid = bookings-carrid
                                    connid 
= bookings-connid.
    
IF sy-subrc = 0.
      spfli 
= connections.
    
ELSE.
      
CLEAR spfli.
    
ENDIF.
*   Print position
    
CALL FUNCTION 'WRITE_FORM'
      
EXPORTING
        element  
= 'BOOKING'
        
function = 'SET'
        
type     = 'BODY'
        
window   = 'MAIN'
      
EXCEPTIONS
        
OTHERS   = 1.
    
IF sy-subrc <> 0.
      
WRITE 'Error in write_form printing body of main'(004).
      
EXIT.
    
ENDIF.
*   Add current position to corresponding entry in table sums
    
MOVE-CORRESPONDING sbook TO sums.
    
COLLECT sums.
  
ENDLOOP.          " at bookings

* Print sum
  
LOOP AT sums.
    
MOVE-CORRESPONDING sums TO sbook.
    
CALL FUNCTION 'WRITE_FORM'
      
EXPORTING
        element  
= 'SUM'
        
function = 'SET'
        
type     = 'BODY'
        
window   = 'MAIN'
      
EXCEPTIONS
        
OTHERS   = 1.
    
IF sy-subrc <> 0.
      
WRITE 'Error in write_form printing sum of invoice'(005).
      
EXIT.
    
ENDIF.
  
ENDLOOP.         " at sums

* Close customer form
  
CALL FUNCTION 'END_FORM'
    
EXCEPTIONS
      
OTHERS = 1.
  
IF sy-subrc <> 0.
    
WRITE 'Error in end_form'(006).
    
EXIT.
  
ENDIF.
ENDLOOP.          " at customers

* close print job
CALL FUNCTION 'CLOSE_FORM'
  
EXCEPTIONS
    
OTHERS = 1.
IF sy-subrc <> 0.
  
WRITE 'Error in close_form'(007).
  
EXIT.
ENDIF.






11 Mart 2014 Salı

Batch Input

Batch Input
Batch Data Communication (BDC), en eski yöntemlerden biridir. Sadece R/3 sistemine veri girmek için kullanılır. BDC, bir ABAP progamı kullanrak, transactional ekranını kullanmak için kullanıcı girişini simüle eder. Normalde, girişler bir dosya formunda gelir. ABAP program bu dosyayı okur ve giriş ekranı tarafından sunulan Alana (BDCDATA) internal tablosundaki verilerin girilmesini sağlar. Transaction bu internal tabloyu kullanarak başlatılır ve arka planda çalışır.
Call Transaction, transaction zamanlaması yapılan bir processin kendisi tarafından başlatılır ve böylece ABAP program hata ayıklaması yapmak zorundadır. Bu ayrıca gerçek-zamanlı arayüz olarak kullanılır ,  hata ayıklama ve loglama özelliklerini kontrol eder.
Batch Input Sessions, ABAP program bütün transactional verilerin hepsi ile bir süreç yaratır, zamanlama ayarı yapılır ve işlenir (SM35 kullanarak). Bu method hata işleme mekanizması da yaratır.
Batch Input (BI) programları, genellikle klasik BDC yaklaşımını kullanır fakat BDCDATA formatında yazılmış bir ABAP programına ihtiyaç duymaz. Kullanızı önceden tanımlanmış bir kayıt yapısını kullanarak verileri şekillendirir ve bri tabloda bunları saklar. Bir BI program sonra bunları okur ve dosyanın kayıt başlığında belirtilen transaction ile çağırır.   

Önce T-code "SHDB" ile hareketleri kaydedip daha sonra tek tek bdc structer ını doldurmak en kolayı olacaktır.


DATA :  gv_msgtxt TYPE string.
DATA: BEGIN OF bdc_tab OCCURS 0.
        
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdc_tab.

DATA BEGIN OF gt_msg OCCURS 10.
        
INCLUDE STRUCTURE bdcmsgcoll.
DATA END OF gt_msg.

REFRESH bdc_tab.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=TOGGLE'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SELOP'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ADD'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPMS38V                                1120SUB1'.
PERFORM bdc_field USING 'BDC_CURSOR' 'I_TVARVC_SELOPS-NAME(01)'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPMS38V                                1120SUB1'.
PERFORM bdc_field USING 'BDC_CURSOR' 'I_TVARVC_SELOPS-HIGH(10)'.
PERFORM bdc_field USING 'I_TVARVC_SELOPS-NAME(10)' 'ZTEST2'.
PERFORM bdc_field USING 'I_TVARVC_SELOPS-HIGH(10)'  '1111'.
PERFORM bdc_field USING 'I_TVARVC_SELOPS-LOW(10)' '111111111'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=RETN'.

CALL TRANSACTION 'STVARV' USING bdc_tab MODE 'N' UPDATE 'S'
MESSAGES 
INTO gt_msg.
PERFORM format_message.


*&---------------------------------------------------------------------*
*&      Form  bdc_newdynpro
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM bdc_newdynpro USING program dynpro.
  
CLEAR bdc_tab.
  bdc_tab
-program = program.
  bdc_tab
-dynpro = dynpro.
  bdc_tab
-dynbegin = 'X'.
  
APPEND bdc_tab.
ENDFORM.                    "bdc_newdynpro

*******************************************************************
* Inserts a field in bdc_tab
*******************************************************************
FORM bdc_field USING fnam fval.
  
CLEAR bdc_tab.
  bdc_tab
-fnam = fnam.
  bdc_tab
-fval = fval.
  
APPEND bdc_tab.
ENDFORM.                    "bdc_field
*&---------------------------------------------------------------------*
*&      Form  FORMAT_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM format_message .

  
CLEAR gv_msgtxt.
  
LOOP AT gt_msg .

    
CALL FUNCTION 'FORMAT_MESSAGE'
      
EXPORTING
        
id        = gt_msg-msgid
        lang      
= sy-langu
        
no        = gt_msg-msgnr
        v1        
= gt_msg-msgv1
        v2        
= gt_msg-msgv2
        v3        
= gt_msg-msgv3
        v4        
= gt_msg-msgv4
      
IMPORTING
        msg       
= gv_msgtxt
      
EXCEPTIONS
        not_found 
= 1
        
OTHERS    = 2.
    
IF sy-subrc = 0.
      
TRANSLATE gv_msgtxt TO UPPER CASE.
      
WRITE : /  gv_msgtxt.
    
ENDIF.
  
ENDLOOP.
ENDFORM.                    " FORMAT_MESSAGE