If company doesn't make any money, then of course no bonus should really be paid.
However, in this sort of case, where a company has made a good profit, then it isn't that smart not to give something.
It doesn't have to be hundreds of pounds, it could even be a donation to charity in the employee's name (probably tax deductable as well!).
What happens is you lose a huge amount of good will, which in reality is worth far more than a even a few hundred quid per staff member.
You can make the argument that you are paid to work and of course this is true, but the world and especially employee relations aren't that simple.
An example,
American Airlines (I believe) introduced a reward system for staff who took no sick days throughout the year. They bought a couple of expensive cars and at the end of the year, each member of staff who hadn't taken a day off due to sickness was entered into a raffle for them.
Amazingly, sickness numbers fell dramatically. Was it bribery to try and get people to come to work for a job they are already paid for?
Yes, of course, but financially it was an incredibly smart move.
I believe Barbara Cassani at GO had a similar system only using holidays instead, but again it was a very successful policy.
The point is, a few quid at christmas is stuff all to a profitable company, the damage it does by witholding it is far more costly.
Arguments about "you're paid for it" fall down, as very few people follow that view and by not giving a bonus you are leaving a feeling that the staff aren't valued.
I remember the damage done at Emerald when the £10 Sainsbury's voucher was handed out. I remember feeling insulted by it. More so than the next year when we got nothing.
Funny things personal feelings. Mainly because everyone has different ones!