Welcome to JRI's Help page for Avante and System Builder
This web page is designed to give quick links to on-line help for Avante, System Builder, and DaytonAccess/StoreFront. It was originally built to store my cheats and notes to help me navigate around the system cleanly.
As time progresses, it will contain other "things" as well, but all are intended to help find information quickly to get the job done on the Avante system at Dayton Superior.
Both Avante and System Builder are written in the PICK programming language. More…
DaytonAccess is a web interface using ASP technology combined with Redback to connect to the Avante database. More…
Transfer Phone to Home
- Press "Voicemail" button
- Enter extension (44380)
- Enter password
- Press "#"
- Enter 731 to transfer
- Enter 732 to un-transfer
Common Processes
Process | Description |
---|---|
BOM9003 (maint) BOM9028 (inq) |
Product Packaging Maint uses SYSTBL PACK.TYPE |
INV2001 | INV Status |
INV2007 | INV Trail |
PUR9068 | PO Proxy Maint |
SFC2001 | WIP Status Display |
SOP2008 | Customer Price Lookup |
SOP8301 | Ship-To Tax Update |
SOP9110 | Freight Calculator |
SOP9138 | Customer Ship-To Maint |
SOP9169 | REMOVE STOREFRONT/EDI HOLDS |
SYS8302 | OER Email Maint (mgr & ASD) |
SYS9098.3 | After Hours Support |
SYS9200 | Super User Proxy |
SYS9165 | Maintain DSCTBL SHOW.COST |
TAX2000 | Tax GEO COde |
TAX2001 | Get Tax |
UTLS9028.1 | Test DOCATTACH vs G: Drive |
Printers: Linux vs. Network
- Find the link between the Linux queue and the network printer:
- LIST FRMPRT WITH NETWORK.PRINTER.U = "[\XXX]" BY NETWORK.PRINTER.U NETWORK.PRINTER.U
- Determine if any users are still assigned to the Linux queue:
- sort DMSECURITY WITH USR.PRINT.ID = "<>" USR.PRINT.ID
- If any users still assigned to the print queue, re-assign them
- Remove the FRMPRT:
- DELETE FRMPRT P999
Load Engineering Drawings
Delete (or rename) the existing file: /home/sqlimprt/AlltblDrawings.txt
Open the file from Eric
Save as a Tab-delimited txt file to: /home/sqlimprt/AlltblDrawings.txt
RUN DSC.IIUTIL POPULATE.ENG.FILES
Convert use to 64-bit Acrobat Reader
MODIFY USRSECMST F55 = "PDF"
MODIFY USRSECMST F56 = "C:\PROGRAM FILES\ADOBE\ACROBAT DC\ACROBAT\ACROBAT.EXE"
EOM Back Up
\\daysup.com\archive
Then drill down to ArchiveData\ArchiveUnix\archive
Utilities
RUN DEV.DSC.IIUTIL NOTIFY.REGION
RUN DEV.DSC.IIUTIL COPY.QUOTE
iConnect Logs
Periodically, the iConnect logs should be cleared
Go to O:\Avante98dir\floprogs\global\ICONNECT\ICONNECT_LOG
Manually clear all files older than X
Edit the following files and clear logs older than X
10000
10001
95000
iConnect Program
Go to O:\Avante98dir\floprogs\global\ICONNECT\ECL_BP\ECL.XUDRVR.WORK
CTO Notes
Process | Description |
---|---|
EPC3003 | Master Configurator Maintenance |
EPC4000 | Build/Maintain a Configuration |
RUN DSC.IIUTIL CTO.WITHIN.CTO | Email list of CTOs that have sub-CTOs |
RUN DSC.IIUTIL COPY.CTO | Copy a CTO from PILOT or LIVE to DEV w/ a new configurator id |
RUN BP COMPARE.ALL.PROGRAMS | From EPORTAL_DEV5, compares all ECPLIBs, S4LIBs, SFLIBs and BPEZs between EPORTAL_DEV5, EPORTAL_PILOT5 and EPORTAL5 |
RUN DSC.IIUTIL JRI.MATCH.FILE.TO.JSON | Compares JSON freight call(s), XML and SOHDR data for s SalesForce quote |
xxxxx | xxxxx |
Utilities
Process | Description |
---|---|
RUN DSC.IIUTIL JRI.FIND.PGM.IN.SCREENS | Looks for a program in all the screen (DICT) files |
xxxxx | xxxxx |
Freight "Fudge Factor" Logic - SOPS9015.5
IF (@USER0<1> = 1) & (WORK<1> < WORK<4>) THEN AVANTE.FREIGHT = WORK<4> SALESFORCE.FREIGHT = WORK<1> DIFF = AVANTE.FREIGHT - SALESFORCE.FREIGHT PERCENT.OFF = DIFF/AVANTE.FREIGHT * 100 PERCENT.OFF = OCONV(PERCENT.OFF, "MD0") READ DSCTBL.REC FROM DSCTBL, "FREIGHT.DEFAULTS" ELSE DSCTBL.REC = "" PERCENT.ALLOWED = DSCTBL.REC<11> PERCENT.CODE = DSCTBL.REC<12> IF (PERCENT.ALLOWED = "") THEN PERCENT.ALLOWED = 2 ;* SalesForce freight percentage IF (PERCENT.CODE = "") THEN PERCENT.CODE = 430 ;* SalesForce freight fudge factor code IF (PERCENT.OFF <= PERCENT.ALLOWED) THEN ************************************************ * Avante calculated more freight but is within * * the acceptable tolerance, so let it through. * ************************************************ VALUE = PERCENT.CODE READ DSYSTBL FROM SYSTBL,'FRC*':VALUE ELSE DSYSTBL='' REFRESH = -2 END END
Do not refresh MIDNIGHT.DATA (or GINSENG.DATA)
!touch /av1/igi/avante98/flodata/dldata/keepmidnight
!touch /av1/igi/avante98/flodata/dldata/keepginseng
Reset all old Redback logs
Log into new Redback EPORTAL_DEV5
RUN BP RESET.REDBACK.LOGS
ODC Reqs
Outside Direct Cost - a WO REQ to get an outside company to do a service (like galvanizing).
Projects
All work done on Avante is tracked with projects. More…
Restoring Old Data
To restore an old file/account, (high-byte/low-byte), use the convdata -r command
To restore index(s), (high-byte/low-byte), use the convidx -r command
Type HELP CONVDATA (or CONVIDX) for instructions
ADP
UniBasic Append Logic
WRITEV 'Comment' ON F.FILENAME, KEY, -1
Trick I learned from Doug FarmerOn-the-Fly TCL Formatting
Ever had a Dict that was too small or needed a new format of internal data? Here are 2 tricks (must run with native UniData syntax):-
FMT overrides the value in F5 of the Dict (note the value in green does not wrap because FMT is bigger than the Dict)
-
CNV overrides the value in F3 of the Dict (note the value in red is the raw value and the value in green is formatted on-the-fly)
-
COL.HDG overrides the value in F4 of the Dict (header) - multi-lines are separated with a "}"
LIST DSCTBL "BLUESTONE.WHS" CONTROL.ID ID.SUPP F1 FMT "L#3" COL.HDG "BS}WHS"
Test Auto Login Encryption
In LIVE, type:RUN DEV.DSC.IIUTIL ENCRYPT.DECRYPT
-
If you enter an existing user:
- The prompt will state "Real world user"
- It will show the user's name
- It will show the decrypted password (must agree with SB password)
-
If you enter an bogus user:
- The prompt will state "Encrypted VALUE"
- It will show the encrypted value based on the user ID backwards
- It will show the decrypted password based on the encrypted password (should match the bogus user ID)
Add/Remove Avante ID
-
Add a New User:
- Run FIND.USER2 against the "replicate from user ID
- Build the DMSECURITY ID for the new user
- Copy the original user to the new user
- Enter the user's last & first name
- Set their password (either their user ID backwards orBARCODE99
- Run SYS9123 ==> F5 to build the copy the "replicate from" user to the new user.
This will:
- Build the USRSECMST
- Build their Auto Login info
- Build the DCUSERMST data for barcode users
-
Review the results from FIND.USER2 and add the specific info as needed for the new user
- OER info
- Email lists
- etc.
-
Delete a user
- Run FIND.USER2 against the terminated user ID
- Remove all references to the terminated user except
- DMSECURITY
- USRSECMST
- DCUSERMST
- DSC.RPs
- Run SYS9123 ==> F5, enter the terminated user and hit F4 - this will handle the following:
- DMSECURITY (archived to DMSECURITYHST)
- USRSECMST (deleted)
- DCUSERMST (deleted along with updates as needed to other files)
- DSC.RPs (deleted and audited)
PO Approval
PURS9028.4 is the driving program to begin building the PO Approval Workflow (PAWS). To run the PO Approval step-by-step, you can run this program from TCL. If run from TCL, it will prompt for:- The PO#
- If you want to rebuild PO Approval Workflow (usually "Y")
- If it should write to disk (usually "N")
Note: if a plant manager is needed for approval, this comes from SYSS9177.1 which gets it from SQL!
Disaster Recovery
- To put a specific Avante account* in DR mode, drop to TCL and type: !touch DisasterRecovery
-
To take a specific Avante account* out of DR mode, drop to TCL and type: !rm DisasterRecovery
- DR Docs: \\daysup.com\it\DR\Documentation\Recovery Plans\Application Owner - Developer Plans\Avante
Orders thru Invoicing
Step | Process | Desc | SHIPTRN STATUS When Completed |
Comment |
---|---|---|---|---|
1 | SOP4000 or StoreFront |
Order Entry | n/a | |
2 | SOP9169 | StoreFront Release | P | Only applicable for orders built via xml logic |
3 | SOP4007,3 | Create Pick List (Multi-Delivery/Blanket) SOP4009 - Cancel |
P | Ready for UPS if applicable |
4 | SOP5001,1 | Print Picking Lists (use EMAIL as printer) | P | Ready for UPS if applicable |
5 | SOP4010 or SOP4037 |
Shipments Entry (& Cancel) Staged Shipments Entry |
N | Too late for UPS (if applicable) |
6 | SOP9017 | BOL Entry (if applicable) | N | Too late for UPS (if applicable) |
7 | SOP5007 | Print packing Slips (use EMAIL as printer) | N | Too late for UPS (if applicable) |
8 | Invoicing - either | |||
8a | SOP4033 | Invoice Workbench (manual invoicing) | I | Too late for UPS (if applicable) |
8b | SOPS9014.4 | Auto Invoicing | I | Too late for UPS (if applicable) |
Removing CONTACT
Pull the contact up with MERGE to determine the type.
- 0 = Independent (not linked)
- 1 = Customer
- 2 = Supplier
For a supplier contact: APM3000 ==> Options ==> Maintain Contact Details
Enter the contact #
Hit F4 to delete the link between the supplier and the CONTACT.
Due to a bug, you must delete the CONTACTs from TCL.
Removing Holds on Sales Orders
SOP9169 - remove SF hold(s)SOP4011 - remove CR hold
SOP9117 - remove freight hold
Monday Jobs
Simply add VOC item to UFD MONDAY.PROCESS.INPUTSSLANG and KEYWORDS
You can add up to 30 new slang terms to a ITMNST or SLSCAT with DEV.DSC.IIUTIL ADD.SLANG.These will be used to rebuild the KEYWORDS every night or while filing a part in BOM3000.
Identify the current screen/process (not the TOPROC)
PARMS(30)<55, 1, 1>Get the Subroutine Call Tree
CALL SUBROUTINE.STACK(RTN.VALUE, FLAVOR, SHOW.LINE, REMOVE.ME, FUTURE1, FUTURE2, FUTURE3)RTN.VALUE | Field delimited array of the subroutines called |
FLAVOR |
0 - return the data un-scrubbed (ugly) 1 - return just the subroutine path & names 2 - same as 1 but with indenting 3 - return just the subroutine names (preferred) 4 - same as 3 but with indenting & no leading underscore |
SHOW.LINE | Show the line # true/false - preferred 0 |
REMOVE.ME | Remove this subroutine (SUBROUTINE.STACK) from the result (true/false - preferred 0) |
Ultimate WHS and Type
Going forward, call SYSS9172.1(RTN.DATA, PASS.DATA to calculate the ultimate WHS/TypeThe arguments for this are defined as follows:
PASS.DATA<1> = CPN
PASS.DATA<2> = Starting WHS
RTN.DATA<1> = Ultimate sourcing WHS
RTN.DATA<2> = Ultimate sourcing type ("M" or "P")
RTN.DATA<3> = Error message
There are several DICTs that call this logic to return the desired data via TCL:
- DICT INVWHS ULT.WHS
- DICT INVWHS ULT.TYPE
- DICT SHIPTRN ULT.WHS (multi-value via SYSS9172.2 calling SYSS9172.1)
- DICT SHIPTRN ULT.TYPE (multi-value via SYSS9172.2 calling SYSS9172.1)
READU w/ LOCKED Clause
Below is a snippet of code to read a record and how to react if the record is locked. It will need to be tweaked slightly for each occurance:label: READU record FROM F.filename, KEY LOCKED * Record locked - display warning then try again LOOK.FORS = "filename" LOOK.FORS<-1> = KEY CALL SYSS9145.1(LOCKED.BY, LOOK.FORS) IF LOCKED.BY THEN MSG = "filename ":KEY:" is locked by ":LOCKED.BY:"." CALL SB.DISP(4, MSG) END GOTO label END THEN Record found - proceed normally END ELSE Record not found - react as needed END
Pre-stored Editor Commands
Select the records that need to be changedPull up the 1st record in the editor
Build the pre-stored editor command, using ` (or some other delimiter) between each command
You can have as many commands as you want
The following command is named FIX and will:
- Go to line 11
- Append ^253PHILLMJ
- FI (file the record and move to the next record in the active select)
Within each record, type "=FIX" to execute the command.
Note that if you go to a specific line number (like in the example above) and a record does not have that many fields, it goes to the last line of the record and executes the rest of the commands - BE CAREFUL!
Re-Assigning Buyer Codes to Parts (Buyer Workbench)
When a buyer needs to take over the purchasing of parts at a WHS from another buyer, perform the following steps.For this example, we will use WHS 126 and re-assign parts tied to BYR MMC to JL.
- Make sure the new BYR code (JL") exists
- SELECT ITMPLTMST = "126*]" WITH BUYER = "MMC"
- MODIFY ITMPLTMST BUYER = "JL"
- Rebuild the PLANBUYXRF file by running MRP3008
ADD.NONLIVE.ACCESS
On occasion, we need to temporarily grant a specific user a lot of access in a non-LIVE account for testing, etc. This can easily be done by typing:RUN DEV.DSC.IIUTIL ADD.NONLIVE.ACCES
There are 2 flavors of running this program and they work as follows:
- Add non-LIVE access to user1 based on the access of user2
- Enter user1 who will "gain" non-LIVE access
- Enter user2 who already has the access (replicate-from)
- Any access that user2 has that user1 does not have will be added to user1 in non-LIVE accounts
- Any access that was just added will also added to a "log" on your O: drive called user1_LOG.txt
- If you run this multiple times for the same user1, it will append any new access to the log file (no overwrite)
- Audits are not built
- Remove access from user1 based on the the log file
- When the testing is complete, we need to remove the temporary access in non-LIVE accounts
- Enter the user ID whose access should be removed
- The program will attempt to read O:\user1_LOG.txt
- If found:
- Remove the non-LIVE access based on the log file
- Delete the log file
- Audits are not built
- If not found, stop
THIS.FIELD
THIS.FIELD = LINE<1, 18>Camel-Case
VARIABLE = OCONV(VARIABLE, "MCT")Bulk Update of BOM9005
BOM9005 is used to add (or remove) users to receive specific emails based on parts.
To mass-update parts to a specific user, build a SAVEDLIST of part numbers, then type:
- The User ID you wish to effect
- The field (type of email) you wish to effect
- If you wish to (A)dd or (R)emove the user ID from the part
- The name of the SAVEDLIST

CONFIG and KIT
CONFIG = ITMMST<107>- 0 = Standard part
- 1 = CTO
- 2 = MTO
Elapsed Time
SYSS9149.1(RTN.VALUE, START.DATE, START.TIME, END.DATE, END.TIME, OPTIONS)RTN.VALUE = Multi-valued results w/ each "segment" in a new value
OPTIONS<1> = D, H, M or S (Rounded to Days, Days & Hours, Days, Hours & Minutes or Days, Hours, Minutes & Seconds
OPTIONS<2> = Format #s ("R#2", "R#3", etc. - optional)
OPTIONS<3> = "HTML" will convert spaces in the format (see OPTIONS<2>) to &s;amp;
OPTIONS<4> = 1 = Abbreviate words (Days, Hours, Minutes, Seconds) to the 1st character - default = 0
SYSS9149.1.DRIVER
Manually enter the values for testing. Values are saved in home dir as SYSS9149.1.DRIVER.CTL and will be re-used/saved each time it is run
Freeze MIDNIGHT.DATA
To prevent MIDNIGHT.DATA from being automatically refreshed, save the following stub record in DLDATA:
keepmidnight
UPS Import/Export
Every 5 minutes, a cron job runs to export data to UPS and import data from UPS. This job runs SOPS9132.1 which simply calls SOPS9132.2. It uses DSCTBL UPSWHSLIST to determine which WHS to test. There is special logic that tests the account and reacts similarly in non-LIVE accounts, but clearly, we do not want to clobber LIVE data from non-LIVE accounts.
- Clear prior run's data
- Delete the files in UPS.FILES whose IDs are like ups...txt
- Archive the files in UPS.FILES whose IDs are like exp...csv
- Export SHIPTRN data from Avante by WHS
- Loop through SHIPTRNs by WHS
- Write data to UPS.FILES upsWHS.txt
- !cp UPS.FILES/upsWHS.txt /av1/upsTAG/upsWHS/upsWHS.txt
- Loop through SHIPTRNs by WHS
- Import tracking # by WHS from UPS
- Loop through SHIPTRNs by WHS
- !ls -l /av1/ups/upsWHS/expWHS.csv
- if the file is found
- if LIVE then
- !mv -f /av1/ups/upsWHS/expWHS.csv UPS.FILES/expWHS_YYYYMMDD_HHMMSS.csv
- else
- !cp -f /av1/ups/upsWHS/expWHS.csv UPS.FILES/expWHS_YYYYMMDD_HHMMSS.csv
- sselect UPS.FILES WITH @ID LIKE "expWHS..."
- Loop through the files (likely just 1 or none)
- Loop through the rows in a file
- Extract the SHIPTRN key
- Extract the tracking #
- Update the SHIPTRN with the tracking #
- Update the SHIPTRN.USR with
- Net charge
- Bill weight
- Actual weight
- Loop through the rows in a file
- if LIVE then
- Loop through SHIPTRNs by WHS
This is a utility to query all the files from UPS (the expWHS.csv files) and display what it finds. This is needed because it is very time consuming to do these tests manually and the cron job attempts to re-populates the data every 5 minutes. This program uses DSCTBL UPSWHSLIST to determine which WHS to test. This program queries the data, waits 5 seconds, repeat...
If it finds 1 or more files in a pass through the WHSs, it will stop after completing the pass through the WHSs, so the results can be reviewed. It needs to stop so that we have time to review the results without them being deleted or stepped on with another pass (5 seconds later).
KANKAKEE.PURGE
As part of the selling off of the Kankakee facility (WHS 151), we created two new "Tea" accounts (Jay likes tea):
- PEKOE.DATA - refreshed from LIVE on cut-over weekend - LIVE realm
- GINSENG.DATA - a refresh from PEKOE.DATA at midnight (same concept as MIDNIGHT.DATA) - TRN realm
However, we do not want them able to see non-Kankakee info. I wrote a program called DEV.DSC.IIUTIL KANKAKEE.PURGE. This program will cleanly abort if not in PEKOE.DATA or GINSENG.DATA. This program will:
- Disable all WHSs except 151
- Delete all non-151 SOHDRs (tests against SODETs)
- Delete all non-151 QUHDRs (tests against QUDETs)
- Delete all non-151 ICEHDRHSTs
- Delete all non-151 POHDRs
- Delete all non-151 POREQHDRs
- Delete all non-151 RMTHDRs
Find user's VDM from UNIX
!who -u | grep user idRe-boot a Windows Server
From the command prompt, type:Shutdown /r /f /t 15
Remote Connect to a Windows box (not a VDM)
From Start menu, type:mstsc
D5809 (your PC id)
Global Dict File
DICT.DICTThis is a core (global) UniData file
You must be root to make a change to DICT.DICT
You must log out/in to take advantage of any change to DICT.DICT
Add/Remove User From Triggers
DSC.IIUTIL ADD.REMOVE.ITEM.EMAILSThere are a number of fields in ITMMST.USR that track if a specific user wants to be notified when thre are changes on a specific part. This program will allow you to add/remove a user from these part specific emails for WO, PO, SO, TO, CC, MRB, INV ADJ or RMA. It prompts for:
- User ID
- Which type of trigger/notification to change
- Add or remove the user from the trigger
- A SAVEDLIST of part #s (not ITMMST keys) to change
Debug within Program
While in the debugger but the program was not compiled with the -D option, you can re-compile on the fly as follows:- EXEC BASIC BP program_name -Z2
- Z BP program_name
Add Jobs to Nightly Process
There are 2 DSCTBL records that store processes to run at night:- DAILY.SB.PROCESS (runs M-S)
- DAILY.NONSB.PROCESS (runs S-S)
Find Shares on Server
So long as you know the name of the server, you can find the shares on it by typing the server name:Ex: \\daydatastg01
Ex: \\daydatastgtst01
A/R Statements
To queue a company (or companies) to generate A/R Statements as part of Auto Invoicing, use ARM9020.
Clean Test RunIf you are just testing (not in LIVE.DATA), you might want to clean out the following dirs so that all that is left after Auto Invoicing is what was just built by the test run:
- Change DSCTBL AUTO.INVOICE F17 to be a time prior to the current time (like 8:00)1
- Run ARM9040 to rebuild the Credit Application DOCATTACHES (not doing this threw off some prior testing)
- Clear FTP.ARCHIVE
- Delete all the prior PDFs from Avante Attachments/xxx
- Clear the remote sftp site's temp folder
- Clear _PH_ (assuming you are going to use a COMO)
- If you have a dedicated sub-folder in Outlook with rules for Auto invoicing, clear those out
SYSS9111.11.DRIVER
SYSS9111.11.DRIVER is used to re-process a SAVEDLIST or invoices or A/R Statements.
You must build a specifically listed SAVEDLIST or use the list created by a failed Auto Invoicing run. The savedlist contains a list of DOCATTACHES and must have a name of:
- ICEHDRHST_YYYY-MM-DD_HH-MM-SS (for invoices)
- CUSTMST_YYYY-MM-DD_HH-MM-SS (for statements)
If you are testing in a non-LIVE account, you will also need to change DSCTBL SYSS9111.11.DRIVER. You will need to change fields 3, 4, 6 and 7 - use MERGE and your situation to determine what these changes should be.
You will also need to build the stub (empty) record SYSTBL LAST.INVOICE to simulate that Auto Invoicing has run cleanly.
CONVERT.TO.LF
This utility will convert a specific string to @FMs (or vice versa) in a temp file:
Save the info you wish to convert in your home dir to a file named CONVERT.ME.txt
Comments
The data in CONVERT.ME.txt will then be changed and saved back to the same file (overwriting).
- There are 4 pre-defined codes (TAB, @VM, @SVM & <cr><lf>) that can be chosen
- At the 1st prompt (red), enter the string you wish to replace or one of the Option #s
- At the 2nd prompt (yellow), chose if you want to
- Convert from your string to @FMs or
- Convert from @FMs to your string
- Enter Y*** to change the data in CONVERT.ME.txt
ESC.BANK - Common Part STATUS Logic
Call the following subroutine and use the needed returned value as needed:
CALL UTLS9026.5(ESC.BANK)
- ESC.BANK<1> - mv list - ESC keys
- ESC.BANK<2> - mv list - the "life cycle" order - used purely for sorting
- ESC.BANK<3> - mv list - A/I (Active or Inactive)
- ESC.BANK<4> - mv list - descriptions
- ESC.BANK<5> - mv list - Available for POs, MRP, etc (probably just 1-ACTIVE)
- ESC.BANK<6> - Active codes enclosed in double quotes (this is the most likely)
- ESC.BANK<7> - mv list of active codes
- ESC.BANK<8> - Inactive codes enclosed in double quotes
- ESC.BANK<9> - mv list of inactive codes
- ESC.BANK<10>- Purchase/MRP/WO codes enclosed in double quotes
- ESC.BANK<11>- mv list of purchase/MRP/WO codes
- ESC.BANK<12>- Active by being phased out codes enclosed in double quotes
- ESC.BANK<13>- mv list of active but being phased out codes
ZIPXRF Re-build
Take the following steps to re-build the ZIPXRF file:
- Go to Zip-Codes.com
- Download the zipped CSV file for the US zip codes to your PC
- Download the zipped CSV file for the Canadian postal codes to your PC
- Unzip the 2 files
- Copy the files to DLDATA (overwriting the files from the prior name)
- Go to DEV.DATA
- Run SYSS9054.1 (at the 2 prompts, choose DEFAULT) - this will:
- Clear the ZIPXRF file
- Rebuild the ZIPXRF file from the csv file(s) from zip-codes.com
- NewAdd the missing ZIPXRFs from ZIPXRF.ADD (same format as ZIPXRF)
- NewAdd the missing city aliases (F4) from DSCTBL ZIPXRF.ALIASES
- Run TAXS9000.1 (re-builds the scrubbed values for ZIPXRF<5> based on DSCTBL ZIPXRF
- Uses TAXS9000.2 to scrub the city value(s) in ZIPXRF<4>
- Saves the scrubbed values in ZIPXRF<5>
- Go to TRN.DATA, PILOT.DATA, etc. and run the 2 BP programs
- After hours, go to LIVE.DATA and run the 2 BP programs
Test Environment
From Windows 10:
- Open Windows Explorer
- Click on "IT Teamsite - IT Documentation"
- In the right pane, click on "Admin Links.mht"
- In the lower left, under the "Development Network" section, click on "Development Gateway"
- This takes you to an unsecure web site.
- Click "More Information"
- Click "Go on to the webpage (not recommended)"
- Login as daysup\user id (if you have never done this, you may need Dennis to grant you access)
- PW may or may not be the current password
- You should see several connections: click on either vdmadmin1 or vdmadim2
- If you get security warnings, just continue on through them
- This takes you to a Test Environment virtual PC (kinda slow)
- Log into Rhat as needed (really slow)
Yearly StoreFront Sales
SELECT SOHDR WITH DATE >= "01/01/18" AND WITH DATE <= "12/31/18" AND WITH CSR = "WEB" LIST SOHDR TOTAL CNTR TOTAL ORDER.VALUE ID.SUPP DET.SUPP HDR.SUPP NI.SUPP
Building New Files
From the desired Realm, run UTL3001. Enter the desired file name, enter a brief description, and hit F7 to define the other accounts that should also have this file. Hit F2 to save. This will create a local data file in the current account and each of the other accounts referenced by the F7. It will also build a shared dict file.
Selecting BPs in a PRC Project
To grab all the basic programs that are associated with a project, type:
select PRC.PROJECT "PRJ*Project Name" SAVING UNIQUE SOURCE..BPWhere Project Name is the name of the desired project. Note that the 1st word is in lower case to force the native UniData syntax and the double dots in SOURCE..BP.
You can also type: MY.BPS and simply enter the desired PRC project.
Zebra Striping an HTML Table
Add the following immediately after the initial EPORTAL.BP includes (your colors may differ):
* Build custom styles STYLES = '' STYLES<-1> = '.zebra {' STYLES<-1> = TAB:'background-color: #f5e6ff;' STYLES<-1> = '}' STYLES<-1> = 'table, th, td {' STYLES<-1> = TAB:'border: 0px solid #6b00b3;' STYLES<-1> = TAB:'padding-left: 5px;' STYLES<-1> = TAB:'padding-right: 5px;' STYLES<-1> = TAB:'border-collapse: collapse;' STYLES<-1> = '}' STYLES<-1> = 'th {' STYLES<-1> = TAB:'color: ':COLOR2:';' STYLES<-1> = TAB:'background: ':BGCOLOR2:';' STYLES<-1> = TAB:'vertical-align: text-bottom;' STYLES<-1> = '}' LOCATE "</style>" IN EMAIL.BODY SETTING STYLE.POS THEN INS STYLES BEFORE EMAIL.BODY<STYLE.POS> END
Build your table header something like this:
NO.ROWS = 0 EMAIL.BODY<-1> = '<table>' EMAIL.BODY<-1> = TAB:'<tr>' EMAIL.BODY<-1> = TAB:TAB:'<th>ICEDETHST key</th>' EMAIL.BODY<-1> = TAB:TAB:'<th>Part #</th>' EMAIL.BODY<-1> = TAB:TAB:'<th>Invoicing<br>WHS</th> EMAIL.BODY<-1> = TAB:TAB:'<th>Error Message</th>' EMAIL.BODY<-1> = TAB:TAB:'<th>Invoice<br>Date</th>' EMAIL.BODY<-1> = TAB:'</tr>'
As you loop through the data, for each row, do the following:
NO.ROWS += 1 IF (MOD(NO.ROWS, 2) = 0) THEN ZEBRA = ' class="zebra"' END ELSE ZEBRA = '' END EMAIL.BODY<-1> = TAB:TAB:'<td':ZEBRA:'>':ICEDETHST.KEY:'</td>' EMAIL.BODY<-1> = TAB:TAB:'<td':ZEBRA:'>':PART.NBR:'</td>' EMAIL.BODY<-1> = TAB:TAB:'<td':ZEBRA:' align="center">':WHS:'</td>' EMAIL.BODY<-1> = TAB:TAB:'<td':ZEBRA:'>':ERROR:'</td>' EMAIL.BODY<-1> = TAB:TAB:'<td':ZEBRA:'>':OCONV(INV.DATE, "D2/"):'</td>' EMAIL.BODY<-1> = TAB:'</tr>'
After all looping, terminate the table as follows:
EMAIL.BODY<-1> = '</table>'