Control if user created vendor by standard way

Friends,
I'm sending a work item to the user to create a vendor.
I have to control if the user had executed totaly the work item to create the vendor.
I think it is a possibility of the user clicks cancel the XK01 or the system may fall by time out (If the user goes out its room for a while after double-click in the work item that called XK01), without had created the vendor.
I've heard about a function or workflow's functionality that make this control to the work item.
Sure, I'll need this to control others transactions too as MIGO and MIRO, that we will call by a work item through our workflow.
Can anybody help me ?

Hello all,
This scenario poses a special problem in that the key of the vendor object is not known (unless you are using an external number range and you have specified it in the WF). Therefore you will not know which "create" event to wait for.
You could have a wait step in a parallel branch (or modeled outcome) and check that the Event creator is the same as your agent and then terminate the create step if it is, otherwise loop and start another "wait for event".
Or you may have to define the task as "Confirm End of Processing".

Similar Messages

  • Standard way of mutual exclusion control for rfc connection

    Dear expert,
    I want to know the standard way of mutual exclusion control
    for rfc connection.
    I am going to create JAVA screens for ERP ABAP objects.
    As for SAP GUI screen, pessimistic locking is used when editing objects.
    On the other hand, pessimistic locking is defficult for JAVA screens,
    since most of lock objects on ERP are not available for RFC.
    Besides, I'm afrraid if locks are correctly deleted
    when something bad happens on screen.(i.e. Users close browsers.)
    Do you have any recommendations?
    Regards,
    Fukuhara Yohei

    Hello, we raised an OSS note.
    They answered it was not possible to lock tasks.
    Task completion is like a race, the first it completes it wins.
    Regards,
    Marco.

  • Standard vs User Created FI Line Display Variants

    Hello folks,
    I'd like your opinion on the following problem:
    Requirement: Display variants which begin with a special character other than / that is not in the sap standard variant name space, and can
    only be defined by selected users.
    We have users in ecc 6.0 that may create and save User Specific display layouts (those beginning with an alpha character), but we need to have
    the same display layouts saved as User Independent, that is Shareable with all other users and still begin with an alpha character....    
    But we cannot give access to create/change Standard display layouts (those beginning with a slash / ), as our Standard display      
    layouts/variants must remain protected and changeable only by designated users.                                       
    Any ideias if this is possible?
    If it's not possible, no problem, I'll reward anyway.
    Thank you for your help.

    Officially... cross-posting between the forums is not allowed... but sometimes both a security (technical) and functional aspect is very helpfull.
    The ability for moderators to mirror threads is unfortunately not available... ... So I will lock this thread.
    Please use => Standard vs User Created FI Line Display Layouts/Variants for security contributions to this question.
    This keeps the answers together in one place....
    Cheers,
    Julius
    PS to the other thread:
      if sy-uname ne 'THE_BOSS'.
        i_save = 'U'.
      endif.

  • Error occurs while the user creates an vendor(MDM)

    Hi,
    The following error occurs when the user creates an vendor(MDM) and submits the form for validation on Enterprise portal.
    " Could not create JCOClientConnection for logical System: MDM_WD_MODELDATA_DEST - Model: class com.xxxx.ven.crt.MDMBAPIValidateModel. Please assure that you have configured the RFC connections and/or logical system name properly for this model"
    Can any one help me out how to rectify this error?
    Regards,
    KN

    Hello,
    test MDM_WD_MODELDATA_DEST  with webdynpro content admin rights . check sso or uid/pw given and system details as error message showing that JCO Destination configuration is wrong.
    Regards,
    Koti Reddy

  • Is there a way to get "user created" content from google maps on my touch?

    Hi,
    I have tried to figure out a way to load some saved maps I have made on Google Maps on to my ipod touch but it hasn't been working. I don't see any options to load such info and when I tried to go to gmaps from the Safari browser it automatically loads the Map app...I bypassed this by sending an email with a link to the user created content but safari had trouble reading the page probably due to frames or some other inline content...There has to be a way to do this - it is a really valuable feature to have, especially since the user community has offered up their maps to the web as well.
    HELP?

    Welcome to the Forums!
    If you're using a Mac, you can save the maps a jpg images, then transfer them to your IPT using FileMarkMaker.
    Hope this helps...

  • What is the most efficent way to create both a standard and HD DVD

    Hi,
    I'm just getting into HD video editing, and I have relatives who will be several years behind me. I will be making HD DVD's for myself to use, but I will also need to make standard DVD's to send to my relatives.I am assuming that the HD DVD's I create will not play in a standard DVD player. I may be wrong. However, If this is correct, is there a particular point in the process of working with Encore where I can make that choice, create the DVD, and then go back and alter it in order to create the other type without destroying and having to redo everything that was done up to that point?

    Thank you Hunt. Being ahead of most of the rest of the world and getting the best technology out there can be a pain sometimes. Reading through Jon Geddes' article left me scratching my head several times, and some of it went way over my head, but I'll keep at it, until it sinks in. Some language, terms, and shorthand, I'm sure are simple to understand to a lot of people, but I'm not in that catagory. I'll just keep working at it. 
    Terry Lee Martin
    Date: Sun, 18 Oct 2009 13:39:08 -0600
    From: [email protected]
    To: [email protected]
    Subject: what is the most efficent way to create both a standard and HD DVD
    I would edit the Project in HD in PrPro. The BD authoring part will be straight workflow.
    For the SD DVD-Video, you have a few choices. You can Export to DV-AVI Type II for Import into a new Encore Project for the DVD. Some feel that PrPro does not do a good job at down-rezing from HD to SD. For a workflow that will likely yield better quality, see this http://www.precomposed.com/blog/2009/07/hd-to-sd-dvd-best-methods/. If you have PrPro/Encore CS4, then Jeff Bellune's /thread/487134?tstart=0 might be useful to you. Just follow the links to the tutorial.
    Good luck,
    Hunt
    >

  • Confirmation Control Key Value in vendor master overwritten by Info Record?

    Dear all
    In the standard 3rd party processing, we will use S/O to trigger PR and we then convert PR to PO. And when PO is converted, Confirmation Control Key (CCK) Z01 maintained in Vendor master purchasing view will be adopted for all the items in the PO, and in the purchase infor Record for the combination of material & this vendor, we do not maintain any CCK value there.
    However recently, the system behaves in such a way that the CCK value does not automatically show up in PO item anymore. And I have been thinking can it be the fact that the blank value of CCK in info record will overwrite the Z01 value in the CCK of vendor master? But if so, why all the past PO I have checked does not have CCK value maintained in info record but the CCK was able to appear automatically?
    An interesting fact is that if I create the PO manually by enter Vendor with CCK value Z01, Org Data, account assignment S and Item category S (both for 3rd party processing), and then the material and hit ENTER, the CCK value Z01 will appear in PO Item level under tab: Confirmation.
    However, once I enter the PLANT value in PO Overview, seem like the Empty value of CCK in info record will overwrite the existing Z01 value.
    Please advise if it is how the info record CCK work to overwrite? Also, how do I get back to the stage where the info record CCK will not overwrite as I do not want to spend time to update all the info record CCK to have Z01.
    Thanks

    Dear Manohar Raju Kanchanapally
    I do not understand why this OSS note SAP Note 909885 - ME21N: Confirmation control key not
    from vendor mentions the following:
    Symptom:
    When you create a purchase order using Transaction ME21N, the confirmation control key from the vendor master is not used, although it is maintained.
    Cause and Prerequisites:
    The symptom occurs if no confirmation control key was maintained in the existing purchasing info record.
    Solution:
    Implement the attached correction instructions as a modification.
    It is totally contrary with the General Rule that the most specific will always prevails, meaning if I do not maintain CCK value in the Info Record, it will overwrite the CCK value I maintain vendor master when I create PO using same vendor, material, purchaisng org and plant!
    Please help!
    Edited by: Daimos on Sep 17, 2009 1:22 PM
    Edited by: Daimos on Sep 17, 2009 1:22 PM

  • Automatically create vendor batches from DESADV

    Hello gurus,
    we receive DESADV Idocs that automatically create inbound deliveries in our SAP system.
    When the vendor sends a batch number, it is correctly transmitted into field u201Cvendor batchu201D (LIPS-LICHN). Field u201Cbatchu201D (LIPS-CHARG) is empty.
    Now we would like to use the vendoru2019s batches in our system.
    Example: We do not have any stock or batch information of a certain material. Now we order 10 pieces of that material and the vendor sends a DESADV containing batch information for the goods to be delivered (vendor batch number is 1234).
    Now, we would like to have the system create a batch automatically and post the material to that batch on GR. The number of the batch may be automatically created, but the vendor batch number (1234) must be visible in the batch master record.
    Is there a standard way to do this (in plain MM, without LE)?
    Cheers
    Alicia

    Hello Alica Moore,
    The batch management is controlling the inventory at your location level only ( like plant /  co. co / material ). The batch which is sending by your vendor  /  customer, that can be used if the manual batch is using. If the system is using automatic batch management , than the sytem auto batch only updated in your inventory system and the batch is given by your vendor would be optional entry.
    I think this can be achived with making your system as manual batch entry which would be used as vendor batch number in your system.
    Pavan

  • PO Email to buyer/user creating the PO

    Dear All,
    I am using functionality to send PO to vendor by email and its working perfectly fine. Now I need the copy of same PO to be sent by an email to the user or buyer who is creating that PO. Is there any standard way we can do this.?
    Regards,
    Sachin

    Hi sachin,
    see thread link given below, might help you
    Send PO via Email to the buyer
    Regards,
    Edited by: SAP_01 on Dec 3, 2010 12:35 AM

  • F110- Payment advices for vendor - SAP standard solution

    Hello all,
    I would like to generate Payment advices via Idoc to the vendor in a standard way ( no ABAP), can I use the program RFFOUS_C ( assigned in Payment method company code ) and generate the idoc payment advices via RFFOAVIS?
    I canu2019t create the payment advices with the above programs, here what I have done so far
    1) Vendor master checked with the EDI flag
    2) FBZP is configured, assigned the RFFOUS_C
    3) Variant setup for RFFOAVIS
    4) Payment posted correctly but in the output its is saying " No row selected"
    We are using classic payment medium.
    Thanks in advance for your help

    Have you created right variant in your parameters in F110. Otherwise, no advice will be created.
    have you checked your FBZP settings, you must allow the generation of payment advice.
    Are you looking into SP02 for payment advice.

  • Problem creating vendor

    Hi Guys,
             i was just creating a vendor for my own use. while creating vendor using transaction xk01 the account group field is creating problems. Can you please give me an example of step by step creation of a vendor using xk01

    Hi,
    The account group specifies that whether a Vendor number has to be assigned by us or you wants the system to generate an internal number depending on the different Company Codes and Pur.Orgns'.
    Do you wants to creat some vendors using BDC.
    Here is the sample code of BDC for vednor creation:
    REPORT zmm_vendor_master_upload
           NO STANDARD PAGE HEADING
           LINE-SIZE 255.
    ABAP Name   :   ZMM_VENDOR_MASTER_UPLOAD
    Description :   This Program is used to Upload the Vendor Master.
      Modification Log:
      Date         Programmer          Correction    Description
    Standard Include for Selection Screen
    INCLUDE bdcrecx1.
    Internal Table for Upload Data
    DATA: BEGIN OF i_vendor OCCURS 0,
            bukrs(004),             " Company Code
            ekorg(004),             " Purchase Orgn
            ktokk(004),             " Account Group
    Address Screen
            anred(015),             " Title
            name1(035),                                         " Name1
            sortl(010),             " Sort Field
            name2(035),                                         " Name2
            name3(035),             " Contact Person1
            name4(035),             " Contact Person 2
            stras(035),             " Street
            pfach(010),             " PO Box
            ort01(035),             " City
            pstlz(010),             " Postal Code
            land1(003),             " Country
            spras(002),             " Language
            telf1(016),             " Telephone No
            telfx(031),             " Fax Number
            lfurl(132),             " URL-Mail Id
    Material Group Characteristics
           klart(003),             " Class Type '010'
           class(018),             " Class 'Vendor'
           mname_01(030),          " Characteristic
           mname_02(030),          " Characteristic
           mname_03(030),          " Characteristic
            mwert_01(030),          " Charct.Value
            mwert_02(030),          " Charct.Value
            mwert_03(030),          " Charct.Value
    Control Data
            emnfr(010),             " Manufact.Part No
    Bank Details
            banks_01(003),          " Country of Bank1
            banks_02(003),          " Country of Bank2
            bankl_01(015),          " Bank Key of 1
            bankl_02(015),          " Bank Key of 2
            bankn_01(018),          " Account No Bank1
            bankn_02(018),          " Account No Bank2
    Accounting Info
            akont(010),             " Reconcillation Account
            zuawa(003),             " Sort Key
            fdgrv(010),             " Cash Management Group
    Payment Transactions
            zterm(004),             " Payment terms
           reprf(001),             " Check Double Inv.
            zwels(010),             " Payment Method
            hbkid(005),             " House Bank
           xpore(001),             " Individ.Payment
    Correspondence
            mahns(001),             " Dunning Level
            xausz(001),             " Account Statement
    Withholding Tax Details
            qland(003),             " Withholding Tax Country
            witht_01(002),          " WH tax Type
           wt_withcd(002),        " WH Tax Code
           wt_subjct(001),        " Indicator:WH Tax
    Purchasing Data
            waers(005),             " Currency
            zterm1(004),            " Payment Terms
          END OF i_vendor.
    Data Variables & Constants
    CONSTANTS : c_x     VALUE 'X'.  " Flag
    Paramters
    PARAMETERS: p_file LIKE ibipparms-path.  " Filename
    At selection-screen on Value Request for file Name
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    Get the F4 Values for the File
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          program_name  = syst-cprog
          dynpro_number = syst-dynnr
        IMPORTING
          file_name     = p_file.
    Start of Selection
    START-OF-SELECTION.
    Open the BDC Session
      PERFORM open_group.
    Upload the File into internal Table
      CALL FUNCTION 'UPLOAD'
        EXPORTING
          filename                = p_file
          filetype                = 'DAT'
        TABLES
          data_tab                = i_vendor
        EXCEPTIONS
          conversion_error        = 1
          invalid_table_width     = 2
          invalid_type            = 3
          no_batch                = 4
          unknown_error           = 5
          gui_refuse_filetransfer = 6
          OTHERS                  = 7.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    Upload the Data from Internal Table
      LOOP AT i_vendor.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0100'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RF02K-KTOKK'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'RF02K-BUKRS'
                                      i_vendor-bukrs.
        PERFORM bdc_field       USING 'RF02K-EKORG'
                                      i_vendor-ekorg.
        PERFORM bdc_field       USING 'RF02K-KTOKK'
                                      i_vendor-ktokk.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0110'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFA1-SPRAS'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=KLAS'.
        PERFORM bdc_field       USING 'LFA1-ANRED'
                                      i_vendor-anred.
        PERFORM bdc_field       USING 'LFA1-NAME1'
                                      i_vendor-name1.
        PERFORM bdc_field       USING 'LFA1-SORTL'
                                      i_vendor-sortl.
        PERFORM bdc_field       USING 'LFA1-NAME2'
                                      i_vendor-name2.
        PERFORM bdc_field       USING 'LFA1-NAME3'
                                      i_vendor-name3.
        PERFORM bdc_field       USING 'LFA1-NAME4'
                                      i_vendor-name4.
        PERFORM bdc_field       USING 'LFA1-STRAS'
                                      i_vendor-stras.
        PERFORM bdc_field       USING 'LFA1-PFACH'
                                      i_vendor-pfach.
        PERFORM bdc_field       USING 'LFA1-ORT01'
                                      i_vendor-ort01.
        PERFORM bdc_field       USING 'LFA1-PSTLZ'
                                      i_vendor-pstlz.
        PERFORM bdc_field       USING 'LFA1-LAND1'
                                      i_vendor-land1.
        PERFORM bdc_field       USING 'LFA1-SPRAS'
                                      i_vendor-spras.
        PERFORM bdc_field       USING 'LFA1-TELF1'
                                      i_vendor-telf1.
        PERFORM bdc_field       USING 'LFA1-TELFX'
                                      i_vendor-telfx.
        PERFORM bdc_field       USING 'LFA1-LFURL'
                                      i_vendor-lfurl.
        PERFORM bdc_dynpro      USING 'SAPLCLCA' '0602'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RMCLF-KLART'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=ENTE'.
        PERFORM bdc_field       USING 'RMCLF-KLART'
                                      '010'. "i_vendor-klart.
        PERFORM bdc_dynpro      USING 'SAPLCLFM' '0500'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RMCLF-CLASS(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=AUSW'.
        PERFORM bdc_field       USING 'RMCLF-CLASS(01)'
                                      'Vendor'."i_vendor-class.
        PERFORM bdc_dynpro      USING 'SAPLCTMS' '0109'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RCTMS-MWERT(03)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=BACK'.
        PERFORM bdc_field       USING 'RCTMS-MNAME(01)'
                           'MATERIALGROUP'." i_vendor-mname_01.
        PERFORM bdc_field       USING 'RCTMS-MNAME(02)'
                           'MATERIALGROUP'." i_vendor-mname_02.
        PERFORM bdc_field       USING 'RCTMS-MNAME(03)'
                           'MATERIALGROUP'." i_vendor-mname_03.
        PERFORM bdc_field       USING 'RCTMS-MWERT(01)'
                                      i_vendor-mwert_01.
        PERFORM bdc_field       USING 'RCTMS-MWERT(02)'
                                      i_vendor-mwert_02.
        PERFORM bdc_field       USING 'RCTMS-MWERT(03)'
                                      i_vendor-mwert_03.
        PERFORM bdc_dynpro      USING 'SAPLCLFM' '0500'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RMCLF-CLASS(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=ENDE'.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0110'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFA1-ANRED'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0120'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFA1-EMNFR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_field       USING 'LFA1-EMNFR'
                                      i_vendor-emnfr.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0130'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFBK-BANKN(02)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                          '=VW'.
        PERFORM bdc_field       USING 'LFBK-BANKS(01)'
                                      i_vendor-banks_01.
        PERFORM bdc_field       USING 'LFBK-BANKS(02)'
                                      i_vendor-banks_02.
        PERFORM bdc_field       USING 'LFBK-BANKL(01)'
                                      i_vendor-bankl_01.
        PERFORM bdc_field       USING 'LFBK-BANKL(02)'
                                      i_vendor-bankl_02.
        PERFORM bdc_field       USING 'LFBK-BANKN(01)'
                                      i_vendor-bankn_01.
        PERFORM bdc_field       USING 'LFBK-BANKN(02)'
                                      i_vendor-bankn_02.
       PERFORM bdc_dynpro      USING 'SAPMF02K' '0130'.
       PERFORM bdc_field       USING 'BDC_CURSOR'
                                     'LFBK-BANKS(01)'.
       PERFORM bdc_field       USING 'BDC_OKCODE'
                                     '=VW'.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0210'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFB1-FDGRV'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_field       USING 'LFB1-AKONT'
                                      i_vendor-akont.
        PERFORM bdc_field       USING 'LFB1-ZUAWA'
                                      i_vendor-zuawa.
        PERFORM bdc_field       USING 'LFB1-FDGRV'
                                      i_vendor-fdgrv.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0215'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFB1-XPORE'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_field       USING 'LFB1-ZTERM'
                                      i_vendor-zterm.
        PERFORM bdc_field       USING 'LFB1-REPRF'
                                      c_x. "i_vendor-reprf.
        PERFORM bdc_field       USING 'LFB1-ZWELS'
                                      i_vendor-zwels.
        PERFORM bdc_field       USING 'LFB1-HBKID'
                                      i_vendor-hbkid.
        PERFORM bdc_field       USING 'LFB1-XPORE'
                                      c_x. "i_vendor-xpore.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0220'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFB5-MAHNS'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_field       USING 'LFB5-MAHNS'
                                      i_vendor-mahns.
        PERFORM bdc_field       USING 'LFB1-XAUSZ'
                                      i_vendor-xausz.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0610'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFBW-WT_SUBJCT(01)'.
        PERFORM bdc_field       USING 'LFB1-QLAND'
                                      i_vendor-qland.
        PERFORM bdc_field       USING 'LFBW-WITHT(01)'
                                      i_vendor-witht_01.
       PERFORM bdc_field       USING 'LFBW-WT_WITHCD(01)'
                                     i_vendor-wt_withcd.
        PERFORM bdc_field       USING 'LFBW-WT_SUBJCT(01)'
                                       c_x.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0310'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'LFM1-ZTERM'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_field       USING 'LFM1-WAERS'
                                      i_vendor-waers.
        PERFORM bdc_field       USING 'LFM1-ZTERM'
                                      i_vendor-zterm1.
        PERFORM bdc_dynpro      USING 'SAPMF02K' '0320'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RF02K-LIFNR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=VW'.
        PERFORM bdc_dynpro      USING 'SAPLSPO1' '0300'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=YES'.
    Call the Transaction
        PERFORM bdc_transaction USING 'XK01'.
      ENDLOOP.
    Close the BDc Session
      PERFORM close_group.
    Regards,
    Anji

  • Creating vendor as a storage location

    Hi all,
    My client want to know in any time what is the stock lying with his vendor by provding access to his system (as a user)
    The vendor has to update his stock in a storage location directly ,I know vendor stock will become current asset to my client,
    still I want to know what all the implication will be if I create a legal entity like vendor  as a storage location.
    Regards
    Kantha

    Hi
    You can define a consignment process to fulfill your requirement.
    You can create a consignment procurement process
    You create a Consignment PO on the vendor and then do GR, only when vendor brings stock into his storage ( here you create a virtual storage) here no accounting documents will be created. The stocks are still on Vendor books.
    When ever you want to take the stocks into your account do a consignment GI from the virtual storage location and then you can do the settlement to the vendor.
    I think this is right option and a standard one.
    Cheers
    Kris

  • Error creating vendor w/ JCo FM VENDOR_INSERT- Missing parameter w/ PERFORM

    Dear all,
    I have followed the following thread and found it very useful as we need to create vendors from an external system in R/3 using the JCo as well. We are doing all the steps specified in previous posts and calling FM VENDOR_INSERT but when I execute the function it returns an exception:
    JCoException: (104) RFC_ERROR_SYSTEM_FAILURE: Missing parameter with PERFORM.
    We have checked and all the needed BAPIs are enabled but we are stuck at this first step. I have tried a variety of things but nothing seems to work. Not sure how I can specify the PERFORM parameter using JCo. Did anyone else fase this issue?
    Here is what some of the relevant Java code looks like:
            JCoFunctionTemplate tmplt1 = repository.getFunctionTemplate("VENDOR_INSERT");
            JCoFunction vfunc = tmplt1.getFunction();       
            JCoParameterList vparams =  vfunc.getImportParameterList();
            JCoStructure jcs= vparams.getStructure("I_LFA1");
            try
                 LocalSupplier s = getSupplier1();
                 jcs.setValue("MANDT", "010");
                 jcs.setValue("NAME1", s.getSupName());
                 jcs.setValue("NAME2", s.getSupName2());
                 jcs.setValue("PSTLZ", s.getSupPostalCode());
                 jcs.setValue("ORT01", s.getSupCity());
                 jcs.setValue("LAND1", s.getIdCountry().getIsocode());
                 jcs.setValue("STRAS", s.getAddress1() +", " + s.getAddress2());
                 jcs.setValue("MCOD1", "test");
                 jcs.setValue("KTOKK", "ZKRE");
                 jcs.setValue("SPRAS", s.getIdmasterSupplier().getIdlanguage().getLocale());
                 jcs.setValue("STCD1", s.getIdmasterSupplier().getTaxId());
                 jcs.setValue("TELF1", s.getTelephone());
                 jcs.setValue("TELFX", s.getFax());
                 execute(vfunc, destination);             
            catch(Exception e)
                System.out.println(e.toString());
                e.printStackTrace();
                return;
          * Method execute will call a function. The Caller of this function has
          * already set all required parameters of the function
         public static void execute(JCoFunction function, JCoDestination dest) {
              try {
                   JCoContext.begin(dest);
                   function.execute(dest);
                   JCoContext.end(dest);
              } catch (JCoException e) {
                   e.printStackTrace();
    Any help from some of view that have succesfully implemented vendor creation using the JCo would be highly appreciated.

    Hi,
    as I just wrote in the previous thread,
    don't use function module VENDOR_INSERT.
    As written before it is an update task FM. And also it do not check any field validity.
    This is the best way to face inconsistencies in the future.
    As you have also noticed, troubles and difficulties will come very soon related to the address management.
    In standard there is NO FM or BAPI to do so.
    The only supported option is via batch-input or idocs. Eventually, LSMW could help
    See [note 384462|https://service.sap.com/sap/support/notes/384462]
    With ECC 2005, a synchronisation class can help a lot. See class VMD_EI_API.
    With ECC 2005 ehp3, you have an eSOA service to create vendor asynchronously. Not all fields are supported.
    In other words, just create a BAPI to transfert your own parameters then either make a batchinput which will call XK01/XK02 in batch, either trigger class VMD_EI_API
    BR
    Alain

  • Creating Vendor Master through Bapi

    Hi All,
    Please help me out in creating vendor master using Bapi and also send me the program logic.
    Thanks in Advance,
    Sridhar Ch

    Hi Sridhar,
    Refer to the following and award points if useful.BAPI is like using standard function modules.We will populate the parameters and handle errors from that.See the code below which is vendor debit posting.You can get an idea by the following code.
    See the start of selection if this is confusing to you and understand the usage
    *                    TABLES
    TABLES: VBAK,
            ADR6,
            TRDYSE01CM.
    *                    INCLUDE
    INCLUDE ZZUTI_STD_HEADER_FOOTER. "Standard header and footer
    * TYPES DECLARATION
    TYPES:
      BEGIN OF T_CRMEMO,
        VBELN TYPE VBAK-VBELN,
        POSNR TYPE VBAP-POSNR,
        ERDAT TYPE VBAK-ERDAT,
        AUART TYPE VBAK-AUART,
        AUGRU TYPE VBAK-AUGRU,
        WAERK TYPE VBAK-WAERK,
        VKORG TYPE VBAK-VKORG,
        VTWEG TYPE VBAK-VTWEG,
        SPART TYPE VBAK-SPART,
        VDATU TYPE VBAK-VDATU,
        BSTNK TYPE VBAK-BSTNK,
        BSARK TYPE VBAK-BSARK,
        BSTDK TYPE VBAK-BSTDK,
        AEDAT TYPE VBAK-AEDAT,
        BUKRS_VF TYPE VBAK-BUKRS_VF,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        ZIEME TYPE VBAP-ZIEME,
      END OF T_CRMEMO,
      BEGIN OF T_CRMEMO_CHANGE,
        VBELN(90) TYPE C,
        POSNR TYPE VBAP-POSNR,
        ERDAT TYPE VBAK-ERDAT,
        AUART TYPE VBAK-AUART,
        AUGRU TYPE VBAK-AUGRU,
        WAERK TYPE VBAK-WAERK,
        VKORG TYPE VBAK-VKORG,
        VTWEG TYPE VBAK-VTWEG,
        SPART TYPE VBAK-SPART,
        VDATU TYPE VBAK-VDATU,
        BSTNK TYPE VBAK-BSTNK,
        BSARK TYPE VBAK-BSARK,
        BSTDK TYPE VBAK-BSTDK,
        AEDAT TYPE VBAK-AEDAT,
        BUKRS_VF TYPE VBAK-BUKRS_VF,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        ZIEME TYPE VBAP-ZIEME,
      END OF T_CRMEMO_CHANGE,
      BEGIN OF T_MVKE,
        MATNR  TYPE MVKE-MATNR,
        VKORG  TYPE MVKE-VKORG,
        VTWEG  TYPE MVKE-VTWEG,
        MTPOS  TYPE MVKE-MTPOS,
      END OF T_MVKE,
      BEGIN OF T_ORDERS,
        VBELV   TYPE VBFA-VBELV,
        POSNV   TYPE VBFA-POSNV,
        VBELN   TYPE VBFA-VBELN,
        POSNN   TYPE VBFA-POSNN,
        VBTYP_N TYPE VBFA-VBTYP_N,
      END OF T_ORDERS,
      BEGIN OF T_EKPO,
        EBELN   TYPE EKKO-EBELN,
        EBELP   TYPE EKPO-EBELP,
        WAERS   TYPE EKKO-WAERS,
        MENGE   TYPE EKPO-MENGE,
        MEINS   TYPE EKPO-MEINS,
        NETPR   TYPE EKPO-NETPR,
        PEINH   TYPE EKPO-PEINH,
        mwskz   TYPE EKPO-mwskz,
        TXJCD   TYPE EKPO-TXJCD,
      END OF T_EKPO,
      BEGIN OF T_EKBE,
        EBELN   TYPE EKBE-EBELN,
        EBELP   TYPE EKBE-EBELP,
        ZEKKN   TYPE EKBE-ZEKKN,
        VGABE   TYPE EKBE-VGABE,
        GJAHR   TYPE EKBE-GJAHR,
        BELNR   TYPE EKBE-BELNR,
        BUZEI   TYPE EKBE-BUZEI,
      END OF T_EKBE,
      BEGIN OF T_RBKP,
        BELNR   TYPE RBKP-BELNR,
        GJAHR   TYPE RBKP-GJAHR,
        BLDAT   TYPE RBKP-BLDAT,
        BUDAT   TYPE RBKP-BUDAT,
        XBLNR   TYPE RBKP-XBLNR,
        LIFNR   TYPE RBKP-LIFNR,
        RMWWR   TYPE RBKP-RMWWR,
        WMWST1  TYPE RBKP-WMWST1,
        XRECH   TYPE RBKP-XRECH,
        STBLG   TYPE RBKP-STBLG,
      END OF T_RBKP,
      BEGIN OF T_CDHDR,
        OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
        OBJECTID   TYPE CDHDR-OBJECTID,
        CHANGENR   TYPE CDHDR-CHANGENR,
        UDATE      TYPE CDHDR-UDATE,
        UTIME      TYPE CDHDR-UTIME,
      END OF T_CDHDR,
      BEGIN OF T_CDPOS,
        OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
        OBJECTID   TYPE CDHDR-OBJECTID,
        CHANGENR   TYPE CDHDR-CHANGENR,
        TABNAME    TYPE CDPOS-TABNAME,
        TABKEY     TYPE CDPOS-TABKEY,
        FNAME      TYPE CDPOS-FNAME,
        CHNGIND    TYPE CDPOS-CHNGIND,
        VALUE_NEW  TYPE CDPOS-VALUE_NEW,
        VALUE_OLD  TYPE CDPOS-VALUE_OLD,
      END OF T_CDPOS,
      BEGIN OF T_CHANGE_DOCS,
        OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
        OBJECTID   TYPE CDHDR-OBJECTID,
        CHANGENR   TYPE CDHDR-CHANGENR,
        UDATE      TYPE CDHDR-UDATE,
        UTIME      TYPE CDHDR-UTIME,
        TABNAME    TYPE CDPOS-TABNAME,
        TABKEY     TYPE CDPOS-TABKEY,
        FNAME      TYPE CDPOS-FNAME,
        CHNGIND    TYPE CDPOS-CHNGIND,
        VALUE_NEW  TYPE CDPOS-VALUE_NEW,
        VALUE_OLD  TYPE CDPOS-VALUE_OLD,
      END OF T_CHANGE_DOCS,
      BEGIN OF T_SUCCESS,
        crmemo    TYPE VBAK-vbeln,
        cmemo     TYPE VBAK-vbeln,
        orders    TYPE VBAK-vbeln,
        po        TYPE VBAK-vbeln,
        miro_no   TYPE VBAK-vbeln,
        text(20)  TYPE C,
      END OF T_SUCCESS,
      BEGIN OF T_ERROR,
        crmemo  TYPE VBAK-vbeln,
        cmemo     TYPE VBAK-vbeln,
        orders    TYPE VBAK-vbeln,
        po        TYPE VBAK-vbeln,
        miro_no   TYPE VBAK-vbeln,
        text(100) TYPE C,
      END OF T_ERROR.
    *                       WORKAREA DECLARATION
    DATA:
      WA_CRMEMO  TYPE T_CRMEMO,
      WA_CRMEMO_CHANGE TYPE T_CRMEMO_CHANGE,
      WA_MVKE    TYPE T_MVKE,
      WA_ORDERS  TYPE T_ORDERS,
      WA_CMEMO   TYPE  T_ORDERS,
      WA_PO      TYPE T_ORDERS,
      WA_EKPO    TYPE T_EKPO,
      WA_EKBE    TYPE T_EKBE,
      WA_EKBE_TEMP TYPE T_EKBE,
      WA_RBKP    TYPE T_RBKP,
      WA_RBKP_TMP TYPE T_RBKP,
      WA_CDHDR   TYPE T_CDHDR,
      WA_CDPOS   TYPE T_CDPOS,
      WA_CHANGE_DOCS TYPE T_CHANGE_DOCS,
      WA_CRMEMO_MR8M  TYPE T_CRMEMO,
      WA_SUCCESS TYPE T_SUCCESS,
      WA_ERROR   TYPE T_ERROR,
      WA_SUCCESS_MR8M TYPE T_SUCCESS,
      WA_ERROR_MR8M   TYPE T_ERROR.
    *--Work area for all the internal tables used for Sending Mail
    DATA :
      WA_OBJPACK TYPE SOPCKLSTI1,
      WA_OBJHEAD TYPE SOLISTI1,
      WA_OBJBIN TYPE SOLISTI1,
      WA_OBJTXT TYPE SOLISTI1,
      WA_RECLIST TYPE SOMLRECI1 .
    DATA:
    *-- Structure to hold Invoice Header Data
      x_docheader LIKE bapi_incinv_create_header,
    *-- Structure to hold Reversal Posting Data
      x_rev_post LIKE BAPI_INCINV_FLD.
    *                  INTERNAL TAABLE DECLARATION
    DATA:
      IT_CRMEMO      TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
      IT_CRMEMO_CHANGE TYPE STANDARD TABLE OF T_CRMEMO_CHANGE WITH HEADER LINE,
      IT_MVKE        TYPE STANDARD TABLE OF T_MVKE     WITH HEADER LINE,
      IT_CRMEMO_MIRO TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
      IT_CRMEMO_MR8M TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
      IT_ORDERS      TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
      IT_CMEMO       TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
      IT_PO          TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
      IT_EKPO        TYPE STANDARD TABLE OF T_EKPO     WITH HEADER LINE,
      IT_EKBE        TYPE STANDARD TABLE OF T_EKBE     WITH HEADER LINE,
      IT_EKBE_TEMP    TYPE STANDARD TABLE OF T_EKBE    WITH HEADER LINE,
      IT_RBKP        TYPE STANDARD TABLE OF T_RBKP     WITH HEADER LINE,
      IT_CDHDR       TYPE STANDARD TABLE OF T_CDHDR    WITH HEADER LINE,
      IT_CDPOS       TYPE STANDARD TABLE OF T_CDPOS    WITH HEADER LINE,
      IT_CHANGE_DOCS TYPE STANDARD TABLE OF T_CHANGE_DOCS WITH HEADER LINE,
      IT_SUCCESS     TYPE STANDARD TABLE OF T_SUCCESS  WITH HEADER LINE,
      IT_ERROR       TYPE STANDARD TABLE OF T_ERROR    WITH HEADER LINE,
      IT_SUCCESS_MR8M TYPE STANDARD TABLE OF T_SUCCESS WITH HEADER LINE,
      IT_ERROR_MR8M  TYPE STANDARD TABLE OF T_ERROR    WITH HEADER LINE.
    *-- Internal table to hold Invoice Item Data
    DATA:BEGIN OF it_itemdata OCCURS 0.
           INCLUDE STRUCTURE bapi_incinv_create_item.
    DATA:END OF it_itemdata.
    *-- Internal table to hold Invoice Acct Assignment Data
    DATA:BEGIN OF it_ACCOUNTingdata OCCURS 0.
           INCLUDE STRUCTURE BAPI_INCINV_CREATE_ACCOUNT.
    DATA:END OF it_accountingdata.
    *-- Internal table to hold BAPI return data
    DATA: BEGIN OF it_return OCCURS 0.
            INCLUDE STRUCTURE bapiret2.  "Return Parameter.
    DATA: END OF it_return.
    *-- Internal table to hold BAPI return data
    DATA: BEGIN OF it_return_mr8m OCCURS 0.
            INCLUDE STRUCTURE bapiret2.  "Return Parameter.
    DATA: END OF it_return_mr8m.
    *--MAIL related Internal tables
    DATA: X_DOC_CHNG TYPE SODOCCHGI1,                      " document attributes
          IT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1,    " attachment table
          IT_OBJHEAD TYPE STANDARD TABLE OF SOLISTI1,      " object header table
          IT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1,       " binary table
          IT_OBJTXT TYPE STANDARD TABLE OF SOLISTI1,       " object text
          IT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1,     " mail recipients
          it_compressed_list TYPE STANDARD TABLE OF SOLI,
          it_pdf_list TYPE STANDARD TABLE OF TLINE,
          it_pdf  TYPE tline OCCURS 10 WITH HEADER LINE,
          it_html  TYPE solisti1   OCCURS 10  WITH HEADER LINE,
    *-- Internal table for MIME data (in CHAR format)
          it_temp   TYPE bapiqcmime OCCURS 10 WITH HEADER LINE,
    *-- Internal table for storing data
          it_mime(255) TYPE c OCCURS 10 WITH HEADER LINE.
    * GLOBAL VARIABLES                                                     *
    DATA: V_PGM_ID      TYPE SY-REPID,                    " Program id
          v_zterm       TYPE lfb1-zterm,                  " Payment Terms
          v_text(75)    TYPE c,                           " To store error or success text
          v_itemno(6)   TYPE n,                           " To Increment Item No. for BAPI
          v_docnr       LIKE bapi_incinv_fld-inv_doc_no,  " For MIRO document number
          v_year1       LIKE bapi_incinv_fld-fisc_year,   " For MIRO Fiscal year
          v_spono       type TSP01-RQIDENT,               " For Spool No.
          v_type        type SOODK-OBJTP,                 " For Spool Type
          V_CRMEMO_QTY  TYPE VBAP-ZMENG,                  " For CR Memo Qty.
          V_LINE_AMOUNT TYPE EKPO-NETPR,                  " For CR Memo Item Qty.
          V_GROSSAMT    TYPE EKPO-NETPR,                  " For CR Memo Grand Qty.
          v_tax_per(3)  type n,                           " For CR Memo Tax amount %
          v_tax_amt     TYPE EKPO-NETPR,                  " For CR Memo Tax amount
          v_flag(1)     type c,                           " Flag to process fruther
          v_tot_s_mr8m  TYPE i,                           " For MR8M Success Records
          v_tot_e_mr8m  TYPE i,                           " For MR8M Error Records
          V_DATE        TYPE SY-DATUM,                    " For Sel. Screen Date
          V_DATE2(10)   TYPE C,                           " For EMail Date
          V_TIME(10)    TYPE C,                           " For EMail Time
          V_TIME2(10)   TYPE C,                           " For EMail Time
          V_INFO(100)   TYPE C,                           " For EMail Body Text
          V_TABLE_LINES TYPE SY-TABIX,                    " To Increment Email Count
          V_TEXT2       TYPE STRING   ,                   " For EMail Id text
          v_lines       TYPE i,                           " To Store PDF Lines
          v_temp(500)   TYPE c,                           " To Convert to 255 char format
          v_offset      TYPE p,                           " To Convert to 255 char format
          v_lineslen    TYPE i,                           " To Convert to 255 char format
          v_mimelen     TYPE i,                           " To Convert to 255 char format
          v_tabix       type sy-tabix.                    " To Convert to 255 char format
    * CONSTANTS                                                            *
    CONSTANTS:
      C_X(1)            TYPE C          VALUE 'X',       " Constant X or Flag
      C_E(1)            TYPE C          VALUE 'E',       " For Error check
      c_v(1)            TYPE C          VALUE 'V',       " For PO Docs
      c_o(1)            TYPE C          VALUE 'O',       " For Order Docs
      c_c(1)            TYPE C          VALUE 'C',       " For Credit Memo Docs
      c_k(1)            TYPE C          VALUE 'K',       " For CR Memo Docs
      c_u(1)            TYPE C          VALUE 'U',       " For Change tables Update
      c_ali(3)          TYPE C          VALUE 'ALI',     " For ALI Format
      c_vbak(4)         TYPE C          VALUE 'VBAK',    " For Change docs table
      C_01(2)           TYPE C          VALUE '01',      " For Serial No. & Reversal Reason
      C_02(2)           TYPE C          VALUE '02',      " For Reversal Reason
      c_blart           TYPE bkpf-blart VALUE 'RE',      " Document type
      C_MTPOS           TYPE MVKE-MTPOS VALUE 'BANS',    " Item Category group
      C_AUGRU(5)        TYPE C          VALUE 'AUGRU',   " Reason Code
      C_0000500205(10)  TYPE C          VALUE '0000500205', " GL Account #
      C_VERKBELEG(9)    TYPE C          VALUE 'VERKBELEG'.  " For Object Class
    *-- Horizontal tab & line feed constants
    CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
    CONSTANTS:
      C_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
      C_CR_LF TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF .
    * SELECTION SCREEN
    *-- Select Optons
    SELECTION-SCREEN: BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001.
      SELECT-OPTIONS: S_AUART FOR VBAK-AUART OBLIGATORY NO INTERVALS,
                                                         " Sales Document Type
                      S_AUGRU FOR VBAK-AUGRU OBLIGATORY NO INTERVALS,
                                                         " Order reason
                      S_ERDAT FOR VBAK-ERDAT OBLIGATORY.
                                        " Date on which the record was created
    SELECTION-SCREEN: END OF BLOCK B01.
    *-- Mail Sending Options
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-004.
      PARAMETERS:P_EMAIL AS CHECKBOX DEFAULT SPACE USER-COMMAND V_COM .
      PARAMETERS : P_MODE TYPE SO_ESCAPE   default 'U' MODIF ID US1.
      SELECT-OPTIONS: S_EMAIL FOR ADR6-SMTP_ADDR
                                          NO INTERVALS MODIF ID US2.
    *  SELECT-OPTIONS: S_EMAIL FOR TRDYSE01CM-USERNAME
    *                                      NO INTERVALS MODIF ID US2.
      SELECTION-SCREEN: BEGIN OF LINE.
        SELECTION-SCREEN: COMMENT 55(40) TEXT-019 MODIF ID US2.
      SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN END OF BLOCK B2.
    *            WORK AREA for SELECT-OPTIONS
    DATA :  X_EMAIL LIKE S_EMAIL.   "Work area for EMAIL select-options
    *  INITIALIZATION
    INITIALIZATION.
    *-- Default values for Sales Document Type
      CLEAR S_AUART[].
      S_AUART-SIGN = 'I'.
      S_AUART-OPTION = 'EQ'.
      S_AUART-LOW = 'CR'.
      APPEND S_AUART.
      CLEAR S_AUART.
    *-- Default values for Date on which the record was created
      V_DATE = ( SY-DATUM - 1 ).
      CLEAR S_ERDAT[].
      S_ERDAT-SIGN = 'I'.
      S_ERDAT-OPTION = 'EQ'.
      S_ERDAT-LOW =  SY-DATUM.
      S_ERDAT-HIGH =  SY-DATUM.
      APPEND S_ERDAT.
      CLEAR S_ERDAT.
    *                    TOP OF PAGE                                       *
    TOP-OF-PAGE.
    *-- Displaying standard header.
      PERFORM std_top_of_page USING sy-title.
    * A T  S E L E C T I O N   S C R E E N  O U T P U T
    *-- For modifying the selection screen layout
    AT SELECTION-SCREEN OUTPUT.
      PERFORM F_MODIFY_SCREEN.
    *                    AT SELECTION SCREEN.                              *
    AT SELECTION-SCREEN.
    *-- Subroutine to Validate selection screen fields
      PERFORM f_validate.
    *  START-OF-SELECTION                                                  *
    *START-OF-SELECTION.*
    **-- Fetch the Credit Memo Requests documents*
      *PERFORM F_GET_CREDIT_MEMO_REQUEST.*
      *IF NOT IT_CRMEMO[] IS INITIAL.*
    **-- Fetch Item Category Group*
        *PERFORM F_GET_MVKE_DOCS.*
    **-- Fetch Sales Order documents, PO Documents and Credit Memos*
        *PERFORM F_GET_SO_PO_DOCS.*
      *ENDIF.*
    **-- If Credit memo request internal table have an change records then*
    **    fetch the change documents from CDHDR and CDPOS*
      *IF NOT IT_CRMEMO_CHANGE[] IS INITIAL.*
    **-- Fetch Change Documents for CR Memos from CDHDR and CDPOS tables*
        *PERFORM F_GET_CHANGED_DOCS.*
      *ENDIF.*
    **-- Fetch Purchasing Document Item Details*
      *IF NOT IT_PO[] IS INITIAL.*
        *PERFORM F_GET_EKPO.*
      *ENDIF.*
    **-- Fetch MIRO Vendor based on the PO Details*
      *IF NOT IT_EKPO[] IS INITIAL.*
        *PERFORM F_GET_VENDOR.*
      *ENDIF.*
    *  END-OF-SELECTION                                                    *
      if v_flag is initial.
    *-- Process Vendor Debit Postings
        PERFORM F_PROCESS_MIRO.
    *-- Process Reversal Postings of Vendor Automatic Debits using TCODE MR8M
        PERFORM F_PROCESS_MR8M.
    *-- Send mail,if user enters Email id's and Email Mode is not initial
        IF P_EMAIL = C_X AND P_MODE IS NOT INITIAL AND S_EMAIL[] IS NOT INITIAL.
    *-- Get spool id
          perform f_spool_id.
    *-- EMail Logic
          PERFORM F_MAIL_LOGIC.
        ENDIF.
    *-- display the EMail RSCONN01 and Sussess and Error records of MIRO and MR8M
        perform f_display_report.
      else.
    *-- Else exit the process
        exit.
      endif.
    *&      Form  F_MODIFY_SCREEN
    *       A Form routine to modify the screen
    FORM F_MODIFY_SCREEN .
    *-- To Modify Mail Sending Options
      LOOP AT SCREEN.
        IF P_EMAIL = C_X.
          IF SCREEN-GROUP1 = 'US1' .
            SCREEN-INVISIBLE = 0.
            SCREEN-ACTIVE = 1.
            SCREEN-INPUT = 0.
            MODIFY SCREEN.
          ENDIF.
          IF SCREEN-GROUP2 = 'US2' .
            SCREEN-INVISIBLE = 0.
            SCREEN-ACTIVE = 1.
            MODIFY SCREEN.
          ENDIF.
        ELSEIF P_EMAIL = SPACE.
          IF SCREEN-GROUP1 = 'US1' .
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.
            MODIFY SCREEN.
          ENDIF.
          IF SCREEN-GROUP1 = 'US2' .
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.
            MODIFY SCREEN.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " F_MODIFY_SCREEN
    *&      Form  f_validate
    *       Validation of Selection-Screen Inputs
    FORM f_validate .
    *-- Validate Sales Document Type
      if not s_AUART[] is initial.
        select  AUART
          into s_AUART-low
          from TVAK up to 1 rows
          where AUART in s_AUART.
        endselect.
        if sy-subrc <> 0.
          message E000 with 'Invalid Sales Document Type'(e01) .
        endif.
      ENDIF.
    *-- Validate Order reason (reason for the business transaction)
      if not s_AUGRU[] is initial.
        select  AUGRU
          into s_AUGRU-low
          from TVAU up to 1 rows
          where AUGRU in s_AUGRU.
        endselect.
        if sy-subrc <> 0.
          message E000 with 'Invalid Order reason'(e02) .
        endif.
      endif.
    ENDFORM.                    " f_validate
    *&      Form  F_GET_CREDIT_MEMO_REQUEST
    *       Fetch Credit memo requests from VBAK & VBAP
    FORM F_GET_CREDIT_MEMO_REQUEST .
      SELECT A~VBELN
             B~POSNR
             A~ERDAT
             A~AUART
             A~AUGRU
             A~WAERK
             A~VKORG
             A~VTWEG
             A~SPART
             A~VDATU
             A~BSTNK
             A~BSARK
             A~BSTDK
             A~AEDAT
             A~BUKRS_VF
             B~MATNR
             B~ZMENG
             B~ZIEME
        INTO TABLE IT_CRMEMO
        FROM ( VBAK AS A
        INNER JOIN VBAP AS B ON A~VBELN = B~VBELN )
        WHERE ( A~ERDAT IN S_ERDAT
          OR  A~AEDAT IN S_ERDAT )
          AND A~AUART IN S_AUART.
      IF SY-SUBRC = 0.
        SORT IT_CRMEMO BY VBELN POSNR.
      ELSE.
        MESSAGE I000 WITH 'No Credit Memo Request selected'(002).
        v_flag = C_X.
        stop.
      ENDIF.
    ENDFORM.                    " F_GET_CREDIT_MEMO_REQUEST
    *&      Form  F_GET_MVKE_DOCS
    *       Fetch Sales Data for Material
    FORM F_GET_MVKE_DOCS .
      DATA: LV_TABIX TYPE SY-TABIX.
    *-- Fetch Sales Data for Material
      SELECT MATNR      " Material Number
             VKORG      " Sales Organization
             VTWEG      " Distribution Channel
             MTPOS      " Item category group from material master
        FROM MVKE       " Sales Data for Material
        INTO TABLE IT_MVKE
        FOR ALL ENTRIES IN IT_CRMEMO
        WHERE MATNR = IT_CRMEMO-MATNR
          AND VKORG = IT_CRMEMO-VKORG
          AND VTWEG = IT_CRMEMO-VTWEG.
      IF SY-SUBRC = 0.
        SORT IT_MVKE BY MATNR VKORG VTWEG MTPOS.
      ENDIF.
    *-- Validate Item category group if MVKE-MTOPS <> 'BANS' then ignore CM Request line item
      LOOP AT IT_CRMEMO INTO WA_CRMEMO.
        LV_TABIX = SY-TABIX.
        READ TABLE IT_MVKE INTO WA_MVKE WITH KEY MATNR = WA_CRMEMO-MATNR
                                                 VKORG = WA_CRMEMO-VKORG
                                                 VTWEG = WA_CRMEMO-VTWEG
                                                 MTPOS = C_MTPOS
                                                 BINARY SEARCH.
        IF SY-SUBRC <> 0.
          DELETE IT_CRMEMO INDEX LV_TABIX.    " Delete CR memo records
        ELSE.
    *-- Else check for credit memo request change date is not initial, and
    *   append those records to IT_CRMEMO_CHANGE internal table to retrive
    *   change documents
          IF NOT WA_CRMEMO-AEDAT IS INITIAL.
            WA_CRMEMO_CHANGE-VBELN = WA_CRMEMO-VBELN.
            WA_CRMEMO_CHANGE-POSNR = WA_CRMEMO-POSNR.
            WA_CRMEMO_CHANGE-ERDAT = WA_CRMEMO-ERDAT.
            WA_CRMEMO_CHANGE-AUART = WA_CRMEMO-AUART.
            WA_CRMEMO_CHANGE-AUGRU = WA_CRMEMO-AUGRU.
            WA_CRMEMO_CHANGE-WAERK = WA_CRMEMO-WAERK.
            WA_CRMEMO_CHANGE-VKORG = WA_CRMEMO-VKORG.
            WA_CRMEMO_CHANGE-VTWEG = WA_CRMEMO-VTWEG.
            WA_CRMEMO_CHANGE-SPART = WA_CRMEMO-SPART.
            WA_CRMEMO_CHANGE-VDATU = WA_CRMEMO-VDATU.
            WA_CRMEMO_CHANGE-BSTNK = WA_CRMEMO-BSTNK.
            WA_CRMEMO_CHANGE-BSARK = WA_CRMEMO-BSARK.
            WA_CRMEMO_CHANGE-BSTDK = WA_CRMEMO-BSTDK.
            WA_CRMEMO_CHANGE-AEDAT = WA_CRMEMO-AEDAT.
            WA_CRMEMO_CHANGE-BUKRS_VF = WA_CRMEMO-BUKRS_VF.
            WA_CRMEMO_CHANGE-MATNR = WA_CRMEMO-MATNR.
            WA_CRMEMO_CHANGE-ZMENG = WA_CRMEMO-ZMENG.
            WA_CRMEMO_CHANGE-ZIEME = WA_CRMEMO-ZIEME.
            APPEND WA_CRMEMO_CHANGE TO IT_CRMEMO_CHANGE.
            CLEAR WA_CRMEMO_CHANGE.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " F_GET_MVKE_DOCS
    *&      Form  F_GET_SO_PO_DOCS
    *       Fetch the Sales Order documents, PO documents, & Credit Memo
    FORM F_GET_SO_PO_DOCS.
    *-- Fetch Preceding sales orders based on the credit memo request
      SELECT VBELV
             POSNV
             VBELN
             POSNN
             VBTYP_N
        FROM VBFA
        INTO TABLE IT_ORDERS
        FOR ALL ENTRIES IN IT_CRMEMO
        WHERE VBELN = IT_CRMEMO-VBELN
          AND POSNN = IT_CRMEMO-POSNR
          AND VBTYP_N = C_K
          AND VBTYP_V = C_C.
      IF SY-SUBRC = 0.
        SORT IT_ORDERS BY VBELV POSNV.
    *-- Fetch Subsequent PO documents & Credit Memo based on the sales orders
        SELECT VBELV
               POSNV
               VBELN
               POSNN
               VBTYP_N
          FROM VBFA
          INTO TABLE IT_PO
          FOR ALL ENTRIES IN IT_ORDERS
          WHERE VBELV = IT_ORDERS-VBELV
            AND POSNV = IT_ORDERS-POSNV
            AND VBTYP_N IN (C_V,C_O)
            AND VBTYP_V = C_C.
        IF SY-SUBRC = 0.
          SORT IT_PO BY VBTYP_N.
    *-- Copy the IT_PO internal table contents to IT_CMEMO internal table
          IT_CMEMO[] = IT_PO[].
    *-- Delete PO documents from IT_CMEMO internal table
          DELETE IT_CMEMO WHERE VBTYP_N = C_V.
          SORT IT_CMEMO BY VBELN POSNN.
          IF IT_CMEMO[] IS INITIAL.
            MESSAGE I000 WITH 'No Credit Memo are available for CM Request'(003).
    *        v_flag = c_x.
    *        stop.
          ENDIF.
    *-- Delete Credit Memo documents from IT_PO internal table
          DELETE IT_PO WHERE VBTYP_N = C_O.
          SORT IT_PO BY VBELN POSNN.
        ENDIF.
      ENDIF.
    ENDFORM.                    " F_GET_SO_PO_DOCS
    *&      Form  F_GET_CHANGED_DOCS
    *       Fetch Change Documents for CR Memos from CDHDR and CDPOS tables
    FORM F_GET_CHANGED_DOCS .
    *-- Fetch Change Documents for CR Memos from CDHDR
      SELECT OBJECTCLAS
             OBJECTID
             CHANGENR
             UDATE
             UTIME
      FROM CDHDR
      INTO TABLE IT_CDHDR
      FOR ALL ENTRIES IN IT_CRMEMO_CHANGE
      WHERE OBJECTCLAS = C_VERKBELEG
        AND OBJECTID   = IT_CRMEMO_CHANGE-VBELN
    *    AND UDATE      = IT_CRMEMO_CHANGE-AEDAT
      IF SY-SUBRC = 0.
        SORT IT_CDHDR BY OBJECTCLAS OBJECTID CHANGENR.
    *-- Fetch Change Documents for CR Memos from CDPOS
        SELECT OBJECTCLAS
               OBJECTID
               CHANGENR
               TABNAME
               TABKEY
               FNAME
               CHNGIND
               VALUE_NEW
               VALUE_OLD
          FROM CDPOS
          INTO TABLE IT_CDPOS
          FOR ALL ENTRIES IN IT_CDHDR
          WHERE OBJECTCLAS = C_VERKBELEG
            AND OBJECTID   = IT_CDHDR-OBJECTID
            AND CHANGENR   = IT_CDHDR-CHANGENR
            AND TABNAME    = C_VBAK
            AND FNAME      = C_AUGRU
            AND CHNGIND    = C_U.
        IF SY-SUBRC = 0.
          SORT IT_CDPOS BY OBJECTCLAS OBJECTID CHANGENR.
        ENDIF.
      ENDIF.
    ENDFORM.                    " F_GET_CHANGED_DOCS
    *&      Form  F_GET_EKPO
    *       Fetch Purchasing Document Item Details
    FORM F_GET_EKPO .
    *-- Fetch Purchasing Document Item Details
      SELECT A~EBELN
             B~EBELP
             A~WAERS
             B~MENGE
             B~MEINS
             B~NETPR
             B~PEINH
             B~mwskz
             B~TXJCD
      INTO TABLE IT_EKPO
      FROM ( EKKO AS A
      INNER JOIN EKPO AS B ON A~EBELN = B~EBELN )
      FOR ALL ENTRIES IN IT_PO
      WHERE A~EBELN = IT_PO-VBELN
        AND B~EBELP = IT_PO-POSNN+1(5).
      IF SY-SUBRC = 0.
        SORT IT_EKPO BY EBELN EBELP.
      ENDIF.
    ENDFORM.                    " F_GET_EKPO
    *&      Form  F_GET_VENDOR
    *       Fetch MIRO Vendor details based on the PO Details
    FORM F_GET_VENDOR .
    DATA: LV_TABIX TYPE SY-TABIX.
    *-- Fetch History per Purchasing Document records for all the PO records
      SELECT EBELN
             EBELP
             ZEKKN
             VGABE
             GJAHR
             BELNR
             BUZEI
      FROM EKBE
      INTO TABLE IT_EKBE
      FOR ALL ENTRIES IN IT_EKPO
      WHERE EBELN = IT_EKPO-EBELN
        AND EBELP = IT_EKPO-EBELP
        AND VGABE = '2'.
    *    and STBLG = space.
      IF SY-SUBRC = 0.
        SORT IT_EKBE BY BELNR GJAHR.
    *-- Fetch the vendor details based on table IT_EKBE internal table
        SELECT BELNR
               GJAHR
               BLDAT
               BUDAT
               XBLNR
               LIFNR
               RMWWR
               WMWST1
               XRECH
               STBLG
        FROM RBKP
        INTO TABLE IT_RBKP
        FOR ALL ENTRIES IN IT_EKBE
        WHERE BELNR = IT_EKBE-BELNR
          AND GJAHR = IT_EKBE-GJAHR.
        IF SY-SUBRC = 0.
          SORT IT_RBKP BY BELNR GJAHR.
        ENDIF.
      ENDIF.
    *-- Sort PO History documents based on PO # and PO Item
      SORT IT_EKBE BY EBELN EBELP.
    *-- Copy the PO History documents into IT_EKBE_TEMP internal table
      IT_EKBE_TEMP[] = IT_EKBE[].
    *-- Delete PO History documents from IT_EKBE_TEMP internal table
    *   comparing with IT_RBKP where (STBLG) Reversal document number
    *   is initial
      LOOP AT IT_EKBE_TEMP INTO WA_EKBE_TEMP.
        LV_TABIX = SY-TABIX.
        READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                 GJAHR = WA_EKBE_TEMP-GJAHR
    *                                             XRECH = SPACE
                                                 STBLG = SPACE.
        IF SY-SUBRC <> 0.
          DELETE IT_EKBE_TEMP INDEX LV_TABIX.
        ENDIF.
        CLEAR: WA_EKBE_TEMP, WA_RBKP.
      ENDLOOP.
    ENDFORM.                    " F_GET_VENDOR
    *&      Form  F_PROCESS_MIRO
    *       Process MIRO
    FORM F_PROCESS_MIRO .
      DATA:
        lv_itemno         TYPE i,
        lv_tabix          type sy-index,
        lc_check(1)       TYPE c VALUE 'X',
        V_FILL_ITEM,
        lv_rbkp_bldat type sy-datum.
      clear : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
      refresh : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
    *-- Copy all the CR Memo Docs and delete order reason not in S_AUGRU
      IT_CRMEMO_MR8M[] = IT_CRMEMO[].
    *-- Delete Reversal postings which are not in S_AUGRU
      DELETE IT_CRMEMO_MR8M WHERE AUGRU IN S_AUGRU.
    *-- Delete Reversal postings where AEDAT is initial
      DELETE IT_CRMEMO_MR8M where aedat is initial.
    *-- Delete order reason which are not in S_AUGRU
      DELETE IT_CRMEMO WHERE AUGRU NOT IN S_AUGRU.
    *-- Loop through the credit memo request records
      LOOP AT IT_CRMEMO INTO WA_CRMEMO.
        lv_tabix = sy-tabix.
    *-- If credit memo request change date is not initial then
    *   send change date (AEDAT) to lv_rbkp_bldat
        if not WA_CRMEMO-aedat is initial.
          lv_rbkp_bldat =  WA_CRMEMO-aedat.
        else.
    *-- If credit memo request change date is initial then
    *   send create date (ERDAT) to lv_rbkp_bldat
          lv_rbkp_bldat =  WA_CRMEMO-erdat.
        endif.
        READ TABLE IT_ORDERS INTO WA_ORDERS WITH KEY VBELN = WA_CRMEMO-VBELN
                                                     POSNN = WA_CRMEMO-POSNR.
        IF SY-SUBRC = 0.
          READ TABLE IT_PO INTO WA_PO WITH KEY VBELV = WA_ORDERS-VBELV
                                               POSNV = WA_ORDERS-POSNV.
          IF SY-SUBRC = 0.
            READ TABLE IT_EKPO INTO WA_EKPO WITH KEY EBELN = WA_PO-VBELN
                                                     EBELP = WA_PO-POSNN.
            IF SY-SUBRC = 0.
    *-- Read IT_EKBE_TEMP internal table which contains records which are not reversed
              READ TABLE IT_EKBE_TEMP INTO WA_EKBE_TEMP WITH KEY EBELN = WA_EKPO-EBELN
                                                                 EBELP = WA_EKPO-EBELP.
              IF SY-SUBRC = 0.
    *-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = 'X' ,
    *   check for invoice records for the correspnding CR Memo records
                READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                         GJAHR = WA_EKBE_TEMP-GJAHR
                                                         XRECH = C_X.
                IF SY-SUBRC = 0.
    *-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = SPACE,
    *   and document date = CR Memo creation date
    *   and reference document number = PO number
                  READ TABLE IT_RBKP INTO WA_RBKP_TMP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                               GJAHR = WA_EKBE_TEMP-GJAHR
                                                               BLDAT = WA_CRMEMO-ERDAT
                                                               XRECH = ' '
                                                               XBLNR+0(10) = WA_EKBE_TEMP-ebeln.
    *                                                           STBLG = SPACE.
                  IF SY-SUBRC = 0.
                    CONTINUE.
                  ELSE.
    *-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
                    perform f_quantity_conv.
    *-- Filling the Line items data
    *-- Incrementing the item no
                    lv_itemno = lv_itemno + 1.
                    v_itemno  = lv_itemno.
                    it_itemdata-invoice_doc_item  = v_itemno.
                    it_itemdata-po_number         = WA_ekPO-ebeln.
                    it_itemdata-po_item           = WA_EKPO-EBELP.
                    it_itemdata-tax_code          = WA_ekpo-mwskz.
                    it_itemdata-TAXJURCODE        = WA_ekpo-TXJCD.
    *-- Converting SAP amount to BAPI format by passing line item amount and currency
                    PERFORM f_currency_amount_sap_to_bapi USING    WA_EKPO-waers
                                                                   V_LINE_AMOUNT
                                                          CHANGING it_itemdata-item_amount .
                    it_itemdata-quantity          = ( WA_CRMEMO-ZMENG * V_CRMEMO_QTY ).
                    it_itemdata-po_unit           = WA_EKPO-MEINS.
                    APPEND it_itemdata.
    *-- Populate Account Assignment data
                    IT_ACCOUNTINGDATA-INVOICE_DOC_ITEM = v_itemno.
                    IT_ACCOUNTINGDATA-XUNPL       = space.
                    IT_ACCOUNTINGDATA-SERIAL_NO   = C_01.
                    IT_ACCOUNTINGDATA-TAX_CODE    = it_itemdata-tax_code.
                    IT_ACCOUNTINGDATA-TAXJURCODE  = it_itemdata-TAXJURCODE.
                    IT_ACCOUNTINGDATA-ITEM_AMOUNT = it_itemdata-item_amount.
                    IT_ACCOUNTINGDATA-QUANTITY    = it_itemdata-quantity.
                    IT_ACCOUNTINGDATA-PO_UNIT     = it_itemdata-po_unit.
                    IT_ACCOUNTINGDATA-GL_ACCOUNT  = C_0000500205.
                    append IT_ACCOUNTINGDATA.
                    clear IT_ACCOUNTINGDATA.
                    CLEAR it_itemdata.
                  endif.
                endif.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
    *-- At end of each credit memo request fill the header details of BAPI FM and
    *-- post the BAPI
        AT END OF VBELN.
          read table it_crmemo into wa_crmemo index lv_tabix.
    *-- Populate the document Header
    *-- Getting the header data for invoice
          x_docheader-invoice_ind  = space.
          x_docheader-doc_type     = c_blart.
          x_docheader-doc_date     = lv_rbkp_bldat.
          x_docheader-pstng_date   = lv_rbkp_bldat.
          x_docheader-ref_doc_no   = WA_RBKP-XBLNR.
          x_docheader-comp_code    = WA_CRMEMO-BUKRS_VF.
          x_docheader-CURRENCY     = WA_CRMEMO-WAERK.
          x_docheader-calc_tax_ind = lc_check.
    *-- Logic to find the Tax %
          v_tax_per = ( WA_RBKP-WMWST1 / ( WA_RBKP-RMWWR - WA_RBKP-WMWST1 ) ) * 100.
          v_tax_amt = ( V_GROSSAMT *  v_tax_per ) / 100.
          V_GROSSAMT =  ( V_GROSSAMT + v_tax_amt ).
          x_docheader-gross_amount = V_GROSSAMT.
          CLEAR:v_docnr, v_year1.
    *-- Calling BAPI to create PO invoice document
          CHECK NOT IT_ITEMDATA[] IS INITIAL.
          CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
            EXPORTING
              headerdata       = x_docheader
            IMPORTING
              invoicedocnumber = v_docnr
              fiscalyear       = v_year1
            TABLES
              itemdata         = it_itemdata[]
              ACCOUNTingDATA    = it_ACCOUNTingDATA[]
    *          GLACCOUNTDATA    =
    *          taxdata          =
              return           = it_return.
    *-- Commit work
          IF NOT v_docnr IS INITIAL.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
    *-- Move the data to Success Internal Table
            wa_success-crmemo  = wa_crmemo-vbeln.
            wa_success-cmemo   = wa_cmemo-vbeln.
            wa_success-orders  = wa_orders-vbelv.
            wa_success-po      = wa_po-vbeln.
            wa_success-miro_no = v_docnr.
            wa_success-text    = 'MIRO is Posted'.
            append wa_success TO it_success.
            clear wa_success.
          ENDIF.
    *--   Read the values in the table IT_RETURN.
          CLEAR it_return.
          READ TABLE it_return INDEX 1.
    *   If message type is error then roll back the work
          IF it_return-type = C_E.
    *-- Roll back
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    *-- Move the data to Error Internal Table
            wa_error-crmemo = wa_crmemo-vbeln.
            wa_error-cmemo  = wa_cmemo-vbeln.
            wa_error-orders = wa_orders-vbelv.
            wa_error-po     = wa_po-vbeln.
            wa_error-text   = it_return-MESSAGE.
            append wa_error TO it_error.
            clear wa_error.
          ENDIF.
          refresh: it_return, it_itemdata, it_accountingdata.
          clear: V_GROSSAMT, it_return, it_itemdata, wa_crmemo, wa_orders, wa_po,
                 wa_ekpo, WA_EKBE_TEMP, wa_rbkp, wa_rbkp_tmp, v_docnr, v_year1, WA_SUCCESS,
                 WA_ERROR, it_accountingdata, v_tax_per, v_tax_amt, V_FILL_ITEM, lv_rbkp_bldat.
        ENDAT.
      ENDLOOP.
    ENDFORM.                    " F_PROCESS_MIRO
    *&      Form  f_quantity_conv
    *       Quantity Conversion
    FORM f_quantity_conv .
    *-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
      CLEAR: V_LINE_AMOUNT, V_CRMEMO_QTY.
      call function 'MC_UNIT_CONVERSION'
        EXPORTING
          MATNR                = WA_CRMEMO-MATNR
          nach_meins           = WA_EKPO-MEINS
          von_meins            = WA_CRMEMO-ZIEME
        IMPORTING
          UMREF                = V_CRMEMO_QTY
        EXCEPTIONS
          CONVERSION_NOT_FOUND = 1
          MATERIAL_NOT_FOUND   = 2
          NACH_MEINS_MISSING   = 3
          OVERFLOW             = 4
          VON_MEINS_MISSING    = 5
          OTHERS               = 6.
      if sy-subrc <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ELSE.
        V_LINE_AMOUNT = ( V_CRMEMO_QTY  * WA_CRMEMO-ZMENG * WA_EKPO-peinh * WA_EKPO-NETPR ).
        V_GROSSAMT    = V_GROSSAMT + V_LINE_AMOUNT.
      ENDIF.
    ENDFORM.                    " f_quantity_conv
    *&      Form  f_currency_amount_sap_to_bapi
    *       SAP Amount to BAPI Amount
    FORM f_currency_amount_sap_to_bapi  USING    p_waers
                                                 p_kbetr
                                        CHANGING p_amt_doccur.
      DATA : lv_waers LIKE  tcurc-waers,
             lv_sapamount LIKE bapicurr-bapicurr,
             lv_bapi_amount LIKE bapicurr-bapicurr.
      lv_waers = p_waers.
      lv_sapamount = p_kbetr.
      CALL FUNCTION 'CURRENCY_AMOUNT_SAP_TO_BAPI'
        EXPORTING
          currency    = lv_waers
          sap_amount  = lv_sapamount
        IMPORTING
          bapi_amount = lv_bapi_amount.
      p_amt_doccur = lv_bapi_amount.
    ENDFORM.                    " f_currency_amount_sap_to_bapi
    *&      Form  f_display_report
    *       Display Report
    FORM f_display_report .
    *-- Success Report
      IF NOT IT_SUCCESS[] IS INITIAL.
        ULINE AT /1(129).
        WRITE:/1 sy-vline, 'CR Memo',
               19 sy-vline, 'Credit Memo',
               39 sy-vline, 'Sales Order',
               59 sy-vline, 'Purchase Order',
               79 sy-vline, 'MIRO Number',
               99 sy-vline, 'Text',
               129 sy-vline.
        ULINE AT /1(129).
        LOOP AT it_success into wa_success.
          WRITE:/1 sy-vline, wa_success-crmemo,
                 19 sy-vline, wa_success-cmemo,
                 39 sy-vline, wa_success-orders,
                 59 sy-vline, wa_success-po,
                 79 sy-vline, wa_success-miro_no,
                 99 sy-vline, wa_success-text,
                 129 sy-vline.
        ENDLOOP.
        ULINE AT /1(129).
        SKIP 2.
      ENDIF.
    *-- Error Report
      IF NOT IT_ERROR[] IS INITIAL.
        ULINE AT /1(179).
        WRITE:/1 sy-vline,  'CR Memo',
               19 sy-vline, 'Credit Memo',
               39 sy-vline, 'Sales Order',
               59 sy-vline, 'Purchase Order',
               79 sy-vline, 'Error Text',
               179 sy-vline.
        ULINE AT /1(179).
        LOOP AT IT_ERROR into WA_ERROR.
          WRITE:/1 sy-vline, WA_ERROR-crmemo,
                 19 sy-vline, WA_ERROR-cmemo,
                 39 sy-vline, WA_ERROR-orders,
                 59 sy-vline, WA_ERROR-po,
                 79 sy-vline, WA_ERROR-text,
                 179 sy-vline.
        ENDLOOP.
        ULINE AT /1(179).
      ENDIF.
      IF NOT IT_SUCCESS_MR8M[] IS INITIAL.
        ULINE AT /1(129).
        WRITE:/1 sy-vline, 'CR Memo',
               19 sy-vline, 'Credit Memo',
               39 sy-vline, 'Sales Order',
               59 sy-vline, 'Purchase Order',
               79 sy-vline, 'Reversal Posting No.',
               99 sy-vline, 'Text',
               129 sy-vline.
        ULINE AT /1(129).
        LOOP AT it_success_mr8m into wa_success_mr8m.
          WRITE:/1 sy-vline, wa_success_mr8m-crmemo,
                 19 sy-vline, wa_success_mr8m-cmemo,
                 39 sy-vline, wa_success_mr8m-orders,
                 59 sy-vline, wa_success_mr8m-po,
                 79 sy-vline, wa_success_mr8m-miro_no,
                 99 sy-vline, wa_success_mr8m-text,
                 129 sy-vline.
        ENDLOOP.
        ULINE AT /1(129).
        SKIP 2.
      ENDIF.
    *-- Error Report
      IF NOT IT_ERROR_MR8M[] IS INITIAL.
        ULINE AT /1(179).
        WRITE:/1 sy-vline,  'CR Memo',
               19 sy-vline, 'Credit Memo',
               39 sy-vline, 'Sales Order',
               59 sy-vline, 'Purchase Order',
               79 sy-vline, 'Error Text',
               179 sy-vline.
        ULINE AT /1(179).
        LOOP AT IT_ERROR_MR8M into WA_ERROR_MR8M.
          WRITE:/1 sy-vline, WA_ERROR_MR8M-crmemo,
                 19 sy-vline, WA_ERROR_MR8M-cmemo,
                 39 sy-vline, WA_ERROR_MR8M-orders,
                 59 sy-vline, WA_ERROR_MR8M-po,
                 79 sy-vline, WA_ERROR_MR8M-text,
                 179 sy-vline.
        ENDLOOP.
        ULINE AT /1(179).
      ENDIF.
    ENDFORM.                    " f_display_report
    *&      Form  F_PROCESS_MR8M
    *       Process Reversal postings
    FORM F_PROCESS_MR8M .
      clear: wa_CRMEMO_MR8M.
      LOOP AT IT_CRMEMO_MR8M into WA_CRMEMO_MR8M.
       read table it_cdpos into wa_cdpos with key OBJECTID = WA_CRMEMO_MR8M-VBELN.
       if sy-subrc <> 0.
         CONTINUE.
       ELSE.
       if wa_cdpos-value_old in s_augru.
        READ TABLE IT_ORDERS INTO WA_ORDERS WITH KEY VBELN = wa_CRMEMO_MR8M-VBELN
                                                     POSNN = wa_CRMEMO_MR8M-POSNR.
        IF SY-SUBRC = 0.
    *      READ TABLE IT_CMEMO INTO WA_CMEMO WITH KEY VBELV = WA_ORDERS-VBELV
    *                                                 POSNV = WA_ORDERS-POSNV.
    *      IF SY-SUBRC = 0.
            READ TABLE IT_PO INTO WA_PO WITH KEY VBELV = WA_ORDERS-VBELV
                                                 POSNV = WA_ORDERS-POSNV.
            IF SY-SUBRC = 0.
              READ TABLE IT_EKPO INTO WA_EKPO WITH KEY EBELN = WA_PO-VBELN
                                                       EBELP = WA_PO-POSNN.
              IF SY-SUBRC = 0.
    *          READ TABLE IT_EKBE INTO WA_EKBE WITH KEY EBELN = WA_EKPO-EBELN
    *                                                   EBELP = WA_EKPO-EBELP.
    *          IF SY-SUBRC = 0.
                LOOP AT IT_EKBE into WA_EKBE WHERE EBELN = WA_EKPO-EBELN
                                             AND   EBELP = WA_EKPO-EBELP.
                  READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE-BELNR
                                                           GJAHR = WA_EKBE-GJAHR
    *                                                     BLDAT = WA_CRMEMO_MR8M-AEDAT
                                                           XBLNR+0(10) = WA_EKBE-EBELN
                                                           XRECH = SPACE
                                                           STBLG = SPACE.
                  IF SY-SUBRC = 0.
                    move: WA_RBKP-BELNR   TO X_REV_POST-INV_DOC_NO,
                          WA_RBKP-GJAHR   TO X_REV_POST-FISC_YEAR,
                          WA_RBKP-BUDAT   TO X_REV_POST-PSTNG_DATE.
                    IF WA_RBKP-BUDAT+4(2) = SY-DATUM+4(2).
                      X_REV_POST-REASON_REV = C_01.
                    ELSE.
                      X_REV_POST-REASON_REV = C_02.
                    ENDIF.
                  ENDIF.
                ENDLOOP.
    *-- Call the FM for MIRO reversal
                  CALL FUNCTION 'BAPI_INCOMINGINVOICE_CANCEL'
                  EXPORTING
                    INVOICEDOCNUMBER          = X_REV_POST-INV_DOC_NO
                    FISCALYEAR                = X_REV_POST-FISC_YEAR
                    REASONREVERSAL            = X_REV_POST-REASON_REV
                    POSTINGDATE               = X_REV_POST-PSTNG_DATE
                  IMPORTING
                    INVOICEDOCNUMBER_REVERSAL = X_REV_POST-INV_DOC_NO
                    FISCALYEAR_REVERSAL       = X_REV_POST-FISC_YEAR
                  TABLES
                    RETURN                    = it_return_mr8m.
    *-- Commit work
                IF NOT X_REV_POST-INV_DOC_NO IS INITIAL.
                  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                    EXPORTING
                      wait = 'X'.
    *-- Move the data to Success Internal Table
                  wa_success_mr8m-crmemo  = wa_crmemo-vbeln.
                  wa_success_mr8m-cmemo   = wa_cmemo-vbeln.
                  wa_success_mr8m-orders  = wa_orders-vbelv.
                  wa_success_mr8m-po      = wa_po-vbeln.
                  wa_success_mr8m-text    = 'MR8M Done'.
                  append wa_success_mr8m TO it_success_mr8m.
                  clear wa_success_mr8m.
                ENDIF.
    *-- Read the values in the table IT_RETURN.
                CLEAR it_return_mr8m.
                READ TABLE it_return_mr8m INDEX 1.
    *-- If message type is error then roll back the work
                IF it_return_mr8m-type = 'E' .
    *-- Roll back
                  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    *-- Move the data to Error Internal Table
                  wa_error_mr8m-crmemo = wa_crmemo-vbeln.
                  wa_error_mr8m-cmemo  = wa_cmemo-vbeln.
                  wa_error_mr8m-orders = wa_orders-vbelv.
                  wa_error_mr8m-po     = wa_po-vbeln.
                  wa_error_mr8m-text   = it_return_mr8m-MESSAGE.
                  append wa_error_mr8m TO it_error_mr8m.
                  clear wa_error_mr8m.
                ENDIF.
    *            ENDIF.
    *          ENDIF.
              ENDIF.
            ENDIF.
    *      ENDIF.
        ENDIF.
        ENDIF.
        ENDIF.
        CLEAR: wa_error_mr8m, wa_SUCCESS_mr8m, X_REV_POST, wa_CRMEMO_MR8M,
               wa_orders, wa_po, wa_ekpo, wa_ekbe, wa_rbkp, wa_cmemo.
        REFRESH: IT_RETURN_MR8M.
      endloop.
    ENDFORM.                    " F_PROCESS_MR8M
    *&      Form  F_spool_id
    *       Create a new spool ID
    FORM F_spool_id .
    *-- Create a new spool from the data in data_tab
    *--  new-page line-size sy-linsz print on
      new-page line-size 255 print on
      destination 'LOCL'(p19) "<<== my printer
    *-- receiver 'TJOSVOB'
      cover text 'Spool title'(p20) " <<== Title or Spool req. name
      list name 'List name'(p21)
      list dataset 'List Dataset'(p22)
      immediately ' '                  " X means print now
      keep in spool c_x                " X means keep spool
      new list identification c_x
      no dialog .
    *-- Writing Report
    *-- In this  perform you will write the code for displaying the list
      perform f_display_report.
    *--  new-page print off
      new-page print off.
    ENDFORM.                    " F_spool_id
    *&      Form  F_MAIL_LOGIC
    *       Logic to send a mail for the given Email ID's
    FORM F_MAIL_LOGIC .
      data : wa_tsp01sys type tsp01sys.
      clear v_spono.
      v_spono = sy-spono.
    *  v_attach_desc = sy-title.
    *-- Convert the Spool ID into PDF format
      perform f_pdf_conversion tables it_compressed_list
                                      it_pdf_list
                                      using  v_spono.
    *-- Send the Mail in PDF Format
      perform f_send_mail.
    ENDFORM.                    " F_MAIL_LOGIC
    *&      Form  f_pdf_conversion
    *       Read the spool and convert into PDF format
    *      -->P_ITAB_COMPRESSED_LIST  text
    *      -->P_ITAB_PDF_LIST  text
    *      -->P_V_SPONO  text
    FORM f_pdf_conversion  TABLES   it_compressed_list structure soli
                                    it_pdf_list structure tline
                           using    lv_spooln type tsp01-rqident.
    clear: it_compressed_list, it_pdf_list.
    refresh: it_compressed_list, it_pdf_list.
    *-- Call the FM "RSPO_RETURN_SPOOLJOB" to read the spool by passing the spool number
      call function 'RSPO_RETURN_SPOOLJOB'
           exporting
                rqident              = lv_spooln
                desired_type         = v_type
           importing
                real_type            = v_type
           tables
                buffer               = it_compressed_list
                buffer_pdf           = it_pdf_list
           exceptions
                no_such_job          = 1
                job_contains_no_data = 2
                selection_empty      = 3
                no_permission        = 4
                can_not_access       = 5
                read_error           = 6
                type_no_match        = 7
                others               = 8.
      if sy-subrc <> 0.
        message I000 with 'Error in spool reading'(017).
      endif.
    *-- If the List type is ALI call the FM "CONVERT_ABAPSPOOLJOB_2_PDF"
    *   to convert list into PDF Format
      if  v_type = c_ali.                          " for List it is ALI
        call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
             exporting
                  src_spoolid              = lv_spooln
             tables
                  pdf                      = it_pdf
             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.
        if sy-subrc <> 0.
          message e000
                  with'Error in convertion of list into PDF format'(018).
        endif.
    *-- Logic to convert the given format into 255 character format in IT_PDF
        describe table it_pdf lines v_lines.
        describe field it_pdf length v_lineslen  IN character MODE.
        describe field it_temp length v_mimelen IN character MODE.
        LOOP AT it_pdf.
          v_tabix = sy-tabix.
          MOVE it_pdf TO v_temp+v_offset.
          IF v_tabix = v_lines.
            v_lineslen = strlen( it_pdf ).
          ENDIF.
          v_offset = v_offset + v_lineslen.
          IF v_offset GE v_mimelen.
            CLEAR it_temp.
            it_temp = v_temp(v_mimelen).
            APPEND it_temp.
            SHIFT v_temp BY v_mimelen PLACES.
            v_offset = v_offset - v_mimelen.
          ENDIF.
          IF v_tabix = v_lines.
            IF v_offset GT 0.
              CLEAR it_temp.
              it_temp = v_temp(v_offset).
              APPEND it_temp.
            ENDIF.
          ENDIF.
        ENDLOOP.
        LOOP AT it_temp.
          it_mime(255) = it_temp-line.
          APPEND it_mime.
        ENDLOOP.
    *-- Final Data to send to EMail
        it_html[] = it_mime[].
      endif.
    ENDFORM.                    " f_pdf_conversion
    *&      Form  f_send_mail
    *       Send EMail Logic
    FORM f_send_mail .
    data : wa_tsp01sys type tsp01sys.
    *-- Populate Mail Id's
      WA_RECLIST-REC_TYPE = P_MODE.
      WA_RECLIST-EXPRESS  = C_X.
    *-- Loop through the Emial select options
      LOOP AT S_EMAIL INTO X_EMAIL.
        WA_RECLIST-RECEIVER = X_EMAIL-LOW.
    *-- append receiver table
        APPEND WA_RECLIST TO IT_RECLIST.
      ENDLOOP.
    *-- If receiver table is not initial
      CHECK IT_RECLIST[] IS NOT INITIAL.
    *--To check Mail ID's internal table should not be Empty.
    *--populate document attributes
    *-- Mail subject line
      CLEAR: X_DOC_CHNG.
      X_DOC_CHNG-OBJ_NAME = 'HEADING'.
      CONCATENATE 'Automatic Vendor Dedit Postings'(005)
                  SY-DATUM
                  INTO X_DOC_CHNG-OBJ_DESCR SEPARATED BY SPACE.
    *-- Mail body
      CONCATENATE 'Automatic Vendor Dedit Postings'(005)
                 ' is attached.'(006)
                 INTO WA_OBJTXT SEPARATED BY SPACE.
      APPEND WA_OBJTXT TO IT_OBJTXT.
    *-- Append Date and Time into Body of em

  • Is there a standard way to plug in custom authentication code

    Is there a standard way to plug in use my own custom authentication code using forms authentication when I am using servlets/jsp for my website. I read the spec and found that the spec requires servlet containers to support forms authentication, but, the process seems to be transparent to the developer. This restricts me to store user information in the format imposed by the container provider. I cannot use, MS Active directory for example, to store user attributes and use it for forms authentication. Also, I could not find any standard way in which HttpServletRequest.getRemoteUser() works. Shouldn't there be a set of interfaces abstracting authentication process, which developers can implement for customized authentication mechanisms.
    Thanks
    Nikhil.

    Greetings,
    Is there a standard way to plug in use my own custom authentication code using formsNo. There are standard "authentication mechanisms" but that's not quite the same thing. Like most things in J2EE, the "what" of things are specified but the "how" them are left to the vendor. Consult your vendor docs.
    authentication when I am using servlets/jsp for my website. I read the spec and found that the spec
    requires servlet containers to support forms authentication, but, the process seems to be transparent
    to the developer. This restricts meFor the most part, "forms" authentication is transparent to the developer - at least, with respect to directly responding to and handling the request. The developer, however, does have some significant work to do with regard to the form itself and any associated error "pages". The point of the "standard authentication schemes", however, is to delegate the work of actual authentication processing to the container and, thereby, make it transparent to the developer (one of the many "application services" provided by the application server ;).
    to store user information in the format imposed by the container provider. I cannot use, MS Active
    directory for example, to store user attributes and use it for forms authentication. Also, I could notAgain read your vendor docs on how to "plug in" your own authentication handler(s). Most support it in some fashion which typically involves implementing some interface(s) and/or abstract class(es). Many also support it through their own "standard" component handlers, like an EJB invoker, where the invoked component is expected to function in a pre-determined way.
    Of course, there's nothing in the specification that says authentication must be handled by the container (only that it must be supported)! You're free to implement a login mechanism through your own proprietary JSP page and/or servlet (and/or EJB), and bypass the container entirely. ;)
    find any standard way in which HttpServletRequest.getRemoteUser() works.Regardless of the standard authentication scheme used (i.e. handled by the container), the user's authenticated login ID is returned by the method. Unfortunately, this means the method is useless if your own "authentication system" is used in lieu of the container - but, of course, in such a case the method should also be un-needed. ;)
    Shouldn't there be a set of interfaces abstracting authentication process, which developers can
    implement for customized authentication mechanisms.It's a matter of debate.
    Thanks
    Nikhil.Regards,
    Tony "Vee Schade" Cook

Maybe you are looking for

  • How can I delete an old Itunes account?

    How can I delete an Itunes account that is an old email address that is no longer accessible I cannot play some tunes on itunes that were autorizes with that email account ?

  • Weird bug after upgrading itunes to 7.5 and going back to 7.2

    hey everyone, I've made a series of mistakes. I run OS X 10.3.9 on a G4 desktop. I upgraded itunes 7.2 to 7.5 and when it didn't work i tried to go back. I found a way, but i didn't uninstall 7.5 correctly and developed a bug. whenever i click on a .

  • I have sluggish video and audio when mirroring ipad 3 or iphone.  Any solution?

    I have the new ipad and also the latest iphone.  I really want to use mirroring to stream a particular video each day that i subscribe to using the mirroring feature.  I have found that the audio keeps dropping and playing catch up.   The audio drops

  • Windows 2008 R2 ADCS install fails

    Hello,    I am trying to install a Standalone Root CA on a Windows 2008 R2 machine.  Each time I try to install the role it says installed with errors.  The error is 0x80070422, I am only trying to install the CA and CA Web Enrollment roles.  I can g

  • XL Reporter installation

    When I am trying to install XL Reporter the following error has come. Error preparing Matadata repository. Plz help me. Thanks.