[Question] Split ticket based on Positions

Quite a few POS systems I saw have had this feature and was wondering in what way we could approach this on samba.

They basically want a button to hit that starts marking all items as position #1 until they hit it again to then start marking all items enter thereafter as position #2 and so on… Then to be able to hit split ticket based on positions and print all those tickets at once.

I have gotten a few requests for this feature stating that it is quite a bit of work to go through and split each person’s ticket manually when there is a party of 10-15 which happens very often at some places.

Pretty sure that could be achived with some creative automation now…

Order added rule to ser position states based on a resetting incremental program setting increased from a button with a dynamic header using that same program setting.

Splitting via a loop of select orders by state (position state) and a move orders action…
Probably throw a ticket tag in there based on the state/position number so that the ticket list for the table will then show the list of tickets on that table and the tag of the position per ticket.

It wont be straightforward but pretty sure it would be doable.

Maybe another option thought the api if we have move order request yet… if not in the future no doubt.

1 Like

I made a turorial that lets you select orders and it will split them to a new ticket when you press settle automatically. It could probably be adapted.


The loop bit Id be intrigued at seeing if you do it, marking orders is easy, and splitting part shouldn’t be hard.
If stuggle with loop you could ‘break it down’ and have a seccond ‘Settle Place’ button which prompts for place number and uses that prompt value to select, move and settle screen using kendashes example just adding the select place state bit on the front in place of moving the manually selected orders…
My customers never request interesting little things like this, its always silly things like ‘I updated a product but the button hasn’t changed’ or overly complex stuff that is pointless and offers no real added value…

All you do is use states. Ill try when i get home ot should be easy


When we think about the flow creating separate tickets for each position in advance and tagging them by position might be an alternative solution.

Ok so I sat down to look into this and it occurred to me trying to mark them and press single button seems like more work. We can already do this with a version of my advanced split payment tutorial.

Here is how it currently works. Lets say customer A, B, and C are at Table 1. They order 3 items each so we have a ticket with 9 items. Its time to pay and they want to split the ticket up.

Customer A wants to pay for Dish 123. You select 123 and press settle. It splits those into a new ticket lets you settle it and when you take payment it will load original ticket with what is remaining. customer B wants to pay for 789 so you select 789 orders and press settle it splits those into new ticket and brings up settle screen once you take payment it loads original ticket which now has only orders 456 on it.

That said what is the flow you need? Does your waitress split all 3 bills up and bring them back to the table for payment? Is it all done at a register? These questions are important.

We should be able to do this but since it is a custom need we need more information to assist you with it.


The waitresses want to be able to pull up the ticket so they can see what person has what tho. They forget for example who had the side of fries. @Jesse

Of course they could do that… That is not what I asked though. I could easily modify it so it doesnt go to payment screen… but I still need to know your flow because I doubt that is the flow you want. You probably want something more.

So you want it all to stay on single ticket? Be detailed with the flow you need.

Explain to me how this is any different than the Move button.

3 Customers at Table 1 …

  • open Ticket for Table 1
  • select Orders
  • click Move button
  • a new Ticket is created for Table 1 containing the selected Orders
  • original Ticket has the selected Orders removed


  • open original Ticket for Table 1
  • select Orders
  • click Move button
  • a new Ticket is created for Table 1 containing the selected Orders
  • original Ticket has the selected Orders removed

You now have 3 Tickets on Table 1. Settle each as usual.


sorry on the late response. I have been trying to think this through with my uncle.

So here are the requirements.

  1. Need to make it easier to split tickets all at once. Say theres a part of 15 people it should be a little easier to split and print all those tickets.

  2. After order is marked with positions and sent to kitchen, Waitresses need to be able to check who had which plate when orders come up. When they have big parties of 15 they forget who had which plates and would be very useful to be able to open tablet to see which position had which order.

  3. He said its not important but would possibly be helpful in some situations to see in the kitchen which person has which dishes. But he said he either wants this feature done right or not at all. My first though was to use order tags to mark positions but he said he definitely doesnt want more clutter in the order tag section in the kitchen so as far as I know there is no way to filter out order tags in the kitchen, please correct me if im wrong. So the only option would be to maybe use a product tag formatted like this?:

-Breakfast Special #2
Scrambled Well

extra mayo

-Panake Special

extra Chilli

He said its very important to have very minimal clutter in the order tag section in the reciepts because the cooks need to read the order as fast as possible so a position in the fist order tag line for each item will be more of a distraction then useful. He said its fine if we cant format the positions on the reciept properly we can just not show them in the kitchen at all. His main concern is the waitresses to be able to open their tablets and check who had which plate when the forget and to split/print bills easily.
That is all that he requested. @Jesse

Thanks as always for your professional help.

Only issue that i see with this is:

Theres 13 tickets open. Order is made and ready for waitress to pickup in kitchen. Waitress forgets who had the hamburger. Wouldnt it be alot of work for her to go through all 13 tickets to see which one had the hamburger? Also wouldnt that print 13 different tickets in the kichen?

I guess that would be a better solution then nothing though because im sure they dont forget often and even when they do im sure they remember that its either position 3 or 10 so they would only have to check a few tickets as vs to them all.


If you go the route I sugested of setting ‘position states’ as you ring in the orders they give you something to split by.
Plitting the one ticket into multiple tickets should be doable with some form of loop followed by select orders for x position and a move action like in kendashes split by select and settle flow.

As for printing you can group orders by state so I would suggest making a second ‘positions’ template with grouping using the position state value. having it on a seperate template would allow the exiting kitchen template to continue to be used as cant imagine the chefs care whos having what and from the sounds of it you would adjust this seccond template to maybe have a less details order tags template as waitress would probably be better to have a more basic tags view - just enough to distinguish who was having say the medium and who was the rare steak.

State flow something like this;

Well, this is definitely doable. This should not be request or in beta.
It doesn’t need anything special. Mainly use Order State and Select Orders action.

Edit 1: The tricky part is Looping thru each Seat (position). This can be archive by my Loop technique (Sukasem’s Loop). I have to search for it where my post is.

Edit 2: Found @QMcKay Tutorial builder using this loop technique instead :slight_smile:

Was going to have a quick go at splitting but need to go out, need a way to list position values for a loop, somthing like {REPORT ORDER DETAILS:OS.SeatPosition.asc:T.Id={TICKET ID}} which works but beleive you need a comma seperated list for the loop but wont take much to get this done…
I got to go out so cant do much more on it myslef but should be enough to get you inspired and going.

Don’t even have to move order to new ticket. All can be done in 1 ticket. But I didn’t have it auto print each seat bill. I just select each seat when they want to pay.

Cant remember if you can print just selected orders but given the description above Im guessing move/split is what is the aim.

Yes, you can print selected orders. The option Ignore Selected Orders True or False.

1 Like

If I was doing it I would probably do something like the the above for the tagging the position via state, and the split positions button would prompt for would you like to print each bill (guessing that would need to go into another program setting and then it can print the individual bills as it goes after each merge via a constraint for setting:printsplitbills=true or something.
I would also add a ticket tag for seat positon on each part of the look so that the list would show the position number from the ticket tag making it easier to identify them from the ticket list for that table.