on 09-06-2009 5:07 PM
Hi All,
I have developed the Payslip program and i want to print the payslip directly and i have given the following paramters and pass the structures to the Function Module FM_NAME. gv_control-no_dialog = 'X'.
i_ssfcompop-tdimmed = 'X'.But when i am printing it is opening the printer dialog box for number oftimes the number of empoyees i have selected. For eg. i have selected 3 personnel number to print then it will open the printer dialog box (Not of SAP) 3 times and i have to click the box for 3 times. Can any one tel me y the dialog box is cuming 3 times.
Mustafa
Solved
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
Try like this : SSFCTRLOP-NO_DIALOG = 'X'.
SSFCTRLOP-DEVICE ='PRINTER'.
SSFCOMPOP-TDDEST = 'LP01' OR Get this printer from configuration in print program.
CALL FUNCTION L_FM_NAME
EXPORTING
CONTROL_PARAMETERS = WA_SSFCTRLOP
OUTPUT_OPTIONS = WA_SSFCOMPOP
USER_SETTINGS = ' '
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
Please chk the below code .I have made the changes but still it is giving the printing dialog box for the number of employees i have selected.
TABLES: PERNR, PYORGSCREEN, PYTIMESCREEN,M_KOSTS.
INFOTYPES: 0001, 0105, 0185.
NODES: PAYROLL TYPE PAY99_RESULT.
DATA: V_TEST TYPE PC261-FPPER,
V_TEST2 TYPE PC261-INPER.
DATA: V_FM_NAME TYPE RS38L_FNAM.
DATA: RT_LINE TYPE LINE OF HRPAY99_RT.
DATA: GV_CONTROL TYPE SSFCTRLOP OCCURS 0 WITH HEADER LINE.
DATA: I_SSFCOMPOP TYPE SSFCOMPOP.
DATA: V_PAYMENT_COUNTER TYPE I VALUE IS INITIAL.
DATA: V_DEDUCTION_COUNTER TYPE I VALUE IS INITIAL.
DATA: I_PAYSLIP_DETAILS LIKE ZHR_D_PRINT_PAYSLIP_STRUCT OCCURS 0 WITH HEADER LINE.
DATA: I_MESSAGE_CONTENT LIKE SOLI OCCURS 10 WITH HEADER LINE,
I_RECEIVER_LIST LIKE SOOS1 OCCURS 5 WITH HEADER LINE,
I_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,
WA_LISTOBJECT LIKE ABAPLIST OCCURS 10,
I_COMPRESSED_ATTACHMENT LIKE SOLI OCCURS 100 WITH HEADER LINE,
WA_OBJECT_HD_CHANGE LIKE SOOD1,
V_COMPRESSED_SIZE LIKE SY-INDEX.
INITIALIZATION.
START-OF-SELECTION.
GET PERNR.
CLEAR: I_PAYSLIP_DETAILS,
I_PAYSLIP_DETAILS[],
V_FILENAME,
IT_RECEIVERS,
IT_RECEIVERS[],
I_OTF,
I_OTF[],
I_DOCS,
I_DOCS[],
I_LINES,
I_LINES[],
I_PACKING_LIST,
I_PACKING_LIST[],
I_OBJPACK,
I_OBJPACK[],
IT_CONTENTS_TXT,
IT_CONTENTS_TXT[].
LOOP AT P0001.
I_PAYSLIP_DETAILS-PERNR = P0001-PERNR.
I_PAYSLIP_DETAILS-ENAME = P0001-ENAME.
SELECT SINGLE ICNUM FROM PA0185 INTO I_PAYSLIP_DETAILS-GOSI WHERE PERNR = I_PAYSLIP_DETAILS-PERNR AND ICTYP = 'ID' AND ENDDA = '99991231'.
SELECT SINGLE ORGTX FROM T527X INTO I_PAYSLIP_DETAILS-DEPT
WHERE ORGEH = P0001-ORGEH
AND ENDDA = '99991231'
AND SPRSL = 'E'.
or sprsl = 'EN'.
SELECT SINGLE PLSTX FROM T528T INTO I_PAYSLIP_DETAILS-POSITION
WHERE PLANS = P0001-PLANS
AND ENDDA = '99991231'
AND SPRSL = 'E'.
SELECT SINGLE * FROM M_KOSTS
WHERE KOSTL = P0001-KOSTL AND DATAB LE PYBEGDA AND DATBI = '99991231'.
IF SY-SUBRC EQ 0.
I_PAYSLIP_DETAILS-COSTCENTRE = M_KOSTS-MCTXT.
ENDIF.
SELECT Single RATE_PER_HR FROM PA9012 INTO (I_PAYSLIP_DETAILS-RATE_PER_HR) WHERE PERNR = I_PAYSLIP_DETAILS-PERNR AND ENDDA = '99991231'.
ENDSELECT.
DATA : ENT TYPE PA2006-ANZHL.
DATA : USED TYPE PA2006-ANZHL.
data : COMP_TOTAL type i.
DATA : VACATION_TOTAL TYPE PA2006-ANZHL.
DATA : BEGIN OF IT_VACATION_ENT OCCURS 0,
ANZHL LIKE PA2006-ANZHL,
END OF IT_VACATION_ENT.
DATA : BEGIN OF IT_VACATION_USED OCCURS 0,
KVERB LIKE PA2006-KVERB,
END OF IT_VACATION_USED.
REFRESH IT_VACATION_ENT.
REFRESH IT_VACATION_USED.
CLEAR ENT.
CLEAR USED.
SELECT ANZHL FROM PA2006 INTO CORRESPONDING FIELDS OF TABLE
IT_VACATION_ENT WHERE PERNR = I_PAYSLIP_DETAILS-PERNR AND SUBTY = '01' AND KTART = '01'.
LOOP AT IT_VACATION_ENT.
ENT = ENT + IT_VACATION_ENT-ANZHL.
ENDLOOP.
SELECT KVERB FROM PA2006 INTO CORRESPONDING FIELDS OF TABLE
IT_VACATION_USED WHERE PERNR = I_PAYSLIP_DETAILS-PERNR AND SUBTY = '01' AND KTART = '01'.
LOOP AT IT_VACATION_USED.
USED = USED + IT_VACATION_USED-KVERB.
ENDLOOP.
VACATION_TOTAL = ENT - USED.
I_PAYSLIP_DETAILS-LEAVE_ENTI = VACATION_TOTAL.
ENDLOOP.
DATA: REG_HOURS TYPE P,
ABS_HOURS TYPE P.
CLEAR REG_HOURS.
SELECT SINGLE MOSTD FROM PA0007 INTO REG_HOURS WHERE PERNR = I_PAYSLIP_DETAILS-PERNR
AND ENDDA = '99991231'.
REG_HOURS = I_PAYSLIP_DETAILS-REG_HOURS.
OUT_TAB-HRATE = OUT_TAB-OBASIC / REG_HOURS.
DATA: BEGIN OF IT_2001 OCCURS 0,
STDAZ TYPE PA2001-STDAZ,
END OF IT_2001.
SELECT STDAZ FROM PA2001 INTO CORRESPONDING FIELDS OF TABLE IT_2001
WHERE PERNR = OUT_TAB-PERNR AND BEGDA LE PYBEGDA and ENDDA GE PYENDDA.
CLEAR ABS_HOURS.
REFRESH IT_2001.
SELECT STDAZ FROM PA2001 INTO CORRESPONDING FIELDS OF TABLE IT_2001
WHERE PERNR = I_PAYSLIP_DETAILS-PERNR AND BEGDA => PAYROLL-EVP-INPER AND BEGDA <= PAYROLL-EVP-INPER.
IF SY-SUBRC = 0.
LOOP AT IT_2001.
ABS_HOURS = ABS_HOURS + IT_2001-STDAZ.
ENDLOOP.
ENDIF.
IF REG_HOURS => ABS_HOURS.
I_PAYSLIP_DETAILS-REG_HOURS = REG_HOURS - ABS_HOURS.
ENDIF.
GET PAYROLL.
CLEAR: V_DEDUCTION_COUNTER,
V_PAYMENT_COUNTER.
Determining payroll period.
LOOP AT PAYROLL-INTER-RT INTO RT_LINE.
If wagetype is 1000, 1010 or if it starts with 3, then it is a payment.
IF RT_LINE-LGART EQ '1000' OR
RT_LINE-LGART EQ '1010' OR
RT_LINE-LGART EQ '1020' OR
RT_LINE-LGART EQ '1025'
OR RT_LINE-LGART EQ '1030'
OR RT_LINE-LGART EQ '1036'
OR RT_LINE-LGART EQ '1200'
OR RT_LINE-LGART EQ '1205'
OR RT_LINE-LGART EQ '1207'
OR RT_LINE-LGART EQ '1209'
OR RT_LINE-LGART EQ '1211'
OR RT_LINE-LGART EQ '1213'
OR RT_LINE-LGART EQ '1215'
OR RT_LINE-LGART EQ '7240'
OR RT_LINE-LGART EQ '7250'
OR RT_LINE-LGART EQ '7356'.
V_PAYMENT_COUNTER = V_PAYMENT_COUNTER + 1.
IF V_PAYMENT_COUNTER = '1'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT1
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET01 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET01 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '2'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT2
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET02 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET02 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '3'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT3
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET03 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET03 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '4'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT4
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET04 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET04 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '5'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT5
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET05 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET05 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '6'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT6
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET06 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET06 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '7'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT7
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET07 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET07 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '8'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT8
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET08 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET08 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '9'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT9
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET09 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET09 NO-GAPS.
ELSEIF V_PAYMENT_COUNTER = '10'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-LGTXT10
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-BET10 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-BET10 NO-GAPS.
ENDIF.
If wagetype is /101, then it is gross payable amount.
ELSEIF RT_LINE-LGART EQ '/101'.
I_PAYSLIP_DETAILS-GROSS_PAYABLE = RT_LINE-BETRG.
If wagetype is /557 or /559, then it is net payable amount.
ELSEIF RT_LINE-LGART EQ '/557'
OR RT_LINE-LGART EQ '/559'
OR RT_LINE-LGART EQ '/560'.
I_PAYSLIP_DETAILS-NET_PAYABLE = RT_LINE-BETRG.
If wagetype starts with 5, then it is deduction.
ELSEIF RT_LINE-LGART EQ '7020'
OR RT_LINE-LGART EQ '7235'
OR RT_LINE-LGART EQ '2000'
OR RT_LINE-LGART EQ '2005'
OR RT_LINE-LGART EQ '2010'
OR RT_LINE-LGART EQ '2015'
OR RT_LINE-LGART EQ '2020'
OR RT_LINE-LGART EQ '2025'
OR RT_LINE-LGART EQ '2030'
OR RT_LINE-LGART EQ '2035'
.
V_DEDUCTION_COUNTER = V_DEDUCTION_COUNTER + 1.
IF V_DEDUCTION_COUNTER = '1'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT1
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET01 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET01 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '2'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT2
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET02 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET02 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '3'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT3
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET03 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET03 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '4'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT4
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET04 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET04 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '5'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT5
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET05 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET05 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '6'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT6
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET06 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET06 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '7'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT7
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET07 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET07 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '8'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT8
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET08 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET08 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '9'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT9
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET09 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET09 NO-GAPS.
ELSEIF V_DEDUCTION_COUNTER = '10'.
SELECT SINGLE LGTXT FROM T512T INTO I_PAYSLIP_DETAILS-DEDLGTXT10
WHERE LGART = RT_LINE-LGART
AND SPRSL = 'EN'.
I_PAYSLIP_DETAILS-DEDBET10 = RT_LINE-BETRG.
CONDENSE I_PAYSLIP_DETAILS-DEDBET10 NO-GAPS.
ENDIF.
If wagetype is /110, then it is total deduction.
ELSEIF RT_LINE-LGART EQ '/110'.
I_PAYSLIP_DETAILS-TOTAL_DEDUCTION = RT_LINE-BETRG.
ENDIF.
ENDLOOP.
i_payslip_details-comments = p_cmnts.
APPEND I_PAYSLIP_DETAILS.
gv_control-no_dialog = 'X'.
gv_control-device = 'PRINTER'.
i_ssfcompop-tddest = 'ZMMG_PRINT'.
i_ssfcompop-TDNOPREV = 'X'.
i_ssfcompop-tdnewid = 'X'.
i_ssfcompop-tdimmed = 'X'.
APPEND gv_control.
" Determine the function for the smartform.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZHR_F_PAYSLIP'
IMPORTING
FM_NAME = V_FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
.
CALL FUNCTION V_FM_NAME
EXPORTING
CONTROL_PARAMETERS = GV_CONTROL "language
OUTPUT_OPTIONS = I_SSFCOMPOP
USER_SETTINGS = ''
TABLES
I_PAYSLIP_DETAILS = I_PAYSLIP_DETAILS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
ENDIF.
Hi,
If you completely dont want this dialog box, just pass gv_control-no_dialog = 'X', also pass user_settings = space in the SF Function Module..
l_t_out-tddest = 'LOCL'.
CALL FUNCTION fm_name
EXPORTING
control_parameters =gv__control
output_options = l_t_out
user_settings = space
customer = customer
bookings = bookings
connections = connections
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
Hope it works!!
Rgds,
Pavan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
In the the pop-up printer dialog box, we need to pass values at certain fields like the printer device name, no. of copies etc, print immediately. These values are fetched from certain standard structures, if they are provided by developer programitcally. And once these structures are populated, you can suppress dialog i.e. pop-up printer dialog box. Thus, it will not display the pop-up printer dialog box. So, you can check any standard driver program for smartform which does not display pop-up printer dialog box and find out which all field values are populated of those standard structures. or, simply you can copy all PERFORM statments along with their respective includes under which those structures are used but I would not recommend it.
I hope this will guide you to solve your issue.
Regards,
Sambaran
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
91 | |
10 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.