7 Replies Latest reply on May 26, 2017 8:48 AM by dale_allyn

    Batch Transfer Items by Barcode Scan


      I'm looking to define a solution for transferring items from one location within a company to another; e.g. Move from Control Room to Weights & Measures, assigned to Alice; then move from W & M/Alice to Basic Testing and Bob. This is to be done in random size batches of one to ten, occasionally more. Each has an identifying barcode and will be scanned via USB scanner.


      Currently, items can be moved and assigned to a technician one at a time. This is done by script on the item's individual record. Users need to be able to scan 5 or 10 items and move them to the next station or back to Inventory Control, rather than one by one on each individual record.


      I'm drawing a bit of blank on the best, most user friendly, solution here. I'm starting to lean toward a New Window (modal) on which there's a dropdown list for destination, a list for assignee, and a tall text field to capture the scanned barcode values separated by carriage returns. Then the user simply hits Submit or Cancel.


      BUT, I'm not sure how best to proceed with processing the list of input values. I can think of how we used to do it in FoxPro and how we do it SQL, but I've not needed this for a very long time with FMP and not sure how best to proceed in FMP.


      Transfers will occur from different workstations at random times. Each station has a scanner. Users scan to move item out/onwards, and will need to scan a new batch to accept inbound transfers. (The acceptance/receipt confirmation will be done by flag on the record.)


      Problem: I'm getting hung up on how best to search on the list of scanned items in order to run the transfer script on each: Stuff all into a Global Field? $Variable? Temp table and have each scan create a new record and loop through? My transfer script creates a new record in a LocationHistory table, as we track that closely; and it sets the current location of each item in subLineItems table (submission line items).


      I'm getting hung up on the batch process from a list created from barcode scans. Any input is greatly appreciated. (I've searched the forum [and others], but I haven't found what seems best.)

        • 1. Re: Batch Transfer Items by Barcode Scan

          You could ...


          ... store the barcodes in a variable and loop-process that list using Find / Extend.


          ... put the barcodes into a global field (or use the one you already scan in, if this is feasible in a multi-user environment), create a relationship based on that field and use GtRR (related only) to get the matching set.

          • 2. Re: Batch Transfer Items by Barcode Scan

            Thank you, erolst. I've been tripping on on this one for some reason. I was using a global field as a starting point, but concerned that it may be a problem in a multi-user environment (perhaps I'm wrong). I've gone to a variable, but had also considered the relationship and GtRR option.


            For some reason, this one (the find loop) is causing me more grief than expected/normal. Maybe I need to go for a run.

            • 3. Re: Batch Transfer Items by Barcode Scan

              Sooo.... I fixed my silly script error (after stepping away for moment ).


              Capturing the barcode data into a global field (Globals::g_barcodeMove) and closing the modal window, navigate to appropriate layout to execute the find by Loop. Then loop through that subset to create new records in the LocationHistory table.


              Question to those with experience in fast-paced multi-user environments: Upon opening the modal window into which the barcode data are entered, I clear the g_barcodeMove field of its contents. Am I asking for trouble using this method on FM Server (15)? Will there be conflicts or is there sufficient isolation per session with global fields in this environment? Would it be better to store the data into a global variable upon closure of the modal (and clear the field on close), and then moving to the next layout in the script?



              • 4. Re: Batch Transfer Items by Barcode Scan

                We are doing something similar with a Keyence overhead barcode scanner which scans 20 codes at once. We have it set to save them to a text file on an ftp server. We pull the text into a global field using insert from url and replace the comma delimiters with carriage returns so we can utilize the FileMaker list functions (GetValue, GetValueCount, etc). Then we loop through the list, pulling out each code and creating records, etc. as needed.  

                • 5. Re: Batch Transfer Items by Barcode Scan

                  Hi, clind. Thanks for your reply. I'm using the list functions you mention as well. It's working well directly from the global field or $$variable.


                  I'm wondering if my method of using the global field in a multi-user environment on FMS with possibly 20 or more people simultaneously scanning and transfer items within the lab is problematic. First thing in the morning, at lunch, end of day, will be particularly busy periods as techs checkout or checkin groups of items to inventory control. At other times, it's more common to have staggered transfers between stations or technicians.

                  • 6. Re: Batch Transfer Items by Barcode Scan

                    That's the beauty of global fields. You don't even need any records in the table to use a global field. No records means no record locking. You can have as many users as you want writing to that global field with no conflicts.

                    • 7. Re: Batch Transfer Items by Barcode Scan

                      That is/was my understanding, clind. Thanks. I was just wanting to confirm that I was not overlooking concerns in a multi-user environment where users may be transferring several items (interacting with records) simultaneously. The fact that transfers of any one specific item does not occur simultaneously by different users simplifies things. It's all about object (item) control. Each item occurs in only one location and is "owned" by only one individual.


                      I manage globals in a dedicated table, but this one area is critical and a bit higher traffic, if you will, so I'm wanting to confirm I'm not overlooking anything. Happy to have input from the community. Thanks.