cancel
Showing results for 
Search instead for 
Did you mean: 

Payslip Printing issue

former_member252723
Participant
0 Kudos

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

Accepted Solutions (0)

Answers (4)

Answers (4)

former_member252723
Participant
0 Kudos

Solved

Former Member
0 Kudos

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 = ' '

former_member252723
Participant
0 Kudos

Hi,

I have done the changes but again the printer dialog box from the operating system level is coming. If i have selected 3 employees to print their payslip it is coming the printer dialog box is coming 3 times.

Any idea abt how to avoid this printer dialog box.

regards

Mustafa.

Former Member
0 Kudos

Hi,

With in Loop before Call function for smart form all like the following :

SSFCTRLOP-NO_DIALOG = 'X'.

SSFCOMPOP-TDNEWID = 'X'.

SSFCOMPOP-TDNOPREV = 'X'.

CALL FUNCTION l_fmname

former_member252723
Participant
0 Kudos

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.

Former Member
0 Kudos

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

former_member755502
Participant
0 Kudos

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