I have a similar application that scans boxes on a pallet wrapping machine.
Using a mobile scanner with Windows CE, the operator scans the first box, from the characteristics of the barcode I can determine what is being scanned (therefore - how many boxes on a pallet). Using this info, I create and send a web form containing a little java applett that updates the screen every time subsequent boxes are scanned. The screen update happens instantly ("Scan box 1 of 50", "Scan box 2 of 50" etc). When the last box is scanned (or a "Complete Pallet" button is pressed) the whole set of information is sent to the database, and the screen is refreshed waiting for the next pallet to begin. Heres the script: - HTH procedure Script(iBoxes:Integer); var sBoxes:String; Begin sBoxes:=IntToStr(iBoxes); putline('<script type="text/javascript">'); putline('function validbam(bam,bams)'); putline('{'); putline('if (bam.length==9)'); putline(' {ret=true}'); putline('else'); putline(' {ret=false}'); putline('if (ret==true)'); putline(' {'); putline(' exist=bams.indexOf(bam)'); putline(' if (exist>-1)'); putline(' {ret=false}'); putline(' }'); putline('return ret'); putline('}'); putline(''); putline('function displaybox(boxlist)'); putline('{'); putline('to=((boxlist.length)/9)+1'); putline('f=document.bcoder'); putline('f.adder.value="Scan Box "+to+" of '+sBoxes+'"'); putline('}'); putline(''); putline('function boxcount(boxlist)'); putline('{'); putline('to=(boxlist.length)/9'); putline('if (to=='+sBoxes+')'); putline('{return true}'); putline('else'); putline('{return false}'); putline('}'); putline(''); putline('function scanbox()'); putline('{'); putline(' f=document.bcoder'); putline(' myvar=f.barcode.value'); putline(' if (myvar=="completed")'); putline(' {'); putline(' return true'); putline(' }'); putline(' else'); putline(' {'); putline(' mytest=f.nutext.value'); putline(' if(mytest.length>0)'); putline(' {nl="\r"}'); putline(' else'); putline(' {nl=""}'); putline(' if (validbam(myvar,f.nutext.value))'); putline(' {'); putline(' opt = new Option(myvar, myvar)'); putline(' sel = f.scanned'); putline(' sel.options[sel.options.length] = opt'); putline(' '); putline(' '); //putline(' f.lister.value=f.lister.value+nl+myvar'); putline(' f.nutext.value=f.nutext.value+myvar'); putline(' }'); putline(' if((boxcount(f.nutext.value))==false)'); putline(' {'); putline(' f.barcode.value=""'); putline(' displaybox(f.nutext.value)'); putline(' f.barcode.focus()'); putline(' return false'); putline(' }'); putline(' else'); putline(' {'); putline(' return true'); putline(' }'); putline(' }'); putline('}'); putline(''); putline('function ccancel()'); putline('{'); putline('window.location.href = "spain.exe"'); putline('}'); putline(''); putline('function ccomplete()'); putline('{'); putline('f=document.bcoder'); putline('f.barcode.value="completed"'); putline('f.submit()'); putline('}'); putline('</script>'); > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Clay Shannon > Sent: 15 October 2007 14:46 > To: 'Borland's Delphi Discussion List' > Subject: RE: Request for suggestions re: architecture of an > Intranet / socketapp > > Rob, > > <<Aren't there already software packages that do that? I > think Red Prairie has something like that. Are you writing > this for J.C. Penney? JCP is already an RP customer.>> > > Yes, we are, I do believe, a partner of "Rouge de la > Prairie." I will czech out their site to see what they have; > yet, I find it hard to believe there would be something > available "off the shelf" that will do the trick. > > <<Several times per second? Why? What are the consequences if > notification that a package has arrived is delayed by a > fraction of a second? What are the consequences if it's > delayed by even 30 seconds? Is someone really going to be > watching the screen that closely? I can only see an issue if > the operator is standing there watching the package be > delivered, or if the operator is on the phone with the > delivery driver who reports that the package is in place. > Either way, the operator no longer needs the Web page to > report delivery anyway.>> > > What's going on here is an operator first starts a Batch, or > Distribution, by scanning a barcode. This updates a label to > say, for instance, "0 of 50" > (0 of 50 items have been inducted). As a message comes back > from the RealTime that the first item was seen (by the photo > eye), this needs to change to "1 of 50", etc. The operator > keeps an eye on this, because once it becomes "50 of 50" > he/she will be looking for a label to scan to begin the next > Batch/Distribution. They ARE used to seeing their display > updated in "real-time", and this system we are creating is a > replacement for the existing one. They will moan like hound > dogs if the new system seemingly has LESS functionality than > the tried and apparently not-so-true. > > <<How complicated are the queries? Will your database server > be able to handle 150 of them per second (figuring 3 queries > times 50 operators)?>> > > Not very; in many cases it would just be looking up the value > for a display element, zB "Select Number_Inducted FROM > MainFormDisply" or some such. > > <<Couldn't the real-time app write to the database itself?>> > > That was my idea, but The Powers That Be/The Deciders say > they don't want to do it that way. Sometimes it seems to me > they are intent on doing things as indirectly and > unintuitively as possible. > > --Clay Shannon > > _______________________________________________ Delphi mailing list -> Delphi@elists.org http://www.elists.org/mailman/listinfo/delphi