Copyright: Copyright (C) 1997 by Lightning Creek Associates


Table of Contents
 TimeLogger

TimeLogger is a program for tracking billable time by recording events.

Note: You can type F1 on any window for help.

Table of Contents

Introduction

Registering

How To Use

The Main Window

The Main Grid

Windows For Maintaining Customers, Jobs, Tasks, Etc.

The Employee Grid

The Customer Grid

The Job Edit Window

The Job Grid

The Task Edit Window

The Task Grid

Other Windows

The By Hours Grid

The Changes Window

The Find Window

The Insert Gap Window

The Job Summary Window

The Load Window

The Options Window

The Refresh Window

The Reminder Window

The Print Window

The Selections Window

The Tree View Window


Introduction

I've been in the software business for 20 years now and all along, I've had to account for my time and bill for my time, and I hate doing it. The reason I hate it is that I can never seem to achieve the level of accuracy I want. The biggest problem is remembering to note the time when I start something or when I switch tasks or when the phone rings and I spend an hour on an interruption. Short of hiring a secretary to watch me like a hawk, there's not much I can do but develop good habits and have some good software to help me out.

TimeLogger is the present state of the evolution of my time keeping tools which I started developing back on DEC PDP-11's and then migrated to VAX/VMS. They were always a hodge-podge mixture of basic programs, DCL command language scripts, text editor scripts and sorting. Then, one fateful day early this year the hard drive on my MicroVAX 3100 crashed taking all that stuff with it. (I have no excuse, really, for not having it backed up). So I sat down and rewrote the entire thing using Borland Delphi and Interbase on my PC. Has it made the process any easier for me? Well, yes, somewhat. It's cut maybe 10% off the time it takes me to do my billing. But mainly, it sure is snazzy. And, best of all, I don't need to turn that MicroVAX on anymore.

My philosophy is to make it as easy as possible to get the time recorded. So I use a program similar to Windows Notepad which I always keep minimized on my desktop. When the phone rings, I have the habit of getting that minimized window restored as I'm saying "Steve Schafer" (that means "Hello"). I hit the keys that give me a new date and time at the bottom of the file and by then the person on the other end is talking away, so I just take notes. In the notes I try to include the name of the person calling. That's all I do at the time. Later, using TimeLogger, I go back and figure out whether or not the call was billable and to who. Likewise, when I start working on something, I pop up the text editor and make an entry. Sometimes I don't remember to do that until a little later so I just adjust the time. Then I usually know what project I'm working on so I can enter that in a way that TimeLogger will recognize it, thus saving myself the work later on.

Periodically (the more often the better) I load my notes into TimeLogger and go through the process of filling in missed events and assigning customers, jobs and tasks to each event. I use the various tools to make sure the information is as accurate as possible. At the end of each billing cycle I finish any remaining corrections, print the reports, and mark all the events billed. TimeLogger makes a tedious task bearable and helps me to maintain the accuracy of my time accounting.

Steve Schafer


Registering

Ordering by Check

To order by check, please print and fill out the order form and send it along with a check payable to Lightning Creek Associates to:

Lightning Creek Associates
502 South First Avenue
Sandpoint, ID  83864

Ordering by Credit Card

For your convenience we have contracted another company, NorthStar Solutions, to process any orders you may wish to place with your Visa, MasterCard, or Discover card.  Please be sure to mention you would like to order Product # [1881] when placing your order:

Note: Please do not contact NorthStar Solutions for technical support.

INTERNET ORDERS

Visit NorthStar Solutions at

http://www.nstarsolutions.com

and fill out their online order form--fast, easy and secure!

PHONED ORDERS

Calls are taken 10 am - 8 pm, EST, Monday thru Saturday.
1-800-699-6395 (From the U.S. only.)
1-803-699-6395

FAXED ORDERS

Available 24 hours.
1-803-699-5465

E-MAILED ORDERS

CompuServe: starmail
America Online: starmail
Internet: starmail@compuserve.com

MAILED ORDERS

You may register with a check or money order.
Make them payable to "NorthStar Solutions" and send them to:
PO Box 25262, Columbia, SC  29224
Please provide (or be prepared to provide) the following information:

•	The program you are registering Product #[1881].

•	Your mailing address.

•	Your Visa, MasterCard, or Discover # and its expiration date (if using credit card).

•	Your E-Mail address (so NorthStar Solutions can send you an E-Mail confirming your order and so we can contact you easily with any important follow-up information, upgrade announcements, etc.).


How To Use TimeLogger

1.	While you're working, record events such as when you start working on a project, when you stop, when you answer the phone, etc. You can record the events using TimeLogger but I find it quicker to use notepad or a program like it. The text file thus produced can be loaded into TimeLogger when it's convenient. Click here for a description of the required syntax for text files. The following steps are to be executed periodically and at least once per billing period.

2.	If you've recorded your events with an external program, load them using the Load Window. Also load files provided by your subcontractors and employees, if any.

3.	Use TimeLogger to assign customers, jobs, tasks and subtasks to each logged event that doesn't already have these attributes. From now on I'll refer to this process as "assigning" and an event as "assigned" if these fields have been filled in. Refer to the list below for a step-by-step breakdown of this task.

4.	Use the By Hours Window to find days where you forgot to log out or long stretches of time that you need to account for.

5.	Use the Job Summary Window to spot misspelled job/task ID's and jobs that need descriptions or PO numbers. Also look at the average rate. It's a good way to spot events that have been given the wrong rate.

6.	Use the Reports Window to preview and print your reports.

7.	Once you've printed your final reports, use the Change Window to set the billed flag on each event.

8.	Back up your data files.  If you’re using Paradox files, their default location is the DATA subdirectory off of the directory in which TimeLogger was installed.  If you’re using Interbase, use the backup utility that is provided with Interbase.

Assignments

1.	Set the starting and ending dates (or just the starting date) in the Selections Window to reflect the period you're working on.

2.	Bring up the Time Log Grid with Ctrl+G or the View|Grid menu.

3.	You may have already assigned each event when you logged it, but, if you're like me, you've left many events blank because you simply didn't have time to think about it. Use Ctrl+B to find the next event that is not assigned.

4.	Look at the description and the context (what else you were doing at the time) and decide what the customer, job and task should be. The focus should already be on the customer control in the main window, so just start typing. The customer control has an incremental search feature that will allow you to type a minimal number of characters to enter a known customer. The same is true for jobs and tasks. Sometimes the Tree View Window is a handy way to find an existing assignment. On the other hand, you're free to enter an assignment that isn't in the list. You can fill in descriptions, PO numbers, etc. later.

5.	Sometimes you can identify character strings in your descriptions that allow you to make en-masse assignments. You can do this with the Change Window . You can also use the Change Window to make en-masse corrections.

6.	On a log-out event (when you stopped working), you should leave it unassigned (unless you want to keep track of your leisure time). If such an event has been assigned by mistake, type Ctrl+A to clear it.

7.	Repeat these steps until all events other than log-out events have been assigned.


The Main Window

This window is used to record events. Each event has a time-stamp, an employee, a customer, a job and other things. Normally you need to supply the employee, customer and job. Everything else is optional, defaulted and/or calculated later. Even though the customer, job and tasks are defined elsewhere, you can type anything you want into these fields because you may not have time to look these things up when you're recording the event. You can find or define these values later. These fields do, however, provide an incremental search feature so that you can type a minimal number of characters to choose a known value.

Controls

Time	Enter the date and time for the event in the form MM/DD/YY HH:NN:SS AM/PM. When you insert a record, this field will be automatically set to the current date and time.

Employee	Select an employee from the list.  Employees are defined using the Employee Grid.

Billed	This indicates if the time for this event has been billed. It is normally unchecked on new records and most often is checked via the Changes Window.

Customer	Enter a customer ID.  This field employs an incremental search.  Customers are defined using the Customer Grid.

Job	Enter a job name. This field employs an incremental search.  Jobs are defined using the Job Grid.

Task	Enter a task name. This field employs an incremental search.  Tasks are defined using the Task Grid

Subtask	Enter a sub-task name.  Unlike the customer, job and task fields, this field does not employ an incremental search because sub-tasks are undefined

Description	Enter a description for the event.  The maximum length of a description is 255 characters.

Rate	This field defaults to the rate for the current customer or job. Change it if you want.

Factor	This is a number that is multiplied with actual hours to yield billable hours. It defaults to 1. For example, if you feel that 20% of your time was not billable because of learning, then set the factor to .8 and the customer will only see 80% of your hours.

Payrate	This is the amount to pay the employee. It defaults to the employee's rate. Note: for company owners, it should be zero.

Hours	This is the amount of time the employee spent on this task. Normally you don’t need to enter this field because it is computed by the Refresh menu option.

Billable Hours	This is the actual hours times the factor. You don't enter this number.

Billable $	This is the billable hours times the rate. You don't enter this number.

Pay	This is the amount to pay the employee for this event.  It is defaulted to the pay rate for the selected employee.  Change it if you want.

Profit	This is the billable dollars less the pay amount You don't enter this number.

Notes	This is the description of the event and any pertinent notes. (This is the big blank memo box at the bottom of the window.)

Navigator Buttons

Move to the first record (same as menu item Record|Move|First) *

Move to the prior record (same as menu item Record|Move|Prior) *

 Move to the next record (same as menu item Record|Move|Next) *

Move to the last record (same as menu item Record|Move|Last) *

Insert a record (same as menu item Record|New)

Delete a record (same as menu item Record|Delete)

Save changes (same as menu item Record|Save)

Cancel changes (same as menu item Record|Cancel)

See changes made by other users

* The set of records only includes those records that match the criteria in the Selection Window

Menus

Record	New	Insert a new event. The time-stamp will be set to the current date and time; the employee used on the previous record will be carried forward; the factor will be defaulted to 1.0; and all the rest of the fields will be cleared.(Ctrl+Ins)

Delete	Delete the current record (Shift+Ctrl+Del)

Move	First	Move to the first record * (Ctrl+Home)

Page Up	Move back one grid height's worth of records (Ctrl+PageUp)

Next	Move forward to the next record * (Ctrl+Down)

Prior	Move back one record * (Ctrl+Up)

Page Down	Move forward one grid height's worth of records (Ctrl+PageDn)

Last	Move to the last record * (Ctrl+End)

Center Grid	Center the current record in the grid (Ctrl+D)

Save	Save any changes to the current record (Ctrl+S)

Cancel	Cancel any changes to the current record

Goto	Go to a specific record by specifying its time-stamp

Find	Find a record by entering search criteria into the Find Window (Ctrl+F)

Find Next	Find the next record that matches the criteria in the Find Window (Ctrl+N)

Exit	Exit the program

View	TreeView	Show the Tree View Window (Ctrl+T)

Grid	Show the Time Log Grid (Ctrl+G)

Selections	Show the Selections Window

Employees	Show the Employee Grid

Customers	Show the Customer Grid

Jobs	Show the Job Grid

Tasks	Show the Task Grid

Calendar	Show the Calendar

ByHours	Show the By Hours Grid

JobSummary	Show the Job Summary Grid

Options	Enter the Options Dialog

Actions	Load	Import an external text file. See the Load Dialog

Refresh	Calculate the number of hours between each event for each employee. See the Refresh Dialog

Print	Print reports. See the Reports Dialog

Next Week	In the selections window, move the starting date forward by 7 days and set the ending date to the 7th day beyond that.

Prior Week	In the selections window, move the starting date back by 7 days and set the ending date to the 7th day beyond that.

Correct	Write Job	Set the current record to the assignment contained in the Job Buffer (Ctrl+Left)

Clear Job	Clear the Job Buffer (Ctrl+A)

Get Job	Set the Job Buffer to the assignment contained in the current record. (Ctrl+Right)

Next Blank	Find the next record that has a blank customer. (Ctrl+B)

Insert Gap	Insert a new record with a timestamp later than the current record by the amount of time specified in the Insert Gap Dialog (Ctrl+I)

Change	Make changes to lots of records at once with the Change Dialog (Ctrl+H)

Edit Job	Go to the customer control on the main window no matter what window and/or control has the focus. (Ctrl+E)


The Time Log Grid

This grid is where I'm focused when I'm processing my hours at the end of a billing period. The notes I've taken appear in the description column and I look for records that need to be assigned a customer and job by using the Ctrl+B key shortcut. Copy job (Ctrl+Right) and paste-job (Ctrl+Left) come in hand, as does center-grid (Ctrl+D). If I have to type in a new customer and job, I can usually just start typing because the main edit window usually has the focus. If not, Ctrl+E gets me there.

All the keyboard shortcuts are described in the menu section of the Main Window.

(Some of the descriptions you see in the above example are a little cryptic because I have several daemons that make log entries whenever I perform certain actions on my or my customer's VAX).


The By Hours Grid

Get to this window with the View|ByHours menu in the Main Window . Use it to find large intervals that you need to account for. The grid is just a list of events sorted by the hours taken for each event in a descending order. This window will not show events that have blank assignments as they are considered to be log-out events. A single click on any row in the window will cause the Main Window and the Main Grid to move to that record so it can be corrected if necessary.

The most common cause of very large intervals is forgetting to log out at the end of the day. The first two rows in the above example were caused by that very oversight.

See also: Navigator Buttons


The Change Window

Get to this window with the Correct|Change menu in the Main Window . Use it to make changes to many records at once. Use the controls on the left side to select the records to be changed. Use the controls on the right to enter new values.

Selection Controls

Employee, Customer, Job, Task, Subtask
In these controls, you can enter single values or ranges of values

Start Date	a record qualifies if its date is greater than or equal to the date entered here.

End Date	A record qualifies if its date is less than or equal to the date entered here.

Description	If the text you enter is found anywhere in the description, the record will qualify. If the data is stored on an Interbase server, the search is case insensitive, otherwise it is case sensitive.

Billed	A record qualifies if its billed flag matches the state of this checkbox.

Caution:  Rates are not automatically set when customers, job, and/or employees are changed with this window.


The Calendar Window

Get to this window with the View|Calendar menu in the Main Window . Use it to see what day of the week and month you are on.  The calendar will be automatically updated whenever you move to a new record in the main window.  You can also pick a date on the calendar and click the use button to enter that date into the main window.


The Customer Grid

You can get to this window with the View|Customers menu in the Main Window . Use it to add, delete, and modify customer information.

How To

Insert a new customer	Select any column on the last customer (use the scroll bar to get down to the last customer), and hit TAB until you’re on a new line or click the right mouse button and ADD.

Cancel an insert	Hit ESCAPE.

Delete a customer	Select any column on the customer you want to delete and hit CTRL-DELETE.

Edit a customer	Select any text using the mouse or keyboard and type in the replacement text.

Find a customer	 This edit-box provides a way to incrementally search for a customer ID. With each letter you type into this control, the grid selection moves to the first customer ID that matches what you've typed so far.

When you right-click on the grid, you'll get a context menu with the following choices:

Context Menu

Jobs	Brings up the jobs grid showing all jobs for this customer

Add	Opens up a row so you can add a new customer

Delete	Deletes the current customer


The Employee Grid

Use this window to add, delete and modify employee information.

How To

Insert a new employee	Select any column on the last employee (use the scroll bar to get down to the last employee), and hit TAB until you’re on a new row.

Cancel an insert	Hit ESCAPE.

Delete a employee	Select any column on the employee you want to delete and hit CTRL-DELETE.

Edit a employee	Select any text using the mouse or keyboard and type in the replacement text.

Find a employee	 This edit-box provides a way to incrementally search for an employee ID. With each letter you type into this control, the grid selection moves to the first employee ID that matches what you've typed so far.

Context Menu

Add	Opens up a row so you can add a new employee

Delete	Deletes the current employee


The Find Window

Use this window to search for a record within the current selected set that matches certain criteria.

Controls

Employee, Customer, Job, Task, Subtask
In these controls, you can enter single values or ranges of values

Start Date	a record qualifies if its date is greater than or equal to the date entered here.

End Date	A record qualifies if its date is less than or equal to the date entered here.

Description	If the text you enter is found anywhere in the description, the record will qualify. If the data is stored on an Interbase server, the search is case insensitive, otherwise it is case sensitive.

Billed	A record qualifies if its billed flag matches the state of this checkbox.

Buttons

Find the first record that matches the criteria

Find the next record that matches the criteria

Close this window


The Insert Gap Window

Get to this window with the Correct|InsertGap menu in the Main Window . Use it to insert a new event at a given amount of time after the current one. Enter the time interval in the gap box in the form HH:NN:SS where HH is hours, NN is minutes, and SS is seconds. Minutes and seconds are optional. The new event will be unassigned.


The Job Edit Window

You get to this window with the Edit context menu or the ellipsis button on the Job Grid. It is used to view and edit job information.

Controls

ID	This is the job identifier. It should be an easily remembered abbreviation. The maximum length is 16 characters.

Reminder	Check this box if you want a reminder window to be displayed

Description	The description of the job. This is what appears in the reminder window, if there is one, and also on reports.

Customer PO	This is the customer's PO number.

Limit	The limit in hours for this job. Note: This quantity is not enforced by this program at this time. It may be in the future.

Rate	The hourly rate for this job. Leave this field blank if the customer rate is to apply.

Notes	Notes for this job.

Buttons

Brings up the Job Grid

Brings up the Tasks Grid

Navigator Buttons	See Navigator Buttons


The Job Grid

You can get to this window with the View|Jobs menu in the Main Window . Use this window to add, delete, and modify job information.

How To

Insert a new job	Select any column on the last job (use the scroll bar to get down to the last job), and hit TAB until you’re on a new line or click the right mouse button and ADD.

Cancel an insert	Hit ESCAPE.

Delete a job	Select any column on the job you want to delete and hit CTRL-DELETE.

Edit a job	Select any text using the mouse or keyboard and type in the replacement text.

Find a job	 This edit-box provides a way to incrementally search for a job ID. With each letter you type into this control, the grid selection moves to the first job ID that matches what you've typed so far.

When you right-click on the grid, you'll get a context menu with the following choices:

Context Menu

Tasks	Brings up the tasks grid showing all tasks for this job

Add	Opens up a row so you can add a new job

Delete	Deletes the current job

Edit	Brings up the Job Edit Window. Note, you can only enter or change job notes in the edit window.


The Job Summary Grid

Get to this window with the View|JobSummary menu in the Main Window . Use it to view job summary information. Information is summarized by customer, job, task, and subtask. The records that are summarized are constrained by the Selections Window.

Columns

Cust	The customer ID

Job	The job ID

Need	This indicates missing data that may be required for the billing reports. It can contain "PO" if the purchase order field in the job record is blank, "J" if there is no job record, "JN" if the job description is blank, "C" if there is no customer record, or "CN" if the customer name is blank.

Task	The task ID

Subtask	The subtask ID

Hours	The total hours

Billable Hours	The total billable hours (hours times factor)

Billable Amt	The total billable amount (billable hours times rate)

Pay	The total amount to pay (hours times pay rate)

Profit	The total profit (billable amount less pay amount)

Ave. Rate	The average rate

Buttons

Brings up the Customer Grid

Brings up the Job Edit Window

Brings up the Reports Window


The Load Window

You get to this window by using the Actions|Load menu selection in the Main Window . It is used to load events from external text files. When you click the Go button, a file open dialog will appear allowing you to choose a file to load. When you click OK on the file open dialog, the load will begin. The load progress is displayed in the status bar of  the Queue Window   The lower pane of the Queue Window will show any errors that may be encountered and a final indication of whether the load succeeded and was committed or failed and was rolled back. If any errors are encountered, the entire load is rolled back, which means no events are loaded.

If the load succeeds, it will automatically trigger a refresh covering the date range that was loaded.  It will also rename your file to have an extension of “.LOADED”.

Before clicking GO, enter the employee and indicate if the file is in INT format with the checkbox if appropriate. Click here for an explanation of INT format and the required syntax of the external text files.

WARNING: If you are using Paradox files and you click CANCEL during the load or if the load fails due to an error, the records created up to that point will remain.  If you are using an Interbase server the records created up to that point will be deleted.  In other words, CANCEL merely aborts the load for Paradox files but it undoes the entire load from the beginning for Interbase servers.


The Options Dialog

You get to this window with the View|Options menu in the Main Window . It is used to set the following 3 items:

1.	The company name to be displayed on reports

2.	The default director for the Load Window.

3.	Whether to display hours as decimal numbers or as hours:minutes:seconds.

Additionally, there is an indication of whether you are using an SQL server (Interbase) or local data files (Paradox).


The Refresh Window

You get to this window with the Actions|Refresh menu from the Main Window . It is used to calculate and reset the elapsed time between each event. When you click the GO button, a refresh job will be started in the Queue Window.  Unless you a refreshing a years worth of events, a refresh job will take less than a few seconds.  The lower pane of the Queue Window will display the completion status and any messages (there shouldn’t be any).


The Queue Window

You get to this window with the View|Queue menu from the Main Window and by clicking the GO button on the Load Window or the Refresh Window .  Since the load and refresh processes can sometimes be lengthy, they are submitted to a queue and are processed, one-by-one, in separate threads.  The Queue Windows allows you to see the processes that have been submitted and which one is running.  Using the right mouse button you can delete any process, whether it is running or not.  If you delete a running job, it may not terminate immediately, but it will as soon as it can.


The Reminder Window

Use

Reminder windows are small sticky-note like windows that come up with TimeLogger and stay on top of all of its windows. A separate reminder window is displayed for each job or task that has the reminder box checked. If you close a reminder window (by clicking on the X), the reminder box will be automatically unchecked in the corresponding job or task. You can bring up a job or task edit window by double-clicking on the reminder window.

See also:	Job Edit Window,
Task Edit Window


The Print Window

Get to this window with the Actions|Print menu in the Main Window . Use it to print one or a series of billing reports.

Controls

Customer Summary	Print the customer summary report. This report has one line per customer.

Job Summary	Print the job summary report. This report has one line per job per customer.

Subtask Summary	Print the subtask summary report. This report has one line per subtask.

Date Summary	Print the date summary report. This report has one line per date per task/subtask per job per customer.

Billable Only	Only print billable customers (customers that have a rate).

Grand Total	Show a grand total at the end.

Buttons

Preview the reports on the screen

Print the reports on the printer

Close this window.


The Selections Window

Use this window to limit the records that show in the main time-log edit window and grid. Each selection has a corresponding checkbox that controls whether the selection is active or not. The selections don't take effect until the Apply button is clicked.

Controls

Employee, Customer, Job, Task, Subtask
In these controls, you can enter single values or ranges of values

Start Date	a record qualifies if its date is greater than or equal to the date entered here.

End Date	A record qualifies if its date is less than or equal to the date entered here.

Description	If the text you enter is found anywhere in the description, the record will qualify. The search is always case insensitive.

Billed	A record qualifies if its billed flag matches the state of this checkbox.

Buttons

Subtract 7 days from the start date and make the end date equal the start date plus 6 days

Add 7 days to the start date and make the end date equal the start date plus 6 days.

Apply the selections

Hide this window


The Task Edit Window

You get to this window with the Edit context menu or the ellipsis button on the Task Grid. It is used to view and edit task information.

Controls

ID	This is the task identifier. It should be an easily remembered abbreviation. The maximum length is 24 characters.

Reminder	Check this box if you want a reminder window to be displayed

Description	The description of the task. This is what appears in the reminder window, if there is one, and also on reports.

Notes	Notes for this task.

Buttons

Brings up the Task Grid

Navigator Buttons	See Navigator Buttons


The Task Grid

You can get to this window with the View|Tasks menu in the Main Window . Use it to add, delete, and modify task information.

How To

Insert a new task	Select any column on the last task (use the scroll bar to get down to the last task), and hit TAB until you’re on a new line or click the right mouse button and ADD.

Cancel an insert	Hit ESCAPE.

Delete a task	Select any column on the task you want to delete and hit CTRL-DELETE.

Edit a task	Select any text using the mouse or keyboard and type in the replacement text.

Find a task	 This edit-box provides a way to incrementally search for a task ID. With each letter you type into this control, the grid selection moves to the first task ID that matches what you've typed so far.

When you right-click on the grid, you'll get a context menu with the following choices:

Context Menu

Add	Opens up a row so you can add a new task

Delete	Deletes the current task

Edit	Brings up the Task Edit Window


The Tree View Window
Tree View Window

Use this window to quickly locate an individual customer, job and/or task. Double-click any item to bring up an edit window for that item. Right click an item to bring up the following context menu:

Context Menu

Edit	Bring up an edit window for the selected item

Add Child	Add a new item to the child list. I.e. if you choose edit child for a customer, you'll get an edit window to add a new job for that customer.

Reminder	Choose this menu item to display the reminder window for the selected item.

Use	Choose this menu item to use the selected item in the current time log record.

Refresh	Choose this item to refresh the tree view window to reflect any changes made to the customers, jobs, or tasks.


Syntax For External Files

Events can be loaded from external ASCII text files such as those created by Windows Notepad. In order for TimeLogger to understand what is in these files, a few rules must be adhered to.

Rules for Dummies

The following rules look complex, but the important thing is that Notepad and many other text editors will insert date/times that are acceptable according to these rules. After the date/time, you can enter an assignment like this: CUST:JOB:TASK:SUBTASK where the job, task and subtask are all optional. After the assignment, enter whatever notes you like, taking as many lines as you like. If you want to skip the assignment, enter and exclamation mark (!) followed by your notes.

Following are the strict rules. There are actually two file formats that are accepted. Normal and INT format. The INT format is only there to support files I import from my VAX systems, but you might find it useful. There is a checkbox on the Load Window that controls whether INT format is expected or not.

Rules For All Formats

1.	Any line can begin with "EMP:" followed by an employee ID. This sets the employee for all following lines until another occurrence of "EMP:" or the end of the file. The employee can also be selected in the Load Window so this feature is optional. If used, it overrides the employee set in the Load Window.

2.	If the NoJob flag is off, then an assignment may follow the date/time. An assignment is of the form CUST[:JOB[:TASK[:SUBTASK]]]. ([] enclose optional things).

3.	If an assignment is found, then everything following the assignment is considered notes **.

4.	If "!" or "!.." is found immediately after the time, then everything following it is considered notes ** and the assignment is left blank.

Rules For Normal Format

1.	An event can have multiple lines. The first line must start with a date and time.

2.	A line may consist of the following:
'Type Date Time Duration Status'
in which case the NoJob flag is set and the line is ignored. *

3.	A line may start with "DATA" followed by a space, in which case the TextPrefix is set to "@pc modem " and "DATA " is stripped from the line. *

4.	A line may start with "FAX" followed by a space, in which case the TextPrefix is set to "@pc fax" and "FAX " is stripped from the line. *

5.	The date may be in one of the following styles: MM/DD/YY, MM-DD-YY, DD/MMM/YY, DD-MMM-YY, where MM is a 1 or 2 digit month number, MMM is a 3 letter month abbreviation, DD is a 1 or 2 digit day number, and YY is a 2 or 4 digit year number. Here are some examples: 12/31/97, 31-DEC-1997.
Note: Any line that starts with 0 or more spaces followed by a valid

6.	date marks the beginning of a new event.

7.	The time must come after the date and one or more spaces. The time may have embedded spaces if the AM/PM style is used. The time must be in the following format:
HH:NN[:SS.X][ AM|PM],
where HH is a 1 or 2 digit hour, NN is a 1 or 2 digit minute, SS is a 1 or 2 digit second, X is 0 or more digits representing the fraction of the second, [] enclose things that are optional, and | separates mutually exclusive choices. Here are some examples:
01:13 AM, 13:13, 13:13:13.99, 1:13:13.99 AM. (The space prior to AM or PM may be omitted)
Note: Any line that starts with 0 or more spaces followed by a valid time marks the beginning of a new event.

Rules for INT Format

1.	An event can take only one line and must start with a date/time signature in the following format:
S#.######SYYMMDDSHHNN.##S
where S is a space, # is any decimal digit, YY is the 2 digit year, MM is the 2 digit month number, DD is the 2 digit day, HH is the 2 digit hour, NN is the 2 digit minute and "." is a decimal point. All the digits represented by # are ignored but must be present. ***

*	This is to support connection log files output by ProComm for Windows

**	The text that goes into the notes field is first prefaced by the TextPrefix if there is one. The description field receives the first 255 characters of the notes field.

***	My VAX program would use the #.###### to contain the interval between events expressed in days.


Navigator Buttons

Move to the first record

Move to the prior record

Move to the next record

Move to the last record

Insert a record

Delete a record

Save changes

Cancel changes

See changes made by other users


Ranges

A range is either a single value or 2 values separated with a dash. Multiple ranges can be entered separated with commas and are called a "range collection". Values may be enclosed with single or double quotes but don't have to be unless they contain dashes, commas, or quotes.

Negating

Any single range may be negated by enclosing it in parentheses or prefixing it with "NOT:". For example, <I>not:001-033</I> or <I>(001-033)</I> means include all records with the value not within the range of 001 to 033 inclusive.

Keywords

The keywords "ALL" or "NONE" may be used in place of an entire range collection.

Options

The following option keywords may be applied to any given range by prefixing

the range with the keyword followed by a colon.

NOT	Negate the range

INCLUDE	Same as Not Not

EXCLUDE	Same as NOT

GENERIC	Include all records that match the entered value only up to the length of the value. E.g. "GENERIC:51" would match "51" and "5143" but not "5211".

EXACT	The opposite of GENERIC, i.e. values must match exactly.

NOGENERIC	Same as EXACT

RSET	Right justify strings before comparing them.

LSET	Left justify strings before comparing them

NUMERIC	Values will be compared numerically. For example," 001" would match "1". "ABC" wouldn't match anything.

ALPHANUMERIC	Values will be compared as character strings. For example, "001" would not match "1".

FILL=n	This specifies the fill character to be used when justifying strings. N is the ASCII value of the desired character.

FILL=DEFAULT	This means use the default fill character when justifying strings.

Errors

Argument not allowed for <I>option</I>	An argument was supplied with an option that doesn't require one

Unrecognized option: <I>option</I>	An unrecognized option was used.

Inappropriate length: <I>value</I>	This means you entered a value that was too long.

Inappropriate range: <I>value</I>	This means you entered a range where the minimum value (the one to the left of the dash) was greater than the maximum value (the one to the right of the dash).

Syntax

The syntax for range collections is as follows (click here for an explanation of the notation):

range_collection	= qualified_range { "," qualified_range}

qualified_range	= [options] negatable_range

negatable_range	= range | ( "(" range ")")

range	= value [ "-" value]

options	= option ":" { option ":" }

option	= "NOT" | "INCLUDE" | "EXCLUDE" | "GENERIC" | "EXACT" | 	"NOGENERIC" | "RSET" | "LSET" | "NUMERIC" | "ALPHANUMERIC" | 	fill_option

fill_option	= "FILL" "=" fill_argument

fill_argument	= integer | "DEFAULT"


Syntax Notation

Curly braces ({})	Things enclosed in curly braces may be included 0 or more times

Square brackets ([])	Things enclosed in square brackets are optional

Lower case words	Lower case words (which may include underscores) are to be replaced by something else. Usually the word is defined elsewhere.

Quotes ("")	Things enclosed in quotes are to be included exactly as-is.

Parentheses (())	Parentheses are used to group things where it would otherwise be ambiguous how operators are to be applied.. Usually used in conjunction with the vertical bar.

Vertical bar (|)	The vertical bar means "or". When two or more things are separated with vertical bars, you must choose only one.


Assignments
An assignment is the customer, job, task and subtask combination that is assigned to an event.  Only the customer is required; the job, task and subtask are optional.


The Job Buffer
The job buffer is a special clipboard that contains a job assignment. Use Ctrl+Right to copy to the buffer and Ctrl+Left to paste from it.


Incremental search means that as you type, the program tries to find a previously defined entry that matches what you’ve typed so far.  Previously defined entries are customers (defined in the Customer Grid), jobs (defined in the Job Grid), and tasks (defined in the Tasks Grid).  This allows you to abbreviate.  When you tab off the field, the matching entry will be used.  If your intent is to enter what you’ve typed instead of what the program has found, hit the delete key prior to tabbing off the field.