Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

to print a range of invoices

Former Member
0 Kudos

Hi

I have a smart form which can print an invoice if i give a single number.how can i do it for a range of invoice numbers with the same program.please help.

3 REPLIES 3

Former Member
0 Kudos

Hi,

I think you are using prin program selection screen to display the invoice.. M i right??

If yes.. Then it is possible to print smart form for number of times..

Just call you smart form in a loop on the select option table.. means keep a loop on the select option table coming form screen.

pass the number one by one and than pass it to smart form calling FM..

But you need to adjus all the print program parameters very well.. eg No-dialog = 'X'.

Regards,

Lokesh.

Former Member
0 Kudos

Hi,

Below is a similar program for calling smartforms multiple times.

The user wnter the selection criteta using select options which displays list of applicapble documents with checkboxes.

Then user can selct the documnets he wants to be print (create application tool bar butonusing PF status which will trigger AT line selection event.

REPORT ZT_WM_PTO_DRIVER NO STANDARD PAGE HEADING .

INCLUDE ZT_WM_PTO_DRIVER_TOP.

----


*SELECTION-SCREEN

----


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:

so_lgnum FOR LTAK-LGNUM,

so_tanum FOR LTAK-TANUM,

so_vbeln FOR LTAK-VBELN.

SELECTION-SCREEN END OF BLOCK b1.

----


*START-OF-SELECTION

----


START-OF-SELECTION.

SELECT tLGNUM tTANUM tBDATU tnoitm

dVBELN dLFART dKUNNR dTERNR

INTO CORRESPONDING FIELDS OF TABLE lt_tempdata

FROM LTAK AS t INNER JOIN LIKP AS d ON tVBELN = dVBELN

WHERE tlgnum IN so_lgnum AND ttanum IN so_tanum AND t~VBELN IN so_vbeln. "Get the list of documents as per the selection

IF sy-subrc eq 0.

PERFORM createlist.

ELSE.

MESSAGE E001(0) WITH 'Retry with other values'.

ENDIF.

----


*AT LINE-SELECTION.

----


AT USER-COMMAND.

CASE sy-ucomm. "Created Buttons on Application Tool Bar.

WHEN 'PB1'. "Fetch the data for the selected data documents and call the smart form.

REFRESH: lt_selectdata,

lt_tempdata.

CLEAR ls_ilist.

LINES = LINES + 2.

IF sy-lsind = 1.

DO LINES TIMES.

READ LINE SY-INDEX FIELD VALUE ls_ilist-CB1.

IF ls_ilist-CB1 = 'X'.

SELECT algnum atanum avbeln avbtyp a~noitm

btapos bposnr bmatnr bletyp bwempf bvltyp bvlber bvlpla bmaktx bkober b~lgort

plfart pkunnr p~berot

qlfimg qmeins

APPENDING CORRESPONDING FIELDS OF TABLE lt_selectdata

FROM ltak AS a INNER JOIN ltap AS b ON algnum = blgnum AND atanum = btanum

INNER JOIN likp AS p ON pvbeln = avbeln

INNER JOIN lips as q ON qvbeln = pvbeln

WHERE algnum eq ls_ilist-lgnum AND atanum eq ls_ilist-tanum AND a~VBELN IN so_vbeln.

CLEAR ls_ilist.

ENDIF.

ENDDO.

lt_tempdata[] = lt_selectdata[].

SORT lt_tempdata by lgnum tanum lgnum tanum vbeln posnr matnr.

DELETE ADJACENT DUPLICATES FROM lt_tempdata COMPARING lgnum tanum vbeln posnr matnr.

PERFORM createdata TABLES lt_tempdata lt_header1 lt_item1.

SORT lt_header1 BY lgnum tanum.

DELETE ADJACENT DUPLICATES FROM lt_header1 COMPARING lgnum tanum.

SORT lt_item1 BY lgnum tanum.

DESCRIBE TABLE lt_header1 LINES v_print.

LOOP AT lt_header1 INTO ls_header1.

v_tabix = sy-tabix.

REFRESH lt_header.

  • LOOP AT lt_item1 INTO ls_item1.

  • IF ls_item1-lgnum eq ls_header1-lgnum AND ls_item1-tanum eq ls_header1-tanum.

  • APPEND ls_item1 TO lt_item.

  • ENDIF.

  • ENDLOOP.

LOOP AT lt_item1 INTO ls_item1 WHERE LGNUM = ls_header1-lgnum AND tanum = ls_header1-tanum.

APPEND ls_item1 TO lt_item.

ENDLOOP.

APPEND ls_header1 TO lt_header.

PERFORM call_sf.

ENDLOOP.

ENDIF.

WHEN 'PB2'. "Leave the program <Cancel>..

LEAVE PROGRAM.

ENDCASE.

&----


*& Form createlist

&----


  • To create a list of applicapble Transfer orders with Check-Box

FORM createlist.

DELETE ADJACENT DUPLICATES FROM lt_tempdata COMPARING lgnum tanum.

LOOP AT lt_tempdata INTO ls_tempdata.

LINES = L_INTIALIZE.

ls_ilist-lgnum = ls_tempdata-lgnum.

ls_ilist-tanum = ls_tempdata-tanum.

ls_ilist-bdatu = ls_tempdata-bdatu.

ls_ilist-vbeln = ls_tempdata-vbeln.

APPEND ls_ilist TO lt_ilist.

L_INTIALIZE = L_INTIALIZE + 1.

CLEAR:

ls_tempdata,

ls_ilist.

ENDLOOP.

WRITE:/ 'Select The Documents To Be Printed:'.

SKIP.

  • WRITE:/ 'Warehouse Number', '' .

LOOP AT lt_ilist INTO ls_ilist.

WRITE 😕 ls_ilist-CB1 AS CHECKBOX, "Display check-box and Document number

ls_ilist-lgnum,

ls_ilist-tanum,

ls_ilist-bdatu,

ls_ilist-vbeln.

HIDE: ls_ilist-CB1,

ls_ilist-lgnum,

ls_ilist-tanum,

ls_ilist-bdatu,

ls_ilist-vbeln.

ENDLOOP.

ENDFORM. " createlist

&----


*& Form createdata

&----


  • To get data in Two internal tables <Header and item> which can be then passed to SF Func. Module <Tables>

FORM createdata TABLES lt_tempdata lt_header1 lt_item1.

REFRESH: lt_header1,

lt_item1.

CLEAR: ls_tempdata,

ls_header1,

ls_item1.

*Create header data.

LOOP AT lt_tempdata INTO ls_tempdata.

ls_header1-lgnum = ls_tempdata-lgnum. "Warehouse number

ls_header1-tanum = ls_tempdata-tanum. "Transfer Order

ls_header1-vbeln = ls_tempdata-vbeln. "Delivery No.

ls_header1-kunnr = ls_tempdata-kunnr. "Ship to party details

SELECT SINGLE kunnr land1 name1 name2 ort01 pstlz regio stras

FROM kna1

INTO CORRESPONDING FIELDS OF ls_kna1

WHERE kunnr = ls_tempdata-kunnr.

ls_header1-name1 = ls_kna1-name1.

ls_header1-name2 = ls_kna1-name2.

ls_header1-stras = ls_kna1-stras.

ls_header1-regio = ls_kna1-regio.

ls_header1-ort01 = ls_kna1-ort01.

ls_header1-land1 = ls_kna1-land1.

ls_header1-pstlz = ls_kna1-pstlz.

ls_header1-lgtyp = ls_tempdata-vltyp. "Picking Area Details

ls_header1-lgber = ls_tempdata-vlber.

ls_header1-lgpla = ls_tempdata-vlpla.

SELECT SINGLE * FROM T30AT

INTO ls_t30at

WHERE spras = sy-langu

AND lgnum = ls_tempdata-lgnum

AND lgtyp = ls_tempdata-vltyp

AND kober = ls_tempdata-kober.

ls_header1-kbert = ls_t30at-kbert.

APPEND ls_header1 TO lt_header1.

CLEAR: ls_tempdata,

ls_header1,

ls_kna1,

ls_t30at.

ENDLOOP.

*Create Item data.

LOOP AT lt_tempdata INTO ls_tempdata.

ls_item1-lgnum = ls_tempdata-lgnum.

ls_item1-tanum = ls_tempdata-tanum.

ls_item1-tapos = ls_tempdata-tapos.

ls_item1-kober = ls_tempdata-kober.

ls_item1-lgtyp = ls_tempdata-vltyp.

ls_item1-lgber = ls_tempdata-vlber.

ls_item1-lgpla = ls_tempdata-vlpla.

ls_item1-matnr = ls_tempdata-matnr.

ls_item1-maktx = ls_tempdata-maktx.

ls_item1-lfimg = ls_tempdata-lfimg.

ls_item1-meins = ls_tempdata-meins.

APPEND ls_item1 TO lt_item1.

CLEAR: ls_item1,

ls_tempdata.

ENDLOOP.

ENDFORM. " createdata

&----


*& Form call_sf

&----


  • To Call the Smart Form Multiple times

FORM call_sf .

formname = 'ZTD_SF_PTO'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

FORMNAME = formname

IMPORTING

FM_NAME = fm_name.

IF v_print > 1.

IF v_tabix = 1.

  • ls_cntrl-NO_DIALOG = ''.

ls_cntrl-PREVIEW = 'X'.

ls_cntrl-no_open = ' '.

ls_cntrl-no_close = 'X'.

ELSEIF v_tabix > 1 and v_tabix < v_print.

ls_cntrl-PREVIEW = 'X'. "Preview the output of Smartform

ls_cntrl-NO_DIALOG = 'X'. "Don't show Dialog

ls_cntrl-no_open = 'X'.

ls_cntrl-no_close = 'X'.

ELSEIF v_tabix = v_print.

ls_cntrl-PREVIEW = 'X'. "Preview the output of Smartform

ls_cntrl-NO_DIALOG = 'X'.

ls_cntrl-no_open = 'X'.

ls_cntrl-no_close = ' '.

ENDIF.

ELSEIF v_print = 1.

ls_cntrl-no_open = ' '.

ls_cntrl-no_close = ' '.

ENDIF.

CALL FUNCTION fm_name

EXPORTING

CONTROL_PARAMETERS = ls_cntrl

TABLES

IT_HEADER = lt_header

IT_ITEM = lt_item.

CLEAR ls_cntrl.

REFRESH: lt_header,

lt_item.

ENDFORM. " call_sf

Former Member
0 Kudos

Forgot to include the Include program.


*&---------------------------------------------------------------------*
*&  Include           ZT_WM_PTO_DRIVER_TOP
*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*
*TABLES
*----------------------------------------------------------------------*
TABLES: LTAK,
        LTAP,
        LIKP,
        LIPS,
        LTBK,
        KNA1,
        T30AT.

*----------------------------------------------------------------------*
*PF-STATUS
*----------------------------------------------------------------------*

SET PF-STATUS 'LIS'. " Create Buttons on Appn. Tool Bar <F-Code 'PB1'-> Print, PB2->Cancel >

*----------------------------------------------------------------------*
*Local TYPE Declrations
*----------------------------------------------------------------------*
* Type of Internal Tabel from the select query.
TYPES:
   BEGIN OF lty_selectdata,
     LGNUM TYPE LGNUM,            "Warehouse Number / Warehouse Complex
     TANUM TYPE TANUM,            "Transfer Order Number
     VBELN TYPE VBELN,            "Sales and Distribution Document Number                (Join Delivery in LIKP)
     POSNR TYPE POSNR,            "Item number of the SD document
     MATNR TYPE MATNR,            "Article Number
     BDATU TYPE BDATU,            "Creation Date of Transfer Order                        CHECK
     TBNUM TYPE TBNUM,            "Transfer Requirement Number
     MBLNR TYPE MBLNR,            "Number of Article Document
     VBTYP TYPE VBTYP,            "(SD document category -> Q:WMS transfer order)         CHECK (Also in LIKP)
     NOITM TYPE LTAK_CNTPS,       "Current number of items in TO
     TAPOS TYPE TAPOS,            "Transfer order item                                    **** Item Data <LTAP>****
     WERKS TYPE WERKS,            "Site
*     CHARG TYPE CHARG,            "Batch Number                                           &&&&&&&
     BESTQ TYPE BESTQ,            "Stock Category in the Warehouse Management System
*     MEINS TYPE MEINS,            "Base Unit of Measure(LTAP)
     LETYP TYPE LVS_LETYP,        "Storage Unit Type
     WEMPF TYPE WEMPF,            "Goods Recipient/Ship-To Party
     VLTYP TYPE LTAP_VLTYP,       "Source Storage Type***********
     VLBER TYPE LTAP_VLBER,       "Source storage section********
     VLPLA TYPE LTAP_VLPLA,       "Source Storage Bin************
     VPPOS TYPE LTAP_VPPOS,       "Position in source storage bin                         &&&&&&
     MAKTX TYPE MAKTX,            "Material Description (Short Text)
     POSTY TYPE LTAP_POSTY,       "Type of transfer order item (''-> Normal TO item)      CHECK
     KOBER TYPE KOBER,            "Picking Area
     LGORT TYPE LGORT_D,          "Storage Location (For the site)
*     VBELN_D TYPE VBELN_VL,      "Delivery                                             **** Header Data <LIKP>****
     LFART TYPE LFART,            "Delivery Type('WOD' WMS Outbound Del)                  CHECK
     KUNNR TYPE KUNWE,            "Ship-to party
     BEROT TYPE BEROT,            "Picked items location                                 $$$$$$$$$$
     LGNUM_D TYPE LGNUM,          "Warehouse Number / Warehouse Complex                 (Join Warehouse Number in LTAP)
     TERNR TYPE AUFNR,            "Order Number                                           CHECK
     POSNR_D TYPE POSNR_VL,       "Delivery Item                                       **** Item Data <LIPS>****
*     MATNR_D TYPE MATNR_D,       "Article Number in Delivery
*     WERKS_D TYPE WERKS_D,       "Site <From LIPS>
*     LGORT_D TYPE LGORT_D,       "Storage Location <From LIPS>
     LFIMG TYPE LFIMG,            "Actual quantity delivered (in sales units)
     MEINS TYPE MEINS,            "Base Unit of Measure <From LIPS>
     BWLVS TYPE BWLVS,            " Movement Type for Warehouse Management
   END OF lty_selectdata.

* Type of list display with Check-Box
 TYPES:
   BEGIN OF ty_list,
     CB1 TYPE C,
     LGNUM TYPE LGNUM,
     TANUM TYPE TANUM,
     BDATU TYPE BDATU,
     VBELN TYPE VBELN,
   END OF ty_list.


*----------------------------------------------------------------------*
*INTERNAL TABLES AND STRUCTURES
*----------------------------------------------------------------------*

*To hold Selected Data
DATA:
  lt_selectdata TYPE STANDARD TABLE OF lty_selectdata,
  ls_selectdata LIKE LINE OF lt_selectdata.

*To hold unique records for list display
DATA:
  lt_tempdata TYPE STANDARD TABLE OF lty_selectdata,
  ls_tempdata LIKE LINE OF lt_tempdata.

*Internal table to store initial list of Orders.
DATA:
  lt_ilist TYPE STANDARD TABLE OF ty_list,
  ls_ilist LIKE LINE OF lt_ilist.

*Internal table to create header data.
DATA:
  lt_header1 TYPE STANDARD TABLE OF ZTWM_S_PTO_HEADER,
  ls_header1 LIKE LINE OF lt_header1.

*Internal table to create Item data.
DATA:
  lt_item1 TYPE STANDARD TABLE OF ZTWM_S_PTO_ITEM,
  ls_item1 LIKE LINE OF lt_item1.

*Internal table to store Ship to Party Details based on kunnr in LIKP <Delivery>
DATA:
  lt_kna1 TYPE STANDARD TABLE OF KNA1,
  ls_kna1 LIKE LINE OF lt_kna1.

*Structure Type for hlding the picking area description <Header Data for Smart form>
DATA:
  lt_t30at TYPE STANDARD TABLE OF T30AT,
  ls_t30at LIKE LINE OF lt_t30at.

*Final Internal table to send header data to Smart Form
DATA:
  lt_header TYPE STANDARD TABLE OF ZTWM_S_PTO_HEADER,
  ls_header LIKE LINE OF lt_header.

*Final Internal table to send item data to Smart Form
DATA:
  lt_item LIKE lt_item1,
  ls_item LIKE lS_item1.

*Structure to set the Conrol Parmeters to be passed to Smart form for mutiple call.
DATA ls_cntrl TYPE SSFCTRLOP.

*----------------------------------------------------------------------*
*Global variables
*----------------------------------------------------------------------*
* To count the number of lines in the list display.
DATA:
  LINES TYPE i VALUE 0,
  L_INTIALIZE TYPE i VALUE 1.

*Variable for calling the smart forms multiple times <based on the records in the header table>
DATA v_print TYPE i.

*Variable to hold the currenr loop pass for control parameters setting.
DATA v_tabix TYPE i.

*Name of the Smart form whose Func. Module Name is to be fetched.
DATA : formname TYPE TDSFNAME .

*To capture Smartform Function Module Name.
DATA : fm_name TYPE RS38L_FNAM.                               "