Screen field char value not possible

Hello,
I have a text field in my screen. This field is associated with a table field of type CHAR with lowercase possible.
The problem is that when the user starts the text for example with a ! the field gets erased. If the user writes a normal text it is accepted.
Anyone knows how to prevent this?
Thank you,
Nuno Silva

Hi ,
For character fields, you can suppress this behavior by setting the 'Without template' attribute for the field.
If you do this, the system does not interpret any characters of the input.
The attribute is located in the Screen Painter (transaction SE51) among the attributes of the relevant field.

Similar Messages

  • Make my field as input not possible.....

    Hi all...
    in module pool screen.....
        How can i make one input field as "input not possible" for one perticuler condition met??
    ex:   iam having one input field in my screen.... so i can enter the values for it.... similer ly iam also having another one... here if i enter value in the second one and push the pushbotton to do some caluclation part.
    then my first input field has to appear but in no input possible mode...
    Thank you,
    Naveen

    Hi,
    You said you have two fields on your screen and a pushbutton...
    So You can do like this....
    if sy-datar = 'X'.
    loop at screen.
    if screen-name eq 'FIELD1'.
    screen-input = 0.
    endif.
    Modify screen.
    Endloop.
    Endif.
    Or you can also do like this....
    If sy-ucomm = 'PUSHBUTTON'.
    loop at screen.
    if screen-name eq 'FIELD1'.
    screen-input = 0.
    endif.
    Modify screen.
    Endloop.
    Endif.
    here PUSHBUTTON is the Fcode for the Pushbutton and FIELD1 is the screen name of the field which has to get diabled.
    Reward if helpful.
    Regards,
    Syed

  • BP new field update is not possible

    Hi Experts,
    I work in CRM 4.0 which is connected to R/3. I have created a new BP field with EEWB. I would like to replicate this field into a standard R/3 field.
    Without any enhancement the new field is replicated in "Insert" mode but in "Update" the replication does not work.
    I discovered two problems in R/3. The exchange structure does not contain the new field and the BP does not exist in R/3 BUT000 after creation.
    In "Update" mode the system searches for BP in R/3 BUT000.
    Finally I extended the exchange structure in R/3 and if I create a new BP it will be created in R/3 even in R/3 BUT000 and during "Update" the new field value will be updated.
    My only problem is that I have 100.000 BP's in the systems which were created without the enhanced R/3 structure and the update of the new field content is not possible. The R/3 BUT000 does not contains these 100.000 BP's.
    Do you have any idea how to solve this issue?
    Thanks in advance!
    Regards,
    Tom

    Hi Thomas,
    I would have liked to reply you back earlier on, but  I was able to see my points only today.
    1 How to manipulate Bapi to load it. Please select your Bapi which refer to the proper object in trx CODE Bapi. Then talk to your developper to create the right program to load the missing data, supposedly able to manage files (better a txt file).
    Next monday if you wish I may send you documentation concerning Bapi, if you give me your e-mail
    2. How to upload to your backend the changes of Bps. There is an envent you need to associate to your object Bupa in administration CONSOLE - DATA EXCHANGE. It is explained in the Best practise manual called Replication.
    Please refer to my attached thread to find out the manual in the Best Practise Crm for your version:
    Re: Download Conditions from R3
    Then, if this doesn't work, check if the function module in charge of uploading the changes is working, by putting a Breakpoint in the FM associate to your object Bupa in Business object in administration console.
    <b>Please reward with points if it helps.</b>
    AndreA

  • Re: Changes to screen field date was not updated

    Hi,
    I had a dialog screen showing a valid from date as 10.10.2007. I changed it to 15.10.2007 and click on other details tab. when I returned, it is still showing the old values.
    When I did a DEBUG, upon changing and hitting enter key, the new dates for the screen field is not changed. it is still showing the old date for the screen field.
    why is it so?
    I think this is the cause of why the old values is still displaying. How can I get the field updated to my internal table. It need to be filled with the new values before I can updated to my internal table and then re-displayed again.
    How to get the new values into the screen field?

    Hi..
    As i understatnd this field is in TABLE Control.
    In that case you must Update the Internal table in the PAI .. Inside LOOP .. ENDLOOP.
    Process After Input.
      LOOP AT ITAB.
       Module Update_itab.  "Calling the module
      ENDLOOP.
    <b>In Module pool</b>
       Module Update_itab INPUT. 
        modify itab from wa index TABCON-CURRENT_LINE.
       ENDMODULE.
    Note: Here WA is the work area of the Screen fields and TABCON is the Table control variable.
    <b>Reward if Helpful.</b>

  • Screen field (MEPO1211-KONNR) not populated user exit ZXM06U43

    Hi Expert,
                      I have to check  Outline agreement (EKKO-KONNR) in the user exit ZXM06U43 when creating or changing PO. one screen field (MEPO1211-KONNR) is provided for that. But value is not populated  into that field(MEPO1211-KONNR) for this user exit ZXM06U43, its always blank. Infact hole structure (MEPO1211) is blank for this exit. 
    So can anybody provide me the screen field name so I can get the value of KONNR in this exit.

    Hi,
    In the user exit - EXIT_SAPMM06E_012, YOU CAN ONLY DO CHECKS/VALIDATIONS;
    you have a paramter I_BSTYP which hold the type of the document(PO/Out Agreement/PR).
    Paramter I_EKKO will hold the data entered on the screen. It will be the incoming data which can be used to validate.
    TO PASS THE DATA, CHECK the below exit:
    EXIT_SAPMM06E_018 : Import Data from Customer Subscreen for Purchasing Document
    EXIT_SAPMM06E_007/EXIT_SAPMM06E_006: Export Data to Customer Subscreen for Purchasing Document Header
    Hope this helps
    Regards
    Shiva

  • Access request creation - select roles screen - field boxes were not aligned

    I'm not sure if this is really the screen of SAP GRC 10.1 access request creation. The field boxes were not aligned. Is there a note to fix this issue? Thank you.
    Regards,
    Jenilyn

    Hi Mohamed,
    Even I used Google Chrome, it's the same. Still facing the same issue. Is there any other way to solve this issue?
    Thank you.
    Regards,
    Jenilyn

  • SAP Smart Forms: Drag & Drop of fields into editor not possible

    Hi Guys,
    In the SAP Form Builder I can't move elements out of the field list into my editor by using drag & drop. Or I'm doing something wrong, no idea.
    It seems like to drag them is possible, but it's not possible to drop them. I can edit them manually, but that's a little circular.
    I know that's not a big problem, but I think the solution is very complex (I hope so).
    Hope you can help,
    best regards,
    tannat

    Thank you for this hint.
    Any idea which SP Level I have to reach?
    Currently there's SAP Basis Release 700, Level 16 installed.
    Regards,
    Tannat

  • Can't initialise dialog screen fields with values

    Hi.
    I have a dialog screen with 10 fields named
    TXT_FILEDESC1, TXT_FILEDESC2, ...TXT_FILEDESC10.
    I tried to initialise these 10 fields with the following codes, but I got an error message:
    DATA: TXT_FILENAME TYPE ZDM_OF-FILE_NAME,
          TXT_FILEDESC TYPE ZDM_OF-FILE_DESC.
    FIELD-SYMBOLS: <FS_TXT_FILENAME>, <FS_TXT_FILEDESC>.
    MODULE PBO_9000 OUTPUT.
      SET PF-STATUS 'STATUS_9000'.
      SELECT FILE_NAME FILE_DESC FROM ZSCSDM_OF INTO TABLE SCREEN_INIT.
      LOOP AT SCREEN_INIT INTO SCREEN_INIT_LINE.
        SCREEN_INIT_NO = SY-TABIX.
        CONCATENATE 'TXT_FILEDESC' SCREEN_INIT_NO INTO TXT_FILEDESC.
        ASSIGN (TXT_FILEDESC) TO <FS_TXT_FILEDESC>.
        MESSAGE E002(ZMSGGARY) WITH TXT_FILENAME.
        <FS_TXT_FILEDESC> = SCREEN_INIT_FILEDESC.
        ENDLOOP.
    ENDMODULE.                    "PBO_9000 OUTPUT
    Runtime Error - A new value is to be assigned to the field "<FS_TXT_FIELDDESC>", although this field is entirely or partly protected against changes...
    Could anyone share why I got the above error message when i try to run the program (Execute --> In A New Window)? Thanks.
    null

    I got the reason for the error. It's because I did not clear the contents of TXT_FILENAME before the next loop.
    LOOP AT SCREEN_INIT INTO SCREEN_INIT_LINE.
    <b>TXT_FILENAME = ''. ==> This solves the problem.</b>
    CONCATENATE 'TXT_FILEDESC' SCREEN_INIT_NO INTO TXT_FILEDESC.
    ENDMODULE. "PBO_9000 OUTPUT

  • Update Record Field if Value Not Equal

    Hello All,
    I am using Toad for Oracle 10. I have a MERGE INTO Process that updates tbl_requisition based on FK - fk_allotment_id that equals parent table tbl_allotment PK - pk_allotment_id. Both tables have create, update and deletes triggers. The process is executed when a Apply Changes/update button is clicked from tbl_allotment. So, all the record data from tbl_allotment updates tbl_requisition record if the fk and pk keys are equal. My problem is if a record is updated within tbl_requisition. Now the record from tbl_requisition is different from tbl_allotment. If any value is updated from tbl_allotment for the matching pk_allotment_id = fk_allotment_id record from tbl_requisition. tbl_allotment record data will override the updated value within tbl_requisition. I would like to only update the values that were updated/changed and are not equal from tbl_allotment to tbl_requisition. Can anyone assist me with this?
    Begin
    MERGE INTO tbl_requisition req
    USING tbl_allotment alt
    ON (req.fk_allotment_id = alt.pk_allotment_id)
    WHEN MATCHED THEN
    UPDATE SET
         req.FK_JOBCODE_ID = alt.FK_JOBCODE_ID,
         req.FK_JOBCODE_DESCR = alt.FK_JOBCODE_DESCR,
         req.FK_JOBCODE_PAYRANGE = alt.FK_JOBCODE_PAYRANGE,
         req.FK_PAY_RANGE_LOW_YEARLY = alt.FK_PAY_RANGE_LOW_YEARLY,
         req.FK_DEPARTMENT_ID = alt.FK_DEPARTMENT_ID,
         req.FK_DIVISION_ID = alt.FK_DIVISION_ID,
         req.FK_NUMBER_OF_POSITIONS = alt.NUMBER_OF_POSITIONS,
         req.FK_DEPARTMENT_NAME = alt.FK_DEPARTMENT_NAME,
         req.FK_DIVISION_NAME = alt.FK_DIVISION_NAME,
         req.REPORT_UNDER = alt.REPORT_UNDER;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        dbms_output.put_line('No data found');
    End; Thanks for reading this thread and I hope someone can provide some assistance. If the create tables or anything is needed that is not a problem to provide.

    Thanks for responding Frank and providing the EXCEPTION information also. Here are my create tables and insert statement. I changed the child table from tbl_requisition to tbl_allotment_temp, same process though.
    CREATE TABLE  "TBL_ALLOTMENT"
       (     "PK_ALLOTMENT_ID" NUMBER,
         "FK_DEPARTMENT_ID" VARCHAR2(5),
         "FK_DIVISION_ID" VARCHAR2(100),
         "FK_JOBCODE_ID" NUMBER,
         "FK_JOBCODE_DESCR" VARCHAR2(100),
         "FK_JOBCODE_PAYRANGE" NUMBER(*,0),
         "FK_PAY_RANGE_LOW_YEARLY" NUMBER(*,0),
         "NUMBER_OF_POSITIONS" NUMBER,
          CONSTRAINT "PK_ALLOTMENT_ID" PRIMARY KEY ("PK_ALLOTMENT_ID") ENABLE
    CREATE TABLE  "TBL_ALLOTMENT_TEMP"
       (     "PK_ALLOTMENT_TEMP_ID" NUMBER,
         "FK_DEPARTMENT_ID" VARCHAR2(5),
         "FK_DIVISION_ID" VARCHAR2(100),
         "FK_JOBCODE_ID" NUMBER,
         "FK_JOBCODE_DESCR" VARCHAR2(100),
         "FK_JOBCODE_PAYRANGE" NUMBER(*,0),
         "FK_PAY_RANGE_LOW_YEARLY" NUMBER(*,0),
         "NUMBER_OF_POSITIONS" NUMBER,
          CONSTRAINT "PK_ALLOTMENT_TEMP_ID" PRIMARY KEY ("PK_ALLOTMENT_TEMP_ID") ENABLE
    INSERT INTO tbl_allotment
    (FK_DEPARTMENT_ID, FK_DIVISION_ID, FK_JOBCODE_ID, FK_JOBCODE_DESCR,
    FK_JOBCODE_PAYRANGE, FK_PAY_RANGE_LOW_YEARLY, NUMBER_OF_POSITIONS)
    values
    (00002, 0000220000, 100408, 'Revenue Analyst',
      2210, 38389, 5);Once data is created for tbl_allotment, this insert statement inserts the data to tbl_allotment_temp.
    INSERT INTO tbl_allotment_temp(
         PK_ALLOTMENT_TEMP_ID,
         FK_JOBCODE_ID,
         FK_JOBCODE_DESCR,
         FK_JOBCODE_PAYRANGE,
         FK_PAY_RANGE_LOW_YEARLY,
         FK_DEPARTMENT_ID,
         FK_DIVISION_ID,
         NUMBER_OF_POSITIONS)
        VALUES (
         :P3_PK_ALLOTMENT_ID,
         :P3_FK_JOBCODE_ID,
         :P3_FK_JOBCODE_DESCR,
         :P3_FK_JOBCODE_PAYRANGE,
         :P3_FK_PAY_RANGE_LOW_YEARLY,
         :P3_FK_DEPARTMENT_ID,
         :P3_FK_DIVISION_ID,
         :P3_NUMBER_OF_POSITIONS);Once any update occurs to tbl_allotment, this process updates tbl_allotment_temp based on temp.pk_allotment_temp_id = alt.pk_allotment_id.
    Begin
    MERGE INTO tbl_allotment_temp temp
    USING tbl_allotment alt
    ON (temp.pk_allotment_temp_id = alt.pk_allotment_id)
    WHEN MATCHED THEN
    UPDATE SET
         temp.FK_DEPARTMENT_ID = NVL (alt.FK_DEPARTMENT_ID, temp.FK_DEPARTMENT_ID),
         temp.FK_DIVISION_ID = NVL (alt.FK_DIVISION_ID, temp.FK_DIVISION_ID),
         temp.FK_JOBCODE_ID = NVL (alt.FK_JOBCODE_ID,    temp.FK_JOBCODE_ID),
         temp.FK_JOBCODE_DESCR = NVL (alt.FK_JOBCODE_DESCR, temp.FK_JOBCODE_DESCR),
         temp.FK_JOBCODE_PAYRANGE = NVL (alt.FK_JOBCODE_PAYRANGE, temp.FK_JOBCODE_PAYRANGE),
         temp.FK_PAY_RANGE_LOW_YEARLY = NVL (alt.FK_PAY_RANGE_LOW_YEARLY, temp.FK_PAY_RANGE_LOW_YEARLY),
         temp.NUMBER_OF_POSITIONS = NVL (alt.NUMBER_OF_POSITIONS, temp.NUMBER_OF_POSITIONS);
    End;Once the data is created within tbl_allotment the data is also inserted within tbl_allotment_temp. If tbl_allotment_temp.NUMBER_OF_POSITIONS value is changed from 5 to 10 is fine. The problem is when a update occurs within tbl_allotment and the updated field is not NUMBER_OF_POSITIONS. The changed field values from tbl_allotment should only update the field data within tbl_allotment_temp.
    UPDATE tbl_allotment_temp
    SET
    NUMBER_OF_POSITIONS = 10
    UPDATE tbl_allotment
    SET
    FK_JOBCODE_DESCR = 'Revenue Test'Now within tbl_allotment_temp only field FK_JOBCODE_DESCR should be updated to Revenue Test but my MERGE INTO process will update all the field values. So the updated NUMBER_OF_POSITIONS value 10 will now be 5. I would only like to update any changed value from tbl_allotment to tbl_allotment_temp. If any record value from tbl_allotment_temp was changed that value should not be updated from the MERGE INTO Process within tbl_allotment unless those values have been updated within tbl_allotment. Let me know if this is not clear so I can clarity more Frank.
    Edited by: Charles A on Aug 29, 2011 8:41 AM

  • Problem with field-symbol values not updating

    H i ,
          I have following piece of code :
    Assigning Dynamic Table to Field Symbol
        ASSIGN ist_dyn_table->* TO <gs_dyn_table>.
    *   Creating Structure for dynamic table
        CREATE DATA gs_dyn_line LIKE LINE OF <gs_dyn_table>.
    *   Creating line type for the Dynamic Values
        ASSIGN gs_dyn_line->* TO <gs_line>.
    *   Populating values in the dynamic table
        LOOP AT ist_pwcl_main INTO wa_pwcl_main.
          ASSIGN COMPONENT gc_fld_werks OF STRUCTURE <gs_line> TO <gs_field>.
       1   IF sy-subrc EQ 0.
       2        <gs_field> = wa_pwcl_main-werks.
       3      ENDIF.
       5  IF <gs_field> IS ASSIGNED.
       6     <gs_field> = wa_pwcl_main-vbeln.
          ENDIF.
      7 IF <gs_field> IS ASSIGNED.
      8  <gs_field> =  wa_pwcl_main-posnr.
          ENDIF.
       IF <gs_field> IS ASSIGNED.
            <gs_field> = wa_pwcl_main-quant.
          ENDIF.
    on debugging  at line 2 <gs_filed> contains the value of werks .
    but at line 6 <gs_field> contains value of vbeln as 0 and at 8 of posnr as 0 .
    What can be the problem ? Other values are getting assigned properly .
    Plz help ...
    Regards .

    Hi,
    Assigning Dynamic Table to Field Symbol
        ASSIGN ist_dyn_table->* TO <gs_dyn_table>.
      Creating Structure for dynamic table
        CREATE DATA gs_dyn_line LIKE LINE OF <gs_dyn_table>.
      Creating line type for the Dynamic Values
        ASSIGN gs_dyn_line->* TO <gs_line>.
      Populating values in the dynamic table
        LOOP AT ist_pwcl_main INTO wa_pwcl_main.
          ASSIGN COMPONENT gc_fld_werks OF STRUCTURE <gs_line> TO <gs_field>.
       1   IF sy-subrc EQ 0.
       2        <gs_field> = wa_pwcl_main-werks.
       3      ENDIF.
       5  IF <gs_field> IS ASSIGNED.
       6     <gs_field> = wa_pwcl_main-vbeln.
          ENDIF.
      7 IF <gs_field> IS ASSIGNED.
      8  <gs_field> =  wa_pwcl_main-posnr.
          ENDIF.
       IF <gs_field> IS ASSIGNED.
            <gs_field> = wa_pwcl_main-quant.
          ENDIF.
    Based on your coding above, <gs_field> has been assigned with data type 'WERKS' (i'd assume component gc_fld_werks found from structure <gs_line> is a plant typed), which is a CHAR(4) data type.
    Meaning, if <gs_field> is assigned with Plant type value, e.g. <gs_field> = '1000', field symbol <gs_field> will contain 4 character only.
    At line 6, if wa_pwcl_main-vbeln = '0000201000', <gs_field> is only capturing '0000' only. This is also happened to line 8.
    However, it looks like that <gs_field> is getting over-write if ASSIGNED statement returns SY-SUBRC = 0.
    Hope this helps.
    Regards,
    Patrick

  • Parameter field default values not being set in BO Infoview

    For a report, I have three numeric input parameter fields with a default value of -1.  When the report is processed in the Crystal Reports development environment, the parameter fields are all displayed with the default values. 
    When copied and then processed in BO Infoview, the three parameters come up with a value of "Empty".  In order for the report to process correctly, these "Empty" fields need to be individually called, a numeric value entered and then the report "Scheduled".  Does anyone know of any way to force or get Infoview to use the pre-defined default values of these fields when running with Infoview? 
    Thanks

    In the CMC, you have to config the report object's parameter.
    It's under the Process tab of Object.
    Bryan Tsou@Taiwan

  • Getting screen field values during runtime

    Hi everyone,
    In debugger for dynamically getting the screen field values we will be using  (SAPLMGMW)CALP-ENDPA this format to get the value of the field CALP-ENDPA.
    But this will give only for fields.My question is that how to get the screen field labels values in debugger.
    Take a look at following picture.

    Hi,
    Try putting a watch point on the screen field name and see where it is changing.
    If your need is before that it won't be possible to get it as it is a processed value.
    Also if it is updating on screen but still you are not getting that means the value is not transported from the Screen to the program in that case use the FM DYNP_VALUES_READ to get the values the documentation has the usage else there are lot of blogs just search it.
    Regards

  • Make Screen field non editable

    Hi All,
    We have following requirement in our project:
    When entering infotype 1 in any action a check should be made to set default values in Work Contract. If Employee Group =u2019 1u2019, Work Contract u2018ZFu2019 should be set and this value must not be changed. If Employee Group u20181u2019 the Work Contract could be all other values except u2018ZFu2019.
    We are using badi HRPAD00INFTY to handle the above requirement. But there is a problem. When we perform an action and go to infotype 1 screen the contract field is populated with correct value and is display only field. Once you press enter on the screen the field becomes an editable field and can be changed by the user. I debugged the program and found that PSYST-NSELC is set as NO (0) in the program MP000130 and is checked if it has a value YES in module p0001 called in PBO of screen 2000 include MP000120. If the value is YES only then BADI is called else not.
    Can someone suggest what could be the problem area or any other way to meet the requirement ?
    BR Jaideep,
    Duplicate Post. Continue here: Screen field not getting editable..
    Edited by: kishan P on Sep 9, 2010 2:20 PM

    Can you explain how a physical inventory is done in your company., and what problems come up if a wrong date is entered?
    In my company we create and print the inventory documents immediatly before counting, and we are making sure, that the volume can be counted, entered and difference posted on the same day.
    Further we are setting a posting block in SAP, and of course we make sure that no physical movement happens during the count.
    And of course we make sure that everyting what was received or issued prior to the count is already entered in sAP before we start creating the documents.
    SAP takes the book inventory in the moment the counted quantity is entered in this case. No matter if the user enters a count date of today or of last week.
    But if you close the field (which is not possible with customizing), then you have to make sure that you enter the count on the same day you have counted, because if you would enter the count on the next day, then your counting date would be wrong and you would not have a chance to enter the correct counting date.
    And as SAP stores everything what a user enters, it is easy to identy the user who has fooled the system, and then the HR guy should do his job, especially as the physical inventory is in most countries a legal requirement, which has to be done seriously.
    don't give authorization to the guys who dont follow your policies.

  • RF Monitor -  add screen field

    Hi.
    Is it possible to add a field in the report and how? or is there any user-exit?
    Thx.

    If your client/employer allows CORE-MODS then go ahead and make the changes just as you'd change any screen field. If not, I suggest you look at GUIXT. This comes standard as part of 4.6 and up ...
    I suggest that you add this field (and necessary PBO/PAI logic) in custom tab and use GUIXT to display this field in whichever tab/screen you choose to.
    You can go to GUIXT.com and check out sample code on how to do this. Its very simple, you should be able to go through the tutorial and do it yourself.
    Raj

  • Mailing details to our seniorguy after filling screen fields.

    hi
    i have screen in modulepool programming in that screen i have a screen fields of empno,empname,salary,medicalbill,allowance etc after filling these details by an employee and if he click (mail)  pushbutton the screen fields with values will submitted to his senior guy as a mail .pls send suggestions.
    thankful to all,
    regards
    srinivasulu.

    Hi Srini,
    Have a look at the code for sending mail :-
    *&      Form  send_mail_to_promotion
    *       TO SEND MAIL TO PROMOTION SECTION
    *      -->PF_PERNR  pa0000-pernr
    *      -->PF_BEGDA  pa0000-begda
    *      -->PF_RANK   pa9007-rankcd
    FORM send_mail_to_promotion  USING  value(pf_pernr) TYPE pa0000-pernr
                                        value(pf_begda) TYPE pa0000-begda
                                        value(pf_rank)  TYPE pa9007-rankcd.
      DATA: lt_objcont    LIKE solisti1 OCCURS 10 WITH HEADER LINE,
            lt_reclist    LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
            lf_doc_chng   LIKE sodocchgi1,
            lf_entries    LIKE sy-tabix,
            lf_name       TYPE pa0001-ename.
    * Fill the document
      lf_doc_chng-obj_name = 'URGENT'.
      lf_doc_chng-obj_descr = 'Update Promotion Status!'.
      lf_doc_chng-sensitivty = 'P'.
      lt_objcont = 'Promotion order has been issued for the person'.
      APPEND lt_objcont.
      CONCATENATE 'Date:' pf_begda
                  INTO lt_objcont SEPARATED BY space.
      APPEND lt_objcont.
      CONCATENATE 'Personnel Number:' pf_pernr
                  INTO lt_objcont SEPARATED BY space.
      APPEND lt_objcont.
      CLEAR lf_name.
      SELECT SINGLE ename
      INTO lf_name
      FROM pa0001
      WHERE pernr = pf_pernr.
      CONCATENATE 'Person Name:' lf_name
                  INTO lt_objcont SEPARATED BY space.
      APPEND lt_objcont.
      CONCATENATE 'Rank:' pf_rank
                  INTO lt_objcont SEPARATED BY space.
      APPEND lt_objcont.
      lt_objcont = 'Please update rank of the person'.
      APPEND lt_objcont.
      lf_entries = LINES( lt_objcont ).
      READ TABLE lt_objcont INDEX lf_entries.
      lf_doc_chng-doc_size = ( lf_entries - 1 ) * 255 +
                             STRLEN( lt_objcont ).
    * Fill the receiver list
      CLEAR lt_reclist.
    * NOTE::
    * REPLACE THIS LINE WITH LOGIN OF PROMOTION SECTION
      lt_reclist-receiver = 'RAJESH'.  " replace with <login name>
    * ::ETON
      lt_reclist-rec_type = 'B'.
      lt_reclist-express = 'X'.
      APPEND lt_reclist.
    * Send the document
      CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
        EXPORTING
          document_type              = 'RAW'
          document_data              = lf_doc_chng
    *      put_in_outbox              = 'X'
        TABLES
          object_content             = lt_objcont
          receivers                  = lt_reclist
        EXCEPTIONS
          too_many_receivers         = 1
          document_not_sent          = 2
          document_type_not_exist    = 3
          operation_no_authorization = 4
          parameter_error            = 5
          x_error                    = 6
          enqueue_error              = 7.
    ENDFORM.                    " send_mail_to_promotion
    Hope it solves your problem.
    Regards,
    Manish Joshi
    Don't tell me, you don't know how to award points.

Maybe you are looking for