This time the problem which I solved was not an ABAP problem, although at the beginning I thought it is, as while creating of deliveries without reference in standard transaction were done correctly without any issues, then when I tried to do it in ABAP, I always received the error VL473 - Copying is not poss.because an entry is missing in Table TVCPL. 

I thought that this is some kind of nonsense as with standard t-code it was working correctly, so I tried several FM to create deliveries without reference but always with the same result as you can see on picture bellow. 

Then I did what I should do from beginning. I used where used function to display where TVCPL table is used and I found two views V_TVCPLAK and V_TVCPLAP.

I started with the first one as from experience I know that if SAP table had K at the end of the name that this must be configuration of header (Kopf).

I've inserted my new delivery type as target delivery type and I've filled data transfer of header data with 301 - which is a special routine for delivery header without reference.

I've run my code again, and I was surprised that I have still the same error message.

But when I double clicked on details I saw that there is now additional info beside delivery type.

  

I guessed that I have to open the second view now and this was what I did.

This time I've entered item category which was visible in error details and I user routine 302 for data transfer of item data without reference order.

  

Once saved I rerun the program and finally I received positive result.

    

The conclusion is: do not assume that if something is workning in standard transaction, will work also in BAPI without additional settings :-) 

 

Bellow you can find piece of code which I used to create outbound delivery without reference document.

 

  method create_delivery_wo.
    data:    error_log     type                   bapiret2_t,
             dates         type standard table of bapidlvdeadln,
             dlv_items     type standard table of bapidlvnorefitem,
             created_items type standard table of bapidlvitemcreated,
             timestamp     type                   timestamp.


    insert value #(   material c_source-matnr
                      dlv_qty c_source-bdmng
                      sales_unit c_source-meins
                      plant  c_source-werks
                   into table dlv_items.

    get time stamp field timestamp.

    "delivery date
    insert value #(  timetype 'WSHDRLFDAT'
                     timestamp_utc  timestamp
                     timezone  sy-zonlo
                     into table dates.

    "Goods issue date
    insert value #(  timetype 'WSHDRWADAT'
                      timestamp_utc  timestamp
                      timezone  sy-zonlo
                    into table dates.


    call function 'BAPI_OUTB_DELIVERY_CREATENOREF'
      exporting
        ship_point    del_shipping_point    " Shipping Point
        dlv_type      'ZLO0'    " Delivery Type
        salesorg      del_sales_org   " Sales Organization
        distr_chan    '90'    " Distribution Channel
        division      '99'    " Division
        ship_to       c_source-kunnr   " Goods Recipient
      tables
        dates         dates    " Delivery Deadlines
        dlv_items     dlv_items    " Delivery Item Without Reference
        created_items created_items    " Generated Delivery Items
        return        error_log.    " Return Parameter(s)

    append lines of error_log to bapi_log.
    loop at error_log assigning field-symbol(<err>where type ca 'EAX'.
      exit.
    endloop.
    if sy-subrc ne 0.
      commit work.
    else.
      rollback work.
    endif.

  endmethod.

Enjoy!