Forum Replies Created
-
have you tried resetting the browses? When you say lost the ability to see contacts browse, do you mean they click on the drop down menu and click browse contacts, then enter a search criteria?
Or, are you talking about company management history browses?
-
Mark, there is no report in QC that I am aware of. However, you can run this SQL statement in interactive SQL to see the list
Select pn.pn “TOOL”, pn.description “DESCRIPTION”,wtt.qty_reserved “QTY RESERVED”, wtt.qty_needed “QTY NEEDED”,wtt.date_check_out “CHK OUT DT”,sys.user_name “CHKD OUT TO”, stk.stock_line “STK LN”, stk.serial_number “SN”,stk.ctrl_number “CTRL NUM”,stk.ctrl_id “CTRL ID”, wo.si_number “WO NUM”,wt.sequence “TASK SEQ”,wt.squawk_desc “TASK DESC” from
wo_operation wo, wo_task wt, wo_task_tools wtt, stock stk, stock_reservations str, parts_master pn, sys_users sys where
wtt.sysur_out=sys.sysur_auto_key and
wt.woo_auto_key=wo.woo_auto_key and
wt.wot_auto_key=wtt.wot_auto_key and
wtt.wtt_auto_key=str.wtt_auto_key and
str.stm_auto_key=stk.stm_auto_key and
stk.pnm_auto_key=pn.pnm_auto_key
If you want to be enbeded in Excel you can copy and paste this into a notepad txt file, then when you save it change the type to ALL FILES and give it an extension of dqy instead of the txt. This should allow you to double click it and it will open in MS Excel. Be sure to replace the user id and password. Once you open it in excel, you can save that spreadsheet and refresh the data anytime.
XLODBC
1
DRIVER={Microsoft ODBC for Oracle};UID=PUT YOUR USER ID HERE;PWD=PUT YOUR PASSWORD HERE;SERVER=MAXQPROD;
Select pn.pn “TOOL”, pn.description “DESCRIPTION”,wtt.qty_reserved “QTY RESERVED”, wtt.qty_needed “QTY NEEDED”,wtt.date_check_out “CHK OUT DT”,sys.user_name “CHKD OUT TO”, stk.stock_line “STK LN”, stk.serial_number “SN”,stk.ctrl_number “CTRL NUM”,stk.ctrl_id “CTRL ID”, wo.si_number “WO NUM”,wt.sequence “TASK SEQ”,wt.squawk_desc “TASK DESC” from wo_operation wo, wo_task wt, wo_task_tools wtt, stock stk, stock_reservations str, parts_master pn, sys_users sys where wtt.sysur_out=sys.sysur_auto_key and wt.woo_auto_key=wo.woo_auto_key and wt.wot_auto_key=wtt.wot_auto_key and wtt.wtt_auto_key=str.wtt_auto_key and str.stm_auto_key=stk.stm_auto_key and stk.pnm_auto_key=pn.pnm_auto_key
-
Mathew, here are some questions to get started.
1. Do you have the screen designer module?
2. Does this same error happen on ALL machines running QC?
3. If no, does this error happen on any particular users?
4. Are you running firebird or Oracle?
5. What are the specs of your workstations?
6. Are there any other database related applications installed on your work stations?
7. Does this error happen in your test DB on the same computer that it is happening in your Live DB?
8. What troubleshooting steps have you already taken to address the issue?
-
QC Inventory module has an option for tooling. I believe the Asset Management functionality needs to be turned on in order to see it though. The biggest thing that you need to think about is the cost. Tools are kept in inventory just like any other stock line. So, if you don’t have the tooling functionality turned on you will have to manage your calibration schedules manually.
Calibrations would go through the repair order module, then come back in with the costs, and ultamtely create the payable. So, if you use the accounting module you need to think about how you want to manage those costs on your books. You can use the part number level GL distribution override (through the global menu) to put them in a different GL bucket, but when you run inventory reports those will show up.
If you are using the barcode module to issue tools, it works great. But, know that it uses the barcode stock line label when scanning the tool in and out of jobs. This presents two issues. One, it isn’t easy to put a barcode label on wrench or screw driver and Two, every time that tool goes on repair and back, the control number and ID change which means you have apply a new label. What we did to solve this was to create a binder of all tools to be issued and kept the labels in the binder. Each tool had a data plate with a unique ID on it which acted like the serial number. Each time the unit was calibrated, the new label was produced and replaced the old one I the binder. When a mechanic needed the tool, the clerk would scan the job, scan the worker badge, then scan the tool BC label in the binder. Our lost tools went to almost zero after we started tracking them.
So, there are a few things to think about and several areas of the organization it impacts.
Hope this helps.
-
Are you planning on using the barcode units to issue the tools through the work order or aircraft maintenance modules?
-
Jeff, I am glad Nicola contacted you. When this came up, I immediately contacted him, Todd and Jocelyn.
-
Here are my thought Tony
1.) How do we keep an invoice from sending automatically? We would need this for an internal correction.
– What I did for our shipping notices is the following. First, I wanted to be able to exclude a company all together from receiving the automated shipping notices. Second I wanted to be able to override this on a case by case basis. Third, I wanted to be able to exclude certain transactions from having the shipping notice sent. Now, this was done before I had the screen designer module. So, what I did was use one of the UDF check boxes in the company module to indicate “No Ship Ntc” – when checked, the automated notice would be ignored for that company. In the sales order what I did was created two aircraft records – since we don’t really use that table. I called one “No Ship Ntc” and one “Ship Override”. If No Ship Ntc aircraft was selected in the SO header that order would be skipped for the auto notice. If Ship Override aircraft was selected, that order would have a ship notice sent even if the company was marked as No Ship Ntc – you could do something similar to control your auto invoices.
2.) We need to be able to identify Invoices for repair bills, exchange fees, late charges, etc that are billed out after the initial sale. These invoices only have charges on them so I was wondering if we could use anything with a $0 in the subtotal or something along these lines These invoices need to have a style that has the sales order item notes print. We normally do not show item notes on our invoices. While I see it being easier to just keep all item notes printing – the powers that be see it as too much of a risk that a salesperson might enter in internal notes that we don’t want a customer to see (our ‘procedures’ state these should be in the header notes however it’s not always remembered…).
— Well, first I think it is bad practice to send these charges out on a separate sales order than what the charge is for. I say this assuming that is what you are doing. If you are re-opening the original sales order and appending the charges to it, they will still get invoiced on their own unique invoice. With that said, you can handle this a few different ways. The easiest would be to create a unique number log for invoices relating to these charges that you want to separate. That number log should have a unique prefix, like a “C” for charges. We do this for credit memos and for corrections. Our credit memos start with CMI and our corrections start with FXI. That way we can easily differentiate between a true credit memo and on that was done to correct a mistake. As for the style, that should be controlled through your print invoice setup. You can call the print styles from the event manager upon printing. Of course, the style would have the customized invoice layout accounting requires.
3.) Certain customers need certain words in the subject – this I’m not worried about since I should just be able to set up an event for each customer that needs it.
— This should be address through the clause system. That is exactly what it is designed for.
4.) Certain customers need the buyers copied in – this should be just setting up another separate event with the buyer added to the To or CC field and creating a separate marketing list correct (ex – EMINV-With Buyer)?
— Here again, you could use the UDF check boxes in the company record to indicate that buyer notification be required. The challenge here is recording the buyers info. Now, the defition of buyer could be two things. Buyer meaning their purchasing person that submitted the PO to you? Or buyer meaning the company they are selling the product to?
Option for internal purchasing agent can be address through my first suggestion by using the rolodex.
Option for your customer’s external buyer could be addressed by using a UDF in the SO header where you enter the person’s name and email when the SO is created. Then, if the UDF check box is checked in the company record, look to this field for the additional email address.
-
There are many types of verifications, are you speaking of financial, restricted party screening, XM Insurance? Please elaborate on what you are trying to achieve.
-
Adam, some of those settings are held in the registry I think while others are held in the “quantum” table and others still in other tables. It would take some research but Ill bet it could be done. That said – I don’t know how to do it off the top of my head.
-
does oracle developer tool give you any other errors? Did you try ” around the value in the where?
-
Yes, you are correct. My mistake. Data pipelines in forms designer are where the sorts are controlled.
However, you might be able to get around it.
Option 1
You could, in the WO_TASK sub report create two groups. First group on the task status, then the last change date. Groups will sort by default – the big question is will it sort how you want it to?
Option 2
Create new form object (like a label) with a formula that displays the open status if the status code is open, otherwise display nothing. THen, group on this object then group on the last status change.
If your status codes are static and set, you could put in your formula a rank which can control the grouping. For example
if wo_task[‘description’]=’DELAYED’ then
text :=’1. ‘+wo_task[‘description’]
else if ……..
text := ‘2. ‘+wo_task[‘description’]
-
You can probably accomplish this by sorting the tasks on the wo_task table last_status_change field, possibly filtering on the auto keys that are related to open tasks.
-
I don’t know for sure, I just whipped this together, but I think your statement needs to look more like this..
for example
INSERT INTO WARNING_TYPES wt (wt.WMS_AUTO_KEY, wt.WNM_AUTO_KEY, wt.WARNING_TYPE) values(85,3,1) where
wt.pnm_auto_key in (select pn.pnm_auto_key from parts_master pn where pn.ic_udf_019=’W’)
-
Not to counter Pietro’s suggestion because it makes sense. BUT… I would have gone a completely different route. My suggestion is to use one of the UDF check boxes in the Roledex to indicate that are on the invoice mailing list. Then, when you send your invoices out, reach out to the company record, then to the rolodex and roll through the list of entries in the rolodex, sending it to whomever is marked to receive it.
-
Slight modification to that statement..
SELECT SHIP_NAME, SHIP_DATE FROM SM_HEADER WHERE SHIP_DATE > To_Date(’12-31-2013′,’mm-dd-yyyy’) ORDER BY SHIP_DATE
You have to provide the date format picture for he query.
-
Worthington Aviation
Moderator09/08/2014 at 7:09 AM in reply to: SO RESERVE / CONSIGNMENT CODE LINKEric, your SQL statement should look like this
select soh.so_number,
so.item_number, pn.pn,
pn.description,
cnc.consignment_code,
stk.stock_line,
stk.serial_number
from
stock stk,
parts_master pn,
consignment_codes cnc,
stock_reservations str,
so_detail so,
so_header soh
where
str.sod_auto_key=so.sod_auto_key and
str.stm_auto_key=stk.stm_auto_key and
stk.cnc_auto_key=cnc.cnc_auto_key and
so.pnm_auto_key=pn.pnm_auto_key and
so.soh_auto_key=soh.soh_auto_key and
cnc.consignment_code=’UR VALUE HERE’
-
Dave, Henrik is correct. This is the way you would need to pull data from the audit trail. However, since the auto key could be the same for different transactions, you need to put a filter on the audit table on the source_table field to be sure you are getting only the company records, for example.
The lot module can be done in the same fashion. The source table for that is WOO.
-
Worthington Aviation
Moderator08/29/2014 at 7:07 AM in reply to: PMA STC INDICATOR FIELD IN INVENTORYMark, the best solution, in my opinion, is one of two things
1. use the group code because you can search on this in your inventory module.
2. if you are the PMA holder, either use unique PNs or append a code after the actual part number or before the description indiciating it is PMA. Both of these would also be searchable in the inventory module.
We use both of these methods at Worthington
-
I have yet to find a better way to manage scrapped items, even items scrapped on site, than the one I use through the stock issue module.
We bring it all in, not using the scrap quantities, then process scrap through the stock issues.
The process we use can be seen in my 2010 presentation here
http://quegroup.camp7.org/presentations_2010
Called Managing Inventory Shortages. It is virtually the same for scrap.
-
Great info, thanks for sharing!
-
Worthington Aviation
Moderator08/26/2014 at 12:56 PM in reply to: LOOKING FOR A QUANTUM/CRYSTAL REPORTS DEVELOPERAdvance QC is Kevin Otto, former employee of Component Control.
-
Also, I think advanced work order capabilities provide this auto sequencing and sub totals. If they don’t provide the subtotals, you could modify your forms and sub total based on the sequence numbers.
-
I am not sure I understand you question entirely, but I think you are looking for the task sequences. you can use decimals to provide groupings. For example non-routines might be 8.1, 8.2, etc.
-
Sarah, this is how the system is designed to work. The PN placed on the item of the PO is the stocking part. If you use the receiving inspection module, it should allow you to receive it under the alternate, but that is the only way I know of.
-
Are your UOM conversions set up correctly in the part master?
-
Bob I see no reason why you couldn’t create a custom label using forms designer, or integrated crystal reports and pull any and all data needed. The only caveat is that if it requires 2D or QR codes, you will need to use crystal. And, if you choose to use crystal, you will need to purchase a barcode plug in.
This all assumes you use the shipping order module.
Now, if you don’t, or you don’t want the staff to have to manually print, what I would do is create a crystal report that satisfies the customer requirements. Then, put it in an automation tool, like Visual Cut, and have it monitor new orders or shipments that need to have these labels print. Have it cycle every 10 minutes or so, then if it finds an order print the labels out on a designated printer.
It can be done with little cost if you already own crystal.
-
Bob, are you referring to barcodes being applied to the box, or the parts inside the box that identify the order per the specs of Boeing?
-
Tony this would only work if your inventory was in a lot.
You have to remember that you must keep your inventory stock line amounts in sync with your gl inventory accounts. So, if you sum the total qty_oh*unit_cost in the stock table and it does not match your total gl inventory accounts then you have a problem.
I know there is some functionality in QC that allows you to write down asset values, and manage them. However, I don’t think it is for the entire inventory but rather for tools, or engines you might lease, etc.
With all of that said, there are two ways you can approach this.
The first is to do a fairly extensive analysis on your inventory and determine the amount you need to write down across all of your stock lines in order to total the write down amount. This, in my opinion is the correct way. As I see it, you cannot just arbitrarily inject or remove costs into your inventory without it actually being tied to stock lines. As I see it, not all inventory should be written down. At Worthington, for example, we do a very comprehensive analysis on the inventory and tier the parts. Then, we identify the stock lines that we consider liquidate. Once we do that, we assign a value to the parts based on a market price and then weighted against each stock line based on condition code. This gives use the value of each item within the market so that we know what the market will bear. Once we have that, we can understand what costs should be written off. So, Once you have figured this out, you will need to then write the new costs back to the stock lines, which should make your GL entries. You could change your default inventory adjustments distribution code to point to your write off or obsolescence accounts temporarily. Afterwards, of course, change them back.
The second approach is like you are doing, but the only thing I can think of is to target your higher dollar items and adjust them down. As I said before, you cannot just inject or remove costs that do not tie to a physical part. Just wont work.
One final thought, if you can get your banks or auditors to approve it is to just keep all inventory in your system as zero cost. Then, on a regular basis do a calculation for sales, purchases and repairs, etc. to adjust your GL inventory up or down. It would be like treating your entire inventory as one big lot. Not a great approach but maybe it will stimulate other ideas.
-
By the looks of it, the script is supposed to. The bottom shows the insert into the alternates parts master table. That is the intermediate table that holds the linking to the alternates. I suggest just walking through the script to see if you figure out why it is escaping before it inserts.
-
Advance QC has a great tool for the security module. The newer releases of qc copied some of the features he built in his tool, but that is your ticket I think.
-
The alternate, master relationship is a bit confusing, but once you work with it, it isn’t too bad.
The one labeled Unical_dia_apm_import should do the trick for you.
It imports master PNs and associated alternate PNs.
Your import file needs the following fields in this order
pn, description,uom_code,serialized,altpn
It will create the master parts, and alternate parts and uom codes if they don’t exist.
Here is the procedure from DIA
PROCEDURE UNICAL_DIA_APM_IMPORT(P_IMP NUMBER)
IS
ALTPNM number;
APM number;
PNM number;
MFG number;
UOM number;
SYSUR number;
C DIA_RL_PKG.CURSOR_TYPE ;
V_START_LINE NUMBER := DIA_RL_PKG.get_start_line(p_imp) ;
I NUMBER := 0 ;
V_PWD VARCHAR2(100) := NULL;
BEGIN
OPEN C FOR SELECT PWD FROM SYS_USERS WHERE USER_NAME = ‘SYSDBA’ ;
FETCH C INTO V_PWD ; CLOSE C;
C := qc_sc_pkg.validate_password(‘SYSDBA’,V_PWD);
CLOSE C ;
MFG := 1; — None Specified in UNICAL db
FOR R IN ( SELECT EXT.PN, EXT.DESCRIPTION, EXT.UOM_CODE, EXT.SERIALIZED, EXT.ALTPN
FROM EXT_UNICAL_ALT_PN_LINK EXT
) LOOP
I := I +1 ;
IF (I >= V_START_LINE) THEN
OPEN C FOR select UOM_AUTO_KEY from UOM_CODES where UOM_CODE = R.UOM_CODE ;
FETCH C INTO UOM ;
if C%NOTFOUND then
CLOSE C ;
SELECT G_UOM_AUTO_KEY.NEXTVAL INTO UOM FROM DUAL ;
insert into UOM_CODES (UOM_AUTO_KEY, UOM_CODE, DESCRIPTION)
values (UOM, R.UOM_CODE, R.UOM_CODE);
ELSE
CLOSE C ;
END IF;
/*Checking the PN in the PartsMaster Table*/
OPEN C FOR select PNM_AUTO_KEY from PARTS_MASTER where PN=R.PN ; /*and MFG_AUTO_KEY+0=:MFG*/
FETCH C INTO PNM;
IF C%NOTFOUND THEN
CLOSE C ;
SELECT G_PNM_AUTO_KEY.NEXTVAL INTO PNM FROM DUAL ;
INSERT INTO PARTS_MASTER (PNM_AUTO_KEY, MASTER_FLAG, PN, DESCRIPTION,
MFG_AUTO_KEY, UOM_AUTO_KEY, SERIALIZED)
VALUES (PNM, ‘T’, R.PN, R.DESCRIPTION, MFG, UOM, R.SERIALIZED);
ELSE
CLOSE C;
UPDATE PARTS_MASTER SET MASTER_FLAG=’T’ WHERE PNM_AUTO_KEY=PNM;
END IF;
/*Checking the ALTPN in the PartsMaster Table*/
OPEN C FOR SELECT PNM_AUTO_KEY FROM PARTS_MASTER WHERE PN = R.ALTPN ;
FETCH C INTO ALTPNM;
IF C%NOTFOUND THEN
CLOSE C ;
SELECT G_PNM_AUTO_KEY.NEXTVAL INTO ALTPNM FROM DUAL ;
INSERT INTO PARTS_MASTER (PNM_AUTO_KEY, MASTER_FLAG, PN, DESCRIPTION, MFG_AUTO_KEY,
UOM_AUTO_KEY, SERIALIZED)
VALUES (ALTPNM, ‘T’, R.ALTPN, R.DESCRIPTION, MFG, UOM, R.SERIALIZED);
ELSE
CLOSE C ;
UPDATE PARTS_MASTER SET MASTER_FLAG=’T’ WHERE PNM_AUTO_KEY=ALTPNM;
END IF;
OPEN C FOR SELECT APM_AUTO_KEY FROM ALTERNATES_PARTS_MASTER
WHERE PNM_AUTO_KEY=PNM
AND ALT_PNM_AUTO_KEY=ALTPNM ;
FETCH C INTO APM;
IF C%NOTFOUND THEN
CLOSE C ;
OPEN C FOR SELECT APM_AUTO_KEY FROM ALTERNATES_PARTS_MASTER
WHERE PNM_AUTO_KEY IS NULL
AND ALT_PNM_AUTO_KEY=ALTPNM ;
FETCH C INTO APM;
IF C%NOTFOUND THEN
CLOSE C ;
SELECT G_APM_AUTO_KEY.NEXTVAL INTO APM FROM DUAL ;
INSERT INTO ALTERNATES_PARTS_MASTER (APM_AUTO_KEY, PNM_AUTO_KEY, ALT_PNM_AUTO_KEY,
ATC_AUTO_KEY, SEQUENCE, PRINT_FLAG)
VALUES (APM, PNM, ALTPNM, 1, 1, ‘T’);
ELSE
CLOSE C ;
UPDATE ALTERNATES_PARTS_MASTER SET PNM_AUTO_KEY=PNM WHERE APM_AUTO_KEY=APM;
END IF;
ELSE
CLOSE C ;
END IF;
END IF;
END LOOP;
END ;
-
There are a few scripts already available in the OCDia tool. Is that what you are using?
-
do you mean from the security system?
-
Worthington Aviation
Moderator08/11/2014 at 8:43 AM in reply to: CREATING STORED PROCEDURES AND LINKING TO EMJohn Boyce may be a good person for this one..
-
Thanks for the info. Good to know.
Did you know you can track the progress of your tracker events with component control online? All you have to do is request a log in ID and password from them.
-
Worthington Aviation
Moderator08/06/2014 at 12:19 PM in reply to: REPORT QUESTION AND LOADING IN QUANTUM QUESTIONTony,
The Crystal SQL statements have always been hard for me to decipher, so if I get it wrong, just let me know.
Ok, first it looks like you are joining the cq_detail to the parts_master with an outter join. That should be an inner join.
Second, you don’t need to join the stock table to the parts master. The stock line already hold the PN on its own. Beside, you are already pulling the PN from the parts_master linked to the CQ_Detail
What I would recommend is the follow linked structure.
start at CQ-Detail
cq_detail to parts_master
cq_detail left outer join to stock
cq_detail to cq_header
cq_header to companies
cq_header left outer join to sales_person
(always use detail when linking to salesperson because orders can be merged)
stock left outer join to consignment_codes
Instead of order by consignment codes, I suggest you build dynamic group. You can do this by creating a parameter that provides a group by option, such as Group By PN, Group By Salesperson, Group By Consignment -> Call parameter “Group Option”
Then, create a formula like so
if group option =”Group By PN” then
{parts_master}.{pn}
else if group option = “Group By Salesperson” then
{salesperson}.{salesperson_code}
…etc. -> call the formula RPT GROUP
Create a group section in your report and group it on your formula called RPT GROUP
When you run the report, it will prompt you for the group option, and group accordingly.
then, in your detail put CQ number, company, pn, description, qty_quoted, unit price, ext price formula
Put a total on the extended price formula to reset on your group.
Now, you just create three reports in one.
-
Worthington Aviation
Moderator08/05/2014 at 2:58 PM in reply to: REPORT QUESTION AND LOADING IN QUANTUM QUESTIONThe other thing is that selecting a stock line is not required in a quote. So, you should outer join to the stock table, and outer join to any tables linking to the stock table.
-
Worthington Aviation
Moderator08/05/2014 at 2:57 PM in reply to: REPORT QUESTION AND LOADING IN QUANTUM QUESTIONLooks like all of your joins are inner joins. Therefore, data must be present in all tables. So, for example, is the one excluded missing the sales person code? You should make all joins that are not system required data elements an outter join. That way you also get the records that are missing the data.
-
Interesting. I encourage everyone to keep posting their results to this forum so we can track it.
-
Kirstin – this was put out at the conference closing session. Wild Apricot, our website service provider, is working on incorporating this feature into the next release. We hope to see it this calendar year.
-
You should be able to create administrative work packages in aircraft maintenance as well. If you look on the misc tab, there are different types of WP settings.
-
Do you have the screen scripter module?
-
Teresa, you need to set up an administrative work order, mark the header as non accountable so the labor costs get reversed from the GL. Here, you would set up all of your tasks that are related to non work order activity, including the clock in and clock out daily time card scans. We do not want our workers clocking out for lunch or breaks in QC, so we have separate tasks for this. Our admin work order gets created every month and has the following tasks on it.
Time clock sign in
Time clock sign out
Breaks
Hangar clean up
training
meetings
tooling maintenance
awaiting assignment
facilities maintenance
dot testing
safety training
inspection training
indoc training
receiving inspection
workspace configuration
tooling research
wav internal admin
ship/rec function
tech pubs mx
lunch
You can create your own reports to then see hours against tasks, percentages against revenue vs. non revenue work orders, etc.
The clock in task alone will record the total hours to be paid, minus your breaks and lunches if applicable.
Outside of that, the hours logged against work orders and all other admin tasks should come very close to equaling your time clock sign in task hours.
Side note – the time clock sign out event will stop the clock on the sign in event, so it should never have hours recorded against it. Also, these two events are required when using te delayed labor recording tools for labor reconciliation. This is all covered in the help files.
-
Good to hear 🙂
-
Worthington Aviation
Moderator08/01/2014 at 10:49 AM in reply to: USING BARCODING WITH SHIPPING STATUSEric, we were the ones who paid for that feature, and part of the negotiation was that it would not invoke any status related functionality, only change the status…. because that is all I needed 🙂
So, the work around might be a script that monitors the status codes, and if it sees one that has been changed to one of your barcode statuses, it invokes the associated procedures.
-
great stuff Dan ! Thanks for sharing.
-
The qty is 1 only so that we can keep good correlation between the stock cost and the RO and the SO. Keeps it cleaner.
We will add the stock lines ONLY when they are needed. That way, if there are ever any stock lines under our “FAKE CHARGE PART NUMBERS” then we know there is an outstanding billing, or something got missed.
You can use the group code in the parts master to identify these items, and easily search them in the Find PN from within inventory.
We have a wide variety charges that are actually PNs.
The other nice thing about this is you can actually override the GL accounts and point these part numbers to specific GL accounts through the Global GL Distributions function. Normally, we let these go to the COGS, but it is an option.
-
I can give you a crystal report to work from if you want that. If so, send me an email
-
Your assumptions are correct.
However, this needs to be in the onPrint for the unit price field (keeping is clean and simple)
And, since you are using a value that is already supplied by the form’s datapipeline, you just use the provided value field instead of going the whole sql statement to retrieve it. So, I would change it to something like this..
procedure varUnitPriceOnPrint;
begin
varUnitPrice.Visible := Parameters[‘DOC_TYPE’] <> ‘Packing Slip’;
if SO_DETAIL[‘UNIT_PRICE’]=0 then
Showmessage (‘**** WARNING ! ****** PRICE SET TO ZERO. PLEASE CORRECT!’);
END;
end;