2011年1月25日 星期二

[C]印出2~1000所有質數

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
int main(){
    int a[1000];
    for(int i=2;i<=1000;i++) a[i]=1;
    for(int i=2;i<=1000;i++){
        if(a[i]){
            cout << i << ",";
            for(int k=i;k<=1000;k+=i) a[k]=0;
            }
        }
//-----------------------
    printf("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}

2011年1月19日 星期三

[C]字串的指標陣列

輸出結果如下:

[APPLE][BANANA][CAT][DOG]

程式:

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
int main(){
    char *ptr[4]={"APPLE","BANANA","CAT","DOG"};
    for(int i=0;i<4;i++){
        cout << "[" << *(ptr+i) << "]";
        }
//-----------------------
    printf("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}

[C]利用指標走訪陣列

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#define LEN 6
int main(){
    int arr[LEN]={11,22,33,44,55,66};
    int *ptr=arr;
    for(int i=0;i<LEN;i++){
        cout << *ptr++;
        }
//-----------------------
    printf("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}

[C]遞迴求n!

#include <iostream.h>
long factorial(int n){
    if(n==1)
        return 1;  //遞迴結束條件
    else
        return n*factorial(n-1);
    }
int main(){
    int no;
    cin >> no;
    if(no>0){
        cout << factorial(no);
        }
//-----------------------
    printf("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}

 

2010年10月30日 星期六

[MM]料號主檔維護作業

*********************************************************************
* Goal         : 建立物料
* T-Code       : MM01
* P.S          : 黃字部分為TABLE-FIELD標記。
*********************************************************************

可以從選單進去,也可以直接打T-code: MM01建立物料。

image

 輸入物料名稱,選定產業別、物料類型(MARA),打勾繼續。

image

選定欲建立之資訊,如果欲將建立之資訊設定為[預設值]下次系統即代選定。

image 

輸入工廠(MARC)。

image 

輸入物料說明(MAKT-MAKTX)以及其他資訊,按[附加資料]繼續。

image 

(備註: 基礎計量單位只可以於物料未開始異動前更換。 )

這裡可以輸入多語系(MAKT-SPRAS)的物料說明(MAKT-MAKTX),按[計量單位]輸入其他相關資訊。

image 

輸入計量單位,例如1Drum = 50KG,按[主要資料]輸入其他相關資訊。

image

[採購頁籤] 輸入採購群組,啟用自動轉採購訂單,輸入訂購單位(如果不是基礎計量單位)。

ENTER(打勾)繼續。

image

繼續。

image

儲存回到最初畫面。

image 

一般物料資料: MARA (General Material Data)。

image

物料工廠資料: MARC (Plant Data for Material)。

image 

物料說明: MAKT (Material Descriptions)

image 

來張關連圖:

image

*注意事項:
Join MAKT時,記得加Language的條件,不然抓出來的資料會Double,再者建議用left outer join的方式做select,以防止user漏建該語言之description。(MAKT有兩個Key,一個是物料,一個是語言SPRAS)

2010年10月29日 星期五

SAP-Dialog(Open the text editor when click the button in table control)

*********************************************************************
* Goal         : 讓表格維護器產生的交易裡能編輯長文。
* T-Code       : SE11、SM30、SE75(Object & id)
* Description  : 利用系統產生出來的程式以及畫面再做部分修改維護自訂Table。
* Source       :
saptechnical.com
* P.S          : 此為我的練習,英文範本請參考上列網址。
*********************************************************************

=>建議:可先到文章末端看看實做出來的結果,大致的流程如下五步驟。
1.
建立自訂Table。
2.
表格維護產生器,系統產生一堆程式碼以及畫面。
3.
再利用Screen Painter加上Button欄位。
4.有建立表格維護的Table可用SM30來做維護。
5.自建一支T-code來呼叫SM30(跳過第一個畫面)執行Table的維護。

T-code: SE11 建立一個Z打頭的Table,他必須是[許可使用標準表格維護工具維護]。

image

欄位如下圖。

image

對這個Table建立表格維護產生器(table maintenance generator)

做法請參考連結(開新視窗) -> 表格維護產生器

---------------------------------------------------------------------

上面的步驟完成之後,開啟T-code: SM30,在[表格/檢視]填入剛剛自訂的Table名稱。

然後請點[維護]繼續。

image

Table維護的畫面如下(單階),是系統幫我們生成的畫面。

image

但我們希望每個row之後都加一個Button好讓使用者能輸入長文的payment term。

現在再回來T-code: SE11,開啟[表格維護產生器]如下圖。

image

出現的畫面如下。 

image

點[功能群組內文]按鈕,出現如下畫面。

image

點[主程式]按鈕。

雙擊畫面0001如下。

image

單擊[格式]按鈕。

加入button元件以及text field元件如下。 

image

button的屬性設定如下:  

image

text field的屬性設定如下:

image

Save & active。

回到[流程邏輯]。 

image

加入程式碼:

*module to create text editor for payment term text
  MODULE text_editor.

Module裡的程式碼:

*----------------------------------------------------------------------*
***INCLUDE LZEISRICEI01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  TEXT_EDITOR  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE text_editor INPUT.
  DATA g_aftnr  LIKE thead-tdname.
  DATA g_vendor TYPE lifnr.
  DATA st_thead LIKE thead.
  DATA wa_lines TYPE tline.
  DATA it_lines TYPE TABLE OF tline.
  DATA g_tdname LIKE stxh-tdname.
  DATA g_lineno TYPE sy-index.
  DATA g_ok_code TYPE sy-ucomm.
  DATA g_lin_no.  CLEAR :  g_lineno,
           g_tdname,
           st_thead,
           it_lines,
           wa_lines,
           g_lin_no.
  REFRESH it_lines.
  g_ok_code = sy-ucomm.
  CLEAR sy-ucomm.
  IF g_ok_code EQ 'PTERM'.
    GET CURSOR LINE g_lineno.   
    g_lineno =  g_lineno + tctrl_zcontract-top_line - 1.   
    READ TABLE extract INDEX g_lineno.
    g_vendor = extract+3(10).
    g_aftnr = extract+13(10).   
    CONCATENATE g_vendor g_aftnr INTO g_tdname.   
    PERFORM read_text.
    IF sy-subrc NE 0.
      PERFORM enter_st_head.
      PERFORM edit_text.
    ELSE.
      PERFORM edit_text.
    ENDIF.
  ENDIF.
  PERFORM create_text.
ENDMODULE.                 " TEXT_EDITOR  INPUT
*&----------------------------------------------------------------*
*&      Form  READ_TEXT
*&----------------------------------------------------------------*
FORM read_text .
  CALL FUNCTION 'READ_TEXT'     "讀長文
    EXPORTING
*     CLIENT                        = SY-MANDT
      id                            = 'ZTS'       "自己建立的長文ID
      language                      = sy-langu
      name                          = g_tdname
      object                        = 'ZTEST_ID"之後會建立這個物件
*     ARCHIVE_HANDLE                = 0
*     LOCAL_CAT                     = ' '
   IMPORTING
     header                        = st_thead
    TABLES
      lines                         = it_lines
   EXCEPTIONS
     id                            = 1
     language                      = 2
     name                          = 3
     not_found                     = 4
     object                        = 5
     reference_check               = 6
     wrong_access_to_archive       = 7
     OTHERS                        = 8
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " READ_TEXT
*&----------------------------------------------------------------*
*&      Form  ENTER_ST_HEAD
*&----------------------------------------------------------------*
FORM enter_st_head .
  st_thead-tdobject   = 'ZTEST_ID'.  "我們之後會建立這個物件 
  st_thead-tdid       = 'ZTS' .       "自己建立的長文ID 
  st_thead-tdspras    = sy-langu.
  st_thead-tdlinesize = '072'.
  st_thead-tdtxtlines = '1'.
ENDFORM.                    " ENTER_ST_HEAD
*&---------------------------------------------------------------*
*&      Form  EDIT_TEXT
*&---------------------------------------------------------------*
FORM edit_text .
  CALL FUNCTION 'EDIT_TEXT'    "編輯長文
    EXPORTING
*     DISPLAY             = ' '
*     EDITOR_TITLE        = ' '
      header              = st_thead
*     PAGE                = ' '
*     WINDOW              = ' '
*     SAVE                = 'X'
*     LINE_EDITOR         = ' '
*     CONTROL             = ' '
*     PROGRAM             = ' '
*     LOCAL_CAT           = ' '
   IMPORTING
*     FUNCTION            =
     newheader           = st_thead
*     RESULT              =
    TABLES
      lines               = it_lines
   EXCEPTIONS
     id                  = 1
     language            = 2
     linesize            = 3
     name                = 4
     object              = 5
     textformat          = 6
     communication       = 7
     OTHERS              = 8            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " EDIT_TEXT
*&---------------------------------------------------------------*
*&      Form  CREATE_TEXT
*&---------------------------------------------------------------*
FORM create_text .
  CALL FUNCTION 'CREATE_TEXT'
    EXPORTING
      fid         = 'ZTS'         "自己建立的長文ID 
      flanguage   = sy-langu
      fname       = g_tdname
      fobject     = 'ZTEST_ID'    "我們之後會建立這個物件 
      save_direct = 'X'
      fformat     = '*'
    TABLES
      flines      = it_lines
    EXCEPTIONS
      no_init     = 1
      no_save     = 2
      OTHERS      = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " CREATE_TEXT

現在開啟T-code: SE75,選更改文字物件與IDs如下圖,點[更改]。

image 

出現如下畫面,單擊Button建立物件,如下圖。

image

出現如下畫面,建立物件ZTEST_ID。(剛剛出現在程式裡的物件)

image

打勾繼續,出現如下畫面。

到這裡先儲存起來image

image 

點[內文IDs]建立Text ID。

image

點[建立]按鈕如上圖,輸入內文ID: zts。 (剛剛在程式的部分出現很多次)

image

[v]打勾繼續,接著再存檔一次image

執行我們自己建立的Call SM30 表格維護T-code,出現如下畫面。

image

出現Button了,點[Maintext Text]按鈕會出現長文編輯器。

image

以上。^(+++++)^

2010年10月28日 星期四

SAP-ABAP(Working with Table Maintenance Generator)

*********************************************************************
* Goal         : 表格維護產生器(Table Maintenance Generator)
* T-Code       : SE11、SM30、SE93
* Description  : 自訂T-code呼叫SM30塞入預設值,可做Table維護。
* Source       :
saptechnical.com
* P.S          : 此為我的練習,英文範本如上網址。^_^好站推薦給你!
*********************************************************************

開啟T-code: SE11輸入一個已經建好的Z打頭table,選擇[更改]。

image

注意:在 [ Delivery & Maintenance ] 頁籤,必須是 [ 許可使用標準表格維護工具 ]。

image

下圖是這個Table的欄位們。

image

[選單]->[公用程式]->[表格維護產生器]。(Table Maintenance Generator)

image

進來的畫面如圖。

image

輸入[權限群組],這裡我輸入[&NC&]。
輸入[功能群組],可以在T-code: SE80去創建新的function group。

維護類型可以選擇 "單階" 或 "雙階" ,指定維護畫面號碼可以利用Button[尋找畫面號碼]來做指定。

image

Createimage & Save。

現在要替table maintenance generator建一個T-code。

開啟T-code: SE93,輸入要建立的T-code名稱->[建立]。

image

選擇 " Transaction with parameters (Parameter transaction) " 。

image

輸入[Transation]SM30,因為我們要透過這支交易來做維護表格的動作。

image

[v]Skip initial screen跳過第一個畫面要打勾,就是跳過SM30初始畫面的意思。

image

不過其實SM30第一個畫面有一些值是必輸的,我們就將他定在預設值。

=>簡言之:開啟自訂T-code時會去呼叫SM30並且塞入預設值,直接帶出我們自訂Table的維護畫面。

Click on save.

大功告成,現在你可以開啟剛剛自訂的T-code來做表格維護的動作。