Написали для музейной кассы модуль ККТ. Потом спросили музей, и он оказался не нужен

Контролёр на входе в музей сканирует билет и видит: «Билет не найден». Билет настоящий, куплен пять минут назад в нашей же кассе. Хорошо, что эту сцену мы увидели на тестах, а не в музее.

Это пост из серии про кассу на 1С для муниципального музея. В прошлый раз мы выкинули MVP целиком, теперь рассказываем, что выросло на его месте и как целый этап плана оказался не нужен.

С чистого листа, но по плану

В этот раз сначала план, потом код. Десять этапов: от справочников до контроля на входе. Платформа 8.3.27, а не свежая 8.5, потому что с ней совместимо всё вокруг. Лицензия разработчика бесплатная, коммерческую музей купит только под рабочую базу.

Что получилось:

— Рабочее место кассира: один экран, продажа, возвраты, смены отдельно по каждой кассе. — Цены живут в периодическом регистре. Подняли цену с 1 января — прошлые продажи задним числом не переписались. Заодно сделали кнопку «Сверить цены с сайтом музея»: 1С сама находит расхождения с прейскурантом на сайте. — Каждый билет — отдельная запись со своим номером. На входе контролёр сканирует номер, и билет гасится. — Онлайн-записи с сайта музея подтягиваются в 1С, по ним можно оформить продажу. — Три отчёта: выручка по кассам, проданные билеты, посещаемость. — Плюс то, о чём не догадаешься, пока не поговоришь с кассиром: восемь льготных категорий и Пушкинская карта отдельным видом оплаты.

Баг, который мы чуть не отдали

Когда собрали всё вместе, прогнали конфигурацию целиком и нашли неприятное.

Кассир продаёт три взрослых билета одной строкой. Это обычный сценарий: нажимаешь кнопку «Взрослый» три раза, и количество в строке растёт. В учёт ложится одна запись с номером …-001, а на печать выходят три билета: …-001/1, /2 и /3. Посетитель приходит на вход, контролёр сканирует билет и видит «Билет не найден».

Наш же самотест этот баг не ловил: он гасил базовый номер, а не тот, что напечатан на бумаге. Отсюда вторая беда: вернуть один билет из трёх было нельзя, возврат ставился на всю строку разом.

Починили по-простому: одна строка — один билет. Номер на бумаге, номер в учёте и строка возврата теперь совпадают. Там же нашли, что денег в кассе 1С не считала вообще, то есть вернуть наличными можно было больше, чем лежит в ящике. Добавили регистр денег.

Этап, которого мы боялись

В плане был этап «Фискализация»: ККТ АТОЛ 91Ф, драйвер, чеки по 54-ФЗ прямо из 1С. Мы закопались в документацию и выяснили, что АТОЛ 91Ф может работать фискальным регистратором, но только с платным кодом лицензии от сервисного центра и прошивкой не ниже 7386. Написали модуль: чек продажи, чек возврата, X- и Z-отчёты, смены ККТ. Отладили на эмуляторе.

И только потом задали музею простой вопрос: «А кто у вас сейчас печатает чек?» Ответ: терминал Сбера. Кассир вбивает сумму на терминале руками, чек выходит оттуда же, все к этому привыкли.

Можно было настоять на «правильной» схеме, чтобы сумма из 1С уходила в терминал сама. Мы не стали. Это ещё один драйвер, ещё одна точка отказа и переобучение людей, у которых сейчас всё работает. Вместо этого в карточке кассы появился флажок «Чек печатает терминал банка». С ним 1С не печатает второй чек, а продажу проводит только после того, как кассир подтвердит «ОДОБРЕНО» на терминале. Для наличных 1С спрашивает: «Пробейте чек наличными на X руб. Чек вышел?»

Модуль АТОЛ никуда не делся. Если музей когда-нибудь поставит отдельную кассу, достаточно снять флажок. Но вывод для себя записали: самый дорогой этап плана — тот, который никто не проверил одним вопросом заказчику. Спросили бы в первый день — сэкономили бы себе вечера с документацией АТОЛ.

Что входит в заказ

Конфигурация, установка на кассы, инструкция для кассиров, акты. Коммерческую лицензию 1С музей покупает сам.

Как думаете, сколько должна стоить такая касса для муниципального музея? Напишите в комментариях свою оценку. Особенно интересно мнение тех, кто сам работал с бюджетными учреждениями.

11