PowerForce (Internal Only) Support™


Quick FAQ dump of things we've not had time to create standard helpdesk tickets for.

Generally all bugs will be corrected by code, however, sometimes there'll be a kludge or a manual record fix.

Users do not have access to make these corrections, which are generally kludge until a programatic correction is developed (if ever).



Baseline - Differences between systems

We have the following versions of Powerforce:

  • RAWS
  • DEVEL10_SQL ( Baseline version )
  • DEVEL10
  • GEO (SQL)
  • SNP


Top of Page

SWB (Scheduling Workbench)

  1. [T] CLIENT_CONTRACTS <cc_cas_payclass> <<69>> the new payclass based upon Grade XLATE from <cc_cas_grade> <<87>.

  2. [S] validate_payclass : does the compare of payclass against CLIENT_CONTRACTS to see if flicking class based on CASUAL / PPT. On [W] CLIENT_OPERATIONS settings. Called principally from [S] TIME_SCHEDULER_SUB

  3. [S] time_bookings_sub - srtn which has logic for costing shifts. Has check for client override rates.
    [S] time_scheduler_calc - looks like calc relating to employee only
    [S] time_bookings_costings_sub -

  4. [S] time_scheduler_sub - calls [W] time_bookings or [W] time_bookings_roster on an edit of the shift
  5. [S]

  6. [S] TIME_BOOKINGS_SUB - called with 'CALC_POST_TIME' when lostfocus on post_time field.

  7. SWB - on a recost, the classification code cannot ever be changed.
    You can change things within the classification, and the shift will re-calc using the new values.
    Things like site specific classifications cause this to not allow changes.
    The (EDMEN) system though - you can do anything.

Top of Page

SWB (Issues)

  • Case of shift costings not working at all. Charges were set up correctly. After a lot of searching the scheduling code 'N' did not have onCharge checked.
  • Std Schedules workbench - the data on display is driven by the "Last Rotation W/E Date" value +/- rotation cycle (in days). [T] MASTER_ROTATION_SCHEDULE / [DATE_LAST_CYCLE]

Top of Page

Programming Tricks

  • OLE: about.blank, shell.explorer

  • Check to see if .ocx / .dll is registered:

    // Check if the ocx controls were registered

    registry_key= 'VSPRINTER7.VSPRINTER.1'
    oleObj = OleCreateInstance(registry_key)
    status = OleStatus()

    Status is -2147221005 if un-registered, else 0.

  • Open a window from another - then send actions into newly started window.

    Declare Function set_Property, start_Window         

    atWindow = Start_Window("TABLE_BROWSER", @Window)
    objxArray =  atWindow : ".TABLENAME"  
    propArray = "DEFPROP" 
    dataArray = "AVERY_LABELS"      

    dataArray = set_Property( objxArray, propArray, dataArray )      

    Call send_Event(atWindow : ".BTN_LOAD", "CLICK")


  • I have seen when save.list, and the activate.list - code which reads the actual saved list as follows:

    KeyList = Xlate("SYSLISTS", ListName, '', "X")

    The <1> entry is actually a header, and hence the actual keys that were saved away start at <2>.

  • Instances of CREATE event not working when window is called from another. You have to code the [Script] on the CREATE event of the called window to be like this:

    /* this is the script code on the window Create event */

    call send_message(@WINDOW:".RESULTS","OLE.Navigate2","about:blank")
    call nv_licence("")
    RETURN 0

    & then I've seen this in another

    RETURN 1

  • Sequence to start dialog window & get reply back

    stat = Dialog_Box("CLIENT_CONTACTS", @Window,"FRED") - 'FRED" will pass in as the CreateParam via a script of the called window

    end_dialog(@WINDOW, reply_1 :@FM: reply_2)
    RETURN 0

    The return 0 has to be included
  • Apparently there's a means to do the same using Q-events. That is to code, the call params as "@PARAM1" - which will pass the passed params into the subroutine.

  • retval = popup(@window,"","CONTACTS")

  • //  TODO clear out cut/paste buffer (from Excel)
    void = set_property('CLIPBOARD', 'TEXT',"")
    void = OleCallMethod(objWorkBook , 'Close') 

Top of Page


  • The display says Date/Time Actioned - is actually working agains the key 'call_taken_date', 'call_taken_time'. The headers & SQL data are mis-aligned, but we will change this at some future stage. dashboard.

    And this runs of " where source = 'EDHEAL'
    order by call_taken_date, call_taken_time "
  • When debugging the dashboard, nv_dashboard works on the shift date being GE today()
  • RTIM<160>, <161>, <162> are cust_confirmed_shift, cust_confirmed_by, cust_confirmed_timedate() & the basis of display logic on the dashboard
  • Pressing the clock, asks for confirm with customer, employee - which calls [S] time_scheduler_confirm_sub -> confirm_shifts_sub -> audit_roster_update_sub. Confirm_shifts does the <160>..<162> setting.


The elements involved in creating an award:


Check the writeup pay/pharmacy award for worked example.



Top of Page


  • [S] wwa_mfs --> [T] wwa_log.
    <0> datetime() * tableName * id.
    <1> 3 = WRITE, 4 = DELETE are the control records.
  • SQL version needs 9.3 as a min. We have a 3 user "M" licence.
  • Random SQL: where category = 51 and id LIKE 'MENU%'
  • a
  • b
  • c

Top of Page


  • [S] mpd_import_acs_openbal
  • [S] mpd_import_acs_emps
  • Issue with labour to sales report - turned out to be (1) no invoice*co control batch record, and then the scheudling code "N" had show on P&L report option un-checked.


  1. The charge rates for clients and D1 codes etc are held on [F] CHARGE_RATES

  2. P/O numbers not printint out on invoices - quick patch: SERVICE_INVOICES/<x>, <83,1> will print into the header area of the invoice.

  3. Emailing invoices automatically requires data setup as follows:

    CNA <37> - find EMAIL_INV, set CLIENT_CONTRACTS<109>="EMAIL"
    // Even though clients may have email addresses, you still have to set the send invoice via email flag.


  5. To clear a GEN, <15> = 0

Top of Page


  1. Case of 'employee in another payrun". The error reports have been enhanced to print out more meaningful messages, however what had happened was that a "PAYRUN" record of .null. was created and hence the message was correct, but didn't make sense. Deleting the null record removed the error. Cause is probably a debug break by users when processing a payrun.

  2. Super reports & EPS to Super companies was stuffed up because EDMEN have a non-std way of processing SUPER. Whilst PF processes super on the calendar month, they process it last week of previous to 2nd to last of current. The way to do this is to select the payruns for which you want to run the process - which then gives a value of 2 to Jan Super. To overcome this had to change supernnuation_sub - last line to say x = false$, and superannuation_reports - to force the month into '2' where it checks processing month vs super month. Then re-create the SUPER for the whole period spanning two months - all reports worked.

    The Superannuation_report uses the start date to pick off its MONTH field. Might change this to be the End Date.

    I'm trying setting PAYRUN/SUPER_PROCESSED to "", and then re-process the pays.

    To allow the system to manually select pays- reset PAYRUN <43> "super_processed" to .null., which then allows the pay into a dropdown for selection.

  3. Invoices print incorrect address on consolidated invoices. [T] SERVICE_INVOICES<14> has site. Change <14,1> to be the address that you want to print. Print option uses <14,1>.

Top of Page


  1. Setting up Micropay for ACS type processing (link). Note the control records to be set up & rephr010 is the report which dumps out what the Micropay export will look like.

  3. (If the system*micropay_interface record is not present for a company, the Micropay button does not appear on the GUI).

    which has following layout:



  4. To clear the SYSLISTS table


  5. mstsc /v: lpspayroll - invokes remote desktop in admin mode (@ console of remote host)

  6. To have the new nice nvzn logo come up, [T] SYSTEM_CONTROLS / INTERFACE_CONTROLS has to be as follows:





    The trick is that the record id, has no *<company> suffix to this stage. The call / image is setup in [S] mms_init.

  7. Coding client specific once of routines: mpd_<<customer_code>>_*

  8. xcopy sub-dirs :

    start xcopy *.ov c:\temp\mpd /s/y
    start command /c xcopy *.lk c:\temp\mpd /s/y

  9. Payroll problems such as broken links - or why shifts won't load into PWB.
    The select against RTC is generally PAY_XREF <37> & UNPAID_STATUS <44>

Top of Page

See Also

Tut Quick n Easy

FAQ page 2

FAQ page 3

FAQ page 4

FAQ page 5