Как восстановить удаленные чеки ККМ в УТ 10.3 и настроить их архивацию при закрытии смены

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

В розничной торговле на базе конфигурации «1С:Управление торговлей 10.3» (на платформе 1С:Предприятие 8) нередко возникают форс-мажорные ситуации. Поломка кассового аппарата, сбои электросети или некорректные действия персонала могут привести к потере учетных данных. Типичный сценарий: касса ломается, продавцы продолжают проводить документы ЧекККМ в программе без пробития на фискальном регистраторе, а затем удаляют их, полагая, что раз товар списан, документы больше не нужны. В результате физически удаленные документы очищают движения по регистрам накопления, и проданный товар массово возвращается на остатки склада.

В этой статье мы подробно разберем, как выйти из такой ситуации, если актуальной резервной копии базы данных (бэкапа) не оказалось под рукой. Мы проанализируем технические каналы поиска утерянной информации и рассмотрим, как правильно настроить программу 1С, чтобы документы ЧекККМ не удалялись безвозвратно после закрытия кассовой смены.

Выясняем причину: как работают документы Чек ККМ и почему пропали остатки

Для начала разберем логику работы конфигурации «Управление торговлей 10.3». Документ ЧекККМ предназначен для оперативного отражения розничной продажи в течение кассовой смены. При проведении он делает движения по регистрам накопления (например, Товары на складах или Товары в рознице), временно списывая товары со склада.

При выполнении процедуры «Закрытие кассовой смены» система совершает следующие действия:

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

Если же кассиры вручную пометили чеки на удаление и воспользовались обработкой УдалениеПомеченныхОбъектов до закрытия смены, то движения документов по регистрам остатков полностью очищаются. Товар снова «виртуально» возвращается на склад, хотя физически он уже продан покупателям. Без резервной копии базы восстановить эти документы стандартным интерактивным способом в интерфейсе 1С невозможно. Однако опускать руки не стоит — разберем системные методы извлечения утерянной информации.

Метод 1. Использование теневых копий Windows (для файловых баз)

Если ваша информационная база работает в файловом режиме (файл базы данных 1Cv8.1CD расположен на локальном компьютере или на сетевом диске), мы можем воспользоваться стандартной службой операционной системы — Volume Shadow Copy Service (VSS).

Проанализируем этот процесс по шагам:

  1. Перейдите в проводнике Windows к папке, в которой физически располагается ваша информационная база 1С.
  2. Нажмите правой кнопкой мыши на папку с базой и выберите пункт «Свойства».
  3. Перейдите на вкладку «Предыдущие версии» (Previous Versions).
  4. Если в системе включена функция восстановления системы или настроена архивация данных, вы увидите список точек сохранения папки с указанием точной даты и времени. Нам понадобятся контрольные точки за даты до инцидента (например, за 7 или 8 число).
  5. Выберите нужную копию папки, нажмите кнопку «Копировать» и сохраните ее в другое место (ни в коем случае не нажимайте «Восстановить», чтобы не перезаписать текущую рабочую базу!).
  6. Запустите скопированную базу через 1С:Предприятие, найдите удаленные чеки ККМ, которые на тот момент еще существовали, и выгрузите их состав (например, с помощью стандартной обработки «Выгрузка и загрузка данных XML» или просто скопировав таблицы в Excel для последующего создания актов списания).

Метод 2. Анализ транзакционного лога СУБД (для клиент-серверных баз)

Если ваша база работает под управлением СУБД (Microsoft SQL Server или PostgreSQL), то отсутствие бэкапов в формате .dt или резервных копий SQL не означает полную потерю данных. Если для базы данных SQL Server установлена модель восстановления Full (Полная), то абсолютно все операции по модификации и удалению данных записываются в лог транзакций (файл с расширением .ldf).

Для извлечения удаленных строк из табличной части чеков выполним следующие действия:

  1. Воспользуемся специализированным программным обеспечением для чтения логов транзакций SQL (например, утилитами ApexSQL Log или Redgate SQL Log Rescue).
  2. Подключимся с помощью утилиты к вашей базе данных на SQL-сервере и укажем период времени, когда кассиры производили удаление помеченных объектов.
  3. В логах СУБД структура таблиц 1С представлена в физическом виде. Документу ЧекККМ соответствует таблица с префиксом _Document (например, _Document150), а его табличной части «Товары» — таблица _Document150_VT1234. Идентификаторы таблиц для вашей конфигурации можно предварительно узнать из служебной таблицы _Metadata.
  4. С помощью фильтров утилиты найдем операции типа DELETE в табличной части товаров чека ККМ. Утилита покажет удаленные строки, включая идентификаторы номенклатуры (UUID), количество и цену.
  5. Экспортируем эти данные в формат CSV или XLS и восстановим информацию о проданных товарах.

Метод 3. Чтение технологических логов кассового драйвера ККТ

Даже если плата на кассовом аппарате (например, Атол 22Ф) сгорела, кассиры продолжали работать на компьютере. При попытке проведения или печати чеков программа 1С передает данные на локальный компьютер, где установлен драйвер торгового оборудования. Драйвер Атол детально логирует все входящие запросы.

Рассмотрим, как найти эти данные в лог-файлах драйвера:

  1. Перейдите на компьютер кассира, к которому была подключена ККТ.
  2. Найдите лог-файл работы драйвера ККТ. Для 10-й версии драйвера Атол лог-файл обычно называется fptr10.log и располагается по пути:
    C:\Users\[ИмяПользователя]\AppData\Roaming\Atol\fptr10\fptr10.log или в папке установки драйвера.
  3. Откройте лог-файл текстовым редактором. Каждая попытка пробития чека, даже завершившаяся ошибкой связи из-за сгоревшей платы, фиксируется в логе в виде XML-пакетов или последовательности команд.
  4. В тексте лога вы увидите строки с командами регистрации позиций: наименование товара, штрихкод, переданное количество, цена и сумма. Пример строки лога:
    <registerPosition name="Товар А" price="150.00" quantity="2.000" .../>
  5. Используя регулярные выражения или ручной разбор лога за конкретные даты (7 и 8 число), вы сможете полностью восстановить список реализованной продукции для составления корректирующего документа Списание товаров в 1С.

Метод 4. Восстановление метаданных через Журнал регистрации 1С

Журнал регистрации 1С по умолчанию не сохраняет внутреннее содержимое табличных частей документов (состав проданных товаров), однако он фиксирует сам факт удаления и базовые реквизиты объекта.

Проанализируем, какую пользу мы можем извлечь из Журнала регистрации:

  1. Откройте информационную базу 1С в режиме «Предприятие» под учетной записью с административными правами.
  2. Перейдите в меню: Сервис — Журнал регистрации.
  3. Установите фильтр по периоду (даты удаления документов) и событию «Данные. Удаление».
  4. В поле «Метаданные» выберите Документ.ЧекККМ.
  5. В представлении события вы увидите строковое представление удаленного документа, которое часто содержит номер чека, дату создания и общую сумму документа (например, «Чек ККМ №000012 от 07.04.2023 14:20:05 на сумму 4 500.00 руб.»).
  6. Зная точное время и суммы чеков, вы сможете сопоставить их со сторонними источниками информации — например, с отчетами о транзакциях по банковскому терминалу (эквайрингу), если покупатели оплачивали товары картами.

Как настроить архивацию чеков ККМ вместо их автоматического удаления

Чтобы избежать подобных инцидентов в будущем и иметь возможность оформлять возвраты товаров от покупателей «не день в день» (по истечении кассовой смены), необходимо настроить программу так, чтобы чеки ККМ не удалялись безвозвратно. Способ реализации зависит от релиза вашей конфигурации «Управление торговлей 10.3».

Решение для актуальных релизов УТ 10.3 (начиная с версии 10.3.43.2 и выше)

В современных релизах УТ 10.3 разработчики добавили штатный механизм архивации. Настроим его по шагам:

  1. Перейдите в меню Справочники — Предприятие — Кассы ККМ.
  2. Откройте карточку кассы ККМ, по которой осуществляются продажи.
  3. Найдите на форме флажок «Архивация чеков» и установите его.
  4. Сохраните изменения в карточке кассы, нажав кнопку «ОК».

Как это работает: Теперь при выполнении обработки ЗакрытиеКассовойСмены документы ЧекККМ не будут удаляться физически или помечаться на удаление. Программа автоматически снимет их с проведения (очистит движения, чтобы они не задваивали остатки с документом ОтчетОРозничныхПродажах) и присвоит им статус «Архивный». Такие документы останутся в базе данных, и вы в любой момент сможете открыть их, посмотреть состав продаж или оформить документ возврата на их основании.

Решение для устаревших релизов УТ 10.3

Если ваша конфигурация сильно кастомизирована и обновить ее до версии 10.3.43.2 нет возможности, встроенного флажка архивации в справочнике касс не будет. В этом случае у вас есть два пути:

Вариант А. Оформление возвратов вручную. Возвраты прошлых смен оформляются стандартным документом ВозвратТоваровОтПокупателя. Поскольку чека-основания в базе больше нет, документ создается вручную с видом операции «Продажа, комиссия». В качестве контрагента указывается предопределенный элемент «Розничный покупатель».

Вариант Б. Доработка алгоритма закрытия смены (для программистов). Если требуется автоматизировать процесс сохранения чеков, необходимо изменить код удаления в конфигураторе. Проанализируем пример кода, который можно внедрить в обработку ЗакрытиеКассовойСмены (или выполнить через расширение конфигурации, если платформа позволяет использовать расширения в режиме совместимости):


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

Данная модификация полностью исключит физическое удаление документов из базы данных и позволит сохранить сквозную аналитику розничных продаж для последующего контроля и удобного оформления возвратов.

Рекомендация по безопасности: ограничение прав кассиров

Описанный инцидент с удалением чеков произошел в первую очередь из-за некорректно настроенных прав доступа пользователей. По умолчанию в 1С кассирам никогда не должно предоставляться право на интерактивное удаление или даже пометку удаления документов.

Проанализируем необходимые настройки ограничений:

  1. Откройте конфигуратор вашей базы данных 1С.
  2. Перейдите в ветку Пользователи — Роли.
  3. Для роли кассира (например, ИнтерфейсКассира или Продавец) откройте права на документ ЧекККМ.
  4. Снимите флажки напротив прав «Интерактивное удаление», «Интерактивное удаление помеченных» и, желательно, «Интерактивная пометка удаления».
  5. Кассиры должны работать исключительно в специализированном режиме — «Интерфейс кассира» (РМК). Выход из этого интерфейса в обычное меню программы для кассовой смены должен быть заблокирован или защищен паролем администратора/старшего кассира.

Реализация этих несложных правил разграничения прав и своевременная настройка архивации чеков ККМ полностью защитят вашу базу данных от фатальных ошибок персонала и сберегут время при учете розничных продаж.

← На главную