Networked Printers, Multi Client Deployment

Hello Board!

I just joined after searching for an answer and although I have posted this on f m forums, where i've received help before; I thought i'd post it here, also. I hope that's OK!

I may be searching the incorrect terms; but I can't find an answer to my problem.

I have built a system, it's running on FMS18 and multiple client users access it throughout the day. One part of the system is a quality check screen at a physical bench/station - items are scanned and labels are printed out as required, records are created and used elsewhere. There are three label formats.

Each station has three label printers - Citizen 631's. They are networked printers. I would like to have more than two bench/stations operating this process in the future.

Can someone point me in the direction of information that would help me to ensure that the scripts run by Operator 1 send the print jobs to their printers, and the same scripts run by Operator 2 are sent to that operators printers?

Bench 1 Operator 1

Printer_1 - Citizen 631 - 90x25mm Label - IP(example)

Printer_2 - Citizen 631 - 50x50mm Label - IP(example)

Printer_3 - Citizen 631 - 40x25mm Label - IP(example)

Bench 2 Operator 2

Printer_1 - Citizen 631 - 90x25mm Label - IP(example)

Printer_2 - Citizen 631 - 50x50mm Label - IP(example)

Printer_3 - Citizen 631 - 40x25mm Label - IP(example)

I can't make two operators work. The only way I can make this work is if I connect the three printers via USB locally to each PC and name them the same as the ones connected to Operator 2's PC (Printer_1, Printer_2, Printer_3), so they can be found by the scripts.

It feels as though I'm looking at this solution incorrectly or missing some information. What strategy can I use to make the networked printers operate?

My IT support lean heavily towards IP printers, because they can be centrally monitored and controlled.

If it's not possible, I can go USB, with a powered hub or other.

Thank you!

1 Like

Hi @_Harry, welcome to the soup!

One way to deal with advanced control requirements over printers is using plugin functions.

Hi Torsten! Thanks for the Welcome.
I'm still trying to get my head around plugins - how they are doing what they do, in FileMaker, that can't be done in FileMaker.... How is that? Why can't I build something in FileMaker that does the same?

Anyway, what sort of Plugin Function would make this work?

I'm trying to ensure this is as simple as possible, as few plugins and external systems as possible, to lower the IT stack overhead and give longevity to the system. We don't use iPads to scan, because we can't trust the updating iOS won't baulk our entire system, for example.

Am I trying to do something that FM just cannot do?

Thank you again!

Please check Printer functions and PrintDialog functions in MBS FileMaker Plugin to control printers via scripts.

1 Like

Thanks, MBS! I don't see anything in that list that does what I need, though.

Is this really not possible without a plugin?

Could I build a setup configuration that knows that PC1 has Printers ABC next to it and PC2 has Printers DEF next to it? Then, when i add PC3, I add Printers GHI in to the script and run a 'IF PC-Name is PC1 - select Printer A, if PC-Name is PC2, select Printer D' type-of-thing?

What do you all reckon?

You can query printers on each PC and put them in database. Then later print to one based on name via plugin.

But, they're not on each PC, they're on the network.

e2a: - How would the same script, on each client, know which printer to use? Which plugin are you recommending? I'll go read the details.

How exactly can we query printers by their IP address and call them later for printing?

I think the only way for me to achieve what i want is to hard-code each printer to each terminal/client and ensure static IP's on clients and printers!!

Without a name service, static printer IPs are the best you could do :slight_smile:

The idea is to have your script initialize once to look via plugin for the printers available on that computer and enter that in the database. Maybe with some options like what paper formats are available.

Then you can use this information in another script to lookup which printer is nearby the computer and pick the right based on the paper format or other requirements.

The printers are on our network, accessible by both PC's.

How would I lookup which printer is nearby the computer? I don't understand how to connect these things together within FM.

Does my solution sound like a viable or decent one? To hardcode the printers to the PC within a script, query which PC the operator is calling the scripts from and put those two together?

Put in in the database.
Put in a record for each computer.
Put a record for each printer.
Connect them with a relationship.

e.g. query SystemInfo.ComputerName function to know computer name.

@ajmchambers - maybe we should expand on what we have done for the Epson POS Epson printers via XML in Trinidad and Tobago?

1 Like

That's partly what I do. A 'PrinterSetup' in my solution is a record with fields

  • Location
  • [Computer]
  • PersistentID
  • Printers *)
  • LabelLayouts (for example Brother / Dymo/…) *)
  • Copies *)
  • PrinterTasks *)
    *) don't slam me for the fact that those are RepeatingFields :wink:

Create a new record on a client computer automatically sets its PersistentID and the [Computer] name and evaluates client computers Printers. The Printers build a ValueList to be used in field 'PrinterTasks'. 'PrinterTasks' repetitions are for example
1 - Letters
2 - Invoices
3 - Adress Labels

This 'Location' field is used for customers who use their laptop at the office AND at home and have to deal with different printer environments. Via the PersistentID, a relationship builds a ValueList for general setup to switch from 'Office' to 'Home' …

A modular script gets the repetition-number as ScriptParameter to process all the related printer attributes according to the task (1=Letters, 2=Invoices, …)

check the poor example file I have prepared. This is based on the MBS PlugIn.
clicking on the EffBzz-Logo toggles Toolbars show/hide.
I'm too lazy to translate my german 'Notes'. Use Google translate … (747.0 KB)


Hi @_Harry, welcome aboard.

You are bumping into an area that is really under-powered. FileMaker built in functions give you very little control. In this situation a plug-in is going to be a sensible addition to the stack.

May I remind you that 'Scriptable Printing Control' is a Feature Request sent in by @PhilModJunk back in the Year of ~1996 for Filemaker 4.0?!
(Phil, correct me if I'm wrong)

Thanks you for the Welcome, Malcolm; too.

And thank you for that insight.

OK, that's a more sophisitcated and databasey way of doing what I was thinking - thank you!

I am… a little surprised no one mentioned this yet.

What I am about to write makes an important assumption: each printer has a print queue service, whether built-in or elsewhere on the network, that can be accessed by multiple computers.

  1. Create a series of scripts that setup the printer and print the labels. Let's call these scripts the print scripts. Each script targets only one printer. And yes… you will need to add scripts as you add printers.

  2. Create a dispatch script that selects the print script according to the label size and location ID (more on that later).

  3. Invoke the dispatch script, giving it the label size and location ID, whenever you want to print labels.

A table can hold location IDs for computers based on one of many criteria: Get (HostIPAddress); Get (HostName); Get (PersistentID); Get (SystemNICAddress). Keep in mind some of these will not work on all OSes. Location IDs can also be based on multiple criteria (computer and user, for example).

Some computers are mobile? Users can select a position or desired printer via an account or session setting for such cases.

Hope this helps.