DKNFs even *with* -p [long; lots o' code]
Bruce Easton
bruce at stn.com
Tue Jun 19 13:14:24 PDT 2007
Bruce Easton wrote Tuesday, June 19, 2007 3:56 PM:
> Bruce Easton wrote Tuesday, June 19, 2007 3:37 PM:
> >
> > Jay R. Ashworth wrote Monday, June 18, 2007 11:26 AM:
> > >
> > > On an unrelated topic, I'm having a problem with a pair of files to
> > > which I'm writing lots of records in a batch (currently about 2000).
> > >
> > > This is an inventory file, and I whack it down to about 40 or 50 hand
> > > entered records (using processing you'll see below), reindex it with
> > > -ra -e, and then pour the records into it (code also below), with all
> > > lookups flagged as -nxp.
> > >
> > > I'm in a loop, working on the second table to get it exactly right, so
> > > I have to run the first one multiple times as well. When I do, *even*
> > > if I reindex both tables *after* the mass delete as well as
> before, the
> > > delete code trips DKNF errors.
> > >
> > > Only for one index on each file: on sviinvtr it's E; on sviinvfr, B;
> > > the other indices -- and there are quite a number; far more
> than the 40
> > > or so records which I am *not* deleting -- do *not* show up
> in the DKNF
> > > dialogs as I spin through them.
> > >
> > > No other processing touches either file within my whack-populate-test
> > > loop.
> > >
> > > This seems odd; does anyone have any suggestions before I dump this on
> > > fpsupport?
> > >
> > > Cheers,
> > > -- jra
> > >
> > >
> > > /usr/local/bin/invwhack:
> > > ==========================================
> > > # whack the inventory files for a fresh reimport
> > > dxmaint sviinvtr -ra -e
> > > dxmaint sviinvfr -ra -e
> > > dreport sviinvtr -f whack -s whack -h "Whacking sviinvtr"
> > > dreport sviinvfr -f whack -s whack -h "Whacking sviinvfr"
> > > ==========================================
> > >
> > > prc.whack:
> > > ==========================================
> > > ::' sviinvtr/whack - delete records:
> > > start:::
> > > ::delete; end:
> > > ==========================================
> > >
> > > sel.whack:
> > > ==========================================
> > > hassn and not audit
> > > audit:2:eq:AUDIT
> > > hassn:297:ne:
> > > :::
> > > :::
> > > :::
> > > :::
> > > :::
> > > :::
> > > :::
> > > :::
> > > :::
> > > :::
> > > ==========================================
> > >
> > >
> > > prc.push:
> > > ==========================================
> > > ::' post all imported inventory items to sviinvtr/sviinvfr:
> > > ::' custom for ${CUSTOMER}:
> > > ::' written 29-Jan-07 by jra at microsys.us:
> > > ::':
> > > start::':
> > > ::' the full serial number is the key; we check both the inventory:
> > > ::' files and the archives -- put the record into the resp inventory:
> > > ::' file unless it's in the resp archive; handle independently:
> > > ::':
> > > ::lookup invt=sviinvtr k=1 i=A -nxp:
> > > :not invt:lookup invtx=sviinvtx k=1 i=A -nxp:
> > > :invtx:end ' if in the invt
> > archive, skip:
> > > ::':
> > > ::lookup invf=sviinvfr k=1 i=A -nxp:
> > > :not invf:lookup invfx=sviinvfx k=1 i=A -nxp:
> > > :invfx:end ' if in the invf
> > archive, skip:
> > > :: ' unlikely to skip
> > here, but...:
> > > ::':
> > > ::' on the pricing file, try to create one record per subcat:
> > > ::lookup invp=sviinvpr k=3 i=A -nxp:
> > > :not invp:lookup invp=sviinvpr r=free -nxp:
> > > ::':
> > > ::' and finally, create or update a bulk price record:
> > > ::' figure out which warehouse:
> > > ::'debug on:
> > > ::gosub whse:
> > > ::sk(15,allup)=3 ' trim off the SN to SKU:
> > > :2 eq "LAPTOP":mid(sk,"13","3")="L/T" ' if a laptop, so tag:
> > > ::lookup invb=sviinvtr k=(sk&wh) i=P -nxp:
> > > :invb:goto cont1:
> > > ::lookup invb=sviinvtr r=free -nxp:
> > > ::gosub newbulk:
> > > ::':
> > > cont1:::
> > > ::' if invt, update it, if not create; same with invf:
> > > :invt:gosub updinvt:
> > > :not invt:gosub newinvt:
> > > :invf:gosub updinvf:
> > > :not invf:gosub newinvf:
> > > ::gosub updinvp:
> > > ::gosub updinvb:
> > > ::end:
> > > ::':
> > > newinvt:::
> > > ::' lookup a free record in the live file, then fall through:
> > > ::lookup invt=sviinvtr r=free -nxp:
> > > :not invt:show "@Couldn't get free sviinvtr record; out of disk?
> > > Yell for help"; exit:
> > > updinvt:::
> > > ::invt(3)=1; invt(297)=1 ' serial number:
> > > ::invb(6)=wh ' warehouse:
> > > ::invt(288)=2 ' category:
> > > ::invt(289)=3 ' subcat:
> > > ::invt(12)=4 ' mfg:
> > > ::invt(4)=6<"/"<5 ' model/desc:
> > > :5 eq 6:invt(4)=5:
> > > ::invt(295)=8<"/"<7 ' loc/bin:
> > > ::invt(305)=8 ' loc also:
> > > ::invt(31)=11 ' supplier #:
> > > ::invt(91)= "1" ' Qty dmd:
> > > ::':
> > > ::' other fields per dmd:
> > > ::invt(14)="R" ' Refurb:
> > > ::invt(16)="N" ' Taxable:
> > > ::invt(30)="1" ' default vendor:
> > > ::invt(11)="ZZZZZZZZZZZZZZZ" ' Non Serial Grouping #:
> > > ::invt(21)="5000";invt(22)="100" ' Sales Accts:
> > > ::invt(23)="1200";invt(24)="000" ' Inv Accts:
> > > ::invt(25)="4000";invt(26)="100" ' COGS Accts:
> > > ::invt(101)="EA" ' Stk unit of measure:
> > > ::invt(102)="EA" ' Sell "" "":
> > > ::invt(103)="EA" ' Buy unit of measure:
> > > ::invt(104)="1" ' Sell Conversion:
> > > ::invt(105)="1" ' Buy Conversion:
> > > ::invt(150)="F" ' Commission
> > > percentage fixed:
> > > ::return:
> > > ::':
> > > newinvf:::
> > > ::' lookup a free record in the live file, then fall through:
> > > ::lookup invf=sviinvfr r=free -nxp:
> > > :not invf:show "@Couldn't get free sviinvfr record; out of disk?
> > > Yell for help"; exit:
> > > updinvf:::
> > > ::' don't fill in warehouse for now; must xref to warehouse file:
> > > ::'invf(1)=8 ' location:
> > > ::invf(2)=1 ' serial number:
> > > ::invf(3)=5<"/"<6 ' model/desc:
> > > :5 eq 6:invf(3)=5:
> > > ::invf(7)=1 ' full serial number:
> > > ::return:
> > > ::':
> > > updinvp:::
> > > ::invp(1)=3 ' subcat tag:
> > > ::return:
> > > ::':
> > > updinvb:::
> > > ::invb(91)=invb(91) + "1" ' qty on hand:
> > > ::return:
> > > ::':
> > > whse:::
> > > ::' is this a warehouse other than NJ?:
> > > ::wh(3,allup)="NJ" ' default here:
> > > ::' at the moment, we're not getting warehouse as a field in the:
> > > ::' DBF files, so we apply some heuristics:
> > > :8 eq "FLORIDA":wh="FL":
> > > :7 eq "FLORIDA":wh="FL":
> > > ::return:
> > > ::':
> > > newbulk:::
> > > ::' lookup a free record in the live file, then fall through:
> > > ::invb(3)=sk; invb(297)=3 ' serial number:
> > > ::invb(2)="BULK" ' BULK item class:
> > > ::invb(6)=wh ' warehouse:
> > > ::invb(288)=2 ' category:
> > > ::invb(289)=3 ' subcat:
> > > ::invb(12)=4 ' mfg:
> > > ::' this will only acquire a valid description on non-new categories:
> > > ::invb(4)=invp(2) ' model/desc:
> > > ::invb(295)=8<"/"<7 ' loc/bin:
> > > ::invb(305)=8 ' loc also:
> > > ::invb(31)=11 ' supplier #:
> > > ::invb(91)="0" ' updinvb will
> bump this:
> > > ::':
> > > ::' other fields per dmd:
> > > ::invb(14)="R" ' Refurb:
> > > ::invb(16)="N" ' Taxable:
> > > ::invb(30)="1" ' default vendor:
> > > ::invb(11)="ZZZZZZZZZZZZZZZ" ' Non Serial Grouping #:
> > > ::invb(21)="5000";invb(22)="100" ' Sales Accts:
> > > ::invb(23)="1200";invb(24)="000" ' Inv Accts:
> > > ::invb(25)="4000";invb(26)="100" ' COGS Accts:
> > > ::invb(101)="EA" ' Stk unit of measure:
> > > ::invb(102)="EA" ' Sell "" "":
> > > ::invb(103)="EA" ' Buy unit of measure:
> > > ::invb(104)="1" ' Sell Conversion:
> > > ::invb(105)="1" ' Buy Conversion:
> > > ::invb(150)="F" ' Commission
> > > percentage fixed:
> > > ::return:
> > > ::':
> > > ==========================================
> > >
> > > If the maps and index lists seem germane, let me know and
> I'll post them
> > > as well.
> > > --
> > > Jay R. Ashworth Baylink
> >
> >
> > Jay - how is the "push" process called?
> >
>
> Also - is prc.whack identicall for both files sviinvtr and sviinvfr?
>
............. (indentical) ^
Jay - what do you mean by:
> > > I'm in a loop, working on the second table to get it exactly right, so
> > > I have to run the first one multiple times as well.
?
Have you removed and rebuilt indexes from scratch and rebuilt freechain?
Bruce
Bruce Easton
STN, Inc.
More information about the Filepro-list
mailing list