RV_PRICE_PRINT_HEAD

Hi All,
I'm using the FM 'RV_PRICE_PRINT_HEAD' to fetch the header data of the invoice.While executing this individually,it is giving me the output.But when i'am using this in the smartform,the output tables are not getting filled.
Any pointers would be of great help.
Regards
Prathima

Hi,
before using FM: RV_PRICE_PRINT_HEAD please use FM: RV_PRICE_PRINT_REFRESH
Regards
Gerd

Similar Messages

  • Purchase Order of type Imports is not tiggering the FM 'RV_PRICE_PRINT_HEAD

    Hi Sap Guru's.
    when i try to copy the exisitng PO and create a new 'PO'  of type imports and click on save it is not triggering the FM''RV_PRICE_PRINT_HEAD' but when i try to copy another 'PO' of same type Imports it is triggering the FM''RV_PRICE_PRINT_HEAD''.
    Can any body help me in finding out the reason why it is not triggering the FM for the other PO.
    your help will be appreciated.
    thanks.
    Varma.

    Hi Khan.
    my requirement is ,when i put the break point int at the below shown code under hte FM'RV_PRICE_PRINT_HEAD'
    the code is :
    komk             = comm_head_i.
      preisfindungsart = 'E'.
      if language = space.
        language = sy-langu.
      endif.
      clear komp.
      clear: komk-supos,
             komk-fkwrt
    and when i try to create two different PO's of type Imports,one of them triggers the breakpoint while it was saved but another PO doesnt trigger the Break point,may i know the reason on why the other po is not triggering the break point .what is the main conditon that make the PO of type Imports to trigger the mentioned Break point.
    will be waiting for your response.
    regards.
    Varma

  • Regarding rv_price_print_head

    can i use rv_price_print_head in reports or it should be used only in form printing
    actually i want to find total price.
    total price = grossvalue -discount vatfreight.
    i have to read these freght vat discount with key condition types.
    so can i use this function module. for this purpose
    plz help me how to solve it

    Hi,
    before using FM: RV_PRICE_PRINT_HEAD please use FM: RV_PRICE_PRINT_REFRESH
    Regards
    Gerd

  • Upgradation from 4.6C to ECC 6.0, FM RV_PRICE_PRINT_HEAD

    Hi SAP guys,
    Function module RV_PRICE_PRINT_HEAD is calling in 4.6c version with out unicode check and it's working fine.
        CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
             EXPORTING
                  COMM_HEAD_I = KOMK
                  COMM_ITEM_I = KOMP
             IMPORTING
                  COMM_HEAD_E = KOMK
                  COMM_ITEM_E = KOMP
             TABLES
                  TKOMV       = TKOMV
                  TKOMVD      = HKOMVD.
    Same function module RV_PRICE_PRINT_HEAD is calling in ECC6.0 version with unicode check and program giving dump.
        CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
             EXPORTING
                  COMM_HEAD_I = KOMK
                  COMM_ITEM_I = KOMP
             IMPORTING
                  COMM_HEAD_E = KOMK
                  COMM_ITEM_E = KOMP
             TABLES
                  TKOMV       = TKOMV
                  TKOMVD      = HKOMVD.
    Please suggest me obsolate function module for the same.
    Thanks and Regards,
    Sekhar Raju.

    CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
             EXPORTING
                  COMM_HEAD_I = KOMK
                  *COMM_ITEM_I = KOMP*
             IMPORTING
                  COMM_HEAD_E = KOMK
                  *COMM_ITEM_E = KOMP*
             TABLES
                  TKOMV       = TKOMV
                  TKOMVD      = HKOMVD.
    The parameters bolded above are not generally exists in the function module parameters.
    but with out unicode check the programme runs fine.
    but with unicode check it gives dump saying
    Function module "RV_PRICE_PRINT_HEAD" was called  
    with the parameter "COMM_ITEM_I".                 
    This parameter is not defined.  
    I think you got my problem.

  • RV_PRICE_PRINT_HEAD not returning all output conditions

    Hi experts,
    I am using the FM 'RV_PRICE_PRINT_HEAD' to get the header conditions but it is returning only specific condition types. I need all the header conditions maintained in the sales order.
    Is it possible to get all conditions through this FM ?
    Help me on this issue.
    Thanks & Regards,
    Karthik

    Hi Karthi,
    as documented this function module will return only conditions that are flagged for print output in calculation scheme.
    What is your requirement?
    Regards,
    Clemens

  • FM RV_PRICE_PRINT_HEAD

    Hello Gurus,
    I want to access the head conditions of an offer exactly as they are shown in VA22->Header->Conditions.
    In the PBO module of this screen (6201, function group V69A), I can see, that the table XKOMV[] contains this information.
    I tried to retrive this table by using the FM RV_PRICE_PRINT_HEAD, but all I retrieve are the conditions from the positions, but not the ones from the header.
    Has anyone an idea, how to retrieve the information storde in table XKOMV[] of function group V69A?
    Thanks in advance for your help,
    Marc

    >
    Florian Kemmer wrote:
    > 1. try if you got an XKOMK as well, that should be header conditions.
    > 2. when scanning XKOMV, see if there are records with KPOSN = space. Those are header conitions then.
    Hello Florian,
    thanks for your reply.
    Unfortunately there are no entries in XKOMV with KPOSN = space.
    Do you have an idea how to retrieve the corresponding XKOMK with only the VBELN and KNUMV?
    Edited by: Marc000 on Jul 2, 2009 2:25 PM

  • The FM "RV_PRICE_PRINT_HEAD" is not runnging for second time...

    Hi All
    The FM "RV_PRICE_PRINT_HEAD" is not runnging for second time, first time it works fine and second time it is giving the null values. Will you please solve this problem (is there any flag to recall the function ex: run the FM press f8 and come back f3 and press again f8 - first time it is showing the data & at second time f8 it is not showing any data ).
    Feilds filled in head_i structure are:
    VBTYP,
    KALSM,
    KNUMV,
    WAERK,
    KAPPL.
    Thanks,
    Ravi
    Message was edited by:
            Ravi Kumar
    Message was edited by:
            Ravi Kumar

    Hi,
    before <b>every</b> call of RV_PRICE_PRINT_HEAD or RV_PRICE_PRINT_ITEM you should call RV_PRICE_PRINT_REFRESH once - you have to pass a dummy parameter.
    No idea why this is so but SAP does it the same way
    Regards,
    Clemens

  • Problem with function module RV_PRICE_PRINT_HEAD

    Hello I was wondering if anyone could help me:
    I'm using the fm RV_PRICE_PRINT_HEAD to retrieve the pricing conditions of a document, being used in a smartform.  When I debug the the fm in the smartform to check if there are values returned, the tables TKOMV and TKOMVD do not contain anything, but when I test the fm using the function builder (se37), there are values in both tables.

    It may be that it works in SE37 becasue this is in foreground and the print parameters are visible.  If this is the case you may end up using PRICING_GET_CONDITIONS in your Smartform instead.
    Regards
    Gareth
    PS sorry for having three posts - just kept thinking:)

  • Developed a report which gives PO(Purchase Order) Pricing details.

    hi experts,
    please give me tables and fields for following report, and also exlain me briefly,
    Developed a report which gives PO(Purchase Order) Pricing details.
    thanks in advance,
    radhakrishna

    Hello Radhakrishna,
    you can use the function module
          CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
            EXPORTING
              comm_head_i       = wa_komk
         LANGUAGE          = ' '
       IMPORTING
         COMM_HEAD_E       =
         COMM_MWSKZ        =
            TABLES
              tkomv             = gi_komv
              tkomvd            = gi_komvd.
    in wa_komk pass the condition record number.
    this you will get from your vbak table
    reward  points if helpful

  • Report output to convert to pdf and mail it to recepient

    Hi
    I'm using the below coding for converting the output of the program to pdf and then mail it to the recepient.The coding works for background processsing only can i do the same for online.In the write statement i'm using the sy-repid my program name and when i get the pdf mail i'm getting the name of the program but instead i need to get the output of my program.Can any one help me in correcting the coding to get the output in pdf format.I know where i'm going wrong but this is the first time i'm working with this so new to this....It would be better if i could run the program and get the convertions into pdf through mail instead of background processing.....Please change the coding below to get the same.....
    DATA: gd_recsize TYPE i.
    Spool IDs
    TYPES: BEGIN OF t_tbtcp.
            INCLUDE STRUCTURE tbtcp.
    TYPES: END OF t_tbtcp.
    DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
          wa_tbtcp TYPE t_tbtcp.
    Job Runtime Parameters
    DATA: gd_eventid LIKE tbtcm-eventid,
          gd_eventparm LIKE tbtcm-eventparm,
          gd_external_program_active LIKE tbtcm-xpgactive,
          gd_jobcount LIKE tbtcm-jobcount,
          gd_jobname LIKE tbtcm-jobname,
          gd_stepcount LIKE tbtcm-stepcount,
          gd_error    TYPE sy-subrc,
          gd_reciever TYPE sy-subrc.
    DATA:  w_recsize TYPE i.
    DATA: gd_subject   LIKE sodocchgi1-obj_descr,
          it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          gd_sender_type     LIKE soextreci1-adr_typ,
          gd_attachment_desc TYPE so_obj_nam,
          gd_attachment_name TYPE so_obj_des.
    Spool to PDF conversions
    DATA: gd_spool_nr LIKE tsp01-rqident,
          gd_destination LIKE rlgrap-filename,
          gd_bytecount LIKE tst01-dsize,
          gd_buffer TYPE string.
    Binary store for PDF
    DATA: BEGIN OF it_pdf_output OCCURS 0.
            INCLUDE STRUCTURE tline.
    DATA: END OF it_pdf_output.
    CONSTANTS: c_dev LIKE  sy-sysid VALUE 'DEV',
               c_no(1)     TYPE c   VALUE ' ',
               c_device(4) TYPE c   VALUE 'LOCL'.
    *START-OF-SELECTION.
    START-OF-SELECTION.
    Write statement to represent report output. Spool request is created
    if write statement is executed in background. This could also be an
    ALV grid which would be converted to PDF without any extra effort
      WRITE sy-repid.
      new-page.
      commit work.
      new-page print off.
    IF sy-batch EQ 'X'.
        PERFORM get_job_details.
        PERFORM obtain_spool_id.
    Alternative way could be to submit another program and store spool
    id into memory, will be stored in sy-spono.
    *submit ZSPOOLTOPDF2
           to sap-spool
           spool parameters   %_print
           archive parameters %_print
           without spool dynpro
           and return.
    Get spool id from program called above
    IMPORT w_spool_nr FROM MEMORY ID 'SPOOLTOPDF'.
        PERFORM convert_spool_to_pdf.
        PERFORM process_email.
        if p_delspl EQ 'X'.
          PERFORM delete_spool.
        endif.
        IF sy-sysid = c_dev.
          wait up to 5 seconds.
          SUBMIT rsconn01 WITH mode   = 'INT'
                          WITH output = 'X'
                          AND RETURN.
        ENDIF.
    ELSE.
       SKIP.
       WRITE:/ 'Program must be executed in background in-order for spool'
               'request to be created.'.
    ENDIF.
          FORM obtain_spool_id                                          *
    FORM obtain_spool_id.
      CHECK NOT ( gd_jobname IS INITIAL ).
      CHECK NOT ( gd_jobcount IS INITIAL ).
      SELECT * FROM  tbtcp
                     INTO TABLE it_tbtcp
                     WHERE      jobname     = gd_jobname
                     AND        jobcount    = gd_jobcount
                     AND        stepcount   = gd_stepcount
                     AND        listident   <> '0000000000'
                     ORDER BY   jobname
                                jobcount
                                stepcount.
      READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.
      IF sy-subrc = 0.
        message s004(zdd) with gd_spool_nr.
        gd_spool_nr = wa_tbtcp-listident.
        MESSAGE s004(zdd) WITH gd_spool_nr.
      ELSE.
        MESSAGE s005(zdd).
      ENDIF.
    ENDFORM.
          FORM get_job_details                                          *
    FORM get_job_details.
    Get current job details
      CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
           IMPORTING
                eventid                 = gd_eventid
                eventparm               = gd_eventparm
                external_program_active = gd_external_program_active
                jobcount                = gd_jobcount
                jobname                 = gd_jobname
                stepcount               = gd_stepcount
           EXCEPTIONS
                no_runtime_info         = 1
                OTHERS                  = 2.
    ENDFORM.
          FORM convert_spool_to_pdf                                     *
    FORM convert_spool_to_pdf.
      CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
           EXPORTING
                src_spoolid              = gd_spool_nr
                no_dialog                = c_no
                dst_device               = c_device
           IMPORTING
                pdf_bytecount            = gd_bytecount
           TABLES
                pdf                      = it_pdf_output
           EXCEPTIONS
                err_no_abap_spooljob     = 1
                err_no_spooljob          = 2
                err_no_permission        = 3
                err_conv_not_possible    = 4
                err_bad_destdevice       = 5
                user_cancelled           = 6
                err_spoolerror           = 7
                err_temseerror           = 8
                err_btcjob_open_failed   = 9
                err_btcjob_submit_failed = 10
                err_btcjob_close_failed  = 11
                OTHERS                   = 12.
      CHECK sy-subrc = 0.
    Transfer the 132-long strings to 255-long strings
      LOOP AT it_pdf_output.
        TRANSLATE it_pdf_output USING ' ~'.
        CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.
      ENDLOOP.
      TRANSLATE gd_buffer USING '~ '.
      DO.
        it_mess_att = gd_buffer.
        APPEND it_mess_att.
        SHIFT gd_buffer LEFT BY 255 PLACES.
        IF gd_buffer IS INITIAL.
          EXIT.
        ENDIF.
      ENDDO.
    ENDFORM.
          FORM process_email                                            *
    FORM process_email.
      DESCRIBE TABLE it_mess_att LINES gd_recsize.
      CHECK gd_recsize > 0.
      PERFORM send_email USING p_email1.
    perform send_email using p_email2.
    ENDFORM.
          FORM send_email                                               *
    -->  p_email                                                       *
    FORM send_email USING p_email.
      CHECK NOT ( p_email IS INITIAL ).
      REFRESH it_mess_bod.
    Default subject matter
      gd_subject         = 'Branch Revenue'.
      gd_attachment_desc = 'Branch Revenue'.
    CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.
      it_mess_bod        = 'Branch Revenue,Profit and Commissions'.
      APPEND it_mess_bod.
    it_mess_bod        = 'Message Body text, line 2...'.
    APPEND it_mess_bod.
    If no sender specified - default blank
    IF p_sender EQ space.
       gd_sender_type  = space.
    ELSE.
       gd_sender_type  = 'INT'.
    ENDIF.
    Send file by email as .xls speadsheet
      PERFORM send_file_as_email_attachment
                                   tables it_mess_bod
                                          it_mess_att
                                    using p_email
                                          'Branch Revenue'
                                          'PDF'
                                          gd_attachment_name
                                          gd_attachment_desc
                                         p_sender
                                         gd_sender_type
                                 changing gd_error
                                          gd_reciever.
    ENDFORM.
          FORM delete_spool                                             *
    FORM delete_spool.
      DATA: ld_spool_nr TYPE tsp01_sp0r-rqid_char.
      ld_spool_nr = gd_spool_nr.
      CHECK p_delspl <> c_no.
      CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
           EXPORTING
                spoolid = ld_spool_nr.
    ENDFORM.
    *&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
          Send email
    FORM send_file_as_email_attachment tables it_message
                                              it_attach
                                        using p_email
                                              p_mtitle
                                              p_format
                                              p_filename
                                              p_attdescription
                                             p_sender_address
                                             p_sender_addres_type
                                     changing p_error
                                              p_reciever.
      DATA: ld_error    TYPE sy-subrc,
            ld_reciever TYPE sy-subrc,
            ld_mtitle LIKE sodocchgi1-obj_descr,
            ld_email LIKE  somlreci1-receiver,
            ld_format TYPE  so_obj_tp ,
            ld_attdescription TYPE  so_obj_nam ,
            ld_attfilename TYPE  so_obj_des ,
           ld_sender_address LIKE  soextreci1-receiver,
           ld_sender_address_type LIKE  soextreci1-adr_typ,
            ld_receiver LIKE  sy-subrc.
    data:   t_packing_list like sopcklsti1 occurs 0 with header line,
            t_contents like solisti1 occurs 0 with header line,
            t_receivers like somlreci1 occurs 0 with header line,
            t_attachment like solisti1 occurs 0 with header line,
            t_object_header like solisti1 occurs 0 with header line,
            w_cnt type i,
            w_sent_all(1) type c,
            w_doc_data like sodocchgi1.
      ld_email   = p_email.
      ld_mtitle = p_mtitle.
      ld_format              = p_format.
      ld_attdescription      = p_attdescription.
      ld_attfilename         = p_filename.
    ld_sender_address      = p_sender_address.
    ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
      w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
      w_doc_data-obj_langu = sy-langu.
      w_doc_data-obj_name  = 'SAPRPT'.
      w_doc_data-obj_descr = ld_mtitle .
      w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
      CLEAR w_doc_data.
      READ TABLE it_attach INDEX w_cnt.
      w_doc_data-doc_size =
         ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
      w_doc_data-obj_langu  = sy-langu.
      w_doc_data-obj_name   = 'SAPRPT'.
      w_doc_data-obj_descr  = ld_mtitle.
      w_doc_data-sensitivty = 'F'.
      CLEAR t_attachment.
      REFRESH t_attachment.
      t_attachment[] = it_attach[].
    Describe the body of the message
      CLEAR t_packing_list.
      REFRESH t_packing_list.
      t_packing_list-transf_bin = space.
      t_packing_list-head_start = 1.
      t_packing_list-head_num = 0.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE it_message LINES t_packing_list-body_num.
      t_packing_list-doc_type = 'RAW'.
      APPEND t_packing_list.
    Create attachment notification
      t_packing_list-transf_bin = 'X'.
      t_packing_list-head_start = 1.
      t_packing_list-head_num   = 1.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
      t_packing_list-doc_type   =  ld_format.
      t_packing_list-obj_descr  =  ld_attdescription.
      t_packing_list-obj_name   =  ld_attfilename.
      t_packing_list-doc_size   =  t_packing_list-body_num * 255.
      APPEND t_packing_list.
    Add the recipients email address
      CLEAR t_receivers.
      REFRESH t_receivers.
      t_receivers-receiver = ld_email.
      t_receivers-rec_type = 'U'.
      t_receivers-com_type = 'INT'.
      t_receivers-notif_del = 'X'.
      t_receivers-notif_ndel = 'X'.
      APPEND t_receivers.
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
           EXPORTING
                document_data              = w_doc_data
                put_in_outbox              = 'X'
               sender_address             = ld_sender_address
               sender_address_type        = ld_sender_address_type
                commit_work                = 'X'
           IMPORTING
                sent_to_all                = w_sent_all
           TABLES
                packing_list               = t_packing_list
                contents_bin               = t_attachment
                contents_txt               = it_message
                receivers                  = t_receivers
           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
                OTHERS                     = 8.
    Populate zerror return code
      ld_error = sy-subrc.
    Populate zreceiver return code
      LOOP AT t_receivers.
        ld_receiver = t_receivers-retrn_code.
      ENDLOOP.
    ENDFORM.
    Thanks in advance.....

    Hi
      Below is the code I was used to convert the sap script( Sales Order) to convert to PDf and send as an attachment.
    Dev/UDD Id :  EUR-770416                                             *
    Author     :  M.Sreeram Kumar                                        *
    Date       :  08-Apr-07                                              *
    Request    :  DU1K933766
    Description:  Send an order confirmation to the multiple user in a   *
                  PDF format via Email.                                  *
    Change Log                                                           *
    Author      :                                                        *
    Date        :                                                        *
    Description :                                                        *
    Request     :                                                        *
                 Print of an order confirmation by SAPscript
    REPORT zrep_email LINE-COUNT 100 MESSAGE-ID vn.
    TABLES: komk,                          "Communicationarea for conditions
            komp,                          "Communicationarea for conditions
            komvd,                         "Communicationarea for conditions
            vbco3,                         "Communicationarea for view
            vbdka,                         "Headerview
            vbdpa,                         "Itemview
            vbdpau,                        "Subitemnumbers
            conf_out,                      "Configuration data
            sadr,                          "Addresses
            tvag,                          "Reason for rejection
            vedka,                         "Servicecontract head data
            vedpa,                         "Servicecontract position data
            vedkn,                         "Servicecontract head notice data
            vedpn,                         "Servicecontract pos. notice data
            vbpa,                          "Sales Document: Partner
            kna1,                          "General Data in Customer Master
            riserls,                       "Serialnumbers
            komser,                        "Serialnumbers for print
            tvbur,                         "Sales office
            tvko,                          "Sales organisation
            adrs,                          "Communicationarea for Address
            fpltdr.                        "billing schedules
    INCLUDE zrep_rvadtabl.
    *INCLUDE yzrvadtabl.
    *INCLUDE RVADTABL.
    INCLUDE zrep_rvdirekt.
    *INCLUDE yzrvdirekt.
    *INCLUDE RVDIREKT.
    INCLUDE zrep_vedadata.
    *INCLUDE yzvedadata.
    *INCLUDE VEDADATA.
    DATA: retcode   LIKE sy-subrc.         "Returncode
    DATA: repeat(1) TYPE c.
    DATA: xscreen(1) TYPE c.               "Output on printer or screen
    DATA: BEGIN OF steu,                   "Controldata for output
            vdkex(1) TYPE c,
            vdpex(1) TYPE c,
            kbkex(1) TYPE c,
            kbpex(1) TYPE c,
          END OF steu.
    DATA: BEGIN OF tvbdpa OCCURS 0.        "Internal table for items
            INCLUDE STRUCTURE vbdpa.
    DATA: END OF tvbdpa.
    DATA: BEGIN OF tkomv OCCURS 50.
            INCLUDE STRUCTURE komv.
    DATA: END OF tkomv.
    DATA: BEGIN OF tkomvd OCCURS 50.
            INCLUDE STRUCTURE komvd.
    DATA: END OF tkomvd.
    DATA: BEGIN OF tvbdpau OCCURS 5.
            INCLUDE STRUCTURE vbdpau.
    DATA: END   OF tvbdpau.
    DATA: BEGIN OF tkomcon OCCURS 50.
            INCLUDE STRUCTURE conf_out.
    DATA: END   OF tkomcon.
    DATA: BEGIN OF tkomservh OCCURS 1.
            INCLUDE STRUCTURE vedka.
    DATA: END   OF tkomservh.
    DATA: BEGIN OF tkomservp OCCURS 5.
            INCLUDE STRUCTURE vedpa.
    DATA: END   OF tkomservp.
    DATA: BEGIN OF tkomservhn OCCURS 5.
            INCLUDE STRUCTURE vedkn.
    DATA: END   OF tkomservhn.
    DATA: BEGIN OF tkomservpn OCCURS 5.
            INCLUDE STRUCTURE vedpn.
    DATA: END   OF tkomservpn.
    DATA: BEGIN OF tkomser OCCURS 5.
            INCLUDE STRUCTURE riserls.
    DATA: END   OF tkomser.
    DATA: BEGIN OF tkomser_print OCCURS 5.
            INCLUDE STRUCTURE komser.
    DATA: END   OF tkomser_print.
    DATA: BEGIN OF tfpltdr OCCURS 5.
            INCLUDE STRUCTURE fpltdr.
    DATA: END   OF tfpltdr.
    DATA: pr_kappl(01)   TYPE c VALUE 'V'. "Application for pricing
    DATA: BEGIN OF char_val OCCURS 0,
            atnam LIKE cabn-atnam,
            atwrt LIKE ausp-atwrt,
          END OF char_val.
    FORM entry USING return_code us_screen.
      CLEAR retcode.
      xscreen = us_screen.
      PERFORM processing.
      IF retcode NE 0.
        return_code = 1.
      ELSE.
        return_code = 0.
      ENDIF.
    ENDFORM.                    "ENTRY
          FORM PROCESSING                                               *
    FORM processing.
      PERFORM get_data.
      CHECK retcode = 0.
      PERFORM form_open USING xscreen vbdka-land1.
      CHECK retcode = 0.
      PERFORM logo_selection.
    PERFORM form_title_print.
      CHECK retcode = 0.
      PERFORM write_header_info.
      PERFORM validity_print.
      CHECK retcode = 0.
      PERFORM header_data_print.
      CHECK retcode = 0.
      PERFORM header_serv_print.
      CHECK retcode = 0.
      PERFORM header_notice_print.
      CHECK retcode = 0.
      PERFORM header_inter_print.
      CHECK retcode = 0.
      PERFORM header_text_print.
      CHECK retcode = 0.
      PERFORM item_print.
      CHECK retcode = 0.
      PERFORM end_print.
      CHECK retcode = 0.
      PERFORM form_close.
      CHECK retcode = 0.
      PERFORM zemail_process.
    ENDFORM.                    "PROCESSING
          S U B R O U T I N E S                                         *
          FORM ALTERNATIVE_ITEM                                         *
          A text is printed, if the item is an alternative item.        *
    FORM alternative_item.
      CHECK vbdpa-grpos CN '0'.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ALTERNATIVE_ITEM'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ALTERNATIVE_ITEM
          FORM CHECK_REPEAT                                             *
          A text is printed, if it is a repeat print for the document.  *
    FORM check_repeat.
      CLEAR repeat.
      SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
                                    AND   objky = nast-objky
                                    AND   kschl = nast-kschl
                                    AND   spras = nast-spras
                                    AND   parnr = nast-parnr
                                    AND   parvw = nast-parvw
                                    AND   nacha BETWEEN '1' AND '4'.
        CHECK *nast-vstat = '1'.
        repeat = 'X'.
        EXIT.
      ENDSELECT.
    ENDFORM.                    "CHECK_REPEAT
          FORM DELIVERY_DATE                                            *
          If the delivery date in the item is different to the header   *
          date and there are no scheduled quantities, the delivery date *
          is printed in the item block.                                 *
    FORM delivery_date.
      IF vbdka-lfdat =  space AND
         vbdpa-lfdat NE space AND
         vbdpa-etenr_da = space.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_DELIVERY_DATE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "DELIVERY_DATE
          FORM DIFFERENT_CONSIGNEE                                      *
          If the consignee in the item is different to the header con-  *
          signee, it is printed by this routine.                        *
    FORM different_consignee.
      CHECK vbdka-name1_we NE vbdpa-name1_we
        OR  vbdka-name2_we NE vbdpa-name2_we
        OR  vbdka-name3_we NE vbdpa-name3_we
        OR  vbdka-name4_we NE vbdpa-name4_we.
      CHECK vbdpa-name1_we NE space
        OR  vbdpa-name2_we NE space
        OR  vbdpa-name3_we NE space
        OR  vbdpa-name4_we NE space.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_CONSIGNEE'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "DIFFERENT_CONSIGNEE
          FORM DIFFERENT_REFERENCE_NO                                   *
          If the reference number in the item is different to the header*
          reference number, it is printed by this routine.              *
    FORM different_reference_no.
      CHECK vbdpa-vbeln_vang NE vbdka-vbeln_vang
        OR  vbdpa-vbtyp_vang NE vbdka-vbtyp_vang.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_REFERENCE_NO'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "DIFFERENT_REFERENCE_NO
          FORM DIFFERENT_TERMS                                          *
          If the terms in the item are different to the header terms,   *
          they are printed by this routine.                             *
    FORM different_terms.
      DATA: us_vposn   LIKE vedpa-vposn.
      DATA: us_text(1) TYPE c.             "Flag for Noticetext was printed
      IF vbdpa-zterm NE vbdka-zterm AND
         vbdpa-zterm NE space.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_TERMS_OF_PAYMENT'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
      IF vbdpa-inco1 NE space.
        IF vbdpa-inco1 NE vbdka-inco1 OR
           vbdpa-inco2 NE vbdka-inco2.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_DELIVERY'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ENDIF.
      ENDIF.
    Print different validity-data for the position
      READ TABLE tkomservp WITH KEY vbdpa-posnr.
      IF sy-subrc EQ 0.
        vedpa = tkomservp.
        IF vedpa-vbegdat NE space       AND
           vedpa-venddat NE space       AND
           NOT vedpa-vbegdat IS INITIAL AND
           NOT vedpa-venddat IS INITIAL.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_SERV1'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ELSEIF vedpa-vbegdat NE space AND
               NOT vedpa-vbegdat IS INITIAL.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_SERV2'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_SERV3'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ENDIF.
      ENDIF.
    Notice-rules for the positions.
      MOVE vbdpa-posnr TO us_vposn.
      CLEAR us_text.
      LOOP AT tkomservpn WHERE vposn = us_vposn.
        vedpn = tkomservpn.
        IF us_text IS INITIAL.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_NOTTXT'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
          us_text = charx.
        ENDIF.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_TERMS_OF_NOTICE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDLOOP.
      IF NOT us_text IS INITIAL.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'EMPTY_LINE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "DIFFERENT_TERMS
          FORM END_PRINT                                                *
    FORM end_print.
      PERFORM get_header_prices.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'PROTECT'.
      PERFORM header_price_print.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'END_VALUES'.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'ENDPROTECT'.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'SUPPLEMENT_TEXT'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "END_PRINT
          FORM FORM_CLOSE                                               *
          End of printing the form                                      *
    FORM form_close.
    CALL FUNCTION 'CLOSE_FORM'
       EXCEPTIONS
         OTHERS = 1.
      CALL FUNCTION 'CLOSE_FORM'
    IMPORTING
      RESULT                         =
      RDI_RESULT                     =
       TABLES
         otfdata                        = t_otfdata
    EXCEPTIONS
      UNOPENED                       = 1
      BAD_PAGEFORMAT_FOR_PRINT       = 2
      SEND_ERROR                     = 3
      SPOOL_ERROR                    = 4
      CODEPAGE                       = 5
       OTHERS                         = 1.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
        retcode = 1.
      ENDIF.
      SET COUNTRY space.
    ENDFORM.                    "FORM_CLOSE
          FORM FORM_OPEN                                                *
          Start of printing the form                                    *
    -->  US_SCREEN  Output on screen                                   *
                     ' ' = printer                                      *
                     'X' = screen                                       *
    -->  US_COUNTRY County for telecommunication and SET COUNTRY       *
    FORM form_open USING us_screen us_country.
      INCLUDE zrep_rvadopfo.
    INCLUDE yzrvadopfo.
    INCLUDE RVADOPFO.
    ENDFORM.                    "FORM_OPEN
          FORM FORM_TITLE_PRINT                                         *
          Printing of the form title depending of the field VBTYP       *
    FORM form_title_print.
      CASE vbdka-vbtyp.
        WHEN 'A'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_A'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'B'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_B'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'C'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_C'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'E'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_E'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'F'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_F'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'G'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_F'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'H'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_H'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'K'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_K'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'L'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_L'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN OTHERS.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_OTHERS'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
      ENDCASE.
      IF repeat NE space.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'REPEAT'
            window  = 'REPEAT'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "FORM_TITLE_PRINT
          FORM GET_DATA                                                 *
          General provision of data for the form                        *
    FORM get_data.
      DATA: us_veda_vbeln     LIKE veda-vbeln.
      DATA: us_veda_posnr_low LIKE veda-vposn.
      CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
        TABLES
          tkomv = tkomv.
      CLEAR komk.
      CLEAR komp.
      vbco3-mandt = sy-mandt.
      vbco3-spras = nast-spras.
      vbco3-vbeln = nast-objky.
      vbco3-kunde = nast-parnr.
      vbco3-parvw = nast-parvw.
      CALL FUNCTION 'RV_DOCUMENT_PRINT_VIEW'
        EXPORTING
          comwa = vbco3
        IMPORTING
          kopf  = vbdka
        TABLES
          pos   = tvbdpa.
    Fetch servicecontract-data and notice-data for head and position.
      us_veda_vbeln     = vbdka-vbeln.
      us_veda_posnr_low = posnr_low.
      CALL FUNCTION 'SD_VEDA_GET_PRINT_DATA'
        EXPORTING
          i_document_number = us_veda_vbeln
          i_language        = sy-langu
          i_posnr_low       = us_veda_posnr_low
        TABLES
          print_data_pos    = tkomservp
          print_data_head   = tkomservh
          print_notice_pos  = tkomservpn
          print_notice_head = tkomservhn.
      PERFORM get_controll_data.
      PERFORM sender.
      PERFORM check_repeat.
      PERFORM tvbdpau_create.
    ENDFORM.                    "GET_DATA
          FORM GET_ITEM_BILLING_SCHEDULES                               *
          In this routine the billing schedules are fetched from the    *
          database.                                                     *
    FORM get_item_billing_schedules.
      REFRESH tfpltdr.
      CHECK NOT vbdpa-fplnr IS INITIAL.
      CALL FUNCTION 'BILLING_SCHED_PRINTVIEW_READ'
        EXPORTING
          i_fplnr    = vbdpa-fplnr
          i_language = nast-spras
        TABLES
          zfpltdr    = tfpltdr.
    ENDFORM.                    "GET_ITEM_BILLING_SCHEDULES
    *&      Form  ITEM_BILLING_SCHEDULES_PRINT
          This routine prints the billing shedules of a salesdocument    *
          position.                                                      *
    FORM  item_billing_schedules_print.
      DATA: first_line(1) TYPE c.
      first_line = charx.
      LOOP AT tfpltdr.
        fpltdr = tfpltdr.
      Output of the following printlines
        IF NOT fpltdr-perio IS INITIAL.
        periodische Fakturen
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_BILLING_SCHEDULE_PERIODIC'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        bei periodischen nur eine Zeile
          EXIT.
        ELSEIF fpltdr-fareg CA '14'.
        prozentuale Teilfakturierung
          IF NOT first_line IS INITIAL.
            CLEAR first_line.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_PERCENT_HEADER'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ELSE.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_PERCENT'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ENDIF.
        ELSEIF fpltdr-fareg CA '235'.
        wertmäßige  Teilfakturierung
          IF NOT first_line IS INITIAL.
            CLEAR first_line.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_VALUE_HEADER'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ELSE.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_VALUE'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ENDIF.
        ELSEIF fpltdr-fareg CA '3'.
        Schlußrechnung
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "ITEM_BILLING_SCHEDULES_PRINT
    *eject
          FORM GET_ITEM_CHARACTERISTICS                                 *
          In this routine the configuration data item is fetched from   *
          the database.                                                 *
    FORM get_item_characteristics.
      REFRESH tkomcon.
      CHECK NOT vbdpa-cuobj IS INITIAL.
      CALL FUNCTION 'CUD0_GET_CONFIGURATION'                    "#EC EXISTS
        EXPORTING
          instance      = vbdpa-cuobj
          language      = nast-spras
        TABLES
          configuration = tkomcon
        EXCEPTIONS
          OTHERS        = 4.
    ENDFORM.                    "GET_ITEM_CHARACTERISTICS
          FORM GET_ITEM_PRICES                                          *
          In this routine the price data for the item is fetched from   *
          the database.                                                 *
    FORM get_item_prices.
      CLEAR: komp,
             tkomv.
      IF komk-knumv NE vbdka-knumv.
        CLEAR komk.
        komk-mandt = sy-mandt.
        komk-kalsm = vbdka-kalsm.
        komk-kappl = pr_kappl.
        komk-waerk = vbdka-waerk.
        komk-knumv = vbdka-knumv.
        komk-vbtyp = vbdka-vbtyp.
      ENDIF.
      komp-kposn = vbdpa-posnr.
      CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
        EXPORTING
          comm_head_i = komk
          comm_item_i = komp
          language    = nast-spras
        IMPORTING
          comm_head_e = komk
          comm_item_e = komp
        TABLES
          tkomv       = tkomv
          tkomvd      = tkomvd.
    ENDFORM.                    "GET_ITEM_PRICES
          FORM GET_HEADER_PRICES                                        *
          In this routine the price data for the header is fetched from *
          the database.                                                 *
    FORM get_header_prices.
      CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
        EXPORTING
          comm_head_i = komk
          language    = nast-spras
        IMPORTING
          comm_head_e = komk
        TABLES
          tkomv       = tkomv
          tkomvd      = tkomvd.
    ENDFORM.                    "GET_HEADER_PRICES
    *&      Form  HEADER_DATA_PRINT
          Printing of header data like terms, weights ....               *
    FORM header_data_print.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'HEADER_DATA'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                               " HEADER_DATA_PRINT
          FORM HEADER_PRICE_PRINT                                       *
          Printout of the header prices                                 *
    FORM header_price_print.
      LOOP AT tkomvd.
        AT FIRST.
          IF komk-supos NE 0.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_SUM'.
          ELSE.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'UNDER_LINE'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ENDIF.
        ENDAT.
        komvd = tkomvd.
        IF komvd-koaid = 'D'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TAX_LINE'.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'SUM_LINE'.
        ENDIF.
      ENDLOOP.
      DESCRIBE TABLE tkomvd LINES sy-tfill.
      IF sy-tfill = 0.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'UNDER_LINE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "HEADER_PRICE_PRINT
          FORM HEADER_TEXT_PRINT                                        *
          Printout of the headertexts                                   *
    FORM header_text_print.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'HEADER_TEXT'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "HEADER_TEXT_PRINT
          FORM ITEM_CHARACERISTICS_PRINT                                *
          Printout of the item characteristics -> configuration         *
    FORM item_characteristics_print.
      LOOP AT tkomcon.
        conf_out = tkomcon.
        IF sy-tabix = 1.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_CONFIGURATION_HEADER'
            EXCEPTIONS
              OTHERS  = 1.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_CONFIGURATION'
            EXCEPTIONS
              OTHERS  = 1.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "ITEM_CHARACTERISTICS_PRINT
          FORM ITEM_DELIVERY_CONFIRMATION                               *
          If the delivery date is not confirmed, a text is printed      *
    FORM item_delivery_confirmation.
      CHECK vbdpa-lfdat = space.
      CHECK vbdpa-kwmeng NE 0.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_DELIVERY_CONFIRMATION'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ITEM_DELIVERY_CONFIRMATION
          FORM ITEM_PRICE_PRINT                                         *
          Printout of the item prices                                   *
    FORM item_price_print.
      LOOP AT tkomvd.
        komvd = tkomvd.
        IF sy-tabix = 1.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_PRICE_QUANTITY'.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_PRICE_TEXT'.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "ITEM_PRICE_PRINT
          FORM ITEM_PRINT                                               *
          Printout of the items                                         *
    FORM item_print.
      DATA: da_subrc LIKE sy-subrc,
            da_dragr LIKE tvag-dragr.
      CALL FUNCTION 'WRITE_FORM'           "First header
           EXPORTING  element = 'ITEM_HEADER'
           EXCEPTIONS OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
      CALL FUNCTION 'WRITE_FORM'           "Activate header
           EXPORTING  element = 'ITEM_HEADER'
                      type    = 'TOP'
           EXCEPTIONS OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
      LOOP AT tvbdpa.
        vbdpa = tvbdpa.
      TVAG lesen um festzustellen ob abgesagte Positionen gedruckt werden
      sollen
        PERFORM tvag_select(sapmv45a) USING vbdpa-abgru
                                            da_dragr
                                            space
                                            da_subrc.
        IF da_dragr EQ space.              "Print rejected item?
          IF vbdpa-posnr_neu NE space.     "Item
            PERFORM get_item_serials.
            PERFORM get_item_characteristics.
            PERFORM get_item_billing_schedules.
            PERFORM get_item_prices.
            CALL FUNCTION 'CONTROL_FORM'
              EXPORTING
                command = 'ENDPROTECT'.
            CALL FUNCTION 'CONTROL_FORM'
              EXPORTING
                command = 'PROTECT'.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_LINE'.
            PERFORM item_rejected.
            PERFORM item_price_print.
            CALL FUNCTION 'CONTROL_FORM'
              EXPORTING
                command = 'ENDPROTECT'.
            PERFORM item_text_print.
            PERFORM item_serials_print.
            PERFORM item_characteristics_print.
            PERFORM alternative_item.
            PERFORM delivery_date.
            PERFORM item_delivery_confirmation.
            PERFORM item_billing_schedules_print.
            PERFORM different_reference_no.
            PERFORM different_terms.
            PERFORM different_consignee.
            PERFORM schedule_header.
            PERFORM main_item.
          ELSE.
            PERFORM schedule_print.
          ENDIF.
        ENDIF.
      ENDLOOP.
      CALL FUNCTION 'WRITE_FORM'           "Deactivate Header
           EXPORTING  element  = 'ITEM_HEADER'
                      function = 'DELETE'
                      type     = 'TOP'
           EXCEPTIONS OTHERS   = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ITEM_PRINT
          FORM ITEM_REJECTED                                            *
          A text is printed, if the item is rejected                    *
    FORM item_rejected.
      CHECK NOT vbdpa-abgru IS INITIAL.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_REJECTED'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ITEM_REJECTED
          FORM MAIN_ITEM                                                *
          A text is printed, if the item is a main item                 *

  • FM to read PO conditons

    Dear all,
    I´m looking for a function module to read the all purchase order conditions at the header and items.
    I will appreciate if someone can help me to find it.
    Thanks in advance.
    Mariano.

    Use FM
    RV_PRICE_PRINT_HEAD - for Header
    RV_PRICE_PRINT_ITEM - For Item
    Regards,
    Naimesh Patel

  • It's very urgent i need help in smartforms

    I need your help for smartforms. I created a smartforms in SD for getting quotations. My problem is that when I run da report it is not executing & if i run smartforms it is giving error in da functional module as - In program "/1BCDWB/SAPLSF00000003 ", the following syntax error occurred:
    "The data object "I_HEADER" does not have a component called "BNAME"."
    and more over i need a code for my my user tht when i execute this form before displaying print or printpreview i should give a popup window asking da user whether to display item code or not then i should get da print or printpreview. when the user needs item code he can print as well if he don't it should not display. this da code i return in se38 editor. In smartforms i wrote code for getting company address etc. I did not write anything in initialization.
    source code
    *& Application      :  Sales & Distribution (SD)
    *& Description      :  This report will Print Sales Order Confirmation Using Smartform
    *& Transaction Code :
    *& Area Menu Code   :  ZSD
    *& Layout           :  ZSDORDERCONF
    *& Dev.Complited On :
    REPORT  ZSDR0004.
    INCLUDE: ZSDI0003.
          S U B R O U T I N E S                                         *
    FORM ENTRY USING RETURN_CODE TYPE I
                     US_SCREEN TYPE C.
      CLEAR RETCODE.
      XSCREEN = US_SCREEN.
      PERFORM PROCESSING.
      IF RETCODE NE 0.
        RETURN_CODE = 1.
      ELSE.
        RETURN_CODE = 0.
      ENDIF.
    ENDFORM.                    "ENTRY
          FORM PROCESSING                                               *
    FORM PROCESSING.
      PERFORM GET_DATA.
      CHECK RETCODE = 0.
      PERFORM PRINT_DATA.
      CHECK RETCODE = 0.
    ENDFORM.                    "PROCESSING
          FORM CHECK_REPEAT                                             *
          A text is printed, if it is a repeat print for the document.  *
    FORM CHECK_REPEAT.
      CLEAR REPEAT.
      SELECT * INTO *NAST FROM NAST WHERE KAPPL = NAST-KAPPL
                                    AND   OBJKY = NAST-OBJKY
                                    AND   KSCHL = NAST-KSCHL
                                    AND   SPRAS = NAST-SPRAS
                                    AND   PARNR = NAST-PARNR
                                    AND   PARVW = NAST-PARVW
                                    AND   NACHA BETWEEN '1' AND '4'.
        CHECK *NAST-VSTAT = '1'.
        REPEAT = 'X'.
        EXIT.
      ENDSELECT.
    ENDFORM.                    "CHECK_REPEAT
          FORM GET_DATA                                                 *
          General provision of data for the form                        *
    FORM GET_DATA.
      DATA: US_VEDA_VBELN     LIKE VEDA-VBELN.
      DATA: US_VEDA_POSNR_LOW LIKE VEDA-VPOSN.
      DATA: DA_MESS LIKE VBFS OCCURS 0 WITH HEADER LINE.
      DATA: DA_SUBRC LIKE SY-SUBRC,
            DA_DRAGR LIKE TVAG-DRAGR.
      DATA: DA_GANF(1) TYPE C,      "Print flag for billing correction
            DA_LANF(1) TYPE C.      "Print flag for billing correction
      CALL FUNCTION 'RV_PRICE_PRINT_GET_MODE'
        IMPORTING
          E_PRINT_MODE = PRICE_PRINT_MODE.
      IF PRICE_PRINT_MODE EQ CHARA.
        CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
          TABLES
            TKOMV = TKOMV.
      ENDIF.
      CLEAR KOMK.
      CLEAR KOMP.
      VBCO3-MANDT = SY-MANDT.
      VBCO3-SPRAS = NAST-SPRAS.
      VBCO3-VBELN = NAST-OBJKY.
      VBCO3-KUNDE = NAST-PARNR.
      VBCO3-PARVW = NAST-PARVW.
      CALL FUNCTION 'RV_DOCUMENT_PRINT_VIEW'
        EXPORTING
          COMWA                       = VBCO3
        IMPORTING
          KOPF                        = VBDKA
        TABLES
          POS                         = TVBDPA
          MESS                        = DA_MESS
        EXCEPTIONS
          FEHLER_BEI_DATENBESCHAFFUNG = 1.
      IF SY-SUBRC NE 0.
        PERFORM PROTOCOL_UPDATE.
        RETCODE = 1.
        EXIT.
      ELSE.
        LOOP AT DA_MESS.
          SY-MSGID = DA_MESS-MSGID.
          SY-MSGNO = DA_MESS-MSGNO.
          SY-MSGTY = DA_MESS-MSGTY.
          SY-MSGV1 = DA_MESS-MSGV1.
          SY-MSGV2 = DA_MESS-MSGV2.
          SY-MSGV3 = DA_MESS-MSGV3.
          SY-MSGV4 = DA_MESS-MSGV4.
          PERFORM PROTOCOL_UPDATE.
        ENDLOOP.
      ENDIF.
    *Get Header Data In I_HEADER Table.
      SELECT VBAKVBELN VBAKAUDAT VBAKKUNNR VBAKWAERK
             VBAKVKORG VBAKANGDT VBAKBNDDT VBAKVBTYP
             VBAKKNUMV VBAKKALSM VBAKNETWR VBAKVKBUR
             VBAKBNAME VBKDBSTKD VBKDBSTDK VBKDINCO1
             VBKDINCO2 VBKDZTERM
             INTO CORRESPONDING FIELDS OF TABLE I_HEADER
             FROM VBAK
             JOIN VBKD ON VBKDVBELN = VBAKVBELN
             WHERE VBAK~VBELN = VBCO3-VBELN.
    **Get Address Number For Company
      IF NOT I_HEADER[] IS INITIAL.
        READ TABLE I_HEADER INDEX 1.
        SELECT SINGLE BUKRS ADRNR INTO (COMPCD, ADDCOMP)
             FROM TVKO
             WHERE VKORG = I_HEADER-VKORG.
      ENDIF.
    fill address key --> necessary for emails
      ADDR_KEY-ADDRNUMBER = VBDKA-ADRNR.
      ADDR_KEY-PERSNUMBER = VBDKA-ADRNP.
      ADDR_KEY-ADDR_TYPE  = VBDKA-ADDRESS_TYPE.
    Fetch servicecontract-data and notice-data for head and position.
      US_VEDA_VBELN     = VBDKA-VBELN.
      US_VEDA_POSNR_LOW = POSNR_LOW.
      CALL FUNCTION 'SD_VEDA_GET_PRINT_DATA'
        EXPORTING
          I_DOCUMENT_NUMBER = US_VEDA_VBELN
          I_LANGUAGE        = SY-LANGU
          I_POSNR_LOW       = US_VEDA_POSNR_LOW
        TABLES
          PRINT_DATA_POS    = TKOMSERVP
          PRINT_DATA_HEAD   = TKOMSERVH
          PRINT_NOTICE_POS  = TKOMSERVPN
          PRINT_NOTICE_HEAD = TKOMSERVHN.
      PERFORM GET_CONTROLL_DATA.
      PERFORM SENDER.
      PERFORM CHECK_REPEAT.
      LOOP AT TVBDPA.
        VBDPA = TVBDPA.
        IF VBDPA-DRAGR EQ SPACE.           "Print rejected item?
          IF VBDPA-POSNR_NEU NE SPACE.     "Item
            PERFORM GET_ITEM_SERIALS.
            PERFORM GET_ITEM_CHARACTERISTICS.
            PERFORM GET_ITEM_BILLING_SCHEDULES.
            PERFORM GET_ITEM_PRICES.
            PERFORM GET_ITEM_ADDIS.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "GET_DATA
          FORM GET_ITEM_BILLING_SCHEDULES                               *
          In this routine the billing schedules are fetched from the    *
          database.                                                     *
    FORM GET_ITEM_BILLING_SCHEDULES.
      REFRESH TFPLTDR.
      CHECK NOT VBDPA-FPLNR IS INITIAL.
      CALL FUNCTION 'BILLING_SCHED_PRINTVIEW_READ'
        EXPORTING
          I_FPLNR    = VBDPA-FPLNR
          I_LANGUAGE = NAST-SPRAS
          I_VBELN    = VBDKA-VBELN
        TABLES
          ZFPLTDR    = TFPLTDR.
    ENDFORM.                    "GET_ITEM_BILLING_SCHEDULES
    *&      FORM  GET_ITEM_ADDIS
          Additionals data are fetched from database
    FORM GET_ITEM_ADDIS.
      CLEAR: TADDI_PRINT.
      CALL FUNCTION 'WTAD_ADDIS_IN_SO_PRINT'
           EXPORTING
                FI_VBELN              = VBDKA-VBELN
                FI_POSNR              = VBDPA-POSNR
              FI_LANGUAGE           = SY-LANGU
           TABLES
                FET_ADDIS_IN_SO_PRINT = TADDI_PRINT
           EXCEPTIONS
                ADDIS_NOT_ACTIVE      = 1
                NO_ADDIS_FOR_SO_ITEM  = 2
                OTHERS                = 3.
    ENDFORM.                               " GET_ITEM_ADDIS
          FORM GET_ITEM_CHARACTERISTICS                                 *
          In this routine the configuration data item is fetched from   *
          the database.                                                 *
    FORM GET_ITEM_CHARACTERISTICS.
      DATA DA_T_CABN LIKE CABN OCCURS 10 WITH HEADER LINE.
      DATA: BEGIN OF DA_KEY,
              MANDT LIKE CABN-MANDT,
              ATINN LIKE CABN-ATINN,
            END   OF DA_KEY.
      REFRESH TKOMCON.
      CHECK NOT VBDPA-CUOBJ IS INITIAL AND
                VBDPA-ATTYP NE VAR_TYP.
      CALL FUNCTION 'VC_I_GET_CONFIGURATION'
        EXPORTING
          INSTANCE      = VBDPA-CUOBJ
          LANGUAGE      = NAST-SPRAS
          PRINT_SALES   = CHARX
        TABLES
          CONFIGURATION = TKOMCON
        EXCEPTIONS
          OTHERS        = 4.
      RANGES : DA_IN_CABN FOR DA_T_CABN-ATINN.
    Beschreibung der Merkmale wegen Objektmerkmalen auf sdcom-vkond holen
      CLEAR DA_IN_CABN. REFRESH DA_IN_CABN.
      LOOP AT TKOMCON.
        DA_IN_CABN-OPTION = 'EQ'.
        DA_IN_CABN-SIGN   = 'I'.
        DA_IN_CABN-LOW    = TKOMCON-ATINN.
        APPEND DA_IN_CABN.
      ENDLOOP.
      CLEAR DA_T_CABN. REFRESH DA_T_CABN.
      CALL FUNCTION 'CLSE_SELECT_CABN'
       EXPORTING
            KEY_DATE                     = SY-DATUM
            BYPASSING_BUFFER             = ' '
            WITH_PREPARED_PATTERN        = ' '
            I_AENNR                      = ' '
       IMPORTING
            AMBIGUOUS_OBJ_CHARACTERISTIC =
         TABLES
              IN_CABN                      = DA_IN_CABN
              T_CABN                       = DA_T_CABN
         EXCEPTIONS
              NO_ENTRY_FOUND               = 1
              OTHERS                       = 2.
    Preisfindungsmerkmale / Merkmale auf VCSD_UPDATE herausnehmen
      SORT DA_T_CABN.
      LOOP AT TKOMCON.
        DA_KEY-MANDT = SY-MANDT.
        DA_KEY-ATINN = TKOMCON-ATINN.
        READ TABLE DA_T_CABN WITH KEY DA_KEY BINARY SEARCH.
        IF SY-SUBRC <> 0 OR
           ( ( DA_T_CABN-ATTAB = 'SDCOM' AND
              DA_T_CABN-ATFEL = 'VKOND'       ) OR
            ( DA_T_CABN-ATTAB = 'VCSD_UPDATE' ) ) .
          DELETE TKOMCON.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "GET_ITEM_CHARACTERISTICS
          FORM GET_ITEM_PRICES                                          *
          In this routine the price data for the item is fetched from   *
          the database.                                                 *
    FORM GET_ITEM_PRICES.
      CLEAR: KOMP,
             TKOMV.
      IF KOMK-KNUMV NE VBDKA-KNUMV OR
         KOMK-KNUMV IS INITIAL.
        CLEAR KOMK.
        KOMK-MANDT = SY-MANDT.
        KOMK-KALSM = VBDKA-KALSM.
        KOMK-KAPPL = PR_KAPPL.
        KOMK-WAERK = VBDKA-WAERK.
        KOMK-KNUMV = VBDKA-KNUMV.
        KOMK-KNUMA = VBDKA-KNUMA.
        KOMK-VBTYP = VBDKA-VBTYP.
        KOMK-LAND1 = VBDKA-LAND1.
        KOMK-VKORG = VBDKA-VKORG.
        KOMK-VTWEG = VBDKA-VTWEG.
        KOMK-SPART = VBDKA-SPART.
        KOMK-BUKRS = VBDKA-BUKRS_VF.
        KOMK-HWAER = VBDKA-WAERS.
        KOMK-PRSDT = VBDKA-ERDAT.
        KOMK-KURST = VBDKA-KURST.
        KOMK-KURRF = VBDKA-KURRF.
        KOMK-KURRF_DAT = VBDKA-KURRF_DAT.
      ENDIF.
      KOMP-KPOSN = VBDPA-POSNR.
      KOMP-KURSK = VBDPA-KURSK.
      KOMP-KURSK_DAT = VBDPA-KURSK_DAT.
      if vbdka-vbtyp ca 'HKNOT6'.
        if vbdpa-shkzg ca ' A'.
          komp-shkzg = 'X'.
        endif.
      else.
        if vbdpa-shkzg ca 'BX'.
          komp-shkzg = 'X'.
        endif.
      endif.
      IF PRICE_PRINT_MODE EQ CHARA.
        CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
          EXPORTING
            COMM_HEAD_I = KOMK
            COMM_ITEM_I = KOMP
            LANGUAGE    = NAST-SPRAS
          IMPORTING
            COMM_HEAD_E = KOMK
            COMM_ITEM_E = KOMP
          TABLES
            TKOMV       = TKOMV
            TKOMVD      = TKOMVD.
      ELSE.
        CALL FUNCTION 'RV_PRICE_PRINT_ITEM_BUFFER'
          EXPORTING
            COMM_HEAD_I = KOMK
            COMM_ITEM_I = KOMP
            LANGUAGE    = NAST-SPRAS
          IMPORTING
            COMM_HEAD_E = KOMK
            COMM_ITEM_E = KOMP
          TABLES
            TKOMV       = TKOMV
            TKOMVD      = TKOMVD.
      ENDIF.
    ENDFORM.                    "GET_ITEM_PRICES
          FORM GET_HEADER_PRICES                                        *
          In this routine the price data for the header is fetched from *
          the database.                                                 *
    FORM GET_HEADER_PRICES.
      LOOP AT TVBDPA.
        CALL FUNCTION 'SD_TAX_CODE_MAINTAIN'
          EXPORTING
            KEY_KNUMV           = VBDKA-KNUMV
            KEY_KPOSN           = TVBDPA-POSNR
            I_APPLICATION       = ' '
            I_PRICING_PROCEDURE = VBDKA-KALSM
          TABLES
            XKOMV               = TKOMV.
      ENDLOOP.
      IF PRICE_PRINT_MODE EQ CHARA.
        CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
          EXPORTING
            COMM_HEAD_I = KOMK
            LANGUAGE    = NAST-SPRAS
          IMPORTING
            COMM_HEAD_E = KOMK
          TABLES
            TKOMV       = TKOMV
            TKOMVD      = TKOMVD.
      ELSE.
        CALL FUNCTION 'RV_PRICE_PRINT_HEAD_BUFFER'
          EXPORTING
            COMM_HEAD_I = KOMK
            LANGUAGE    = NAST-SPRAS
          IMPORTING
            COMM_HEAD_E = KOMK
          TABLES
            TKOMV       = TKOMV
            TKOMVD      = TKOMVD.
      ENDIF.
    ENDFORM.                    "GET_HEADER_PRICES
          FORM PRINT_DATA                                               *
          Print Quotation                                               *
    FORM PRINT_DATA.
      DATA: ls_control       TYPE ssfctrlop.
      data: OUTPUT_OPTIONS TYPE  SSFCOMPOP,cf_retcode type sy-subrc.
      DATA: ls_print_data_to_read TYPE lbbil_print_data_to_read.
      DATA: ls_addr_key           LIKE addr_key.
      DATA: ls_dlv-land           LIKE vbrk-land1.
      DATA: ls_job_info           TYPE ssfcrescl.
      DATA: ls_control_param      TYPE ssfctrlop.
      DATA: ls_composer_param     TYPE ssfcompop.
      DATA: ls_recipient          TYPE swotobjid.
      DATA: ls_sender             TYPE swotobjid.
      DATA: NAST_ANZAL LIKE NAST-ANZAL.      "Number of outputs (Orig. + Cop.)
      DATA: NAST_TDARMOD LIKE NAST-TDARMOD.  "Archiving only one time
      DATA: ls_bil_invoice TYPE lbbil_invoice.
      SELECT SINGLE SFORM INTO LF_FORMNAME
            FROM TNAPR
            WHERE KSCHL = NAST-KSCHL
            AND   NACHA = NAST-NACHA.
    *IF NAST-KSCHL = 'ZORD'.
      lf_formname = 'ZSDORDERCONF'.
    *ELSEIF NAST-KSCHL = 'ZOR1'.
      lf_formname = 'ZSDORDERCONF'.
    *ELSEIF NAST-KSCHL = 'ZOR2'.
      lf_formname = 'ZCSORDERCONF'.
      ENDIF.
    determine smartform function module for invoice
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           = lf_formname
        IMPORTING
          fm_name            = lf_fm_name
        EXCEPTIONS
          no_form            = 1
          no_function_module = 2
          OTHERS             = 3.
      IF sy-subrc <> 0.
      ENDIF.
      READ TABLE I_HEADER INDEX 1.
    ls_controL-no_dialog = 'X'.
    if sy-ucomm = 'VIEW'.
    LS_CONTROL-PREVIEW = 'X'.
    endif.
      CALL FUNCTION LF_FM_NAME
        EXPORTING
          control_parameters = ls_control
          OUTPUT_OPTIONS     = OUTPUT_OPTIONS
          SO_VBELN           = I_HEADER-VBELN
          SO_AUDAT           = I_HEADER-AUDAT
          SO_REPEAT          = REPEAT
          SO_TYPE            = I_HEADER-VBTYP
          SO_CADD            = ADDCOMP
          SO_CCODE           = COMPCD
        TABLES
          I_HEADER           = I_HEADER
          TKOMV              = TKOMV
          I_ITEM             = TVBDPA
          I_XDATA            = I_XDATA
        EXCEPTIONS
          FORMATTING_ERROR   = 1
          INTERNAL_ERROR     = 2
          SEND_ERROR         = 3
          USER_CANCELED      = 4
          OTHERS             = 5.
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    ENDFORM.                    "PRINT_DATA
          FORM PROTOCOL_UPDATE                                          *
          The messages are collected for the processing protocol.       *
    FORM PROTOCOL_UPDATE.
      CHECK XSCREEN = SPACE.
      CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
        EXPORTING
          MSG_ARBGB = SYST-MSGID
          MSG_NR    = SYST-MSGNO
          MSG_TY    = SYST-MSGTY
          MSG_V1    = SYST-MSGV1
          MSG_V2    = SYST-MSGV2
          MSG_V3    = SYST-MSGV3
          MSG_V4    = SYST-MSGV4
        EXCEPTIONS
          OTHERS    = 1.
    ENDFORM.                    "PROTOCOL_UPDATE
          FORM SENDER                                                   *
          This routine determines the address of the sender (Table VKO) *
    FORM SENDER.
      SELECT SINGLE * FROM TVKO  WHERE VKORG = VBDKA-VKORG.
      IF SY-SUBRC NE 0.
        SYST-MSGID = 'VN'.
        SYST-MSGNO = '203'.
        SYST-MSGTY = 'E'.
        SYST-MSGV1 = 'TVKO'.
        SYST-MSGV2 = SYST-SUBRC.
        PERFORM PROTOCOL_UPDATE.
        EXIT.
      ENDIF.
      CLEAR GV_FB_ADDR_GET_SELECTION.
      GV_FB_ADDR_GET_SELECTION-ADDRNUMBER = TVKO-ADRNR.         "SADR40A
      CALL FUNCTION 'ADDR_GET'
        EXPORTING
          ADDRESS_SELECTION = GV_FB_ADDR_GET_SELECTION
          ADDRESS_GROUP     = 'CA01'
        IMPORTING
          SADR              = SADR
        EXCEPTIONS
          OTHERS            = 01.
      IF SY-SUBRC NE 0.
        CLEAR SADR.
      ENDIF.                                                    "SADR40A
      VBDKA-SLAND = SADR-LAND1.
      IF SY-SUBRC NE 0.
        SYST-MSGID = 'VN'.
        SYST-MSGNO = '203'.
        SYST-MSGTY = 'E'.
        SYST-MSGV1 = 'SADR'.
        SYST-MSGV2 = SYST-SUBRC.
        PERFORM PROTOCOL_UPDATE.
      ENDIF.
    SELECT SINGLE * FROM TVBUR  WHERE VKBUR = VBDKA-VKBUR.
    IF SY-SUBRC NE 0.
       SYST-MSGID = 'VN'.
       SYST-MSGNO = '203'.
       SYST-MSGTY = 'E'.
       SYST-MSGV1 = 'TVBUR'.
       SYST-MSGV2 = SYST-SUBRC.
       PERFORM PROTOCOL_UPDATE.
    ENDIF.
    ENDFORM.                    "SENDER
    *&      Form  GET_ITEM_SERIALS
          This routine give back the serialnumbers of salesdocument      *
          position. The numbers are processed as print-lines in the      *
          table KOMSER_PRINT.                                            *
    -->  US_VBELN  Salesdocument
    -->  US_POSNR  Position of the salesdocument
    FORM GET_ITEM_SERIALS.
      DATA: KEY_DATA LIKE RSEROB,
            SERNOS LIKE RSEROB OCCURS 0 WITH HEADER LINE.
      KEY_DATA-TASER = 'SER02'.
      KEY_DATA-SDAUFNR = VBDKA-VBELN.
      KEY_DATA-POSNR = VBDPA-POSNR.
      IF KEY_DATA-SDAUFNR IS INITIAL AND NOT
         KEY_DATA-POSNR IS INITIAL.
    beim Anlegen ist Belegnummer leer - deshalb Dummy-Belegnummer
        KEY_DATA-SDAUFNR = CHAR$.
      ENDIF.
    Read the Serialnumbers of a Position.
      REFRESH: TKOMSER,
               TKOMSER_PRINT.
      CALL FUNCTION 'GET_SERNOS_OF_DOCUMENT'
        EXPORTING
          KEY_DATA            = KEY_DATA
        TABLES
          SERNOS              = SERNOS
        EXCEPTIONS
          KEY_PARAMETER_ERROR = 1
          NO_SUPPORTED_ACCESS = 2
          NO_DATA_FOUND       = 3
          OTHERS              = 4.
      IF SY-SUBRC NE 0 AND
         SY-SUBRC NE 3.
        PERFORM PROTOCOL_UPDATE.
      ENDIF.
      CHECK SY-SUBRC EQ 0.
    Serialnummern übergeben
      TKOMSER-VBELN = SERNOS-SDAUFNR.
      TKOMSER-POSNR = SERNOS-POSNR.
      LOOP AT SERNOS.
        TKOMSER-SERNR = SERNOS-SERNR.
        APPEND TKOMSER.
      ENDLOOP.
    Process the stringtable for Printing.
    CALL FUNCTION 'PROCESS_SERIALS_FOR_PRINT'
          EXPORTING
               I_BOUNDARY_LEFT             = '(_'
               I_BOUNDARY_RIGHT            = '_)'
               I_SEP_CHAR_STRINGS          = ',_'
               I_SEP_CHAR_INTERVAL         = '_-_'
               I_USE_INTERVAL              = 'X'
               I_BOUNDARY_METHOD           = 'C'
               I_LINE_LENGTH               = 50
               I_NO_ZERO                   = 'X'
               I_ALPHABET                  = SY-ABCDE
               I_DIGITS                    = '0123456789'
               I_SPECIAL_CHARS             = '-'
               I_WITH_SECOND_DIGIT         = ' '
          TABLES
               SERIALS                     = TKOMSER
               SERIALS_PRINT               = TKOMSER_PRINT
          EXCEPTIONS
               BOUNDARY_MISSING            = 01
               INTERVAL_SEPARATION_MISSING = 02
               LENGTH_TO_SMALL             = 03
               INTERNAL_ERROR              = 04
               WRONG_METHOD                = 05
               WRONG_SERIAL                = 06
               TWO_EQUAL_SERIALS           = 07
               SERIAL_WITH_WRONG_CHAR      = 08
               SERIAL_SEPARATION_MISSING   = 09.
    IF SY-SUBRC NE 0.
       PERFORM PROTOCOL_UPDATE.
    ENDIF.
    ENDFORM.                               " GET_ITEM_SERIALS
    *eject
    *&      Form  GET_CONTROLL_DATA
          Checks if servicedata for the header exists.                   *
          Checks if servicedata for the position exists.                 *
          Checks if noticedata for the header exists.                    *
          Checks if noticedata for the position exists.                  *
    FORM GET_CONTROLL_DATA.
      DATA: LINES TYPE I.
    Exists servicedata for the header?
      DESCRIBE TABLE TKOMSERVH LINES LINES.
      IF LINES GT 0.
        STEU-VDKEX = 'X'.
      ENDIF.
    Exists servicedata for the position?
      DESCRIBE TABLE TKOMSERVP LINES LINES.
      IF LINES GT 0.
        STEU-VDPEX = 'X'.
      ENDIF.
    Exists noticedata for the header?
      DESCRIBE TABLE TKOMSERVHN LINES LINES.
      IF LINES GT 0.
        STEU-KBKEX = 'X'.
      ENDIF.
    Exists noticedata for the position?
      DESCRIBE TABLE TKOMSERVPN LINES LINES.
      IF LINES GT 0.
        STEU-KBPEX = 'X'.
      ENDIF.
    ENDFORM.                               " GET_CONTROLL_DATA
    *eject
    *&      Form  get_fax_land
          text
         -->P_NAST_TLAND  text
    form get_fax_land using   p_nast_land like nast-tland.
      DATA  L_land    like nast-tland .
      clear L_land.
      IF NOT addr_key-addrnumber IS INITIAL.
        CALL FUNCTION 'WFMC_FAXNUMBER_FOR_ADDRESS'
          EXPORTING
            adrnr          = addr_key-addrnumber
          IMPORTING
            tland          = L_land
          EXCEPTIONS
            addr_not_exist = 1
            OTHERS         = 2.
        IF sy-subrc = 0 AND NOT L_land IS INITIAL.
          p_nast_land = L_land.
        ENDIF.
      ENDIF.
    endform.                    " get_fax_land
    *&      Form  get_data1
          text
         -->P_LS_PRINT_DATA_TO_READ  text
         <--P_LS_ADDR_KEY  text
         <--P_LS_DLV_LAND  text
         <--P_LS_BIL_INVOICE  text
         <--P_CF_RETCODE  text
    FORM get_data1
         USING    IS_PRINT_DATA_TO_READ TYPE LBBIL_PRINT_DATA_TO_READ
         CHANGING CS_ADDR_KEY           LIKE ADDR_KEY
                  CS_DLV-LAND           LIKE VBRK-LAND1
                  CS_BIL_INVOICE        TYPE LBBIL_INVOICE
                  CF_RETCODE.
      IF NAST-OBJKY+10 NE SPACE.
        NAST-OBJKY = NAST-OBJKY+16(10).
      ELSE.
        NAST-OBJKY = NAST-OBJKY.
      ENDIF.
    read print data
    CALL FUNCTION 'LB_BIL_INV_OUTP_READ_PRTDATA'
       EXPORTING
         IF_BIL_NUMBER         = NAST-OBJKY
         IF_PARVW              = NAST-PARVW
         IF_PARNR              = NAST-PARNR
         IF_LANGUAGE           = NAST-SPRAS
         IS_PRINT_DATA_TO_READ = IS_PRINT_DATA_TO_READ
       IMPORTING
         ES_BIL_INVOICE        = CS_BIL_INVOICE
       EXCEPTIONS
         RECORDS_NOT_FOUND     = 1
         RECORDS_NOT_REQUESTED = 2
         OTHERS                = 3.
    IF SY-SUBRC <> 0.
    error handling
       CF_RETCODE = SY-SUBRC.
       PERFORM PROTOCOL_UPDATE.
    ENDIF.
    get nast partner adress for communication strategy
      PERFORM GET_ADDR_KEY USING    CS_BIL_INVOICE-HD_ADR
                           CHANGING CS_ADDR_KEY.
    get delivery land
      PERFORM GET_DLV-LAND USING    CS_BIL_INVOICE-HD_GEN
                           CHANGING CS_DLV-LAND.
    ENDFORM.                                                    " get_data1
    *&      Form  GET_ADDR_KEY
          text
         -->P_CS_BIL_INVOICE_HD_ADR  text
         <--P_CS_ADDR_KEY  text
    FORM GET_ADDR_KEY   USING    IT_HD_ADR   TYPE LBBIL_INVOICE-HD_ADR
                      CHANGING CS_ADDR_KEY LIKE ADDR_KEY.
      FIELD-SYMBOLS -ADDRESS_TYPE.
      ENDIF.
    ENDFORM.                    " GET_ADDR_KEY
    *&      Form  GET_DLV-LAND
          text
         -->P_CS_BIL_INVOICE_HD_GEN  text
         <--P_CS_DLV_LAND  text
    FORM GET_DLV-LAND USING    IT_HD_GEN   TYPE LBBIL_INVOICE-HD_GEN
                      CHANGING CS_DLV-LAND LIKE VBRK-LAND1.
      CS_DLV-LAND = IT_HD_GEN-DLV_LAND.
    ENDFORM.                    " GET_DLV-LAND
    *&      Form  set_print_data_to_read
          text
         -->P_LF_FORMNAME  text
         <--P_LS_PRINT_DATA_TO_READ  text
         <--P_CF_RETCODE  text
    FORM set_print_data_to_read   USING    IF_FORMNAME LIKE TNAPR-SFORM
             CHANGING CS_PRINT_DATA_TO_READ TYPE LBBIL_PRINT_DATA_TO_READ
                      CF_RETCODE.
      FIELD-SYMBOLS:  TYPE XFELD.
      DATA: LT_FIELDLIST TYPE TSFFIELDS.
    set print data requirements
      DO.
        ASSIGN COMPONENT SY-INDEX OF STRUCTURE
                         CS_PRINT_DATA_TO_READ TO  = 'X'.
      ENDDO.
      CALL FUNCTION 'SSF_FIELD_LIST'
        EXPORTING
          FORMNAME                = IF_FORMNAME
        VARIANT                 = ' '
        IMPORTING
          FIELDLIST               = LT_FIELDLIST
       EXCEPTIONS
         NO_FORM                  = 1
         NO_FUNCTION_MODULE       = 2
         OTHERS                   = 3.
      IF SY-SUBRC <> 0.
    error handling
        CF_RETCODE = SY-SUBRC.
        PERFORM PROTOCOL_UPDATE.
      ENDIF.
    ENDFORM.                    " set_print_data_to_read
    *&      Form  set_print_param
          text
         -->P_LS_ADDR_KEY  text
         -->P_LS_DLV_LAND  text
         <--P_LS_CONTROL_PARAM  text
         <--P_LS_COMPOSER_PARAM  text
         <--P_LS_RECIPIENT  text
         <--P_LS_SENDER  text
         <--P_CF_RETCODE  text
    FORM set_print_param   using IS_ADDR_KEY LIKE ADDR_KEY
                                  IS_DLV-LAND LIKE VBRK-LAND1
                         CHANGING CS_CONTROL_PARAM TYPE SSFCTRLOP
                                  CS_COMPOSER_PARAM TYPE SSFCOMPOP
                                  CS_RECIPIENT TYPE  SWOTOBJID
                                  CS_SENDER TYPE  SWOTOBJID
                                  CF_RETCODE TYPE SY-SUBRC.
      DATA: LS_ITCPO     TYPE ITCPO.
      DATA: LF_REPID     TYPE SY-REPID.
      DATA: LF_DEVICE    TYPE TDDEVICE.
      DATA: LS_RECIPIENT TYPE SWOTOBJID.
      DATA: LS_SENDER    TYPE SWOTOBJID.
      LF_REPID = SY-REPID.
      CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
        EXPORTING
          PI_NAST       = NAST
          PI_COUNTRY    = IS_DLV-LAND
          PI_ADDR_KEY   = IS_ADDR_KEY
          PI_REPID      = LF_REPID
          PI_SCREEN     = XSCREEN
        IMPORTING
          PE_RETURNCODE = CF_RETCODE
          PE_ITCPO      = LS_ITCPO
          PE_DEVICE     = LF_DEVICE
          PE_RECIPIENT  = CS_RECIPIENT
          PE_SENDER     = CS_SENDER.
      IF CF_RETCODE = 0.
        MOVE-CORRESPONDING LS_ITCPO TO CS_COMPOSER_PARAM.
      CS_CONTROL_PARAM-NO_OPEN
      CS_CONTROL_PARAM-NO_CLOSE
        CS_CONTROL_PARAM-DEVICE      = LF_DEVICE.
        CS_CONTROL_PARAM-NO_DIALOG   = 'X'.
        CS_CONTROL_PARAM-PREVIEW     = XSCREEN.
        CS_CONTROL_PARAM-GETOTF      = LS_ITCPO-TDGETOTF.
        CS_CONTROL_PARAM-LANGU       = NAST-SPRAS.
      CS_CONTROL_PARAM-REPLANGU1
      CS_CONTROL_PARAM-REPLANGU2
      CS_CONTROL_PARAM-REPLANGU3
      CS_CONTROL_PARAM-STARTPAGE
      ENDIF.
    ENDFORM.                    " set_print_param
    *&      Form  add_smfrm_prot
          text
    -->  p1        text
    <--  p2        text
    FORM add_smfrm_prot .
      DATA: LT_ERRORTAB             TYPE TSFERROR.
    DATA: LF_MSGNR                TYPE SY-MSGNO.
      FIELD-SYMBOLS:   TYPE LINE OF TSFERROR.
    get smart form protocoll
      CALL FUNCTION 'SSF_READ_ERRORS'
        IMPORTING
          ERRORTAB = LT_ERRORTAB.
    add smartform protocoll to nast protocoll
      LOOP AT LT_ERRORTAB ASSIGNING .
      CLEAR LF_MSGNR.
      LF_MSGNR = <FS_ERRORTAB>-ERRNUMBER.
        CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
             EXPORTING
                  MSG_ARBGB = -MSGID
                MSG_NR    = LF_MSGNR
                  MSG_NR    = -MSGV4
             EXCEPTIONS
                  OTHERS    = 1.
      ENDLOOP.
    ENDFORM.                    " add_smfrm_prot
    *&      Form  protocol_update_spool
          text
         -->P_1115   text
         -->P_LS_SPOOLID  text
         -->P_SPACE  text
         -->P_SPACE  text
         -->P_SPACE  text
    FORM protocol_update_spool  USING    SYST_MSGNO
                                         P_LS_SPOOLID
                                         P_SPACE1
                                         P_SPACE2
                                         P_SPACE3.
      syst-msgid = 'VN'.
      syst-msgno = syst_msgno.
      syst-msgv1 = p_ls_spoolid.
      CONDENSE syst-msgv1.
      CHECK xscreen = space.
      CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
        EXPORTING
          msg_arbgb = syst-msgid
          msg_nr    = syst-msgno
          msg_ty    = syst-msgty
          msg_v1    = syst-msgv1
          msg_v2    = p_space1
          msg_v3    = p_space2
          msg_v4    = p_space3
        EXCEPTIONS
          OTHERS    = 1.
    ENDFORM.                    " protocol_update_spool
    This is Include ZSDI0003
    *&  Include           ZSDI0003
    TABLES: KOMK,                          "Communicationarea for conditions
            KOMP,                          "Communicationarea for conditions
            KOMVD,                         "Communicationarea for conditions
            VBCO3,                         "Communicationarea for view
            VBDKA,                         "Headerview
            VBDPA,                         "Itemview
            VBDPAU,                        "Subitemnumbers
            CONF_OUT,                      "Configuration data
            SADR,                          "Addresses
            TVAG,                          "Reason for rejection
            VEDKA,                         "Servicecontract head data
            VEDPA,                         "Servicecontract position data
            VEDKN,                         "Servicecontract head notice data
            VEDPN,                         "Servicecontract pos. notice data
            RISERLS,                       "Serialnumbers
            KOMSER,                        "Serialnumbers for print
            TVBUR,                         "Sales office
            TVKO,                          "Sales organisation
            ADRS,                          "Communicationarea for Address
            FPLTDR,                        "billing schedules
            WTAD_ADDIS_IN_SO_PRINT,        "additional
            WTAD_BUYING_PRINT_EXTRA_TEXT,  "texts belonging to additional
            VBAK,                          "Sales Document Header
            VBAP,                          "Sales Document Item
            VBPA,                          "Sales Document: Partner
            T001,                          "Company codes
            MAST,                          "Material to BOM Link
            STKO.                          "BOM Header
    INCLUDE RVADTABL.
    INCLUDE RVDIREKT.
    INCLUDE VEDADATA.
    data for access to central address maintenance
    INCLUDE SDZAVDAT.
    TYPE-POOLS: ADDI.
    DATA PRICE_PRINT_MODE(1) TYPE C.       "Print-mode
    DATA: RETCODE   LIKE SY-SUBRC.         "Returncode
    DATA: REPEAT(1) TYPE C.
    DATA: XSCREEN(1) TYPE C.               "Output on printer or screen
    DATA: BEGIN OF STEU,                   "Controldata for output
            VDKEX(1) TYPE C,
            VDPEX(1) TYPE C,
            KBKEX(1) TYPE C,
            KBPEX(1) TYPE C,
      

    1) you shouldn't have to do anything with the properties file written for a specific Locale.
    2) check this out: http://java.sun.com/j2se/1.4/docs/guide/intl/encoding.doc.html
    3) BIG5 is BIG5 everywhere.
    4) don't know about this one
    5,6,7) If you have Windows 98 Chinese Edition, you can probably switch back and forth between English and Chinese -- just put the Chinese characters in a string much like the normal characters. Otherwise, you'll have to enter the Unicode char.
    V.V.

  • Using of RV_PRICE_PRINT_ITEM  in smartforms

    what are the mandatory fields in this FM which had to be filled with data.What are the structures needed to be used here.Is there any standard smartform which is using this FM.

    hi gosh,
    this FM will be use to read the condtion values of the Invoice item detatails. i have used the sam FM when i worked on the Inovice to get the Condition values.
    if you pass only the
    COMM_HEAD_I -->in this if you pass only KNUMV(condition document) then you will get all the conditions
    COMM_HEAD_I-BELNR = billing doc number,
    COMM_HEAD_I-KNUMV= condition document number
    you will get all the conditions at item level of the biling document in the talbe TKOMV.
    If you want to get the conditonvalue at header level you have to use the
    RV_PRICE_PRINT_HEAD.
    but remember one thing.. if call this FM(header or ITEM) in SMARTFORM lay out u will face some problems. to avoid this before callin the RV_PRICE_PRINT_ITEM u have to call the FM
    CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
          TABLES
            TKOMV = FP_IT_KOMV.

  • Duplicate pricing conditions printed in the invoice

    The values returned in the table parameter "TKOMVD" of the function module "'RV_PRICE_PRINT_HEAD"used in the program RVADIN01, causing some duplicate pricing conditions in the script printing.
    Also this table parameter is not always returning the same set of values. Only at the first time print of the invoice (via the job schedule of the program RSNAST00) this parameter is filled with some values, so when i reprint the invoice via VF03, it prints fine.
    I searched some notes to resolve the problem. But in the below mentioned note it says that, it is the standard behaviour of the function module. But if it is the standard behavior, then the function module should return the same set of values always. (I am working on SAP 4.7)
    (Note Number : 68057
    Symptoms:
    If conditions are revealed in the totals block for order confirmations or billing documents, conditions are only accumulated if the condition rate or the condition percentage rate is identical.
    Example : Billing document with            Item      Condition    Condition rate
               10        PR00         100
               20        PR00          10
               30        PR00         100
    If condition PR00 is printed in the totals block, the following two lines appear :
               Price     100  per piece    200
               Price      10  per piece     10
    Additional key words
    Invoice printout, RVADOR01, RVADIN01
    Cause and prerequisites
    Standard behavior
    Solution
    To achieve a summarization of conditions with identical condition keys but with different condition rates or condition percentage rates, you can change the standard behavior by using a user exit as described below.)

    Hi..
    If you are talking about proforma invoice that needs to be printed and is required to be changed.Then i would suggest you to look at one of the output type for the std proforma invoice FUPI has aprogram linked to it RVADAUS1 that determines the output with print parameters fetching from NAST table.
    You can devlope the log or can incorporate the new requirements  you wanted to be changed
    Just check if this is the thing you are looking or let me  have more clarity from you about your issue.
    Thanks
    Saurabh.

  • How to use Function module generated to update CDHDR CDPOS

    Hi,
    I have a Z-table, and I want to tracks the value changes in some fields,
    the data elements for those specific fields are marked for "Change document".
    I created a Change document object using the transaction SCDO and I got the function module.
    now can any one tell me how to use these function modules like ( what values need to be passed to function module. what value do we need to pass for   OBJECTID,..value for tables ...etc )
    I have a custom program to update/delete entries in the custom table so should I use the function module in my custom program to result an entry in CDHDR & CDPOS.
    how to display the old value and new values  for the fields specified to changes.
    Regards,
    Nagu.

    check in SE37
    RV_ORDER_FLOW_INFORMATION
    SD_SALES_DOCUMENT_READ
    SD_SALES_DOCUMENT_READ_POS
    SD_DOCUMENT_PARTNER_READ
    SD_DETERMINE_CONTRACT_TYPE
    SD_SALES_DOCUMENT_COPY
    SD_SALES_DOCUMENT_SAVE
    SD_SALES_DOCUMENT_ENQUEUE
    SD_PARTNER_READ
    RV_DELIVERY_PRINT_VIEW
    SD_PACKING_PRINT_VIEW
    SD_DELIVERY_VIEW
    RV_BILLING_PRINT_VIEW
    RV_PRICE_PRINT_HEAD
    RV_PRICE_PRINT_ITEM
    Rewards if useful...........
    Minal

Maybe you are looking for