Рассмотрим распространенную и крайне неприятную техническую ситуацию, с которой сталкиваются многие администраторы и программисты 1С. В результате сбоя системы или некорректных действий администратора база данных «1С:Управление торговлей 10.3» была восстановлена из резервной копии (бэкапа). Однако в промежутке времени между созданием резервной копии и ее восстановлением кассир успел открыть смену на физической кассе и пробить реальный чек покупателю.
В итоге мы имеем классический рассинхрон: на физическом фискальном регистраторе (ФР) смена открыта и чек успешно пробит (деньги ушли в ОФД), а в восстановленной базе 1С этих данных попросту нет — смена числится закрытой, документа продажи не существует, а складские остатки не списаны. Напрямую пробить этот чек из 1С мы не можем, так как кассовый аппарат выдаст ошибку или, что еще хуже, продублирует продажу в ОФД, создав повторный чек.
Разберем подробно несколько эффективных методов решения этой проблемы, начиная от методологически правильного бухгалтерского подхода и заканчивая техническими хитростями обхода ограничений платформы 1С.
Проанализируем ситуацию с точки зрения учета. Документ ЧекККМ в программе 1С предназначен исключительно для оперативного отражения факта продажи в момент непосредственного взаимодействия с покупателем. В конце рабочего дня при процедуре закрытия кассовой смены все проведенные чеки ККМ за день автоматически архивируются и сворачиваются в один сводный документ — ОтчетОРозничныхПродажах. Именно этот документ делает итоговые движения по списанию товаров со складов, формированию розничной выручки и закрытию взаиморасчетов.
Поэтому, если физический чек уже успешно пробит на ККТ, нам абсолютно нет необходимости восстанавливать индивидуальный документ ЧекККМ. Мы можем отразить продажу напрямую сводным документом. Выполним следующие шаги:
ОтчетОРозничныхПродажах. Дату документа устанавливаем равной дате утерянной продажи. В табличную часть «Товары» вручную добавляем те позиции, которые были пробиты по утерянному физическому чеку.ОтчетОРозничныхПродажах. При проведении программа не будет обращаться к драйверу кассы и пытаться что-то напечатать. Документ успешно проведется, спишет товары со склада и зафиксирует розничную выручку в кассе 1С.Этот метод является наиболее безопасным и чистым с точки зрения ведения учета, так как исключает любые ошибки работы с торговым оборудованием.
Если специфика вашего учета требует обязательного наличия в базе именно документа ЧекККМ (например, для детализации аналитики по дисконтным картам, интеграции со сторонними CRM-системами или для последующего корректного автоматического закрытия смены), мы можем записать и провести документ программно.
В платформе 1С существует встроенный механизм, позволяющий отключать выполнение стандартных проверок бизнес-логики, включая процедуры обращения к торговому оборудованию и проверку статуса кассовой смены. Для этого используется свойство объекта ОбменДанными.Загрузка со значением Истина.
Для реализации этого метода нам понадобится внешняя обработка «Консоль кода» или создание простейшей одноразовой внешней обработки. Напишем и выполним следующий код:
НовыйЧек = Документы.ЧекККМ.СоздатьДокумент();
НовыйЧек.Дата = ТекущаяДата(); // Укажите реальную дату пробития чека
НовыйЧек.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000"); // Укажите ИНН вашей организации
НовыйЧек.КассаККМ = Справочники.КассыККМ.НайтиПоНаименованию("Основная касса");
// Заполняем табличную часть товары
НоваяСтрока = НовыйЧек.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000001");
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = 100;
НоваяСтрока.Сумма = 100;
// Устанавливаем ключевые статусы для пробитого чека
НовыйЧек.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробит;
НовыйЧек.НомерЧекаККМ = 123; // Укажите номер чека с физической ленты ФР
// Включаем режим загрузки данных для обхода проверок торгового оборудования
НовыйЧек.ОбменДанными.Загрузка = Истина;
Попытка
НовыйЧек.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Чек успешно проведен в обход кассового оборудования!");
Исключение
Сообщить("Ошибка проведения: " + ОписаниеОшибки());
КонецПопытки;
Использование свойства ОбменДанными.Загрузка = Истина гарантирует, что документ запишется в базу со статусом «Проведен» (и «Пробит») без единого обращения к физическому фискальному регистратору. Складские остатки при этом спишутся корректно на дату проведения документа.
Выясним причину, по которой стандартная замена фискального регистратора на «1С:Эмулятор ККТ» в настройках торгового оборудования часто выдает ошибку: «Отсутствуют доступные фискальные устройства». Дело в том, что в конфигурации «1С:Управление торговлей 10.3» каждый кассовый аппарат в справочнике КассыККМ жестко привязан к конкретному уникальному идентификатору (UID) подключенного оборудования.
Чтобы обойти это ограничение и провести документ через эмулятор, выполним следующие шаги:
КассоваяСмена со статусом «Открыта».ЧекККМ, выбираем в нем кассу «Эмулятор» и нажимаем кнопку «Пробить». Программа симулирует печать чека на виртуальном устройстве. Документ перейдет в статус «Проведен» и «Пробит».ОтчетОРозничныхПродажах.Если вы хотите провести чек стандартными средствами интерфейса, но без реального обращения к ККМ, можно временно деактивировать кассу в настройках. Однако здесь есть критически важный нюанс, о котором забывают многие специалисты.
При попытке провести документ при отключенном фискальном регистраторе 1С часто выдает критическую ошибку: «Возможны расхождения ИБ и ленты ФР! Ошибка при попытке проведения документа!». Это связано с тем, что конфигурация кэширует параметры подключенного оборудования при запуске сеанса пользователя.
Для корректного проведения выполним следующий алгоритм:
ЧекККМ.Таким образом, мы детально разобрали четыре различных способа восстановления учета при возникновении рассинхронизации данных. Выбор конкретного метода зависит от квалификации специалиста и жесткости требований к ведению детального партионного и оперативного учета в вашей организации. Самым надежным решением для рядового пользователя остается Метод 1 (создание ручного отчета о продажах), а для программистов и администраторов наиболее быстрым и эффективным инструментом будет программная запись документов через Метод 2.