Не отображается кассовая смена в 1С:Бухгалтерия 3.0: как устранить рассинхронизацию с ККТ

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

При работе с торговым оборудованием в программе 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с ситуацией, когда физическое состояние кассового аппарата (ККТ) не соответствует данным в информационной базе. Типичный сценарий: бухгалтер пытается начать работу, но система выдает ошибку о том, что кассовая смена уже открыта. При попытке закрыть смену программа сообщает, что смена уже была закрыта. При этом в самом журнале документов сегодняшняя смена просто отсутствует.

В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем физику процесса рассинхронизации и рассмотрим пошаговые инструкции по ее устранению с помощью Теста драйвера ККТ АТОЛ и встроенных инструментов 1С.

Выясняем причину: почему возникает рассинхронизация смен?

Любая кассовая операция в 1С — это двухэтапная транзакция. Рассмотрим, как это происходит при открытии смены:

  1. Программа 1С отправляет команду на кассовый аппарат через установленный драйвер.
  2. Кассовый аппарат выполняет команду, производит запись в фискальный накопитель (ФН), печатает чек об открытии смены и возвращает успешный статус в 1С.
  3. Получив подтверждение, 1С создает и проводит документ КассоваяСмена со статусом Открыта.

Если на втором или третьем этапе происходит сбой — например, у пользователя в этот момент временно пропали права доступа, отключилось питание, произошел сетевой сбой или банально закончилась чековая лента — транзакция прерывается. Физически ККТ уже открыла смену, но 1С не успела зафиксировать этот факт в своей базе данных и создать документ. В результате база считает, что смена закрыта, а касса — что открыта. Возникает логический тупик.

---

Способ 1. Принудительное закрытие смены на ККТ через «Тест драйвера АТОЛ»

Если в 1С документа на сегодняшнюю дату нет, а касса заблокирована, нам необходимо выровнять состояние ККТ под состояние базы данных. Для этого мы закроем смену непосредственно на кассовом аппарате без участия 1С. Рассмотрим этот процесс по шагам.

Шаг 1. Освобождение COM-порта.
Перед запуском сервисных утилит обязательно полностью закройте программу 1С на компьютере, к которому подключена касса (а также на всех терминальных сессиях, если работа идет через RDP). Если этого не сделать, драйвер выдаст ошибку Порт занят или Ошибка связи, так как 1С монопольно удерживает канал связи с ККТ.

Шаг 2. Запуск Теста драйвера.
Найдите на компьютере утилиту управления кассой. Для драйверов АТОЛ 10-й версии она обычно находится по пути: C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\fptr10_t.exe. Запустите ее от имени администратора.

Шаг 3. Настройка связи с ККТ.
В открывшемся окне утилиты выполните следующие действия:

  1. В правой части экрана нажмите кнопку Свойства.
  2. В поле "Канал связи" выберите способ подключения вашей кассы (чаще всего это USB или COM-порт).
  3. Нажмите кнопку Проверка связи в правом нижнем углу. Если параметры выставлены верно, в строке "Результат" отобразится модель вашей ККТ, её заводской номер и версия прошивки.
  4. Нажмите ОК для сохранения настроек и закрытия окна свойств.

Шаг 4. Активация устройства.
Это критически важный шаг, о котором часто забывают специалисты. В правом верхнем углу главного окна программы установите флаг Включено. Без этой галочки все последующие вкладки и кнопки будут неактивными, а утилита продолжит сообщать об отсутствии соединения.

Шаг 5. Снятие Z-отчета (Закрытие смены).
Теперь перейдем непосредственно к закрытию смены на физическом устройстве:

  1. В левом вертикальном меню утилиты перейдите в раздел Отчеты.
  2. В поле "Тип отчета" из выпадающего списка выберите значение 0 – Отчет о закрытии смены (в старых версиях драйвера данный отчет может называться Z-отчетом).
  3. Нажмите кнопку Сформировать отчет, расположенную справа.

После этого кассовый аппарат должен распечатать фискальный документ закрытия смены. Смена на ККТ успешно закрыта.

Шаг 6. Возврат к работе в 1С.
Снимите флаг Включено в Тесте драйвера и закройте утилиту, чтобы освободить порт. Запустите 1С:Бухгалтерию и откройте смену стандартным способом через раздел Банк и касса — Управление фискальным устройством (или через форму продажи чеков). Теперь система отработает корректно.

---

Способ 2. Решение обратной проблемы (в 1С смена «Открыта», а на ККТ «Закрыта»)

Иногда случается противоположная ситуация: кассир успешно снял Z-отчет в конце дня, касса физически закрыла смену, но в этот момент завис интернет или выключился компьютер. Документ в 1С остался в статусе Открыта. На следующий день ККТ требует открыть новую смену, но 1С блокирует это действие, так как считает старую смену активной.

В этом случае нам нужно принудительно изменить статус документа внутри базы данных 1С. Разберем, как это сделать с помощью стандартной обработки.

Шаг 1. Переход к групповому изменению реквизитов.
Перейдите в раздел Администрирование, затем выберите пункт Обслуживание. Раскройте подраздел Корректировка данных и перейдите по ссылке Групповое изменение реквизитов.

Шаг 2. Настройка отбора (Важно!).
Выполните настройку крайне аккуратно, чтобы не повредить исторические данные базы:

  1. В поле "Выбор элементов для изменения" начните вводить и выберите объект Кассовая смена.
  2. Нажмите на ссылку Все элементы для настройки жесткого отбора. Если этого не сделать, программа изменит статус у абсолютно всех кассовых смен за все годы работы!
  3. Добавьте условие отбора: Ссылка Равно [Имя_вашей_зависшей_смены] или выберите отбор по конкретной дате и конкретной кассе ККМ.
  4. Убедившись, что в списке отображается только один нужный документ, нажмите ОК.

Шаг 3. Изменение статуса.
В появившейся таблице реквизитов найдите строку Статус. Установите флаг напротив нее и в колонке "Новое значение" выберите значение Закрыта. Дополнительно рекомендуется заполнить реквизиты даты и времени окончания смены. Нажмите кнопку Изменить реквизиты внизу экрана.

После выполнения этой процедуры в 1С восстановится верная последовательность статусов, и вы сможете открыть новую смену в обычном режиме.

---

Способ 3. Программное исправление статуса смены (для программистов)

Если у вас есть права администратора и доступ к запуску внешних обработок или встроенной консоли кода, вы можете изменить статус зависшего документа КассоваяСмена программным путем. Проанализируем пример кода, который решает эту задачу:


// Выбираем зависшую открытую смену по конкретной кассе ККМ
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	КассоваяСмена.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.КассоваяСмена КАК КассоваяСмена
    |ГДЕ
    |	КассоваяСмена.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыКассовыхСмен.Открыта)
    |	И КассоваяСмена.КассаККМ = &КассаККМ";

Запрос.УстановитьПараметр("КассаККМ", Справочники.КассыККМ.НайтиПоНаименованию("Основная касса"));
РезультатЗапроса = Запрос.Выполнить();

Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        // Получаем объект документа для изменения
        ОбъектСмены = Выборка.Ссылка.ПолучитьОбъект();
        ОбъектСмены.Статус = Перечисления.СтатусыКассовыхСмен.Закрыта;
        ОбъектСмены.ДатаОкончанияСмены = ТекущаяДата();
        
        Попытка
            ОбъектСмены.Записать(РежимЗаписиДокумента.Запись);
            Сообщить("Статус смены успешно изменен на 'Закрыта' для документа: " + ОбъектСмены);
        Исключение
            Сообщить("Не удалось записать документ: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
КонецЕсли;

Этот код находит все открытые смены по заданной кассе ККМ, программно меняет их статус на "Закрыта", фиксирует время окончания и записывает документ без проведения сопутствующих фискальных операций.

---

Дополнительные рекомендации по предотвращению сбоев

Чтобы минимизировать риски возникновения подобных ошибок в будущем, рекомендуем соблюдать простые правила эксплуатации торгового оборудования:

← На главную