При работе с торговым оборудованием в программе 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с ситуацией, когда физическое состояние кассового аппарата (ККТ) не соответствует данным в информационной базе. Типичный сценарий: бухгалтер пытается начать работу, но система выдает ошибку о том, что кассовая смена уже открыта. При попытке закрыть смену программа сообщает, что смена уже была закрыта. При этом в самом журнале документов сегодняшняя смена просто отсутствует.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем физику процесса рассинхронизации и рассмотрим пошаговые инструкции по ее устранению с помощью Теста драйвера ККТ АТОЛ и встроенных инструментов 1С.
Любая кассовая операция в 1С — это двухэтапная транзакция. Рассмотрим, как это происходит при открытии смены:
КассоваяСмена со статусом Открыта.Если на втором или третьем этапе происходит сбой — например, у пользователя в этот момент временно пропали права доступа, отключилось питание, произошел сетевой сбой или банально закончилась чековая лента — транзакция прерывается. Физически ККТ уже открыла смену, но 1С не успела зафиксировать этот факт в своей базе данных и создать документ. В результате база считает, что смена закрыта, а касса — что открыта. Возникает логический тупик.
---
Если в 1С документа на сегодняшнюю дату нет, а касса заблокирована, нам необходимо выровнять состояние ККТ под состояние базы данных. Для этого мы закроем смену непосредственно на кассовом аппарате без участия 1С. Рассмотрим этот процесс по шагам.
Шаг 1. Освобождение COM-порта.
Перед запуском сервисных утилит обязательно полностью закройте программу 1С на компьютере, к которому подключена касса (а также на всех терминальных сессиях, если работа идет через RDP). Если этого не сделать, драйвер выдаст ошибку Порт занят или Ошибка связи, так как 1С монопольно удерживает канал связи с ККТ.
Шаг 2. Запуск Теста драйвера.
Найдите на компьютере утилиту управления кассой. Для драйверов АТОЛ 10-й версии она обычно находится по пути: C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\fptr10_t.exe. Запустите ее от имени администратора.
Шаг 3. Настройка связи с ККТ.
В открывшемся окне утилиты выполните следующие действия:
Шаг 4. Активация устройства.
Это критически важный шаг, о котором часто забывают специалисты. В правом верхнем углу главного окна программы установите флаг Включено. Без этой галочки все последующие вкладки и кнопки будут неактивными, а утилита продолжит сообщать об отсутствии соединения.
Шаг 5. Снятие Z-отчета (Закрытие смены).
Теперь перейдем непосредственно к закрытию смены на физическом устройстве:
После этого кассовый аппарат должен распечатать фискальный документ закрытия смены. Смена на ККТ успешно закрыта.
Шаг 6. Возврат к работе в 1С.
Снимите флаг Включено в Тесте драйвера и закройте утилиту, чтобы освободить порт. Запустите 1С:Бухгалтерию и откройте смену стандартным способом через раздел Банк и касса — Управление фискальным устройством (или через форму продажи чеков). Теперь система отработает корректно.
---
Иногда случается противоположная ситуация: кассир успешно снял Z-отчет в конце дня, касса физически закрыла смену, но в этот момент завис интернет или выключился компьютер. Документ в 1С остался в статусе Открыта. На следующий день ККТ требует открыть новую смену, но 1С блокирует это действие, так как считает старую смену активной.
В этом случае нам нужно принудительно изменить статус документа внутри базы данных 1С. Разберем, как это сделать с помощью стандартной обработки.
Шаг 1. Переход к групповому изменению реквизитов.
Перейдите в раздел Администрирование, затем выберите пункт Обслуживание. Раскройте подраздел Корректировка данных и перейдите по ссылке Групповое изменение реквизитов.
Шаг 2. Настройка отбора (Важно!).
Выполните настройку крайне аккуратно, чтобы не повредить исторические данные базы:
Кассовая смена.Ссылка Равно [Имя_вашей_зависшей_смены] или выберите отбор по конкретной дате и конкретной кассе ККМ.Шаг 3. Изменение статуса.
В появившейся таблице реквизитов найдите строку Статус. Установите флаг напротив нее и в колонке "Новое значение" выберите значение Закрыта. Дополнительно рекомендуется заполнить реквизиты даты и времени окончания смены. Нажмите кнопку Изменить реквизиты внизу экрана.
После выполнения этой процедуры в 1С восстановится верная последовательность статусов, и вы сможете открыть новую смену в обычном режиме.
---
Если у вас есть права администратора и доступ к запуску внешних обработок или встроенной консоли кода, вы можете изменить статус зависшего документа КассоваяСмена программным путем. Проанализируем пример кода, который решает эту задачу:
// Выбираем зависшую открытую смену по конкретной кассе ККМ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КассоваяСмена.Ссылка КАК Ссылка
|ИЗ
| Документ.КассоваяСмена КАК КассоваяСмена
|ГДЕ
| КассоваяСмена.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыКассовыхСмен.Открыта)
| И КассоваяСмена.КассаККМ = &КассаККМ";
Запрос.УстановитьПараметр("КассаККМ", Справочники.КассыККМ.НайтиПоНаименованию("Основная касса"));
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Получаем объект документа для изменения
ОбъектСмены = Выборка.Ссылка.ПолучитьОбъект();
ОбъектСмены.Статус = Перечисления.СтатусыКассовыхСмен.Закрыта;
ОбъектСмены.ДатаОкончанияСмены = ТекущаяДата();
Попытка
ОбъектСмены.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Статус смены успешно изменен на 'Закрыта' для документа: " + ОбъектСмены);
Исключение
Сообщить("Не удалось записать документ: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецЕсли;
Этот код находит все открытые смены по заданной кассе ККМ, программно меняет их статус на "Закрыта", фиксирует время окончания и записывает документ без проведения сопутствующих фискальных операций.
---
Чтобы минимизировать риски возникновения подобных ошибок в будущем, рекомендуем соблюдать простые правила эксплуатации торгового оборудования:
Ethernet-over-USB (EoU) или EoT, которая отвечает за отправку чеков оператору фискальных данных. Если Тест драйвера сообщает, что порт занят даже при закрытой 1С, попробуйте временно остановить службу Атол: EoU через диспетчер служб Windows, выполнить технические операции и запустить службу снова.