Есть кассовый софт - фронт кассира и подключенный к нему фискальный регистратор.
На каком софте написан фронт кассира, принципиального значения не имеет, допустим это 1С.
Когда пробивается чек, осуществляется следующая последовательность операций:
1. В софте в базе данных фиксируется сумма и состав чека и осуществляется списание товара и приход денег по учету.
2. Чек пробивается на фискальном регистраторе.
3. Софт получает от фискального регистратора подтверждение, что чек пробит и фиксирует пробитие чека в базе данных, например, меняет статус чека на "Пробит".
Практика показывает, что транзакция может прерваться на шаге 2 или 3.
Если прерывание произойдет на шаге 2, то в базе будет лишнее списание товара и поступление денег.
Если прерывание произойдет на шаге 3, то все нормально как бы - товар списан и деньги поступлены. Но чек не будет отмечен как пробитый и его могут ошибочно попытаться пробить еще раз.
По закону больших чисел постоянно возникают эти проблемы.
Я долго думал, как их решить и нашел решение.
Правда, оно не следует напрямую из условий задачи, чтобы его придумать, нужно немного знать, как работают фискальные регистраторы.
Но бог вам в помощь, я составил зашифрованное послание в будущее на 6 января 2014 года, чтобы никто не обвинил меня, что я устроил мозговой штурм, не зная решения. Там изложено не только самое дешевое и оптимальное по соотношению цена-качество решение, но и другие способы:
Думайте, черепа! Гуру-тест!
Journal information