В практической работе кассиров и бухгалтеров нередко возникает крайне неприятная ситуация: при попытке пробить чек или открыть/закрыть смену программа выдает взаимоисключающие ошибки. Например, при попытке открыть смену 1С сообщает, что "Кассовая смена УЖЕ открыта", а при попытке закрыть — "Кассовая смена уже была закрыта" (или отчет о закрытии не может быть сформирован). При этом в справочнике Кассовые смены за текущий день вообще нет никаких записей.
В этой статье мы подробно разберем, почему возникает подобный сбой, как правильно настроить связь с кассовым аппаратом напрямую и какие существуют способы восстановления синхронизации между физическим фискальным накопителем и базой данных 1С.
---
Для того чтобы понять, как исправить ошибку, проанализируем механизм взаимодействия платформы 1С и онлайн-кассы (ККТ). В этой связке отсутствует так называемая "целостность транзакции". Процесс открытия кассовой смены всегда состоит из двух последовательных этапов:
Кассовая смена со статусом "Открыта".Если на втором этапе происходит сбой (например, внезапно оборвалось сетевое соединение, у пользователя прямо в этот момент "слетели" права доступа на запись документов, выключился компьютер или завис сеанс 1С), транзакция в базе данных откатывается. Физическая касса уже считает смену открытой, но в информационной базе 1С подтверждающий документ отсутствует. Из-за этого программа блокирует дальнейшую работу, считая, что смена еще не началась, а касса отказывается открывать смену повторно.
---
Самый надежный способ вернуть систему в рабочее состояние — закрыть "зависшую" смену непосредственно на самом кассовом аппарате в обход 1С. После этого статус кассы обнулится, и вы сможете открыть смену заново в штатном режиме.
Разберем по шагам, как это сделать на примере самого распространенного оборудования (на примере драйвера АТОЛ, для других марок логика аналогична):
Любая касса подключается к компьютеру через определенный COM-порт или USB-эмуляцию. Программа 1С монопольно захватывает этот порт при запуске. Если база 1С открыта, драйвер кассы не сможет подключиться к устройству и выдаст ошибку "Порт занят" или "Соединение не установлено".
Выполним следующие действия:
Ctrl + Shift + Esc) и убедитесь, что в фоновых процессах не зависли процессы 1cv8.exe или 1cv8c.exe. Если они есть, завершите их вручную.Запустите утилиту "Тест драйвера ККТ" (для касс АТОЛ это обычно "ДТО 10").
После успешного установления связи выполним закрытие смены:
После выполнения этих шагов закройте тест драйвера ККТ, запустите 1С:Бухгалтерию и откройте смену привычным способом через Рабочее место кассира (РМК). Программа создаст новый чистый документ в базе.
---
Иногда закрывать смену через драйвер нежелательно — например, если кассир в течение дня уже пробивал чеки (в автономном режиме или через другие программы) и закрытие смены сейчас приведет к расхождению в учете и Z-отчетах. Выясним, как решить проблему программными методами внутри самой 1С.
Вместо стандартного открытия через интерфейс продаж попробуем воспользоваться административной панелью управления кассой:
Банк и касса.Касса выберите пункт Управление фискальным устройством.Кассовая смена в базу данных.Если в справочнике Кассовые смены документ за предыдущий день все-таки присутствует, но имеет статус "Открыта" (хотя на самой кассе физически смена уже закрыта), использовать драйвер не нужно. Нам достаточно скорректировать статус документа в базе данных.
Рассмотрим по шагам, как это сделать безопасно:
Администрирование -> Обслуживание.Корректировка данных и выберите пункт Групповое изменение реквизитов.Кассовая смена.Статус (или Статус кассовой смены).Закрыта.Изменить реквизиты.После этого попробуйте запустить РМК и открыть смену заново. Для такой корректировки можно использовать обработку для ручного закрытия кассовой смены в 1С.
Если документа в базе данных вообще нет, а работать и пробивать чеки нужно прямо сейчас, администратор базы может принудительно создать документ Кассовая смена программным кодом. Рассмотрим пример создания такого документа через встроенную консоль кода или внешнюю обработку:
НоваяСмена = Документы.КассоваяСмена.СоздатьДокумент();
НоваяСмена.Дата = ТекущаяДата();
НоваяСмена.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000"); // Укажите ИНН вашей организации
НоваяСмена.КассаККМ = Справочники.КассыККМ.НайтиПоНаименованию("Основная касса"); // Укажите имя кассы
НоваяСмена.Статус = Перечисления.СтатусыКассовыхСмен.Открыта;
НоваяСмена.НачалоСмены = ТекущаяДата();
НоваяСмена.Записать(РежимЗаписиДокумента.Проведение);
После выполнения этого кода в системе появится проведенный документ со статусом "Открыта". 1С позволит кассирам беспрепятственно пробивать чеки в течение дня, а вечером при стандартном закрытии смены программа корректно закроет ее как на фискальном накопителе, так и в базе данных.
---
Чтобы избежать регулярного повторения подобных проблем, рекомендуем соблюдать простые правила эксплуатации кассового оборудования: