Dear Vixens and Reynards:
I am going to try grids again. It occurred to me that I could
have stated things better in my previous post. I left out details
that, on further thinking, I decided I had better mention. I also
wrote of a few other minor areas, too, that I would like to address.
The App
-------
My existing app is a client billing system. The VFP version
(version 2) is about fifteen years old and going strong. I wrote it
when I knew a lot less about relational theory. Sometimes, I cringe
a bit at some of the design. It does, however, in practice, work quite well.
Boss Breaks Paradigms
---------------------
My boss has a way of breaking paradigms. I have never gotten
into a framework, because he has this way of asking for things that
though innocent-appearing can sometime require extensive
programming. (It has not happen lately, but when it does, it can be
nasty.) Since I have rolled my own for the most part, this means
that some of my code would probably be classified as downright primitive.
I do not use data sessions, binding to tables, or even a
database container.
Validation is done by the app. More on this later.
The app is single-user with provision for the master
workstation to read from and write to other workstations. (My boss
said that it would not have to be multi-user. I confirmed it with
him multiple times. He asked about it years later. Go figure.)
Complexities
------------
The invoicing is rather involved. Two central examples:
WFC:
An individual thing that can be billed is called a Work
Function Code (WFC). For a given WFC, there is not just one
rate. There is the bare rate (when no other rate applies) which
applies unless overridden. A client may have a client WFC, and there
can be contract WFCs (which override the client WFC) for certain
types of work for a client. Selecting the correct WFC is important.
WCC:
A client will typically have multiple work orders. How these
are selected for a given work entry is by date, client code, and Work
Classification Code (WCC). A WCC is type of work being done (e.g.
MSH: Miscellaneous Shipping & Handling, FUL: order fulfillment).
If a client starts having a lot of FUL work, we might create an
FUL work order. Any previous work entries in the time period can be
refigured and will be slotted under the new work order.
Similarly, if the FUL work order for a client were to be
deleted, the work entries can be refigured and will be slotted under
the alternative WCC for FUL (which is MSH).
Similarly, a client could have its FUL work billed twice
monthly. This involves simply adjusting the existing work order to
one-halfof the month, adding another work order for the remainder of
the month, and then refiguring.
When work orders are generated for the next month, they take
the pattern of the previous month.
We have clients of different sizes so the above dynamicness is
useful. A smaller client will be billed under only a few work
orders. A larger client will have various areas broken out into
their own work orders. None of this has any impact on the people
doing DE since this has to do with billing, not DE. For example, a
DE person can enter a FUL transaction and not need to know whether
there actually is a FUL work order or whether the entry will be under
the MSH work order.
Editing
-------
We bill 1st-15th (smaller billing) and full month (larger
billing). There are also special projects which are handled
individually. Data comes from DE in the system but also from data
imported from outside support systems. This data has to agree. The
process of reconciling this all is called "editing".
This is a major part of why I want to use grids. Prior to the
editing, transactions have been considered individually for the most
part. Now, they have to be cross-checked. (For example, a day's
orders for a client may show 23 packages prepared. If the shipping
log shows only 22, then the discrepancy has to be accounted for. It
might be that the last package was shipped the next day. It might be
that the DE person misread the production sheet.)
Editing involves scrolling through the work entries and seeing
that they agree and adjusting as necessary. Other adjustments can
also be made. For example, if there is an E-mail storm about a
certain topic, we will typically not charge for any E-mails after the
first two or three.
To edit, the operator needs to be able to see many transactions
at once. Currently, the system uses grids and does not have much
error checking. If I use grids instead, I want full error checking.
Browses
-------
See also Editing.
There are close to 30 browses. Few have error checking. This
is fairly safe since only people doing billing have occasion to go
into browse. Nonetheless, this is a weak part of the system.
Validation
----------
1) Validation is done at the app level. I do not use a database
container. This had advantages earlier because of data being taken
offsite, but I am willing to change this.
*** If validation in grids working depends on using a DBC, I
need to know this. ***
I would prefer to get all of my validation in one place, but
there is the problem of the user interface. As I see it, I would
still have to duplicate my validation. Is there a fairly easy
solution? My form validation code is fairly standardised so changing
it wholesale might not be the problem it might be. If I do redo
validation handling, I would like the validation to not be
duplicated. (My forms should be able to pick up the error on each field.)
2) Validation is at the field level and the row level. Any new
validation scheme must respect this.
3) Validation is using .valid(). I would like to change this to
.LostFocus(). What are the ins and outs?
Not Totally Relational
----------------------
I wanted uniqueness for all keys, but I got overridden by my
boss. Two main tables are not unique for all key. They do have
chunks. These chunks are processed that way. I doubt I can change
things at this point without lots of violence to the system. I do
not think it is worth it.
Closing
-------
I hope that I have not buried you and that I have not left out
anything critical. In summary, this system "just growed" in some
respects, is mature and works, but could stand some work.
This system has to continue operating as changes are made. I
am currently only working ten hours per week on this. This means
that changes should be gradual or at the least, not interfere with
use until they are finally activated. (My boss might ask for a
change while I am in the middle of these changes, and I need to be
able to accommodate this.)
Your thoughts?
Sincerely,
Gene Wirchenko
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://mail.leafe.com/mailman/listinfo/profox
OT-free version of this list: http://mail.leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message: http://leafe.com/archives/byMID/profox/
** All postings, unless explicitly stated otherwise, are the opinions of the
author, and do not constitute legal or medical advice. This statement is added
to the messages for those lawyers who are too stupid to see the obvious.