Kitchen/Bar Display using Task Printer - separate displays for Food and Drink


V4 does not have {ORDER UID}.

The Order UID will not change. Ensure that you are using the same format for the Identifier in both the normal section of your Template and the Void section of your Template. In fact, all [ORDERS:x] sections should use the same format for the Identifier (Id).


Thanks for your reply! First, just to be clear, I’m using V5, but the database has been upgraded from V4

I basically used simplified version of what you suggested. Here’s mine:

-- ++โต๊ะ {ENTITY NAME:Table}{TICKET TAG:F}
-- (Id={TICKET UID})

-- (Color=#FF333333)
<bold>{QUANTITY} {PRODUCT NAME}</bold>

-- [ORDERS:Gift]
-- ++โต๊ะ {ENTITY NAME:Table}
-- (Id={ORDER UID})
-- (Color=#FF333333)
-- <bold>{QUANTITY} {PRODUCT NAME}</bold>

++โต๊ะ {ENTITY NAME:Table}
<bold><color red>ยกเลิก {QUANTITY} {PRODUCT NAME}</color></bold>

<size 14><color #FFFFAA55><font Consolas>{ORDER TAG NAME}</font></color></size>

(I planned to merged the card later thus some of the commented out lines)

I really cannot figure out why the UID changed.

And a different question, I cannot get the display to synchronize on all client. The Message Server connection seems to be fine – the regular Table Entity Screen synchronized immediately on all client (and it does say “connected”), but the Task Editor for the Kitchen Display won’t. It even failed to sync when I try to switch between entity screen. The only way to force the update is to logout and log back in. Any idea why? I even tried to turn off the firewall completely in all terminal but nothing change.


The Order Uid did not change. It will not do that.

The Task Identifier (Id) is formatted per your definition in the Template, which is why all ORDERS sections should use the same format.

When the Order is Submitted, the in-memory Order UID is written to the DB - this is a “random” alpha-numeric string that will never change.

At the same time, the Task Printer uses the Template to write the Task Identifier to the DB in the format that you defined. It also writes the entire Template output to the Task [Content] field. The Task Content cannot be replaced, but it can be appended, which is why you should see a VOID Order Task Card with the Content of the Original Order (defined by the [ORDERS] section), along with the appended Content of the [ORDERS:Void] section. This works on the basis that the Task Identifier can be found in the DB, which is why the different ORDERS sections require the same format for the Task Identifier. If the sections use different formats for the Identifier, then they will not be able to locate and update the Task, so a new Task is created instead.

If the Task has been written to the DB, then you change the Template to make an alteration to the Task Identifier (in any ORDERS section), then the link between the Identifier and any subsequent Task Updates (ie. VOID) will be broken because the Identifier format has been changed and it will not be able to update the Task because it cannot find the Task Identifier in the DB when the Task Print is fired.


Show the Entity Screen configuration and the Settings dialog for the Task Editor Widget.


There is some difference than your recent screenshot’s.
Please see some of my setting screenshots.


I realize that. I am showing you a different way to configure the KDS components. If you follow the suggestions using my recent screenshots, then your KDS system will work better for you.

The point of a Tutorial is to show people the basic setup and operation of certain features of SambaPOS. You either need to follow the Tutorial exactly to the last detail, or understand how it works so that you can modify it to better suit your needs, which differs among different people, setups, venues, desired flow, etc.

I have explained why yours is not working - none of your Product Groups contain the word “Food”, and your Print Job Mappings are also using the Product Group as a filter rather than the productType Product Tag. My suggestions have been explained already in recent posts - change the Rules to use {ITEM TAG:productType} (including any Action Constraints that I have also shown) and change the Print Job Mappings to remove the Product Group filters and use the productType=Food Product Tag filter instead.


Ok. I think I understand better about how the UID works now. Still, I cannot understand why my setup won’t work. Even when I keep the template the same, the link is still broken. As you can see from the screenshot, for whatever reason the printed UIDs are different between the original and after void. I actually tried using {TICKET ID} and the void work as you explained (albeit the card are merged).


Here they are:


Remove the Id line on the LAYOUT section altogether and test it again. Even though you have it commented out, the Task Printer may overlook that for some reason because it is a special field. Delete it completely and see if that fixes the problem.

Try changing the Entity Screen Mapping to All instead of POS.


is there any way to show all Groups on a single screen no need to separate food and beverage,


Yes you can modify it so it doesn’t show drinks separately. If you follow the tutorial you should get an idea of how to do that. The tutorial does a good job outlining how that works.


Still no luck :confused: Here the current template:

The Id on the card still changed after void for some reason.

Also still no luck on making the display update after changing the Visibility to All. I also tried adding tables to the entity list of the entity screen with no result. :frowning:

Any other idea I can try?


Please show step by step exactly how you are voiding the Order. Post screenshots of the POS/Ticket screen when you Add the Order (screenshot), then close the Ticket, then Open the Ticket (screenshot), then Void Order (screenshot), then close Ticket, then Open Ticket (screenshot). I want to see the Order States for the Order(s).

You might also try removing the Task Custom Field named “Id” from the Task Type definition. I don’t think that should make a difference, but it is something you can try, since that is not a field that I define for the Task Type because I don’t want it to appear on the Task Card.

Hmm not sure, since you mention that other Entity Screens receive updates without issue, which indicates your Message Service is working properly. Try this: define a Name for the Task Editor Widget in the Widget Properties dialog.

Another thing to try is to set the Print Action to High Priority. After you do this, you will need to remove the Action from the Rule, save the Rule, add the Action back in (drag it to be in the same order as before), then save the Rule.


Does not seem to make a difference. I added the Id to the Task Type Custom Fields and the operation is still the same - all is good. We can see the proper Order State updates and the Task Id on the Card does not change - only a singe card.

Take note of the Order States: FNotPrinted (Order Added), FPrinted (Ticket closed, then opened), FNotPrinted (Order Voided).


Doing this seems to help slightly. Maybe. Still nowhere near usable though. The other entity screen (Tables) works perfectly pretty much all the time. A Ticket Lister widget also works well, albeit the known slowness.

Can you (or anyone) confirm that the update/synchronization works well for Task Edition for more than two terminals? They seems to keep up better between two of the terminals somehow.

Another wide guess on my part is that maybe I need to make sure the clocks on all terminal are synchronized perfectly? I connected them in an internal network so the clocks aren’t sync with an internet server. They should be off by a few minutes at best though.


I’ve found a solution/workaround. In the printer template -> Merge Lines: box, I need to pick Don't Merge otherwise the UID will change. Is this the expected behavior?

Now that the UID thing is (somewhat) solved, I have a slightly different question. Say I have a card with an order of Water. When voided, there is no way to “update” the card to say “Water - Void” correct? The best I can do is “append” the task so it will have two lines, “Water” and “Water - Void”, right?


Doing what?

Your computers should not be off by a few minutes. Use the time sync service built into Windows to keep them the same. A few seconds should not make a difference.

It almost sounds like you are having connectivity issues in your network that causes problems with the Messaging Service. It could be Name Resolution, IP conflicts, or dropouts. Try using the IP address of the Server instead of the computer name. Set your terminals to have Static IPs and/or make reservations by MAC address in your Router.

I have not had any issues with KD updates using Tasks, and my KD is connected via Wireless N. I use static IPs for my computers, but only have 2 terminals.

Since GQL implementation in .61, I now use an HTML/JS/GQL version that runs in Chrome for my KD and I don’t even run SambaPOS on my KD Terminal at all. It works always, and is very fast and light on resources. That might be a better option for you.

You can try one more thing: delete the Entity Screen and re-create it from scratch. It is possible there is some type of conflict, or as some have reported, more than 1 Entity Screen with the same name. You might even have inadvertently added more than 1 Task Editor Widget to the Screen and it is obfuscated so you cannot see it.


The High Priority = True. Sorry I replied to the wrong post.

The network that connect the terminal together are not connected to the internet due to my laziness on making sure the security is tight enough. I did tried to sync all terminal to an internet time server manually though, still doesn’t help.

I tried to use only 2 terminals, both connect directly to each other and static IPs are set. Still doesn’t really solve the problem though. And I’m somewhat skeptical that it is a network issue since the table entity screen works very well.

I’ve made some more observations with the configuration above (2 terminal, static IP). The task (order) adding seems to update the screen pretty well. Not a 100% sure yet but looks like it does work. The task complete marking is, however, a lot more problematic. If the server (the one that host the database) mark a task complete, the task are updated on the other terminal, but it doesn’t work the other way around. To trigger the update, I can 1) log out and log back in. 2) Add some task (order) from either terminal to trigger the update. Method 1) is foolproof while method 2) “seems” to work.

Thank you for pointing this out for me. This looks like it will take a bit more work than I’d like to do at the moment though. (I do this in my spare time for my mother’s restaurant. I have a different job). I may eventually need to do this though. It would be awesome to be able to use a phone for as portable display anyway.

Did this. No luck :frowning:.


That sounds really strange that it works to complete a Task from Server and it updates on KD Terminal, but not the other way - if Task is completed on KD Terminal, the Server display does not update?

For the KD Rule Mappings, do you have the Terminal set to * (asterisk)? Please verify.

Show screenshots of the Message Server configuration on both the Server and KD Terminal please.

For example, this is the configuration on the Server (where DB resides), but on the other Terminal that I use for the KD, the Message Server Name is set to the IP address of the Server (ie.

Check the Message Server configuration Tool for proper configuration. This Service should only be running on the Server - other Terminals should not be running this Service.

What version are you running? Verify that all Terminals are running the same Version:


Somehow missed this post…

That is interesting. I have always used (and the Tutorial shows the same) the Don't Merge setting for the Task Printer Templates. I don’t know if this is the expected behavior or not. It almost sounds “backwards”, but only @emre will be able to confirm the behavior.

That is correct. The Task Content cannot be over-written; it can only be appended to when using the Task Printer. I believe though, that a GraphQL Mutation allows over-writing the Task Content entirely, but that would require a different setup of the flow of operations and some JScript in SambaPOS or in a Browser environment. GQL has much more detailed control over Tasks than SambaPOS default Automation does (ie. currently the only Action we have is Add Task), so we would need to use JScript to access extended functionality.