Monday, September 28, 2009

Create Schedule by Employee

Posted by Aries Wandari

Pak Mamad,
Minta tolong cek untuk absensi pak Ahmad Supei, bahwa beliau sejak Agustus sudah masuk daily. Absennya banyak yang merah.
Thanks
Agus
------
Absen report for Ahmad Supei invalid since he has been switch to another departement, which is switch his schedule from shift to daily schedule.
Our automatic schedule generation at HR System only have facility to generate schedule from first month (January). Have to modify it by adding month parameter (at frmCreateShiftSchedule3).
image
After updating the schedule, re-process Ahmad Supei’s absen to update his absen report.

Friday, September 25, 2009

SAP > Create Delivery

Posted by Aries Wandari

Today I have to teach (backup) warehouse personel to create delivery, since key users is still in their Ied holiday this week. Delivery has been made, but it is not recorded at SAP yet. Input activity is based on delivery slip hardcopy, using customer purchase order number as a reference to sales order.
SD things again… after a period gatekeeping of MM…

1. VL10C

Go to VL10C (order Items Due for Delivery) and insert date range (or another criteria). Use sequential display to display data as a tabular, select layout to show purchase order (since sales order reference is using customer purchase order number). Select the SO and click “Dialog” button.
clip_image002
On create delivery page, input critical field Actual GI date. Also check material quantity and material size.
clip_image004
clip_image006
Click batch determination to select batch. SAP automatically select batch with FIFO procedure. We can update this batch selection according to batch stock availability.
clip_image008
Save the document and user will get DO number

2. VL02N (picking and PGI)

User can directly do the picking and Post Goods Issue on create page. We dont do that (by create and picking-PGI in another step VA02) to make sure all input data is ok (just my check mechanism to avoid invalid input).
After create DO, next step is material picking, and PGI. This process will update (reduce) the stock.
clip_image010

Note (another useful tcode that may be support above activities):

  • Use VL01N to create DO with certain SO document.
  • Use VA05 for SO list. User can download it to excell to make customer PO number finding process faster and easier.
  • Use MMBE or MB52 to check material and batch stock.
  • Use VKM3 or VKM5 to release credit limit. DO can’t be made if vendor credit limit is reached. It need to be released by Finance dept.

Thursday, September 24, 2009

IT Support (part 3, Attendance System)

Posted by Aries Wandari

13. Personal Attendance Report
14. Personal Absence Detail
15. Attendance Summary
16. Attendance Summary Per Employee
17. Employee Schedule


13. Personal Attendance Report
A page for user to see his absent (Lateness, Early Home, Presence/Unpresence, Leave, Sick, Absent). Red sign mean that the employee have problem on his presence in plant. Red sign will become blue if his superior giving an adjustment/reason with that problem. Superior can see all his subordinate record.
clip_image002[4]

 

Input Reason
A page for superior to make adjustment of subordinate absent problem.
clip_image004[4]
14. Personal Absence Detail
A page showing detail time of employee enter or leaving the plant. Superior can see all his subordinate record.
clip_image006[4]
15. Attendance Summary
A summary page for superior to see total lateness, early home, and presence/unpresence, leave, sick, absent of subordinate, per month.
clip_image008[4]
16. Attendance Summary Per Employee
A summary page for superior to see total lateness, early home, and presence of subordinate, per employee and per month.
clip_image010[4]
17. Employee Schedule
A page showing employee schedule. Superior can see and change schedule of all his subordinate record. This facility commonly used by shift staff that an employee backuping his partner if the partner is proposing an annual leave or doing schedule switch. Employee schedule need to maintain since employee absent data such as late and early home calculated based on the schedule.

clip_image012[4]

IT Support (part 2, IT Helpdesk)

Posted by Aries Wandari

11. Helpdesk Request
12. Helpdesk Administrator
11. Helpdesk Request
Create new helpdesk request icon is put on company intranet frontpage. When user click the icon, it will automatically directed to input page with ‘request by’ field automatically filled by Windows user logon. User can choose desired helpdesk type.
clip_image002

After completing the input, system will show user helpdesk request history. System will also generate notification email to the helpdesk creator and helpdesk admin. Click the link in the email then user will directed to the request.
clip_image004

Email Notification


Dear IT Helpdesk Admin, please follow up helpdesk request for :
Name / EmpNo : Budi Pramono/0523
Position : Maintenance
Date : 24/09/2009
Description : Helpdesk Request
http://tpnmserver/it/ithelpdesk/login/index3.php?ttl=Helpdesk%20Request&link=elumoIJLGF7bn6mKcxpFCiMO8Z09nERVL9KFULkQWPN5KiPZwSdgk6nOdfVY4pAELEXpvQK4ipjm5wjAzGacU5gW6W+FPggBame+6HCrKoRYAffKZhETB4KPJxIAf4cY



12. Helpdesk Administrator
On helpdesk admin page, administrator will delegate helpdesk request to actionee, determine the report type (for report purpose), fill solution of the problem, and approval selection (if only the request need approval from requester superior). Admin can also tick the hardcopy combo box if the request need to be filed.
Admin response will also generate email notification to the actionee, requester and approver. Once the request is approved, actionee do the job, and then requester closed the request. Actionee can update solution field if he find any update on his helpdesk action.
clip_image006
clip_image008
IT helpdesk printed form (pdf).
clip_image010

IT Support (part 1)

Posted by Aries Wandari

1. App. Backup
2. Full Backup
3. IT Checklist
4. RADIO TRACKING
5. PC INVENTORY
6. Transportation Request
7. Transportation Administrator
8. Medical Record
9. User Profile
10. Canteen Menu

clip_image002[4]

1. App. Backup
This application record application backup activity done by IT department. Some application need to be backup are SUN, MAXIMO, and LIMS. The first two is deprecated since it replaced by SAP.
clip_image004[4]
2. Full Backup
This application record full backup activity (stored in a backup tape).
clip_image006[4]
3. IT Checklist
Record all IT daily monitoring activity such antivirus pattern check, server operating systems stability check, server application check, etc. It also record critical hardware (server, RPU, etc) or software (esofgate, LIMS, SAP, etc) down time.
clip_image008[4]
4. RADIO TRACKING
An application to record radio inventory managed by IT, since the handset are used by many people rapidly, and it sometimes sent to vendor for repair.
clip_image010[4]

Add New Radio/Radio Status
clip_image012[4]
5. PC INVENTORY
A facility than record user computer hardware, such as serial number, computer name, domain, IP address, etc.
clip_image014[4]
6. Transportation Request
An application for employee, asking for transportation facility to the company. This facility used for employee that need to be pickup to plant/to go home, after office hour (overtime).
clip_image016[4]
Print out transportation request.
clip_image018[4]

7. Transportation Administrator
An application for transportation administrator to reject, or approve and assign transportation request. It will also detect request that overlap.
8. Medical Record
Showing employee and family medical record, which is consist of inpatient history, outpatient, employee treatment on company clinic, dental, and glasses. It also show the remain of total value company medical incentive for the employee.
9. User Profile
Showing employees profile.
clip_image020[4]
10. Canteen Menu
An application to input canteen menu of the day. The menu will show in intranet page, so that employee (especially shift employee) that far from canteen request meal box easy to choose their desired menu.

Wednesday, September 23, 2009

Extensive SQL on Employee In Out Absent Report

Posted by Aries Wandari

Typical users using employee in out absent report:

  1. Employee, see accurate minute he entry to and leave from plant, check whether he is late/early home or not. Absent data is one of criterias employee deserve for incentive from the company.
  2. HR Dept, count employee pay work hour and employee overtime.
  3. HSE Dept, count safety work hour and overtime. Superintendent level and above usually not report their existence on plant on overtime hour since their not get pay. But HSE want their data to increase safety work hour.
With that user requirement, the data must contain:
  • employee id
  • employee daily/shift schedule on subsequent date
  • employee’s real in out absent time (and date)
  • pay work hour
  • safety work hour
  • pay overtime
  • safety overtime
Note that on daily type employee consist of Daily Merak (07:30 – 16:30) and Daily Jakarta (08:00-17:00). And for shift employee, there are 3 shift (morning shift, afternoon and night). Each shift has 4 group, group A, B, C and D. Night shift have special process, since leave time is smaller than entry time. Below are complete schedule of employee:
Type
Kode
JamDatang
JamPulang
Keterangan
Daily Merak
DM
0730
1630
Normal Jam Kerja Merak
Daily Jakarta
DJ
0800
1700
Normal Jam Kerja Jakarta
Shift Pagi
M0
0600
1400
Technisi
Shift Siang
A0
1400
2200
Technisi
Shift Malam
N0
2200
0600
Technisi
Shift Spv Pagi
M1
0700
1500
Shift Supervisor,Warehouse Assistant
Shift Spv Siang
A1
1500
2300
Shift Supervisor,Warehouse Assistant
Shift Spv Malam
N1
2300
0700
Shift Supervisor,Warehouse Assistant
AC Pagi
M4
0600
1500
Technisi AC
AC Siang
A4
1000
1900
Technisi AC
Driver Pagi
M5
0600
1500
Driver
Driver Siang
A5
1500
2400
Driver
12 Jam Pagi
M2
0600
1800
12 Jam 06:00 - 18:00
12 Jam Malam
N2
1800
0600
12 Jam 18:00 - 06:00
12 Jam Spv & Security Pagi
M3
0700
1900
12 Jam 07:00 - 19:00
12 Jam Spv & Security Malam
N3
1900
0700
12 Jam 19:00 - 07:00
Rest/Libur
R0
0
0
Libur Shift
Weighbridge Opr Pagi
W0
0700
1500
Weighbridge Operator
Weighbridge Opr Siang
W1
1500
2300
Weighbridge Operator
Security Pagi
S0
0700
1500
Security Pagi
Security Siang
S1
1500
2300
Security Siang
Security Malam
S2
2300
0700
Security Malam
Driver Pola A Pagi
MD0
0700
1500
Driver Shift Pola A Pagi
Driver Pola A Siang
AD0
1500
2300
Driver Shift Pola A Siang
Driver Pola A Malam
ND0
2300
0700
Driver Pola A Pagi
Driver Pola B Pagi
MD1
0600
1400
Driver Pola B Pagi
Driver Pola B Siang
AD1
1400
2200
Driver Pola B Siang
Driver Daily
DD0
0730
1630
Driver Daily

Here is the result:
clip_image002
Many table and view contribute to produce the result above, and below are the steps:

Process on ESOFNET Database
  • Trans_R > detail of employee in out, consist of card number, time, code whether employee is entering or leaving the plant.
  • vTrans_R_v2 > Trans_R left join with Cards table so that the view has staff number and employee daily shift code.
SELECT dbo.Trans_R.Tr_Data, ISNULL(dbo.Cards.Staff_Number, '') AS staff_number, dbo.Trans_R.Tr_Date, dbo.Trans_R.Tr_Time, dbo.Trans_R.Tr_Code
FROM dbo.Trans_R LEFT OUTER JOIN
dbo.Cards ON dbo.Trans_R.Tr_Data = dbo.Cards.Card_Number
WHERE (dbo.Cards.Staff_Number <> '')
  • vTrans_R_v2_step1 > vTrans_R_v2 with min in and max out of time as RealDatang dan RealPulang, grouped by entry/leave code.
SELECT Tr_Data, staff_number, Tr_Date, MIN(Tr_Time) AS RealDatang, MAX(Tr_Time) AS RealPulang, Tr_Code
FROM dbo.vTrans_R_v2
GROUP BY Tr_Data, staff_number, Tr_Date, Tr_Code
  • vTrans_R_v2_step2 > normalizing vTrans_R_v2_step1 so it don’t contain redundant double data, and also switch in out data and put into new column (needed for night shift data that leave time is smaller than entry time).
SELECT Tr_Data, staff_number, Tr_Date, MIN(RealDatang) AS RealDatang, MAX(RealPulang) AS RealPulang, MAX(RealPulang) AS RealDatangN,
MIN(RealDatang) AS RealPulangN
FROM dbo.vTrans_R_v2_step1
GROUP BY Tr_Data, staff_number, Tr_Date
  • vTrans_R_v2_step3 > vTrans_R_v2_step2 with safety work minute calculation. Also contain switching process for night shift.
SELECT Tr_Data, staff_number, Tr_Date, RealDatang, CAST(SUBSTRING(RealDatang, 1, 2) AS int) * 60 + CAST(SUBSTRING(RealDatang, 3, 2) AS int)
AS RealDatangMinute, RealPulang, CAST(SUBSTRING(RealPulang, 1, 2) AS int) * 60 + CAST(SUBSTRING(RealPulang, 3, 2) AS int) AS RealPulangMinute,
RealDatangN, CAST(SUBSTRING(RealDatangN, 1, 2) AS int) * 60 + CAST(SUBSTRING(RealDatangN, 3, 2) AS int) AS RealDatangMinuteN, RealPulangN,
CAST(SUBSTRING(RealPulangN, 1, 2) AS int) * 60 + CAST(SUBSTRING(RealPulangN, 3, 2) AS int) AS RealPulangMinuteN,
(CAST(SUBSTRING(RealPulang, 1, 2) AS int) * 60 + CAST(SUBSTRING(RealPulang, 3, 2) AS int)) - (CAST(SUBSTRING(RealDatang, 1, 2) AS int)
* 60 + CAST(SUBSTRING(RealDatang, 3, 2) AS int)) AS WorkMinuteHSE, (CAST(SUBSTRING(RealPulangN, 1, 2) AS int)
* 60 + CAST(SUBSTRING(RealPulangN, 3, 2) AS int) + 1440) - (CAST(SUBSTRING(RealDatangN, 1, 2) AS int) * 60 + CAST(SUBSTRING(RealDatangN, 3, 2)
AS int)) AS WorkMinuteHSEN
FROM dbo.vTrans_R_v2_step2
  • vTrans_R_v2_step4 > vTrans_R_v2_step3 with safety work hour calculation.
SELECT Tr_Data, staff_number, Tr_Date, RealDatang, RealDatangMinute, RealPulang, RealPulangMinute, RealDatangN, RealDatangMinuteN, RealPulangN,
RealPulangMinuteN, WorkMinuteHSE, WorkMinuteHSEN, RIGHT('00' + CAST(CAST(WorkMinuteHSE / 60 AS int) AS nvarchar), 2)
+ RIGHT('00' + CAST(WorkMinuteHSE % 60 AS nvarchar), 2) AS WorkHourHSE, RIGHT('00' + CAST(CAST(WorkMinuteHSEN / 60 AS int) AS nvarchar), 2)
+ RIGHT('00' + CAST(WorkMinuteHSEN % 60 AS nvarchar), 2) AS WorkHourHSEN
FROM dbo.vTrans_R_v2_step3

Process at EMPLOYEE Database
  • Table_JamDailyShift > time schedule based on schedule code.
  • Table_EmpTimeSheet2 > time schedule per employee.
  • vTable_EmpTimeSheet2_v2 > Table_EmpTimeSheet2 joined Table_EmpTimeSheet2, to count pay work minute.
SELECT dbo.Table_EmpTimeSheet2.empid, dbo.Table_EmpTimeSheet2.tr_date, dbo.Table_EmpTimeSheet2.sched_code,
ISNULL(dbo.Table_JamDailyShift.JamDatang, 0) AS JamDatang, ISNULL(dbo.Table_JamDailyShift.JamPulang, 0) AS JamPulang,
CAST(SUBSTRING(dbo.Table_JamDailyShift.JamPulang, 1, 2) AS int) * 60 + CAST(SUBSTRING(dbo.Table_JamDailyShift.JamPulang, 3, 2) AS int)
AS JamPulangMinute, (CAST(SUBSTRING(dbo.Table_JamDailyShift.JamPulang, 1, 2) AS int)
* 60 + CAST(SUBSTRING(dbo.Table_JamDailyShift.JamPulang, 3, 2) AS int)) - (CAST(SUBSTRING(dbo.Table_JamDailyShift.JamDatang, 1, 2) AS int)
* 60 + CAST(SUBSTRING(dbo.Table_JamDailyShift.JamDatang, 3, 2) AS int)) AS MenitKerja, (CAST(SUBSTRING(dbo.Table_JamDailyShift.JamPulang, 1,
2) AS int) * 60 + CAST(SUBSTRING(dbo.Table_JamDailyShift.JamPulang, 3, 2) AS int) + 1440) - (CAST(SUBSTRING(dbo.Table_JamDailyShift.JamDatang,
1, 2) AS int) * 60 + CAST(SUBSTRING(dbo.Table_JamDailyShift.JamDatang, 3, 2) AS int)) AS MenitKerjaN
FROM dbo.Table_EmpTimeSheet2 LEFT OUTER JOIN
dbo.Table_JamDailyShift ON dbo.Table_EmpTimeSheet2.sched_code = dbo.Table_JamDailyShift.Kode
  • vTable_EmpTimeSheet2_v2_step1 > from vTable_EmpTimeSheet2_v2, pay minute of daily type employee has to subtract by 60 since he have an hour rest time (shift employee don’t have rest time).
SELECT empid, tr_date, sched_code, JamDatang, JamPulang, JamPulangMinute, CASE upper(substring(sched_code, 1, 1))
WHEN 'N' THEN MenitKerjaN ELSE (CASE upper(substring(sched_code, 1, 1)) WHEN 'D' THEN MenitKerja - 60 ELSE MenitKerja END)
END AS MenitKerja
FROM dbo.vTable_EmpTimeSheet2_v2
  • vAbsensi_step1 > left join Table_EmpTimeSheet2 (scheduled in out) with vTrans_R_v2_step4 (real in out). This view has time switch process for night shift employee, and processing on safety overtime minute.
SELECT dbo.vTable_EmpTimeSheet2_v2_step1.empid, dbo.vTable_EmpTimeSheet2_v2_step1.tr_date, dbo.vTable_EmpTimeSheet2_v2_step1.sched_code,
dbo.vTable_EmpTimeSheet2_v2_step1.JamDatang, dbo.vTable_EmpTimeSheet2_v2_step1.JamPulang,
dbo.vTable_EmpTimeSheet2_v2_step1.JamPulangMinute, dbo.vTable_EmpTimeSheet2_v2_step1.MenitKerja, CASE upper(substring(sched_code, 1, 1))
WHEN 'N' THEN isnull(ESOFNET.dbo.vTrans_R_v2_step4.RealPulang, 0) ELSE isnull(ESOFNET.dbo.vTrans_R_v2_step4.RealDatang, 0)
END AS RealDatang, CASE upper(substring(sched_code, 1, 1)) WHEN 'N' THEN isnull(ESOFNET.dbo.vTrans_R_v2_step4.RealDatang, 0)
ELSE isnull(ESOFNET.dbo.vTrans_R_v2_step4.RealPulang, 0) END AS RealPulang, CASE upper(substring(sched_code, 1, 1))
WHEN 'N' THEN isnull(ESOFNET.dbo.vTrans_R_v2_step4.RealDatangMinute, 0) ELSE isnull(ESOFNET.dbo.vTrans_R_v2_step4.RealPulangMinute, 0)
END AS RealPulangMinute, CASE upper(substring(sched_code, 1, 1)) WHEN 'N' THEN isnull(ESOFNET.dbo.vTrans_R_v2_step4.WorkMinuteHSEN, 0)
ELSE isnull(ESOFNET.dbo.vTrans_R_v2_step4.WorkMinuteHSE, 0) END AS WorkMinuteHSE, CASE upper(substring(sched_code, 1, 1))
WHEN 'N' THEN isnull(ESOFNET.dbo.vTrans_R_v2_step4.WorkHourHSEN, 0) ELSE isnull(ESOFNET.dbo.vTrans_R_v2_step4.WorkHourHSE, 0)
END AS WorkHourHSE,
ESOFNET.dbo.vTrans_R_v2_step4.WorkMinuteHSE - dbo.vTable_EmpTimeSheet2_v2_step1.MenitKerja AS OvertimeMinuteHSE
FROM dbo.vTable_EmpTimeSheet2_v2_step1 LEFT OUTER JOIN
ESOFNET.dbo.vTrans_R_v2_step4 ON dbo.vTable_EmpTimeSheet2_v2_step1.empid = ESOFNET.dbo.vTrans_R_v2_step4.staff_number AND
dbo.vTable_EmpTimeSheet2_v2_step1.tr_date = ESOFNET.dbo.vTrans_R_v2_step4.Tr_Date
  • vAbsensi_step2 > left join vAbsensi_step2 with Table_Employee. Also has calculation on safety overtime hour and pay overtime minute.
SELECT dbo.vAbsensi_step1.empid, dbo.vAbsensi_step1.tr_date, dbo.vAbsensi_step1.sched_code, dbo.vAbsensi_step1.JamDatang,
dbo.vAbsensi_step1.JamPulang, dbo.vAbsensi_step1.JamPulangMinute, dbo.vAbsensi_step1.MenitKerja, dbo.vAbsensi_step1.RealDatang,
dbo.vAbsensi_step1.RealPulang, dbo.vAbsensi_step1.RealPulangMinute, dbo.vAbsensi_step1.WorkMinuteHSE, CASE upper(substring(sched_code, 1,
1)) WHEN 'D' THEN dbo.vAbsensi_step1.WorkMinuteHSE - 60 ELSE dbo.vAbsensi_step1.WorkMinuteHSE END AS PayWorkMinute,
dbo.vAbsensi_step1.WorkHourHSE, dbo.vAbsensi_step1.OvertimeMinuteHSE,
RIGHT('00' + CAST(CAST(dbo.vAbsensi_step1.OvertimeMinuteHSE / 60 AS int) AS nvarchar), 2)
+ RIGHT('00' + CAST(dbo.vAbsensi_step1.OvertimeMinuteHSE % 60 AS nvarchar), 2) AS OvertimeHourHSE,
dbo.vAbsensi_step1.RealPulangMinute - dbo.vAbsensi_step1.JamPulangMinute AS PayOvertimeMinute
FROM dbo.vAbsensi_step1 LEFT OUTER JOIN
dbo.Table_Employee ON dbo.vAbsensi_step1.empid = dbo.Table_Employee.EmpId
  • vAbsensi_step3 > process vAbsensi_step2, convert pay work minute to pay work hour.
SELECT empid, tr_date, sched_code, JamDatang, JamPulang, MenitKerja, RealDatang, RealPulang, WorkMinuteHSE, PayWorkMinute, WorkHourHSE,
RIGHT('00' + CAST(CAST(PayWorkMinute / 60 AS int) AS nvarchar), 2) + RIGHT('00' + CAST(PayWorkMinute % 60 AS nvarchar), 2) AS PayWorkHour,
OvertimeMinuteHSE, OvertimeHourHSE, CASE substring(sched_code, 1, 1)
WHEN 'R' THEN PayWorkMinute WHEN 'H' THEN PayWorkMinute ELSE PayOvertimeMinute END AS PayOvertimeMinute
FROM dbo.vAbsensi_step2
  • vAbsensi_step4 > process vAbsensi_step3, convert pay overtime minute to pay overtime hour.
SELECT empid, tr_date, sched_code, JamDatang, JamPulang, MenitKerja, RealDatang, RealPulang, WorkMinuteHSE, PayWorkMinute, WorkHourHSE,
PayWorkHour, OvertimeMinuteHSE, OvertimeHourHSE, PayOvertimeMinute, RIGHT('00' + CAST(CAST(PayOvertimeMinute / 60 AS int) AS nvarchar), 2)
+ RIGHT('00' + CAST(PayOvertimeMinute % 60 AS nvarchar), 2) AS PayOvertimeHour
FROM dbo.vAbsensi_step3


vAbsensi_step4 is the final process producing the result.

Daily job, annoying sometimes (when it goes wrong).

1. Gate checking, at 08:00 and 16:00.

Common problem are:

  • RPU disconnect. Handled by restart esofgate service.
  • IP disconnect (since we manage two different gates on Merak and Jakarta). Handled by telnet to port 9999 and restart connection.
  • Time dis-synchronized. Handled by sending time parameter to all reader.
Has to check twice a day, because if there is problem, we have to be found it early since esofgate hardware memory only store 3000 absent data.
clip_image002

2. Daily Absent Process and Daily Tracking Notification

Daily Absent Process Application is pre-processed raw data from gate so it can be user friendly report (user can monitor their entry to and leave from plant via intranet application). While Daily Tracking Notification Application is sending automatic email notification for outstanding tracking job. Both are massively using database operation. And sometimes the operation fail because of deadlocks, so we have to run it manually.
clip_image004

3. Canteen Sceduler

Data from canteen reader build a .RAW file per day, and has to be pre-processed to send it to database. If it not run normally, we have to run it manually by selecting proper RAW file.
clip_image006

Wednesday, September 2, 2009

SAP > Find the PO of an Invoice

Posted by Aries Wandari

     Invoice comes to accounting department, but the staff dont know which PO is the invoice paid. SAP is go live on July in current year. So, we will doing action based on GR (and not the PO). If the GR is in period after SAP go live, procurement dept. has  to create the PO, so store can do the GR and invoiced by accounting. If the GR is before SAP go live, invoice will directly processed by accounting without SAP system. Accounting staff cant find the PO since some of the PO’s is created before SAP go live so it is not recorded on SAP.

          An error comes up when trying to print PO on quality environment. As screenshot below, PO display “Purchase Order has not Fully Released” even it has been fully released. Suspect the smartforms and the smartforms’ program caused the error.
clip_image002[4]
Go to NACE to find the program.
clip_image004[4]
The program code is in ZSAPFM06P.
---
CASE x_ekko-BSART.
WHEN 'ZRFQ'.
IF ( x_ekko-BSART = 'ZRFQ' ).
ENDIF.
WHEN 'ZNPU'.
IF ( x_ekko-BSART = 'ZNPU' ) AND
             ( x_ekko-FRGGR = '01' OR x_ekko-FRGGR = '02' ) and
             ( x_ekko-frgsx = 'Z1' OR x_ekko-frgsx = 'Z2' OR x_ekko-frgsx = 'Z3' ) and
               x_ekko-frgke = '2'.
ELSE.
message e016(rp) WITH 'Purchasing Order has not fully released'.
ENDIF.
ENDCASE.

Change to

CASE x_ekko-BSART.
WHEN 'ZRFQ'.
IF ( x_ekko-BSART = 'ZRFQ' ).
ENDIF.
WHEN 'ZNPU'.
IF ( x_ekko-BSART = 'ZNPU' ) AND
( x_ekko-FRGGR = '01' OR
x_ekko-FRGGR = '02' OR
x_ekko-FRGGR = '05' OR
x_ekko-FRGGR = '06' ) and
( x_ekko-frgsx = 'Z1' OR
x_ekko-frgsx = 'Z2' OR
x_ekko-frgsx = 'Z3' ) and
x_ekko-frgke = '2'.
ELSE.
message e016(rp) WITH
'Purchasing Order has not fully released'.
ENDIF.
ENDCASE.
---
Problem solved.