Update statement is not working. module pool program,why? check this code

*& Module Pool       ZCUST_CALL_REC
PROGRAM  ZCUST_CALL_REC.
TABLES: ZCUST_CALL_REC,ZREMARKS.
data:  v_kun_low like ZCUST_CALL_REC-kunnr ,
       v_kun_high like ZCUST_CALL_REC-kunnr,
       v_bud_low like ZCUST_CALL_REC-budat,
       v_bud_high like ZCUST_CALL_REC-budat.
ranges r_kunnr for ZCUST_CALL_REC-kunnr  .
ranges r_budat for zcust_call_rec-budat.
DATA: ITAB TYPE STANDARD TABLE OF ZCUST_CALL_REC WITH HEADER LINE,
      JTAB TYPE STANDARD TABLE OF ZREMARKS WITH HEADER LINE.
*data:begin of itab occurs 0,
    MANDT LIKE ZCUST_CALL_REC-MANDT,
    kunnr like ZCUST_CALL_REC-kunnr,
    budat like ZCUST_CALL_REC-budat,
    code like ZCUST_CALL_REC-code,
    remarks like ZCUST_CALL_REC-remarks,
    end of itab.
*data:begin of Jtab occurs 0,
    MANDT LIKE ZCUST_CALL_REC-MANDT,
    kunnr like ZCUST_CALL_REC-kunnr,
    budat like ZCUST_CALL_REC-budat,
    code like ZCUST_CALL_REC-code,
    remarks like ZCUST_CALL_REC-remarks,
    end of Jtab.
CONTROLS:vcontrol TYPE TABLEVIEW USING SCREEN '9001'.
CONTROLS:vcontrol1 TYPE TABLEVIEW USING SCREEN '9002'.
*start-of-selection.
*&      Module  USER_COMMAND_9000  INPUT
      text
MODULE USER_COMMAND_9000 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
CLEAR sy-ucomm.
WHEN 'ENQUIRY'.
perform multiple_selection.
perform append_CUSTOMER_code.
PERFORM SELECT_DATA.
call screen '9001'.
WHEN 'UPDATE'.
      perform append_CUSTOMER_code.
      PERFORM SELECT_DATA.
      call screen '9002'.
      perform update on commit.
WHEN 'DELETE'.
      perform append_CUSTOMER_code.
      PERFORM SELECT_DATA.
      call screen '9002'.
ENDCASE.
ENDMODULE.                 " USER_COMMAND_9000  INPUT
*&      Module  STATUS_9000  OUTPUT
      text
MODULE STATUS_9000 OUTPUT.
  SET PF-STATUS 'ZCUSTOMER'.
SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_9000  OUTPUT
*&      Module  USER_COMMAND_9001  INPUT
      text
MODULE USER_COMMAND_9001 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
CLEAR sy-ucomm.
endcase.
ENDMODULE.                 " USER_COMMAND_9001  INPUT
*&      Module  STATUS_9001  OUTPUT
      text
MODULE STATUS_9001 OUTPUT.
  SET PF-STATUS 'ZCUSTOMER'.
SET TITLEBAR 'xxx'.
move itab-MANDT   to zcust_call_rec-MANDT.
move itab-kunnr   to zcust_call_rec-kunnr.
move itab-budat   to zcust_call_rec-budat.
move itab-code    to zcust_call_rec-code.
move itab-remarks to zcust_call_rec-remarks.
vcontrol-lines = sy-dbcnt.
ENDMODULE.                 " STATUS_9001  OUTPUT
*&      Module  USER_COMMAND_9002  INPUT
      text
module  USER_COMMAND_9002 input.
CASE sy-ucomm.
   WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      SET SCREEN 0.
      LEAVE SCREEN.
      CLEAR sy-ucomm.
   WHEN 'UPDATE'.
         perform move_data.
     UPDATE ZCUST_CALL_REC FROM TABLE ITAB.
        IF SY-SUBRC = 0.
           MESSAGE I000(0) WITH 'RECORDS ARE UPDATED'.
         ELSE.
           MESSAGE E001(0) WITH 'RECORDS ARE NOT UPDATED'.
        ENDIF.
  WHEN 'DELETE'.
         perform move_data.
         DELETE ZCUST_CALL_REC FROM TABLE ITAB.
          IF SY-SUBRC = 0.
           MESSAGE I000(0) WITH 'RECORDS ARE DELETED'.
         ELSE.
           MESSAGE E001(0) WITH 'RECORDS ARE NOT DELETED'.
        ENDIF.
endcase.
endmodule.                 " USER_COMMAND_9002  INPUT
*&      Module  STATUS_9002  OUTPUT
      text
module STATUS_9002 output.
  SET PF-STATUS 'ZCUSTOMER1'.
SET TITLEBAR 'xxx'.
endmodule.                 " STATUS_9002  OUTPUT
*&      Module  update_table  OUTPUT
      text
module update_table output.
     move itab-MANDT   to zcust_call_rec-MANDT.
     move itab-kunnr   to zcust_call_rec-kunnr.
     move itab-budat   to zcust_call_rec-budat.
     move itab-code    to zcust_call_rec-code.
     move itab-remarks to zcust_call_rec-remarks.
vcontrol-lines = sy-dbcnt.
endmodule.                 " update_table  OUTPUT
***Selection Data
FORM SELECT_DATA.
SELECT  mandt kunnr budat code remarks  FROM zcust_call_rec INTO
                        table itab
                         WHERE kunnr IN r_kunnr AND BUDAT IN R_BUDAT.
ENDFORM.
****append vendor code
FORM APPEND_CUSTOMER_CODE.
clear r_kunnr.
clear itab.
clear r_budat.
refresh r_kunnr.
refresh itab.
refresh r_kunnr.
IF r_kunnr  IS INITIAL
              AND NOT v_kun_low IS INITIAL
               AND NOT v_kun_high IS INITIAL.
                    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                                EXPORTING
                                   input         = v_kun_low
                                IMPORTING
                                   OUTPUT        = r_kunnr-low.
                   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                              EXPORTING
                                  input         = v_kun_high
                              IMPORTING
                                  OUTPUT        = r_kunnr-high.
                 r_kunnr-option = 'BT'.
                 r_kunnr-sign = 'I'.
                 append r_kunnr.
   PERFORM V_BUDAT.
ELSEIF r_kunnr  IS INITIAL
              AND NOT v_kun_low IS INITIAL
               AND  v_kun_high IS INITIAL.
                    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                                EXPORTING
                                   input         = v_kun_low
                                IMPORTING
                                   OUTPUT        = r_kunnr-low.
                r_kunnr-SIGN = 'I'.
                r_kunnr-OPTION = 'EQ'.
                APPEND r_kunnr.
   PERFORM V_BUDAT.
ELSEIF r_kunnr IS INITIAL
              AND  v_kun_low IS INITIAL
               AND NOT v_kun_high IS INITIAL.
                    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                                EXPORTING
                                   input         = v_kun_low
                                IMPORTING
                                   OUTPUT        = r_kunnr-low.
                r_kunnr-SIGN = 'I'.
                r_kunnr-OPTION = 'EQ'.
                APPEND r_kunnr.
      PERFORM V_BUDAT.
ELSEIF r_kunnr IS INITIAL
              AND  v_kun_low IS INITIAL
               AND  v_kun_high IS INITIAL.
                    IF SY-SUBRC = 0.
                         MESSAGE I003(0) WITH 'ENTER CUSTOMER NUMBER'.
                          CALL SCREEN '9000'.
                    ENDIF.
PERFORM V_BUDAT.
ENDIF.
ENDFORM.
FORM V_BUDAT.
IF  R_BUDAT IS INITIAL
               AND NOT v_BUD_low IS INITIAL
               AND NOT v_BUD_high IS INITIAL.
                 r_budat-low = v_bud_low.
                 r_budat-high = v_bud_high.
                 r_budat-option = 'BT'.
                 r_budat-sign = 'I'.
                 append r_budat.
         ELSEIF  R_BUDAT IS INITIAL
               AND NOT v_BUD_low IS INITIAL
               AND  v_BUD_high IS INITIAL.
                 r_budat-low = v_bud_low.
                 r_budat-high = v_bud_high.
                 r_budat-option = 'EQ'.
                 r_budat-sign = 'I'.
                 append r_budat.
         ELSEIF  R_BUDAT IS INITIAL
               AND  v_BUD_low IS INITIAL
               AND NOT v_BUD_high IS INITIAL.
                 r_budat-HIGH = v_bud_HIGH.
                 r_budat-option = 'EQ'.
                 r_budat-sign = 'I'.
                 append r_budat.
          ELSEIF  R_BUDAT IS INITIAL
               AND  v_BUD_low IS INITIAL
               AND  v_BUD_high IS INITIAL.
               IF SY-SUBRC = 0.
                   MESSAGE I002(0) WITH 'ENTER POSTING DATE'.
                  CALL SCREEN '9000'.
                r_budat-low = ''.
                r_budat-option = ''.
                r_budat-sign = ''.
                ENDIF.
        ENDIF.
ENDFORM.
*&      Form  update
      text
-->  p1        text
<--  p2        text
form update .
commit work.
endform.                    " update
*&      Form  move_data
      text
-->  p1        text
<--  p2        text
form move_data .
   clear itab.
  refresh itab.
       move-corresponding  zcust_call_rec to itab.
       MOVE ZCUST_CALL_REC-MANDT   TO ITAB-MANDT.
       MOVE ZCUST_CALL_REC-KUNNR   TO ITAB-KUNNR.
       MOVE ZCUST_CALL_REC-BUDAT   TO ITAB-BUDAT.
       MOVE ZCUST_CALL_REC-CODE    TO ITAB-CODE.
       MOVE ZCUST_CALL_REC-REMARKS TO ITAB-REMARKS.
     APPEND ITAB.
     delete itab where kunnr is initial.

Hi,
  try to use
start-of-selection.
call screen 100.
module pai input.
endmodule
<b>Reward points</b>
Regards

Similar Messages

  • Update statement is not working(urgent)

    Hi,
    when i use below code it gives me dump when reocrds arem ore.
    loop at itab.
      update de1000 SET vrprs = itab-rfwrt
      where kaufn = itab-vbelv
      and mtpos IN  soption and perio =  perio and VRPRS <> 0.
    endloop.
    the structure of itab and de11000 is not same.
    please suggest me alternative.
    thanks
    jack

    I believe you can not use update statement with in loop & endloop. it will dump.
    Here is further info. Create another internal table with
    the same structure of de1000 and update the table with required values. finally use the following state
    update de1000 from table t_de1000(internal table)(check syntex)
    Reward if useful
    Message was edited by:
            Nallasamy Ponnusamy

  • SUBMIT statement for MD03 not working (module pool)

    I am trying to use SUBMIT stament for transaction MD03.
    SUBMIT SAPMM61X USING SELECTION-SETS OF PROGRAM '200'
    WITH matnr = matnr
    WITH werks = werks
    WITH versl = versl
    WITH baner = baner
    WITH lifkz = lifkz
    WITH diser = diser
    WITH plmod = plmod
    WITH trmpl = trmpl
    WITH dispd = dispd
    WITH ANZDL = ANZDL
    EXPORTING LIST TO MEMORY
    AND RETURN.
    But getting RUNTIME error
    Error analysis                                                                               
    You attempted to start the ABAP/4 program "SAPMM61X" with SUBMIT, but the                    
        attributes specify this program as type "M" instead of "1". You can                          
        only start programs of type 1 with SUBMIT.     
    I want to run MD03 thru a wrapper program and get back the values.
    Thanks,
    AP
    Edited by: Julius Bussche on Jul 23, 2009 9:35 PM
    Subject title improved...

    Thers is correction to what I posted above
    MD03 is working fine with call trasaction as we work with one item and one layer. Only one matarial i can capture that.
    But for MD02 we have single-tem and multiple layer. After the tranaction is excute there is Button on the output screen When clicked on it, it displays list of materials (layer). I need to capture the list how do i caapture it in a internal table.

  • UPDATE STATEMENT IS NOT WORKING.

    CREATE OR REPLACE PROCEDURE LoadDMUDailyFeed(advId IN CHAR,
              mktGrpId IN VARCHAR2, platform IN VARCHAR2,
              posCode IN NUMBER, salText IN VARCHAR2,
              fName IN VARCHAR2, mName IN VARCHAR2,
              lName IN VARCHAR2, sufText IN VARCHAR2,
              lnID IN VARCHAR2, statusDesc IN VARCHAR2,
              dtHired IN DATE, dtPosStart IN DATE,
              addr1 IN VARCHAR2, addr2 IN VARCHAR2,
              addr3 IN VARCHAR2, city IN VARCHAR2,
              state IN VARCHAR2, zip IN VARCHAR2,
              country IN VARCHAR2, phone IN VARCHAR2,
              extn IN VARCHAR2, busFax IN VARCHAR2,
              manAdminID IN VARCHAR2, areaCode IN NUMBER)
    AS
    ad_dbc DATE;
    ad_drc DATE;
    ad_dpc DATE;
    ad_lud DATE;
    dtBundleChanged DATE;
    dtPlatformChanged DATE;
    dtPositionChanged DATE;
    dtLastUpdated DATE;
    chkDetailsFlag NUMBER(1);
    chkAdvisorExists NUMBER(1);
    chkStatusChange NUMBER(1);
    chkManagerChange NUMBER(1);
    chkPlatformChange NUMBER(1);
    changeReason VARCHAR2(20);
    newBundleCode NUMBER(2);
    bundleName VARCHAR2(50);
    oldBundleCode NUMBER(2);
    countOfAFA NUMBER(4);
    chkDetailsFlagDummy NUMBER(1);
    CURSOR advCursor IS
        SELECT * FROM ADVISOR_DETAILS where advisor_id=advId;
    BEGIN
    Select count(*) into chkAdvisorExists from advisor_details WHERE
           advisor_id=advId;
           newBundleCode := 0;
    FOR rec IN advCursor LOOP
        ad_dbc := rec.DATE_BUNDLE_CHANGED;
        ad_drc := rec.DATE_ROLE_CHANGED;
        ad_dpc := rec.DATE_POSITION_CHANGED;
        ad_lud := rec.LAST_UPDATE_DATE;
        dtBundleChanged := ad_dbc;
        dtPlatformChanged := ad_drc;
        dtPositionChanged := ad_dpc;
        dtLastUpdated := ad_lud;
        chkDetailsFlag := 0;
        chkStatusChange := 0;
        chkPlatformChange := 0;
        chkManagerChange := 0;
        IF ( TRIM(advId) = TRIM(rec.ADVISOR_ID)) THEN
                IF (TRIM(mktGrpId) != TRIM(rec.MARKET_GROUP_ID)) THEN
                    chkDetailsFlag := 1;
            END IF;
            IF (TRIM(platform) != TRIM(rec.PLATFORM)) THEN
                 chkManagerChange := 1;
                 dtPlatformChanged := SYSDATE;
                 dtBundleChanged := SYSDATE;
            END IF;
            IF (TRIM(posCode) != TRIM(rec.POSITION_CODE)) THEN
                     dtPositionChanged := SYSDATE;
            END IF;
            IF (TRIM(salText) != TRIM(rec.SALUTATION_TEXT)) THEN
                 chkDetailsFlag := 1;
            END IF;
            IF (TRIM(fName) != TRIM(rec.ADVISOR_FIRST_NAME)) THEN
                     chkDetailsFlag := 1;
            END IF;
            IF (TRIM(mName) != TRIM(rec.ADVISOR_MIDDLE_NAME)) THEN
                 chkDetailsFlag := 1;
            END IF;
            IF (TRIM(lName) != TRIM(rec.ADVISOR_LAST_NAME)) THEN
                     chkDetailsFlag := 1;
            END IF;
            IF (TRIM(sufText) != TRIM(rec.SUFFIX_TEXT)) THEN
                 chkDetailsFlag := 1;
            END IF;
            IF (TRIM(lnId) != TRIM(rec.LOTUS_NOTES_ID)) THEN
                     chkDetailsFlag := 1;
            END IF;
            IF (TRIM(statusDesc) != TRIM(rec.STATUS)) THEN
                 chkDetailsFlag := 1;
                 chkStatusChange := 1;
            END IF;
            IF(TO_DATE(dtHired, 'DD-MON-YY') != TO_DATE(rec.DATE_HIRED, 'DD-MON-YY')) THEN
                     chkDetailsFlag := 1;
            END IF;
            IF(TO_DATE(dtPosStart, 'DD-MON-YY') != TO_DATE(rec.POSITION_STARTDATE, 'DD-MON-YY')) THEN
                chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(addr1, rec.REG_ADDRESS1)) THEN
                 chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(addr2, rec.REG_ADDRESS2)) THEN
                 chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(addr3, rec.REG_ADDRESS3)) THEN
                 chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(city, rec.CITY)) THEN
                    chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(state, rec.STATE)) THEN
                    chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(zip, rec.ZIP)) THEN
                    chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF(IsTheSame(country, rec.COUNTRY)) THEN
                    chkDetailsFlagDummy := 1;
            ELSE
                 chkDetailsFlag := 1;
            END IF;
            IF (TRIM(phone) != TRIM(rec.PHONE_NUMBER)) THEN
                 chkDetailsFlag := 1;
            END IF; 
            IF (TRIM(extn) != TRIM(rec.EXTN)) THEN
                 chkDetailsFlag := 1;
            END IF;
            IF (TRIM(busFax) != TRIM(rec.BUSINESS_FAX)) THEN
                     chkDetailsFlag := 1;
            END IF;
            IF (TRIM(manAdminId) != TRIM(rec.MANAGER_ADMIN_ID)) THEN
                 chkManagerChange := 1;
                 chkDetailsFlag := 1;
            END IF; 
            IF (TRIM(areaCode) != TRIM(rec.AREA_CODE)) THEN
                     chkDetailsFlag := 1;
            END IF;
               IF (chkDetailsFlag = 1) THEN   -- FOR DETAIL CHANGE
                    oldBundleCode := rec.BUNDLE_CODE;
                 changeReason := 'Advisor Detail';
                 newBundleCode := rec.BUNDLE_CODE;
            ELSIF (chkPlatformChange = 1 AND statusDesc!='T' AND statusDesc!='I') THEN -- FOR PLATFORM CHANGE
                 changeReason := 'Platform Change';
                 oldBundleCode := rec.BUNDLE_CODE;
                 IF(TRIM(posCode) = 3 OR TRIM(posCode) = 50) THEN
                      newBundleCode := 2;
                 ELSIF (TRIM(posCode) = 51 OR TRIM(posCode) = 52) THEN
                      newBundleCode := 1;
                      updateAFABundleCode(advId, newBundleCode);
                 ELSIF (TRIM(posCode) = 76) THEN
                      UPDATE ADVISOR_DETAILS
                      SET BUNDLE_CODE=(SELECT BUNDLE_CODE FROM ADVISOR_DETAILS WHERE ADVISOR_ID=manAdminId)
                      WHERE ADVISOR_ID=advId;
                 END IF;
                 MaintainAppDetailsOfAdvisor(advId, newBundleCode, rec.BUNDLE_CODE, rec.MARKET_GROUP_ID,
                   rec.PLATFORM, rec.POSITION_CODE, rec.ADVISOR_FIRST_NAME, rec.ADVISOR_LAST_NAME);
            END IF;
            IF(chkDetailsFlag = 1 OR chkPlatformChange = 1 OR chkStatusChange = 1 OR chkManagerChange = 1) THEN
                 INSERT INTO ADVISOR_DETAILS_HISTORY VALUES(
                      rec.ADVISOR_ID, rec.SUBSCRIPTION_ID,CAST(SYSDATE AS TIMESTAMP),
                      changeReason, oldBundleCode, rec.MARKET_GROUP_ID, rec.PLATFORM,
                      rec.POSITION_CODE, rec.SALUTATION_TEXT, rec.ADVISOR_FIRST_NAME,
                       rec.ADVISOR_MIDDLE_NAME, rec.ADVISOR_LAST_NAME,
                       rec.SUFFIX_TEXT, rec.LOTUS_NOTES_ID,
                       rec.STATUS, rec.DATE_HIRED, rec.POSITION_STARTDATE,
                       rec.REG_ADDRESS1, rec.REG_ADDRESS2, rec.REG_ADDRESS3,
                       rec.CITY, rec.STATE, rec.ZIP, rec.COUNTRY, rec.PHONE_NUMBER,
                       rec.EXTN, rec.BUSINESS_FAX, rec.MANAGER_ADMIN_ID,
                       rec.AREA_CODE, ad_dbc, ad_drc, ad_lud);
                       DBMS_OUTPUT.PUT_LINE('After Insert');
                       DBMS_OUTPUT.PUT_LINE(dtHired);
                       DBMS_OUTPUT.PUT_LINE(dtPosStart);
       /****/           UPDATE ADVISOR_DETAILS SET
                       BUNDLE_CODE = newBundleCode,
                       SUBSCRIPTION_ID = rec.SUBSCRIPTION_ID,
                       MARKET_GROUP_ID = mktGrpId,
                       PLATFORM = platform,
                       POSITION_CODE = posCode,
                       OLD_POSITION_CODE = rec.POSITION_CODE,
                       SALUTATION_TEXT = salText,
                       ADVISOR_FIRST_NAME = fName,
                       ADVISOR_MIDDLE_NAME = mName,
                       ADVISOR_LAST_NAME = lName,
                       SUFFIX_TEXT = sufText,
                       LOTUS_NOTES_ID = lnId,
                       STATUS = statusDesc,
                       DATE_HIRED = dtHired,
                       POSITION_STARTDATE = dtPosStart,
                       REG_ADDRESS1 = addr1,
                       REG_ADDRESS2 = addr2,
                       REG_ADDRESS3 = addr3,
                       CITY = city,
                       STATE = state,
                       ZIP = zip,
                       COUNTRY = country,
                       PHONE_NUMBER = phone,
                       EXTN = extn,
                       BUSINESS_FAX = busFax,
                       MANAGER_ADMIN_ID = manAdminId,
                       AREA_CODE = areaCode,
                       DATE_BUNDLE_CHANGED = dtBundleChanged,
                       DATE_ROLE_CHANGED = dtPlatformChanged,
                       DATE_POSITION_CHANGED = dtPositionChanged,
                       LAST_UPDATE_DATE = SYSDATE
                       where ADVISOR_ID = advId;
                       DBMS_OUTPUT.PUT_LINE('After Update');
                       DBMS_OUTPUT.PUT_LINE(advId);
                END IF;
                IF (chkPlatformChange = 1 AND statusDesc!='T' AND statusDesc!='I') THEN -- FOR PLATFORM CHANGE
                    IF (rec.POSITION_CODE = 51 OR rec.POSITION_CODE = 52) THEN
                      DeleteAWSAccess(advId);
                    END IF;
            END IF;
            IF ( chkStatusChange = 1) THEN -- FOR STATUS CHANGE
                    IF (TRIM(statusDesc) = 'T') THEN
                      RemoveAppDetailsOfAdvisor(advId, newBundleCode, rec.BUNDLE_CODE, rec.MARKET_GROUP_ID,
                      rec.PLATFORM, rec.POSITION_CODE, rec.ADVISOR_FIRST_NAME, rec.ADVISOR_LAST_NAME);
                    ELSIF (TRIM(statusDesc) = 'T' OR  TRIM(statusDesc) = 'I') THEN
                      DeleteAWSAccess(advId);          
                    ELSIF (TRIM(statusDesc) = 'I' AND TRIM(posCode) = 76) THEN
                      AWSAccessForStatusChange(advId, manAdminId);
                    END IF;
            END IF;
            IF ( chkManagerChange =1 AND TRIM(posCode) = 76) THEN
                         checkAFAAWSAccess(advId, rec.MANAGER_ADMIN_ID, manAdminId);
            END IF;
        END IF;
    END LOOP;
    IF ( chkAdvisorExists = 0 AND statusDesc != 'T') THEN
         newBundleCode := 0;
         IF(TRIM(posCode) = 3 OR TRIM(posCode) = 50) THEN
                  newBundleCode := 2;
             ELSIF(TRIM(posCode) = 51 OR TRIM(posCode) = 52) THEN
                  newBundleCode := 1;
             ELSIF(TRIM(posCode) = 76) THEN
                  SELECT BUNDLE_CODE INTO newBundleCode FROM ADVISOR_DETAILS
                      WHERE ADVISOR_ID=manAdminId;
             END IF;
             INSERT INTO ADVISOR_DETAILS VALUES(advId, 0, newBundleCode, mktGrpId,
                  platform, posCode, 0, salText,
                  fName, mName, lName, sufText,
                  lnId, statusDesc, dtHired, dtPosStart,
                  addr1, addr2, addr3, city, state,
                  zip, country, phone, extn, busFax,
                  manAdminId, areaCode, SYSDATE,
                  SYSDATE, SYSDATE, SYSDATE);
            SELECT BUNDLE_NAME INTO bundleName FROM BUNDLE_DETAILS
                   WHERE BUNDLE_CODE=newBundleCode;       
            INSERT INTO ADVISOR_ORDERS VALUES(
                 advId, '', bundleName, mktGrpId,
                 platform, posCode, '', 1, SYSDATE, 'Auto',
                 'Add', fName, lName);
            IF (TRIM(posCode) = 76) THEN
                 AWSAccessForStatusChange(advId, manAdminId);
            END IF;
    END IF;
    END LoadDMUDailyFeed;
    /marked above, procedure is executed successfully, but it never updates my advisor_details table. may i know the reason..??
    Regards,
    Chintan

    to my surprise...when i execute that update query in sql prompt...
    it just hangs....:(
    SQL> ed
    Wrote file afiedt.buf
      1  UPDATE ADVISOR_DETAILS SET
      2                     BUNDLE_CODE = 02,
      3                     MARKET_GROUP_ID = '248',
      4                     PLATFORM = '2',
      5                     POSITION_CODE = 51,
      6                     OLD_POSITION_CODE = 0,
      7                     SALUTATION_TEXT = 'MR',
      8                     ADVISOR_FIRST_NAME = 'FRANK',
      9                     ADVISOR_MIDDLE_NAME = 'J',
    10                     ADVISOR_LAST_NAME = 'KONCILYA',
    11                     SUFFIX_TEXT = NULL,
    12                     LOTUS_NOTES_ID = NULL,
    13                     STATUS = 'A',
    14                     DATE_HIRED = TO_DATE('18-06-1953','DD-MM-YY'),
    15                     POSITION_STARTDATE = TO_DATE('22-03-2000','DD-MM-YY'),
    16                     REG_ADDRESS1 = '312 Agate Dr',
    17                     REG_ADDRESS2 = NULL,
    18                     REG_ADDRESS3 = NULL,
    19                     CITY = 'Lewistown',
    20                     STATE = 'MT',
    21                     ZIP = '59457',
    22                     COUNTRY = 'USA',
    23                     PHONE_NUMBER = '1234567788',
    24                     EXTN = '0000',
    25                     BUSINESS_FAX = NULL,
    26                     MANAGER_ADMIN_ID = '000030017',
    27                     AREA_CODE = 407,
    28                     DATE_BUNDLE_CHANGED = SYSDATE,
    29                     DATE_ROLE_CHANGED = SYSDATE,
    30                     DATE_POSITION_CHANGED = SYSDATE,
    31                     LAST_UPDATE_DATE = SYSDATE
    32*                    where ADVISOR_ID = '000001272'
    SQL> /
    this doesnt return anything...any idea about it ????thanks for ur time....

  • How to write module pool program

    hai,
    what is the module -pool program ?
    what are the procedures to write the module-pool program.
    plz give the simple program for module-pool programs?
    regards
    surender

    Hi
    This component though is not attached to the screen painter, plays important role in transaction. Normally, for reports, on line executable programs are written but for transaction, Module Pool Programs are written. The module pool program contains only modules to handle various events associated with screen and data declaration statements.
    System divides the module pool program into several include program. These are global field, PBO modules, and PAI modules. It is entirely user’s decision whether to use these modules or write directly into main program.
    Creation of Module Pool Program
    You can create module pool program either through
    Object browser
    System automatically creates the module pool program and for these program which are created through object browser, system creates the include modules.
    Or
    ABAP/4 editor
    It is similar to normal program creation. Type of program should be given ‘M’ and is not created by system.
    Communication between Dynpro and Module Program
    For each screen, the system executes the flow logic, which contains corresponding events. The control is passed to Module Pool Program. Module Pool Program handles the code for these events and again passes back control to the flow logic and finally to screen. Unlike on line program, in this case, the control remains with flow logic. The switching of control between flow logic and module pool program and back is common process when user executes transaction.
    Creation of a Complete Transaction
    Steps involved to create a complete transaction
    •     Create module pool program.
    •     From screen painter create screens.
    •     Write flow logic for each screen.
    •     Write code for all the events in module pool program.
    •     Check for any error in screen and flow logic.
    •     Generate each and every component of screen i.e. flow logic and screen.
    •     Single screen can be tested using Screen Painter.
    •     Create transaction code through object browser.
    •     Generate the transaction code.
    •     User can execute the transaction by entering the transaction code in the command field.
    Handling Function Code
    The function code or OKCODE is the last field of Field list. Function code can be handled as follows:
    During the Designing of the screen, a function code is assigned to pushbutton.
    •     In field list, developer needs to specify OKCODE as last field.
    •     In module program it is a global field and can be evaluated in the PAI event.
    •     A function code is treated in the same way, regardless it comes from pushbutton, menu item or any other GUI element.
    When the user clicks on the Display button, you want to display details of sflight, with corresponding carrid and connid (which is entered by the user).
    Module pool program to handle this particular screen is as follows:
    Program YVTEST7.
    TABLES: SFLIGHT.
    DATA: OKCODE (4).
    MODULE INPUT1 INPUT,
    CASE OKCODE.
       WHEN ‘DISP’.
         SELECT * FROM SFLIGHT
                WHERE CARRID =  SFLIGHT – CARRID AND
                               CONNID = SFLIGHT – CONNID.
         ENDSELECT.
         LEAVE TO SCREEN 200.
       WHEN ‘EXIT’.  LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.               “INPUT1 INPUT
    MODULE USER_COMMAND_0200 INPUT.
    CASE OKCODE.
    WHEN ‘BACK’. LEAVE TO SCREEN 100.
    ENDCASE.
    ENDMODULE.                    “USER_COMMAND_0200 INPUT
    When the user clicks on display, control is transferred to screen no. 200 on which you display sflight details & on the same screen, when user clicks on BACK button, he comes back to main screen.
    Flow logic for screen 100 is as follows:
    PROCESS AFTER INPUT.
    MODULE INPUT.
    Flow logic for screen 200
    PROCESS AFTER INPUT.
    USER_COMMAND_0200.
    MODULES: Modules are handled in module pool program.
    You need to write flow logic for screen 200 and design screen 200.
    In case of transaction transfer of data from program to screen is automatic i.e. you need not transfer the data from program to screen explicitly. The fields, which you define in the screen receives the data from program and displays the same.
    The Field Checks
    As already mentioned Transaction is the only method, which SAP recommends to update the database tables. Data entered in the database table should be valid and correct. Data entered is validated at each and every point. ABAP/4 offers various methods to validate data and those are as follows:
    •     Automatic field checks
    •     Checks performed in the flow logic
    •     Checks performed in the ABAP/4 module pool program
    Automatic Field Checks
    These checks are based on the field information stored in the dictionary. These checks are performed by the system automatically when the user enters the data for the screen field. System performs these checks before PAI event is triggered. Types of field checks performed by system are as follows:
    •     Required input
    While designing the screen, for particular screen field if you click the Req. Entry checkbox, the field becomes mandatory. When the transaction is executed if user leaves this particular field blank, the system displays error message. User cannot proceed until the user enters some data.
    •     Proper Data Format
    Each field has its own data format whether it is table field or screen field. Whenever data is entered, system checks for the proper format of the data. For example date. Each user has its own format for date, which is defined in the user master record. If the date defined in the user master record is in the format DD/MM/YYYY, if the user enters the date, say, in YY/DD/MM, the user displays the error message. System also checks for the value of month or days. For example if month entered is greater than twelve then the error message is displayed.
    •     Valid Value for the Field
    In data dictionary two tables are related by Primary key-Foreign key relationship.  Whenever the user enters the data, the system checks for the check table values.   Also in Domain, if you have fixed values, then the system checks for these values.
    Automatic field checks are repeated each time the user enters the data.
    About at Exit – Command
    Automatic field checks can be avoided by AT EXIT-COMMAND, which works exactly the same way as Cancel works on application tools bar. In the R/3 screen, if you want to quit the processing of that particular screen without entering the mandatory fields, user can click the Cancel button. Same functionality can be incorporated in the user-defined transaction by using AT EXIT-COMMAND. This module can be called before the system executes the automatic field checks and it goes without saying that before PAI event. Code for AT EXIT-COMMAND in flow logic and in module pool program can be written as follows:
    In Flow Logic
    Process After Input.
    Module exit AT EXIT-COMMAND.
             In module pool program.
    Module exit.
    Case okcode.
    When ‘Exit’.
    Leave to screen 0.
    To achieve this kind of functionality a pushbutton or menu item should be assigned a function type ‘E’. It tells the system to process this particular module before carrying out any field checks.
    Flow Logic Validations
    Consider the case where you want user to enter only ‘LH’ and ‘SQ’ for sflight-carrid. In this case, you are restricting value of a screen field. This cannot be achieved by automatic field check. Hence there is a need of additional validation. It can be done in flow logic by using following statement:
    Field -
    Values
    Syntax
    PAI.
    Field sflight-carrid values (‘LH’).
    For multiple values
    PAI.
    Field sflight-carrid values (‘LH’ ‘SQ’).
    Field sflight-price values (between 1000 and 2000).
    In this case when the user enters the value, PAI is triggered  and field is checked for  that particular value. If the value entered happens to be wrong, that field is enabled for user to enter. If you have multiple Field statements in your flow logic, it is sequential execution.
    Consider the following case:
    PAI.
    Module  assign.
    Field sflight-carrid values (‘LH’ ‘SQ’).
    In ABAP/4
    Module  assign.
    Data: carrid1 like sflight-carrid.
    Carrid1 = sflight-carrid.
    Endmodule.
    In this case, Sflight-carrid is used in the flow logic before the field statement. The system will give invalid value or some previous value as the field sflight-carrid is used in module before it is checked i.e., field statement is after the module in which sflight-carrid is being used. The field is not available to the system unless it executes the field statement. Field statement transfers the values to the program and is done only once. If you don’t have Field statement in your flow logic, transfer of values takes place in PAI event.
    Consider one more case where you have multiple field statement
    PAI.
    Field Sflight-carrid values (‘LH’).
    Field Sflight-connid values (‘0400’ ‘0500’).
    In this case if the user enters only carrid wrong, then this particular field is enabled and rest of the fields are disabled for user to input. Many times if the user enters wrong value for one field, then you might want to give option to user to enter all the fields, which is not possible by using Field statement only. This functionality can be achieved by CHAIN – ENDCHAIN.
    Syntax
    Chain.
    Field sflight-carrid value (‘LH’).
         Field sflight-connid values (between ‘200’ and ‘500’).
    Endchain.
    Field sflight-price values (‘100’ ‘1000’).
    In this case, if the user enters wrong value only for carrid, both the fields i.e. carrid and connid are enabled as they are grouped together in the Chain statement. The field price will be disabled for input. Usually, logically related fields are grouped together with Chain-Endchain statement.
    Module Pool Program Validations
    Checking fields ABAP/4 program includes
    •     Field statement in flow logic.
    •     Module statement in ABAP/4 module pool Program.
    Syntax
    PAI.
    Field sflight-carrid module <name>.
    This module can be handled in the main program i.e. module pool program.
    In ABAP/4 program
    Module Check.
    Select single * from sflight where carrid = sflight-carrid.
    If sy-subrc ne 0.
         Message e001.
    Endif.
    In this case, field sflight-carrid is checked in the table for its existence.
    Dynamically Calling the Screens
    About Displaying Next Screen
    Transaction is a sequence of screens, which are displayed one after the other. The next screen displayed depends upon the attributes of first screen. In attributes you need to give Next Screen number i.e. if next screen displayed should be 200 screen, then this number should be given in next Screen attributes. These are static attributes of the screen. By default, if nothing is specified in the program, the system branches out to the screen number, which is specified in the attribute screen.
    In this case, if user selects MARA pushbutton, then fields from Mara table are displayed. When the user clicks on the MARD, then the fields from MARD table are displayed. Depending upon users selection, the screen is branched out and this has to be done during runtime. This functionality can be achieved by dynamically calling the screen in module pool program.
    The screen can branch out to new screen depending upon user selection. Following command in module pool program can do this:
    •     SET SCREEM
    •     CALL SCREEN
    •     LEAVE TO SCREEN <NUMBER>
    All these commands override the specifications given in the attributes. This overriding is temporary. The values stored in the attribute are not changed.
    Set Screen
    Syntax
    Set screen <number>.
    In module pool program
    Case okcode.
         When  ‘DISP’.
              Set screen 200.
         When ‘LIST’.
              Set screen 300.
    Endcase.
    In this case, the entire processing of current screen takes place and then the system branches out to next screen. If you want to branch out to the next screen without processing the current screen, LEAVE SCREEN should be used along with the SET SCREEN.
    For Example:
    Case okcode..
         When  ‘DISP’.
              Set screen 200.
              Leave Screen.
         When ‘LIST’.
              Set screen 300.
              Leave Screen.
    Endcase.
    When SET SCREEN is used, control cannot be transferred to the main screen or previous screen, unless you write code for the same.
    Call Screen
    Usually used for pop up screens. Many times, there is a need for user to enter additional information or secondary information on another screen or pop up screen. Once the user enters the data, he should be able to go back to main screen or to the screen where he started. This is not possible by using SET SCREEN. CALL SCREEN achieves this functionality.
    Syntax
    Call Screen 200.
    Will simply call a screen number 200 from a main screen. Once the screen is displayed the user can enter all the data and return to the main screen by clicking BACK button.
    To call screen as pop up screen the syntax is
    Call screen starting at <col.no.> <line no>
                         Ending at <col no> <line no>.
    In this case window will be popped as window and user can close it by using BACK button.
    Leave to screen
    To SET a new screen without processing current screen, you need to use the following two statements together:
    SET SCREEN 200.
    LEAVE SCREEN.
    Or a Single statement
    LEAVE TO SCREEN 200.

  • Suggest Program for Module Pool Programming

    Dear All,
    Please suggest me the best example i can do in Module Pool.
    i want to make best use of Module pool.
    thanks
    RP

    u can create a ztable.
    update that z-table with module pool program.
    Create a table control and enter the data in that, update it through screens.
    Regards,
    Sujatha.

  • How to call a "Z"module pool program in a "z"report

    Hi Guys,
    I have two reports .
    1. Report : uploads a tab delimited " .Txt1" file and update the "z1" table
        ".TXT1" : File contains 4 fields
    2. Module pool. :Uploads a a tab delimited " .Txt2" file and update another "z2" table
        ".TXT2" file contains  the 4 fileds of ".TXT1" and also 2 extra fields.
    I want to merge (call) the module pool program in the Report and perform the upload function using only one ".TXT" file.Please do guide me precisely .
    *Report:*
    REPORT zrswbgcs009 NO STANDARD PAGE HEADING MESSAGE-ID zwb
                         LINE-SIZE 185.
    TABLES:  zgcs_foc.      "FOC Parts Table
    *data count buffer
    DATA:    read_cnt(6)    TYPE p,        "Find read record
             update_cnt(6)  TYPE p,        "OK record
             error_cnt(6)   TYPE p.        "Error record
    *file buffer(FOC)
    DATA: BEGIN OF FOC_inrec  OCCURS  0,
            CUSTOMER(10),      "Customer
            PART_CODE(18),     "Parts Code
            REF_NO(35),        "Ref No.
            REF_DATE(10),      "Ref Date
            QTY(12),           "Parts Qty
            TEXT(100),         "Remark
          END OF FOC_inrec.
    *file buffer
    DATA: BEGIN OF inrec  OCCURS  0,
            CUSTOMER(10),      "Customer
            PART_CODE(18),     "Parts Code
            REF_NO(35),        "Ref No.
            REF_DATE(10),      "Ref Date
            QTY(12),           "Parts Qty
            PRICE(15),         "Parts Price
            WAERK(5),          "Parts Currency
            TEXT(100),         "Remark
          END OF inrec.
    DATA : v_file      LIKE rlgrap-filename.
    DATA gt_zgcs_foc LIKE zgcs_foc OCCURS 0 WITH HEADER LINE.
    DATA gs_zgcs_foc LIKE zgcs_foc.
    *File name ACCEPT--------------------------------------------------
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN  BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    *Company code
    PARAMETERS:  p_comp LIKE zgcs_imei-company OBLIGATORY.
    PARAMETERS:  pcfile LIKE rlgrap-filename OBLIGATORY LOWER CASE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 1.
    PARAMETERS: HQfile  RADIOBUTTON GROUP b2.
    SELECTION-SCREEN COMMENT 7(20)  text-101 FOR FIELD HQfile.
    SELECTION-SCREEN POSITION 31.
    PARAMETERS: SUBfile RADIOBUTTON GROUP b2.
    SELECTION-SCREEN COMMENT 37(20) text-102 FOR FIELD SUBfile.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN  END   OF BLOCK b1.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK box WITH FRAME.
    SELECTION-SCREEN: COMMENT /2(40) text-011, COMMENT  42(40) text-001,
                      ULINE,
                      COMMENT /2(40) text-012, COMMENT  42(40) text-002,
                      COMMENT /2(40) text-013, COMMENT  42(40) text-003,
                      COMMENT /2(40) text-014, COMMENT  42(40) text-004,
                      COMMENT /2(40) text-015, COMMENT  42(40) text-005,
                      COMMENT /2(40) text-016, COMMENT  42(40) text-006,
                      COMMENT /2(40) text-017, COMMENT  42(40) text-007,
                      COMMENT /2(40) text-018, COMMENT  42(40) text-008,
                                               COMMENT /42(40) text-009.
    SELECTION-SCREEN END OF BLOCK box.
    * -- AT SELECTION SCREEN ON
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR pcfile.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                def_filename     = space
                def_path         = 'C:\'
                mask             = ',*.txt,*.TXT.'
                mode             = 'O'
                title            = ' '
           IMPORTING
                filename         = pcfile
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
    *-----------------------------start--------------------------------
    START-OF-SELECTION.
      CLEAR: read_cnt, update_cnt, error_cnt.
      REFRESH gt_zgcs_foc.        CLEAR gs_zgcs_foc.
      PERFORM file_upload_from_pc.
      SORT gt_zgcs_foc.
      DELETE ADJACENT DUPLICATES FROM gt_zgcs_foc
             COMPARING COMPANY CUSTOMER PART_CODE REF_NO REF_DATE.
    *// customer code check
      DATA: LT_ZESTD LIKE ZESTD OCCURS 0 WITH HEADER LINE.
      IF NOT gt_zgcs_foc[] IS INITIAL.
        SELECT COMPANY CUSTOMER CURRENCY
          INTO CORRESPONDING FIELDS OF TABLE LT_ZESTD
          FROM ZESTD
           FOR ALL ENTRIES IN gt_zgcs_foc
         WHERE COMPANY  = gt_zgcs_foc-COMPANY
           AND CUSTOMER = gt_zgcs_foc-CUSTOMER.
      ENDIF.
      SORT LT_ZESTD BY COMPANY CUSTOMER.
    *// part code check
      DATA: LT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
      IF NOT gt_zgcs_foc[] IS INITIAL.
        SELECT *
          INTO TABLE LT_MARA
          FROM MARA
           FOR ALL ENTRIES IN gt_zgcs_foc
         WHERE MATNR = gt_zgcs_foc-PART_CODE.
      ENDIF.
      SORT LT_MARA BY MATNR.
      LOOP AT gt_zgcs_foc.
    *// customer code check
        READ TABLE LT_ZESTD WITH KEY
                COMPANY  = gt_zgcs_foc-COMPANY
                CUSTOMER = gt_zgcs_foc-CUSTOMER.
        IF SY-SUBRC <> 0.
          WRITE:/'Invalid Customer code ',
             gt_zgcs_foc-COMPANY, ' ',
             gt_zgcs_foc-CUSTOMER.
          STOP.
        ENDIF.
    *// part code check
        READ TABLE LT_MARA WITH KEY MATNR = gt_zgcs_foc-PART_CODE
          BINARY SEARCH.
        IF SY-SUBRC <> 0.
          WRITE:/ 'Invalid part code ', gt_zgcs_foc-PART_CODE.
          STOP.
        ENDIF.
    *// REF_NO
        TRANSLATE gt_zgcs_foc-REF_NO     TO UPPER CASE.
        SHIFT gt_zgcs_foc-REF_NO     LEFT DELETING LEADING SPACE.
        IF gt_zgcs_foc-REF_NO = SPACE.
          WRITE:/'Ref No. is blank'.
          STOP.
        ENDIF.
    *// REF_DATE
        IF gt_zgcs_foc-REF_DATE = 0.
          WRITE:/'Invalid Ref Date'.
          STOP.
        ENDIF.
    *// QTY
    *    IF gt_zgcs_foc-QTY CO ' 0123456789'.
    *    ELSE.
    *      WRITE:/ gt_zgcs_foc-QTY, ' Invalid Qty value'.
    *      STOP.
    *    ENDIF.
      ENDLOOP.
    * Insert/Update table
    *  MODIFY zgcs_foc FROM TABLE gt_zgcs_foc.
      INSERT zgcs_foc FROM TABLE gt_zgcs_foc.
      IF sy-subrc EQ 0.
        COMMIT WORK.
        DESCRIBE TABLE gt_zgcs_foc LINES update_cnt.
        error_cnt = read_cnt - update_cnt.
      ELSE.
        ROLLBACK WORK.
        error_cnt = read_cnt - update_cnt.
      ENDIF.
      ULINE.
      FORMAT COLOR 3.
      WRITE: / 'Read count                :', read_cnt.
      WRITE: / 'Insert/Update count       :', update_cnt.
      WRITE: / 'Error count               :', error_cnt.
      FORMAT COLOR OFF.
    *end-of-selection--------------------------------------------------
    END-OF-SELECTION.
    *&      Form FILE_UPLOAD_FROM_PC
    FORM file_upload_from_pc.
      IF pcfile IS INITIAL.
        WRITE: / 'SELECT UPLOAD FILE !'.
      ELSE.
        MOVE pcfile TO v_file.
    * HQ file upload
        IF HQfile EQ 'X'.
          CALL FUNCTION 'WS_UPLOAD'
               EXPORTING
                    filename                = v_file
                    filetype                = 'DAT'
               TABLES
                    data_tab                = FOC_inrec
               EXCEPTIONS
                    conversion_error        = 1
                    file_open_error         = 2
                    file_read_error         = 3
                    invalid_type            = 4
                    no_batch                = 5
                    unknown_error           = 6
                    invalid_table_width     = 7
                    gui_refuse_filetransfer = 8
                    customer_error          = 9
                    OTHERS                  = 10.
          IF sy-subrc <> 0.
            WRITE: / 'FILE UPLOAD                :', sy-subrc.
          ENDIF.
          LOOP AT FOC_inrec.
            ADD 1 TO read_cnt.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = FOC_inrec-customer
                 importing
                      output = FOC_inrec-customer.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = FOC_inrec-part_code
                 importing
                      output = FOC_inrec-part_code.
            MOVE-CORRESPONDING FOC_inrec TO gs_zgcs_foc.
            MOVE p_comp          TO gs_zgcs_foc-company.
            MOVE gs_zgcs_foc-qty TO gs_zgcs_foc-balan.
            MOVE sy-uname        TO gs_zgcs_foc-ERNAM.
            MOVE sy-datum        TO gs_zgcs_foc-ERDAT.
            MOVE sy-UZEIT        TO gs_zgcs_foc-ERZET.
    * Source(1:HQ,2:SUB,0:Etc)
            MOVE '1'             TO gs_zgcs_foc-source.
            APPEND gs_zgcs_foc TO gt_zgcs_foc.
          ENDLOOP.
    * SGE file upload
        ELSE.
          CALL FUNCTION 'WS_UPLOAD'
               EXPORTING
                    filename                = v_file
                    filetype                = 'DAT'
               TABLES
                    data_tab                = inrec
               EXCEPTIONS
                    conversion_error        = 1
                    file_open_error         = 2
                    file_read_error         = 3
                    invalid_type            = 4
                    no_batch                = 5
                    unknown_error           = 6
                    invalid_table_width     = 7
                    gui_refuse_filetransfer = 8
                    customer_error          = 9
                    OTHERS                  = 10.
          IF sy-subrc <> 0.
            WRITE: / 'FILE UPLOAD                :', sy-subrc.
          ENDIF.
          LOOP AT inrec.
            ADD 1 TO read_cnt.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = inrec-customer
                 importing
                      output = inrec-customer.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = FOC_inrec-part_code
                 importing
                      output = FOC_inrec-part_code.
            MOVE-CORRESPONDING inrec TO gs_zgcs_foc.
            MOVE p_comp          TO gs_zgcs_foc-company.
            MOVE gs_zgcs_foc-qty TO gs_zgcs_foc-balan.
            MOVE sy-uname        TO gs_zgcs_foc-ERNAM.
            MOVE sy-datum        TO gs_zgcs_foc-ERDAT.
            MOVE sy-UZEIT        TO gs_zgcs_foc-ERZET.
    * Source(1:HQ,2:SUB,0:Etc)
            MOVE '2'             TO gs_zgcs_foc-source.
            APPEND gs_zgcs_foc TO gt_zgcs_foc.
          ENDLOOP.
        ENDIF.
      ENDIF.
    ENDFORM.
    *MODULE POOL::*
    *& Module Name      : Warranty Bill
    *& Sub-Module       : W/B
    *& Description      : Parts Q'ty Adjust(Sales & Warranty)
    *& Program Name     : ZRSWBP004
    *& History
    *& Date             Author            Reason
    *& 2007.05.08       Song, Ji-Hyun     Initial Coding     Req.by WH.Song
    *& Logic Process
    *  - CONDITIONS
    *    Company, Customer, Material
    *  - PROCESS
    *    Display,Insert,Update data in the T/B ZESP04
    REPORT  zrswbp004 NO STANDARD PAGE HEADING
                      MESSAGE-ID 00
                      LINE-SIZE  250
                      LINE-COUNT 50.
    *               G L O B A L    V A R I A B L E S                       *
    TABLES : zesp04.
    DATA : BEGIN OF itab_list OCCURS 0,
            company       LIKE zesp04-company,
            customer      LIKE zesp04-customer,
            material      LIKE zesp04-material,
            adj_date      LIKE zesp04-adj_date,
            adjust        LIKE zesp04-adjust,
            reason        LIKE zesp04-reason,
            reason_code   LIKE zesp04-reason_code,
            doc_no        LIKE zesp04-doc_no,
            in_date       LIKE zesp04-in_date,
            create_id     LIKE zesp04-create_id,
          END OF itab_list.
    DATA : itab_upload LIKE TABLE OF zesp04 WITH HEADER LINE.
    DATA : s_mode(10).
    DATA : table_name(10) VALUE 'ZESP04'.
    DATA : tot_cnt TYPE i.
    DATA : ref_flag(1).
    *               M A C R O    D E F I N E                               *
    DEFINE conversion_kunnr.
      call function 'CONVERSION_EXIT_ALPHA_INPUT'
           exporting
                input  = &1
           importing
                output = &1.
    END-OF-DEFINITION.
    DEFINE conversion_material.
      call function 'CONVERSION_EXIT_MATN1_INPUT'
           exporting
                input  = &1
           importing
                output = &1.
    END-OF-DEFINITION.
    *               S E L E C T I O N   S C R E E N                        *
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME  TITLE title1.
    PARAMETERS     : company LIKE zesp04-company MEMORY ID buk MODIF ID v1
                     OBLIGATORY.
    SELECT-OPTIONS : customer   FOR zesp04-customer MEMORY ID kun
                                                    MODIF ID v1.
    SELECT-OPTIONS : material   FOR zesp04-material MEMORY ID mat
                                                    MODIF ID v1.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 3.
    SELECTION-SCREEN COMMENT 3(12) text-002 MODIF ID v2.
    PARAMETERS : up_flag AS CHECKBOX MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(12) text-001 MODIF ID v2.
    PARAMETERS : p_fname(300) LOWER CASE MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME  TITLE title2.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(53) text-003 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(10) text-004 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(12) text-005 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(12) text-006 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(15) text-007 MODIF ID v2.
    PARAMETERS : df1 TYPE c RADIOBUTTON GROUP grp1.
    SELECTION-SCREEN COMMENT 24(13) text-012 MODIF ID v2.
    PARAMETERS : df2 TYPE c RADIOBUTTON GROUP grp1.
    SELECTION-SCREEN COMMENT 41(11) text-013 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(14) text-008 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(11) text-009 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(14) text-010 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(10) text-011 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b2.
    INCLUDE zrswbp004_pbo.
    INCLUDE zrswbp004_pai.
    INITIALIZATION.
      title1 = ' Parts Quantity Adjustment '.
      title2 = ' Text File Layout '.
    *            S T A R T   O F   S E L E C T I O N                       *
    TOP-OF-PAGE.
      PERFORM write_header.
    TOP-OF-PAGE DURING LINE-SELECTION.
      PERFORM write_header.
    START-OF-SELECTION.
      IF up_flag = 'X'.
        PERFORM upload_data.
      ELSE.
        PERFORM select_data.
        SET PF-STATUS 'PF01' EXCLUDING 'SAVE'.
        PERFORM display_data.
      ENDIF.
    AT USER-COMMAND.
      PERFORM user_command.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
      PERFORM get_filename.
    *&      Form  SELECT_DATA
    *       Select Data for Display
    FORM select_data.
      SELECT * FROM (table_name)
        INTO CORRESPONDING FIELDS OF TABLE itab_list
       WHERE company = company
         AND customer IN customer
         AND material IN material.
      CHECK sy-subrc <> 0.
      WRITE: 'No data found with your option.'.
    ENDFORM.                    " SELECT_DATA
    *&      Form  DISPLAY_DATA
    *       Display Data following Condition
    FORM display_data.
      LOOP AT itab_list.
        FORMAT COLOR 2 INTENSIFIED.
        WRITE : / '|' NO-GAP.
        WRITE :  (07) itab_list-company    CENTERED   NO-GAP, '|' NO-GAP,
                 (10) itab_list-customer   CENTERED   NO-GAP, '|' NO-GAP,
                 (20) itab_list-material   CENTERED   NO-GAP, '|' NO-GAP,
                 (10) itab_list-adj_date   CENTERED   NO-GAP, '|' NO-GAP,
                 (15) itab_list-adjust  RIGHT-JUSTIFIED  NO-GAP, '|'
    NO-GAP,
                 (55) itab_list-reason LEFT-JUSTIFIED NO-GAP, '|' NO-GAP,
                 (11) itab_list-reason_code CENTERED  NO-GAP, '|' NO-GAP,
                 (10) itab_list-doc_no      CENTERED  NO-GAP, '|' NO-GAP,
                 (10) itab_list-in_date  CENTERED   NO-GAP, '|' NO-GAP,
                 (12) itab_list-create_id  CENTERED   NO-GAP, '|' NO-GAP.
        FORMAT INTENSIFIED OFF.
        HIDE itab_list.
      ENDLOOP.
      WRITE : / sy-uline(171).
    ENDFORM.                    " DISPLAY_DATA
    *&      Form  WRITE_HEADER
    *       Write Report Header
    FORM write_header.
      DATA : line(1024).
      CLEAR line WITH '-'.
      DESCRIBE TABLE itab_list LINES tot_cnt.
      FORMAT INTENSIFIED ON.
      WRITE : 15 'Parts Quantity Adjustment'.
      SKIP.
      WRITE : / 'Total Count : ', tot_cnt.
      WRITE : /.
      WRITE : (171) sy-uline.
      WRITE : / '|' NO-GAP.
      WRITE : (07) 'Company'  CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'Customer' CENTERED   NO-GAP, '|' NO-GAP,
              (20) 'Material' CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'Adj. Date' CENTERED   NO-GAP, '|' NO-GAP,
              (15) 'Adjust' CENTERED   NO-GAP, '|' NO-GAP,
              (55) 'Reason' CENTERED   NO-GAP, '|' NO-GAP,
              (11) 'Reason Code' CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'Doc No' CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'IN DATE' CENTERED   NO-GAP, '|' NO-GAP,
              (12) 'CREATE ID' CENTERED   NO-GAP, '|' NO-GAP.
      WRITE : /(171) sy-uline.
      FORMAT INTENSIFIED OFF.
    ENDFORM.                    " WRITE_HEADER
    *&      Form  UPLOAD_DATA
    *       Data Upload from File
    FORM upload_data.
      DATA : l_filename LIKE rlgrap-filename,
             temp_dateformat TYPE dateformat.
      IF df1 = 'X'.
        temp_dateformat = 'YYYY.MM.DD'.
      ELSE.
        temp_dateformat = 'DD.MM.YYYY'.
      ENDIF.
      MOVE p_fname TO l_filename.
      CHECK l_filename NE space.
      CALL FUNCTION 'WS_UPLOAD'
           EXPORTING
                filename                = l_filename
                filetype                = 'DAT'
                dat_d_format            = temp_dateformat
           TABLES
                data_tab                = itab_list
           EXCEPTIONS
                conversion_error        = 1
                file_open_error         = 2
                file_read_error         = 3
                invalid_type            = 4
                no_batch                = 5
                unknown_error           = 6
                invalid_table_width     = 7
                gui_refuse_filetransfer = 8
                customer_error          = 9.
      IF sy-subrc NE 0.
        MESSAGE s000 WITH 'File upload is failed!'.
        STOP.
      ELSE.
        CLEAR : itab_upload, itab_upload[].
        LOOP AT itab_list.
          MOVE-CORRESPONDING itab_list TO itab_upload.
          conversion_kunnr    itab_upload-customer.
          conversion_material itab_upload-material.
          itab_upload-mandt     = sy-mandt.
          itab_upload-in_date   = sy-datum.
          itab_upload-create_id = sy-uname.
    *>>>>Insert by GSCHOI 2007.11.08
          IF itab_list-adj_date+0(6) NE sy-datum+0(6).
            MESSAGE i368 WITH 'Adjust month must same as current month!'.
            ROLLBACK WORK.
            STOP.
          ENDIF.
    *<<<<End
          APPEND itab_upload.
          INSERT INTO (table_name) VALUES itab_upload.
          IF sy-subrc EQ 0.
            CONTINUE.
          ELSEIF sy-subrc EQ 4.
            MESSAGE s368 WITH 'Duplicated Data Error!'.
            ROLLBACK WORK.
            STOP.
          ELSE.
            MESSAGE s368 WITH 'File Error!'.
            ROLLBACK WORK.
            STOP.
          ENDIF.
        ENDLOOP.
      ENDIF.
      IF sy-subrc EQ 0.
        MESSAGE s368 WITH 'Uploaded Successfully!'.
      ENDIF.
    ENDFORM.                    " UPLOAD_DATA
    *&      Form  USER_COMMAND
    *       User Command Execution in Screen 1000
    FORM user_command.
      MOVE-CORRESPONDING itab_list TO zesp04.
      CASE sy-ucomm.
        WHEN 'INSERT'.
          PERFORM insert_item.
        WHEN 'UPDATE'.
          PERFORM update_item.
        WHEN 'DISPLAY'.
          PERFORM display_item.
        WHEN 'REFRESH'.
          PERFORM refresh_list.
      ENDCASE.
      IF ref_flag = 'Y'.
        PERFORM refresh_list.
        CLEAR ref_flag.
      ENDIF.
    ENDFORM.                    " USER_COMMAND
    *&      Form  INSERT_ITEM
    *       When Clicking Insert Button
    FORM insert_item.
      CLEAR : s_mode.
      CLEAR : zesp04.
      s_mode = 'INSERT'.
      CALL SCREEN '100'.
    ENDFORM.                    " INSERT_ITEM
    *&      Form  UPDATE_ITEM
    *       When Clicking Update Button
    FORM update_item.
      CLEAR : s_mode.
      s_mode = 'UPDATE'.
      CALL SCREEN '100'.
    ENDFORM.                    " UPDATE_ITEM
    *&      Form  DISPLAY_ITEM
    *       When Clicking Display Button
    FORM display_item.
      CLEAR : s_mode.
      s_mode = 'DISPLAY'.
      CALL SCREEN '100'.
    ENDFORM.                    " DISPLAY_ITEM
    *&      Form  REFRESH_LIST
    *       When Clicking Refresh Button or Returning Display Screen
    FORM refresh_list.
      CLEAR : itab_list, itab_list[].
      PERFORM select_data.
      sy-lsind = sy-lsind - 1.
      PERFORM display_data.
    ENDFORM.                    " REFRESH_LIST
    *&      Form  GET_FILENAME
    *       Get Filename
    FORM get_filename.
      DATA: l_fname LIKE ibipparms-path .
      DATA : p_name LIKE sy-repid.
      p_name = sy-repid.
      CALL FUNCTION 'F4_FILENAME'
           EXPORTING
                program_name  = p_name
                dynpro_number = sy-dynnr
                field_name    = ''
           IMPORTING
                file_name     = l_fname.
      p_fname = l_fname.
    ENDFORM.                    " GET_FILENAME
    Edited by: Matt on Nov 24, 2008 11:24 AM - surrounded the ABAP with  tags

    Hi,
        Use SUBMIT statement in your first Report zrswbgcs009 at the end, to call the Modulepool program zrswbp004.
    do a search in SDN you will get lot of threads on SUBMIT statement with selection screen.
    SUBMIT... [VIA SELECTION-SCREEN]
               [USING SELECTION-SET <var>]
               [WITH <sel> <criterion>]
               [WITH FREE SELECTIONS <freesel>]
               [WITH SELECTION-TABLE <rspar>].
    http://help.sap.com/saphelp_nw04/Helpdata/EN/9f/dba51a35c111d1829f0000e829fbfe/content.htm
    Regards
    Bala Krishna

  • 'how to code for table control wizard in module pool program

    Hi Gurus,
    Please provide me a sample code of table control wizard...
    Thanks in advance!!!!
    Regards,
    Kranthi

    Hi Kranti,
    check this code... it should be helpful
    *& Module pool       Z_TABLE_CONTROL_WIZARD_DEMO                       *
    PROGRAM  z_table_control_wizard_demo             .
    DATA: BEGIN OF lt_vbak OCCURS 0,
           flag  TYPE c,
           vbeln TYPE vbeln_va,
           netwr TYPE netwr,
           kunnr TYPE kunnr,
          END OF lt_vbak.
    DATA: sfkunnr TYPE kunnr.
    *&spwizard: declaration of tablecontrol 'TCONTROL' itself
    CONTROLS: tcontrol TYPE TABLEVIEW USING SCREEN 9000.
    *&spwizard: lines of tablecontrol 'TCONTROL'
    DATA:     g_tcontrol_lines  LIKE sy-loopc.
    DATA:     ok_code LIKE sy-ucomm.
    *&spwizard: output module for tc 'TCONTROL'. do not change this line!
    *&spwizard: update lines for equivalent scrollbar
    MODULE tcontrol_change_tc_attr OUTPUT.
      DESCRIBE TABLE lt_vbak LINES tcontrol-lines.
    ENDMODULE.                    "TCONTROL_change_tc_attr OUTPUT
    *&spwizard: output module for tc 'TCONTROL'. do not change this line!
    *&spwizard: get lines of tablecontrol
    MODULE tcontrol_get_lines OUTPUT.
      g_tcontrol_lines = sy-loopc.
    ENDMODULE.                    "TCONTROL_get_lines OUTPUT
    *&spwizard: input module for tc 'TCONTROL'. do not change this line!
    *&spwizard: modify table
    MODULE tcontrol_modify INPUT.
      MODIFY lt_vbak
        INDEX tcontrol-current_line.
    ENDMODULE.                    "TCONTROL_modify INPUT
    *&spwizard: input modul for tc 'TCONTROL'. do not change this line!
    *&spwizard: mark table
    MODULE tcontrol_mark INPUT.
      DATA: g_tcontrol_wa2 LIKE LINE OF lt_vbak.
      IF tcontrol-line_sel_mode = 1.
        LOOP AT lt_vbak INTO g_tcontrol_wa2
          WHERE flag = 'X'.
          g_tcontrol_wa2-flag = ''.
          MODIFY lt_vbak
            FROM g_tcontrol_wa2
            TRANSPORTING flag.
        ENDLOOP.
      ENDIF.
      MODIFY lt_vbak
        INDEX tcontrol-current_line
        TRANSPORTING flag.
    ENDMODULE.                    "TCONTROL_mark INPUT
    *&spwizard: input module for tc 'TCONTROL'. do not change this line!
    *&spwizard: process user command
    MODULE tcontrol_user_command INPUT.
      ok_code = sy-ucomm.
      PERFORM user_ok_tc USING    'TCONTROL'
                                  'LT_VBAK'
                                  'FLAG'
                         CHANGING ok_code.
      sy-ucomm = ok_code.
    ENDMODULE.                    "TCONTROL_user_command INPUT
    *   INCLUDE TABLECONTROL_FORMS                                         *
    *&      Form  USER_OK_TC                                               *
    FORM user_ok_tc USING    p_tc_name TYPE dynfnam
                             p_table_name
                             p_mark_name
                    CHANGING p_ok      LIKE sy-ucomm.
    *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
      DATA: l_ok              TYPE sy-ucomm,
            l_offset          TYPE i.
    *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
    *&SPWIZARD: Table control specific operations                          *
    *&SPWIZARD: evaluate TC name and operations                            *
      SEARCH p_ok FOR p_tc_name.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      l_offset = STRLEN( p_tc_name ) + 1.
      l_ok = p_ok+l_offset.
    *&SPWIZARD: execute general and TC specific operations                 *
      CASE l_ok.
        WHEN 'INSR'.                      "insert row
          PERFORM fcode_insert_row USING    p_tc_name
                                            p_table_name.
          CLEAR p_ok.
        WHEN 'DELE'.                      "delete row
          PERFORM fcode_delete_row USING    p_tc_name
                                            p_table_name
                                            p_mark_name.
          CLEAR p_ok.
        WHEN 'P--' OR                     "top of list
             'P-'  OR                     "previous page
             'P+'  OR                     "next page
             'P++'.                       "bottom of list
          PERFORM compute_scrolling_in_tc USING p_tc_name
                                                l_ok.
          CLEAR p_ok.
    *     WHEN 'L--'.                       "total left
    *       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
    *     WHEN 'L-'.                        "column left
    *       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
    *     WHEN 'R+'.                        "column right
    *       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
    *     WHEN 'R++'.                       "total right
    *       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
        WHEN 'MARK'.                      "mark all filled lines
          PERFORM fcode_tc_mark_lines USING p_tc_name
                                            p_table_name
                                            p_mark_name   .
          CLEAR p_ok.
        WHEN 'DMRK'.                      "demark all filled lines
          PERFORM fcode_tc_demark_lines USING p_tc_name
                                              p_table_name
                                              p_mark_name .
          CLEAR p_ok.
    *     WHEN 'SASCEND'   OR
    *          'SDESCEND'.                  "sort column
    *       PERFORM FCODE_SORT_TC USING P_TC_NAME
    *                                   l_ok.
      ENDCASE.
    ENDFORM.                              " USER_OK_TC
    *&      Form  FCODE_INSERT_ROW                                         *
    FORM fcode_insert_row
                  USING    p_tc_name           TYPE dynfnam
                           p_table_name             .
    *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
      DATA l_lines_name       LIKE feld-name.
      DATA l_selline          LIKE sy-stepl.
      DATA l_lastline         TYPE i.
      DATA l_line             TYPE i.
      DATA l_table_name       LIKE feld-name.
      FIELD-SYMBOLS <tc>                 TYPE cxtab_control.
      FIELD-SYMBOLS <table>              TYPE STANDARD TABLE.
      FIELD-SYMBOLS <lines>              TYPE i.
    *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
      ASSIGN (p_tc_name) TO <tc>.
    *&SPWIZARD: get the table, which belongs to the tc                     *
      CONCATENATE p_table_name '[]' INTO l_table_name. "table body
      ASSIGN (l_table_name) TO <table>.                "not headerline
    *&SPWIZARD: get looplines of TableControl                              *
      CONCATENATE 'G_' p_tc_name '_LINES' INTO l_lines_name.
      ASSIGN (l_lines_name) TO <lines>.
    *&SPWIZARD: get current line                                           *
      GET CURSOR LINE l_selline.
      IF sy-subrc <> 0.                   " append line to table
        l_selline = <tc>-lines + 1.
    *&SPWIZARD: set top line                                               *
        IF l_selline > <lines>.
          <tc>-top_line = l_selline - <lines> + 1 .
        ELSE.
          <tc>-top_line = 1.
        ENDIF.
      ELSE.                               " insert line into table
        l_selline = <tc>-top_line + l_selline - 1.
        l_lastline = <tc>-top_line + <lines> - 1.
      ENDIF.
    *&SPWIZARD: set new cursor line                                        *
      l_line = l_selline - <tc>-top_line + 1.
    *&SPWIZARD: insert initial line                                        *
      INSERT INITIAL LINE INTO <table> INDEX l_selline.
      <tc>-lines = <tc>-lines + 1.
    *&SPWIZARD: set cursor                                                 *
      SET CURSOR LINE l_line.
    ENDFORM.                              " FCODE_INSERT_ROW
    *&      Form  FCODE_DELETE_ROW                                         *
    FORM fcode_delete_row
                  USING    p_tc_name           TYPE dynfnam
                           p_table_name
                           p_mark_name   .
    *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
      DATA l_table_name       LIKE feld-name.
      FIELD-SYMBOLS <tc>         TYPE cxtab_control.
      FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
      FIELD-SYMBOLS <wa>.
      FIELD-SYMBOLS <mark_field>.
    *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
      ASSIGN (p_tc_name) TO <tc>.
    *&SPWIZARD: get the table, which belongs to the tc                     *
      CONCATENATE p_table_name '[]' INTO l_table_name. "table body
      ASSIGN (l_table_name) TO <table>.                "not headerline
    *&SPWIZARD: delete marked lines                                        *
      DESCRIBE TABLE <table> LINES <tc>-lines.
      LOOP AT <table> ASSIGNING <wa>.
    *&SPWIZARD: access to the component 'FLAG' of the table header         *
        ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.
        IF <mark_field> = 'X'.
          DELETE <table> INDEX syst-tabix.
          IF sy-subrc = 0.
            <tc>-lines = <tc>-lines - 1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                              " FCODE_DELETE_ROW
    *&      Form  COMPUTE_SCROLLING_IN_TC
    *       text
    *      -->P_TC_NAME  name of tablecontrol
    *      -->P_OK       ok code
    FORM compute_scrolling_in_tc USING    p_tc_name
                                          p_ok.
    *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
      DATA l_tc_new_top_line     TYPE i.
      DATA l_tc_name             LIKE feld-name.
      DATA l_tc_lines_name       LIKE feld-name.
      DATA l_tc_field_name       LIKE feld-name.
      FIELD-SYMBOLS <tc>         TYPE cxtab_control.
      FIELD-SYMBOLS <lines>      TYPE i.
    *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
      ASSIGN (p_tc_name) TO <tc>.
    *&SPWIZARD: get looplines of TableControl                              *
      CONCATENATE 'G_' p_tc_name '_LINES' INTO l_tc_lines_name.
      ASSIGN (l_tc_lines_name) TO <lines>.
    *&SPWIZARD: is no line filled?                                         *
      IF <tc>-lines = 0.
    *&SPWIZARD: yes, ...                                                   *
        l_tc_new_top_line = 1.
      ELSE.
    *&SPWIZARD: no, ...                                                    *
        CALL FUNCTION 'SCROLLING_IN_TABLE'
             EXPORTING
                  entry_act             = <tc>-top_line
                  entry_from            = 1
                  entry_to              = <tc>-lines
                  last_page_full        = 'X'
                  loops                 = <lines>
                  ok_code               = p_ok
                  overlapping           = 'X'
             IMPORTING
                  entry_new             = l_tc_new_top_line
             EXCEPTIONS
    *              NO_ENTRY_OR_PAGE_ACT  = 01
    *              NO_ENTRY_TO           = 02
    *              NO_OK_CODE_OR_PAGE_GO = 03
                  OTHERS                = 0.
      ENDIF.
    *&SPWIZARD: get actual tc and column                                   *
      GET CURSOR FIELD l_tc_field_name
                 AREA  l_tc_name.
      IF syst-subrc = 0.
        IF l_tc_name = p_tc_name.
    *&SPWIZARD: et actual column                                           *
          SET CURSOR FIELD l_tc_field_name LINE 1.
        ENDIF.
      ENDIF.
    *&SPWIZARD: set the new top line                                       *
      <tc>-top_line = l_tc_new_top_line.
    ENDFORM.                              " COMPUTE_SCROLLING_IN_TC
    *&      Form  FCODE_TC_MARK_LINES
    *       marks all TableControl lines
    *      -->P_TC_NAME  name of tablecontrol
    FORM fcode_tc_mark_lines USING p_tc_name
                                   p_table_name
                                   p_mark_name.
    *&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
      DATA l_table_name       LIKE feld-name.
      FIELD-SYMBOLS <tc>         TYPE cxtab_control.
      FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
      FIELD-SYMBOLS <wa>.
      FIELD-SYMBOLS <mark_field>.
    *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
      ASSIGN (p_tc_name) TO <tc>.
    *&SPWIZARD: get the table, which belongs to the tc                     *
      CONCATENATE p_table_name '[]' INTO l_table_name. "table body
      ASSIGN (l_table_name) TO <table>.                "not headerline
    *&SPWIZARD: mark all filled lines                                      *
      LOOP AT <table> ASSIGNING <wa>.
    *&SPWIZARD: access to the component 'FLAG' of the table header         *
        ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.
        <mark_field> = 'X'.
      ENDLOOP.
    ENDFORM.                                          "fcode_tc_mark_lines
    *&      Form  FCODE_TC_DEMARK_LINES
    *       demarks all TableControl lines
    *      -->P_TC_NAME  name of tablecontrol
    FORM fcode_tc_demark_lines USING p_tc_name
                                     p_table_name
                                     p_mark_name .
    *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
      DATA l_table_name       LIKE feld-name.
      FIELD-SYMBOLS <tc>         TYPE cxtab_control.
      FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
      FIELD-SYMBOLS <wa>.
      FIELD-SYMBOLS <mark_field>.
    *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
      ASSIGN (p_tc_name) TO <tc>.
    *&SPWIZARD: get the table, which belongs to the tc                     *
      CONCATENATE p_table_name '[]' INTO l_table_name. "table body
      ASSIGN (l_table_name) TO <table>.                "not headerline
    *&SPWIZARD: demark all filled lines                                    *
      LOOP AT <table> ASSIGNING <wa>.
    *&SPWIZARD: access to the component 'FLAG' of the table header         *
        ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.
        <mark_field> = space.
      ENDLOOP.
    ENDFORM.                                          "fcode_tc_mark_lines
    *&      Module  STATUS_9000  OUTPUT
    *       text
    MODULE status_9000 OUTPUT.
      SET PF-STATUS 'S9000'.
      SET TITLEBAR 'T9000'.
    ENDMODULE.                 " STATUS_9000  OUTPUT
    *&      Module  USER_COMMAND_9000  INPUT
    *       text
    MODULE user_command_9000 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
          LEAVE TO SCREEN 0.
        WHEN 'DISP'.
          SELECT vbeln netwr kunnr INTO CORRESPONDING FIELDS OF TABLE lt_vbak
          FROM vbak
          WHERE kunnr = sfkunnr.
    *    LEAVE TO LIST-PROCESSING [AND RETURN TO SCREEN <nnnn>].
    *    By default, the dialog processor returns to the PBO processing of
    *    the screen from which the list processor was called. The optional
    *    addition AND RETURN TO SCREEN allows you to specify a different
    *    screen in the current screen sequence at whose PBO event you want
    *    to resume processing.
        when 'LIST'.
        LEAVE TO LIST-PROCESSING.
        WRITE:/ 'Time  :', SY-UZEIT.
        LOOP AT LT_VBAK.
        WRITE:/ LT_VBAK-VBELN,
                LT_VBAK-NETWR,
                LT_VBAK-KUNNR.
        ENDLOOP.
        WHEN 'SUBM'.
    *& You can call executable programs from other ABAP programs using the
    *& following statement:
    *& SUBMIT <rep>|(<field>) [AND RETURN] [<options>].
          SUBMIT z_submit_report VIA SELECTION-SCREEN AND RETURN.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_9000  INPUT
                                                     TABLE CONTROL WIZARD SE51 CODE
    PROCESS BEFORE OUTPUT.
    *&spwizard: pbo flow logic for tablecontrol 'TCONTROL'
      module TCONTROL_change_tc_attr.
    *&spwizard: module TCONTROL_change_col_attr.
      loop at   LT_VBAK
           with control TCONTROL
           cursor TCONTROL-current_line.
        module TCONTROL_get_lines.
    *&spwizard:   module TCONTROL_change_field_attr
      endloop.
    MODULE STATUS_9000.
    PROCESS AFTER INPUT.
    *&spwizard: pai flow logic for tablecontrol 'TCONTROL'
      loop at LT_VBAK.
        chain.
          field LT_VBAK-VBELN.
          field LT_VBAK-NETWR.
          field LT_VBAK-KUNNR.
          module TCONTROL_modify on chain-request.
        endchain.
        field LT_VBAK-FLAG
          module TCONTROL_mark on request.
      endloop.
      module TCONTROL_user_command.
    *&spwizard: module TCONTROL_change_tc_attr.
    *&spwizard: module TCONTROL_change_col_attr.
    MODULE USER_COMMAND_9000.
    regards
    padma

  • How to validate the field values in module pool program?

    Hi Guys
         I am working with module pool programming.
         Here I want to validate the fields like below.
         with out filling all the fields if I click SAVE option it has to show a message that all fields has to be filled.  This can be done by checking all the fields individually.
         I think it can be done through <b>LOOP AT SCREEN ......ENDLOOP</b>. sequence.
         If it is possible, can anyone help me?

    You need to write the Module in between the CHAIN and ENDCHAIN statment in SE51
    If you send a warning or error message from a module <mod> that you called using a FIELD statement as follows:
    CHAIN.
    FIELD: <f1>, <f 2>,...
    MODULE <mod1>.
    FIELD: <g1>, <g 2>,...
    MODULE <mod2>.
    ENDCHAIN.
    all of the fields on the screen that belong to the processing chain (all of the fields listed in the field statements) are made ready for input again. Other fields are not ready for input. Whenever the MODULE statement appears within a processing chain, even if there is only one FIELD attached to it, all of the fields in the chain (not only the affected field) are made ready for input again, allowing the user to enter new values. If the fields in the processing chain are only checked once, the PAI processing continues directly after the FIELD statement, and the preceding modules are not called again.
    Look at the DEMO program DEMO_DYNPRO_FIELD_CHAIN.
    ashish

  • Module pool program - urgent

    Hi Friends..
    I am working on a module pool program where I am using Z_BAPI_ADDREMPAU_CREATE and Z_BAPI_ADDREMPAU_CHANGE inside my Zmodule program. I have copied this these BAPI’s from Standard BAPI. The reason I created this ZBAPI’s because I have created a new fields on the screen in which when I press SAVE button ..these extra fields should also saved.
    I am facing a different problem when I am debugging each line ..it is saving into database table( pa0006). But when I press SAVE ..it is going into short dump. I could not understand why this problem is coming. Either it is giving this dump problem or the BAPI is returning “ a complex application error has occurred “
    The DUMP is :- Incorrect internal format of ABAP Program SAPLHRMM
    Correct the error:- Try regenerating the program SAPLHRMM
    Please help.

    Hi Ravi,
    This is the code in my ZFm.
    I am calling bapi_addrempua_change in my ZFM first and then moving extra fields to p0006.
    please have a look.
    'BAPI_ADDREMPAU_CHANGE'
      EXPORTING
        EMPLOYEENUMBER         = EMPLOYEENUMBER
        SUBTYPE                = SUBTYPE
        OBJECTID               = OBJECTID
        LOCKINDICATOR          = LOCKINDICATOR
        VALIDITYBEGIN          = VALIDITYBEGIN
        VALIDITYEND            = VALIDITYEND
        RECORDNUMBER           = RECORDNUMBER
       CONAME                 = CONAME
       STREETANDHOUSENO       = STREETANDHOUSENO
       CITY                   = CITY
       SCNDADDRESSLINE        = SCNDADDRESSLINE
       HOUSENUMBER            = HOUSENUMBER
       APARTMENTID            = APARTMENTID
       POSTALCODECITY         = POSTALCODECITY
       DISTRICT               = DISTRICT
       STATE                  = STATE
       COUNTRY                = COUNTRY
       TELEPHONENUMBER        = TELEPHONENUMBER
       DISTANCEINKM           = DISTANCEINKM
       DISTANCEINKM1          = DISTANCEINKM1
       COMPANYOWNEDAPT        = COMPANYOWNEDAPT
       BUSROUTE               = BUSROUTE
      NOCOMMIT               =
    IMPORTING
       RETURN                 = RETURN.
    Telephone Number
      P0006-ZZCN_CODE_TEL      = TELEPHONECOUNTRYCODE.
      P0006-ZZAREA_CODE_TEL    = TELEPHONEAREACODE.
    Mobile Number
      P0006-ZZCN_CODE_MOB      = MOBILECODE.
      P0006-ZZAREA_CODE_MOB    = MOBAREACODE.
      P0006-ZZMOB_NO           = MOBILE.
    Fax Number
      P0006-ZZCN_CODE_FAX      = FAXCODE.
      P0006-ZZAREA_CODE_FAX    = FAXAREACODE.
      P0006-ZZFAXNR            = FAX.
    Email Address
      P0006-ZZSMTP_ADDR = EMAILADDRESS.
    Location.
      P0006-ZZPLOC = LOCATION.
    Location description
      P0006-ZZPLOCDESC = LOCATIONDESC.

  • Module pool program query

    Hi,
    I am working on module pool program.
    I want to calculate sum of two fields into a third field. I have written the same in PAI (using FIELD statement). But say if the user does not click on enter and directly clicks on SAVE button, the numeric fields lose their value.
    Alpha-numeric screen values are getting transported to abap program even if SAVE is directly clicked.
    Kindly help.

    Hi....
    Iam not able to understand your problem.
    Plz get back again...,post the problem clearly!!
    The problem might be solve with CLEAR statement.
    Thanks,
    Naveen Inuganti.

  • Module pool program, table control edit

    Hi,
    I am doing module pool programming with table control.  I have a table control on my screen which is assigned to scarr table with ‘New’, ‘Modify’, ‘Save’, and ‘Delete’ buttons.  When I click on ‘New’ and ‘Save’, the new record is adding to the table where as for ‘Modify’, I selected a row, edited, and clicked on save.  Only the internal table is getting modified at the time but not the original table.  How to update the table in database? Delete is also not working.  Please give some idea on this or links related to table control with sample code.
    Thanks in advance.

    Hi,
    modify <table name>.
    it will do it
    Regards

  • How to make a fld mandatory in module pool program?

    I need help on following 2 things
    I have module pool program created, in that many screen subscreens created.
    1.I want to make a field mandatory
    second one  is, I have a general tab and  data tab.
    General tab screen - 2101
    Data tab = 2102
    In general tab, I have edited the values (change mode), when change the values and try to save it,
    It is holding old value.but If i exucute the transaction once again, it is showing the changed value(new value)
    For ex: there is a date field  value is 03/08/2009
    If I change this to 03/09/2009 and press on Save button from the standard menu, still it is showing the  value 03/08/2009. but I execute this transaction once again it is showing the value as 03/09/2009
    I will be thankful if someone helps me here

    Hi Chitra,
    Go to the properties of the filed select program tab and say input required.
    then you will get the problem solved.
    For second one actually its saving but not displaying the saved value at the same time ,
    for this you write the select statement after saving , so that once save is execute m, select statement also will execute  and it will display the newly saved value.
    so after saving imdeatly u write the select statement.
    like case sy-ucomm.
    when 'SAVE'.
    insert ztable.
    select filed from z table.
    endcase.
    let me know if ur problem solved.
    Regards
    Rajendra

  • How to change the logon language in module pool program?

    Hello All,
    I had created a module pool program and had desiged a screen.
    When i am logged in English language i am able to see them in english as per the requirement it is working fine.
    But the requirement is wen i am logged in DE then the selection-screen texts should show in English and not in German.
    Kindly give me a solution for this.
    Thanks & Regards,
    Rajesh Kumar

    Hi Rajesh,
    This problem is because you have maintained a standard dictionary fields on selection screen and all the standard dictionary fields are maintained in DE language, on the screen layout, go to the attributes of that particular text field, there is a option MODIFIZ for dictionary fields (it is a drop down), selection F TEXT, now whatever the text u will define, it will remain same for all the languages, once u do this  then u again login in DE,l u will see the text maintained by u and not the DE text.
    Do reply if problem still persist.
    point if useful.
    Rohit G
    Edited by: Rohit Gaharwar on Aug 11, 2009 1:24 PM
    Edited by: Rohit Gaharwar on Aug 11, 2009 1:30 PM
    Edited by: Rohit Gaharwar on Aug 11, 2009 1:36 PM
    Edited by: Rohit Gaharwar on Aug 11, 2009 1:36 PM
    Edited by: Rohit Gaharwar on Aug 11, 2009 1:37 PM
    Edited by: Rohit Gaharwar on Aug 11, 2009 1:38 PM

  • Error in module pool program

    Hi All,
    I have created 1 module pool program with screen no. 0100. But the statement CALL SCREEN 0100 is not getting executing its showing error i.e ' statement cannot be accessable' even i have created and activated the sceen 0100.
    Thanks...
    kiran

    Hi kiran,
    Open you program in se38 menu bar -> GOTO   -> ATTRIBUTES and check wheather it is  executable program or module pool program.
    if it is exeutable program then u can call the screen 0100 as ur intial screen. if not ur given type as module pool then u have to create a transaction in SE93 and give the screen name in that and prgoram name then it will display the screen which u hv created .
    if you want to show the screen 0100 as ur initial sceen in module pool program without using transaction it is not possible so use either executable program and use the stament call screen 0100.
    <b>reward if useful </b>
    Regards,
    sunil kairam.

Maybe you are looking for

  • Can't purchase Mountain Lion - security questions

    i can't purchase Mountain Lion because i'm given three mandatory security questions, when i only defined ONE (plus date of birth) in my Profiles Security Settings - which was done automatically upon creation of profile, one question, not three. i've

  • Business Rule Not Deploying - Receiving Error Message

    while trying to launch a business rule that I had updated this morning. This business rule is in the OH plan type. I was able to hit launch and even though I could see the calc running in EAS, I received this error Rule was validated with no potentia

  • Un-edited Images Won't Open Following Export

    Greetings, and I hope you can help with this irritating little problem which either cropped up recently or which I just recently started to notice: • I have, say, a folder of 10 images which I Import into iPhoto 5. Of those, I edit 7 in iPhoto (red e

  • Spotlight and Time Capsule

    Does spotlight work on Time capsule? If it does, can I turn it off so it doesn't index TC?

  • Captivate 4: can't preview

    Usingn Captivate 4 preview options dont work Project from this slide next 5 slides begins to load, finishes loading but preview never comes up.