При работе в розничной торговле на базе конфигурации «1С:Розница 2» (или отраслевых решений, таких как «Рарус: Аптека») пользователи часто сталкиваются с неприятной ситуацией: в конце смены сумма в документе «Отчет о розничных продажах» (ООРП) существенно отличается от суммы в документе «Выемка денежных средств». Ситуация становится еще более загадочной, если на торговой точке используется нефискальный принтер чеков (работающий через эмулятор или специальную обработку), тип оплаты заявлен исключительно как наличный, а в настройках кассы установлена автоматическая полная выемка при закрытии смены.
Казалось бы, при таких условиях формула должна работать идеально: Сумма продаж = Сумма выемки. Однако на практике эти показатели могут разойтись на тысячи рублей. В этой статье мы подробно разберем, почему возникает данная проблема, как устроена внутренняя логика регистров 1С, и по шагам пройдем процесс диагностики и исправления ошибок.
Понимание архитектуры: почему это происходит?
Для начала разберем принципиальное различие в том, откуда система берет данные для формирования этих двух документов. Это критически важно для понимания сути проблемы, особенно при использовании обычного принтера чеков вместо полноценного фискального регистратора (онлайн-кассы).
Сумма в Отчете о розничных продажах (ООРП) — это чисто оборотный показатель за конкретную смену. Он собирается напрямую из табличной части архивных чеков, пробитых за день. Программа суммирует все продажи и вычитает возвраты, оформленные в течение этой же смены. Данный документ отражает фактическую выручку, полученную в результате торговых операций.
Сумма автоматической полной выемки — рассчитывается на основании остатка в регистре накопления Денежные средства ККМ. Этот регистр работает по принципу накопительного итога. Он фиксирует каждое движение наличных: приход (продажи, внесение размена) и расход (выемки, возвраты). При закрытии смены и проведении выемки с типом «Полная выемка» система делает запрос к этому регистру и пытается изъять абсолютно весь накопленный остаток, числящийся за конкретной кассой ККМ на данный момент.
Если у вас используется полноценный фискальный регистратор, то расхождение между базой 1С и железной памятью ФР обычно быстро обнаруживается, так как ККТ сверяет суммы со своими внутренними счетчиками и выдает ошибку. Но в случае с обычным принтером чеков (нефискальным устройством) у оборудования нет собственной памяти с денежными регистрами. Устройство просто печатает текстовые формы. Вся логика полностью ложится на базу данных 1С, и если в ней «поехали» регистры накопления, программа беззвучно проведет документы с некорректными суммами.
Главные причины расхождения сумм
Проанализируем основные сценарии, при которых баланс регистра Денежные средства ККМ перестает соответствовать реальным продажам текущей смены:
Неучтенный начальный остаток (переходящий «хвост» из прошлых смен). Если в предыдущие дни автоматическая или ручная выемка была выполнена не полностью (например, кассиры оставили деньги на размен, но не отразили это документом «Внесение», либо произошел программный сбой), то на начало новой смены в регистре уже висел остаток. При закрытии текущей смены автоматическая полная выемка заберет всю сумму: Остаток прошлых периодов + Выручка текущей смены. ООРП при этом покажет строго сумму текущей смены.
Документы «Внесение денежных средств» на размен. В начале смены для выдачи сдачи кассиры часто делают внесение наличных. Это действие делает движение Приход в регистре Денежные средства ККМ. При закрытии смены с полной выемкой программа изымает всю сумму: выручку за день вместе с разменными деньгами. В итоге ООРП будет меньше выемки ровно на величину внесенного размена.
Ручные выемки в течение дня через интерфейс РМК. Кассиры могут делать промежуточные изъятия денег из ящика. В 1С:Розница ручные выемки создают отдельные документы, которые делают движения по регистрам, но не попадают в структуру подчиненности итогового документа ООРП. При закрытии смены автоматическая выемка заберет лишь остаток денег, и сумма этой финальной выемки будет гораздо меньше, чем общая выручка в ООРП.
Сбои при архивации чеков ККМ. При закрытии смены чеки должны переходить в статус Архивный и привязываться к созданному ООРП. Если в процессе закрытия произошел сбой (например, отключилось питание компьютера или зависла сеть), часть чеков могла остаться в статусе Пробит. Они не попали в ООРП, но при этом движение по регистру денежных средств уже сделали. В итоге в кассе числится одна сумма, а отчет показывает другую.
Ошибочное указание типа оплаты. Даже если торговая точка работает «только за наличные», кассир при оформлении чека мог случайно выбрать безналичный расчет или настроить смешанную оплату. Безналичные оплаты не делают приходных движений по регистру наличных денег ККМ. В результате ООРП отразит общую выручку (включая безнал), а выемка будет сделана только на сумму наличных движений.
Пошаговый алгоритм поиска ошибки
Рассмотрим, как локализовать проблему в вашей базе данных и найти конкретный документ, вызвавший перекос.
Шаг 1. Анализируем ведомость по кассам ККМ
Первым делом нам необходимо проверить движение денег в регистрах. Для этого мы воспользуемся специализированным отчетом.
Перейдите в раздел «Продажи» (или «Финансы») и откройте отчет «Движения денежных средств в кассах ККМ» (в решениях от Рарус он может называться «Остатки и обороты денежных средств в кассах ККМ»).
Настройте период отчета так, чтобы захватить не только проблемный день, но и как минимум 2–3 дня до него. Это нужно для проверки входящего сальдо.
Сгруппируйте отчет по полям: Организация, Касса ККМ, Регистратор.
Проанализируйте колонку «Начальный остаток» на начало проблемного дня. Если там числится сумма отличная от нуля, значит, проблема зародилась раньше, и текущая смена просто «собрала» старый долг.
Шаг 2. Проверяем связку Чеков ККМ и ООРП
Выясним, все ли чеки за смену корректно свернулись в итоговый отчет о продажах.
Перейдите в список документов «Чеки ККМ» и установите отбор по вашей кассе и дате проблемной смены.
Обратите внимание на колонку «Статус». Все чеки за закрытую смену должны иметь статус Архивный.
Если вы нашли чек со статусом Пробит или Аннулирован, который имеет движения по кассе, но не привязан к ООРП, это и есть виновники расхождения. Откройте этот чек и посмотрите его структуру подчиненности.
Также проверьте, заполнен ли реквизит Документ расчета / Отчет о розничных продажах внутри каждого чека.
Шаг 3. Контроль ручных движений и внесений
Посмотрим на наличие документов, созданных кассирами вручную. Для этого сформируем отчет по журналу кассовых документов:
Найдите документы «Внесение денежных средств в кассу ККМ» и «Выемка денежных средств из кассы ККМ» за анализируемый день.
Проверьте время их создания. Если выемка была сделана посреди дня, а при закрытии смены сработала повторная автоматическая выемка, то итоговые суммы в кассе ККМ обнулятся, но сумма последней выемки не совпадет с ООРП, так как часть денег уже была изъята ранее.
Шаг 4. Написание проверочного запроса (для программистов)
Если вы хотите быстро выявить расхождения между движениями чеков ККМ и записями в регистре денежных средств ККМ, можно воспользоваться консолью запросов и выполнить следующий код:
ВЫБРАТЬ
ДвиженияКассы.Регистратор КАК ДокументДвижения,
ДвиженияКассы.СуммаПриход КАК СуммаПоРегистру,
ЕСТЬNULL(Чеки.СуммаДокумента, 0) КАК СуммаПоЧеку,
ДвиженияКассы.СуммаПриход - ЕСТЬNULL(Чеки.СуммаДокумента, 0) КАК Расхождение
ИЗ
(ВЫБРАТЬ
РегистрДвижения.Регистратор КАК Регистратор,
СУММА(ВЫБОР
КОГДА РегистрДвижения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА РегистрДвижения.Сумма
ИНАЧЕ 0
КОНЕЦ) КАК СуммаПриход
ИЗ
РегистрНакопления.ДенежныеСредстваККМ КАК РегистрДвижения
ГДЕ
РегистрДвижения.Период МЕЖДУ &НачалоПериода И &КонецПериода
И РегистрДвижения.КассаККМ = &КассаККМ
СГРУППИРОВАТЬ ПО
РегистрДвижения.Регистратор) КАК ДвиженияКассы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК Чеки
ПО ДвиженияКассы.Регистратор = Чеки.Ссылка
ГДЕ
ДвиженияКассы.СуммаПриход <> ЕСТЬNULL(Чеки.СуммаДокумента, 0)
И ТИПЗНАЧЕНИЯ(ДвиженияКассы.Регистратор) = ТИП(Документ.ЧекККМ)
Этот запрос выведет все чеки ККМ за указанный период, у которых сумма проведенных по регистру наличных денег не совпадает с итоговой суммой самого чека (например, из-за скрытых видов оплат или ошибок транзакций).
Как исправить расхождение и выровнять регистры?
После того как причина расхождения найдена, нам необходимо привести базу данных в порядок. Существует два основных способа решения этой задачи.
Вариант А. Корректировка с помощью стандартных документов
Если вы обнаружили, что в регистре Денежные средства ККМ завис неверный остаток, который искажает последующие автоматические выемки, выполните следующие действия:
Перейдите в раздел «Продажи» — «Корректировка наличности в кассе ККМ» (в некоторых конфигурациях этот функционал доступен через меню «Администрирование» — «Корректировка регистров»).
Создайте новый документ корректировки на дату начала текущей рабочей смены.
В табличной части укажите вашу кассу ККМ и сумму расхождения: если денег в регистре числится больше, чем фактически в ящике, сделайте движение с минусом (техническое списание), если меньше — с плюсом.
Проведите документ. Сформируйте заново отчет «Движения денежных средств в кассах ККМ» и убедитесь, что начальный остаток на текущую смену стал равен нулю.
Вариант Б. Восстановление последовательности и перепроведение
Если расхождение возникло из-за сбоя в проведении ООРП или зависшего в статусе «Пробит» чека, последовательность действий будет следующей:
Снимите с проведения проблемный документ «Отчет о розничных продажах».
Найдите все «зависшие» чеки за эту смену, откройте их и попробуйте провести вручную. При необходимости воспользуйтесь обработкой изменения реквизитов для изменения статуса чеков на Архивный и заполнения ссылки на ООРП.
Снимите с проведения документ автоматической выемки денежных средств.
Снова проведите ООРП — при этом программа автоматически пересчитает движения по реализации.
Перезаполните и проведите документ выемки денежных средств. Убедитесь, что теперь его сумма до копейки совпадает со значением из ООРП.
Профилактика проблемы: рекомендации для стабильной работы
Чтобы предотвратить появление подобных расхождений в будущем при использовании обычного принтера чеков, рекомендуем придерживаться следующих правил:
Контролируйте разменный фонд. Если кассиры используют разменные деньги, приучите их строго оформлять операции «Внесение» в начале смены и полную «Выемку» всех денег (включая размен) в конце смены. Альтернативный вариант — настроить частичную выемку, при которой в кассе ККМ всегда остается фиксированная сумма на сдачу (эта сумма не должна изыматься при закрытии).
Запретите ручные операции мимо РМК. Ограничьте права кассиров на ручное создание документов выемки и внесения непосредственно из интерфейса «1С:Предприятие». Все движения денег должны происходить строго через регламентированные кнопки в интерфейсе кассира (РМК).
Регулярно проводите сверку смен. Администратор магазина или старший кассир должен ежедневно проверять отчет «Движения денежных средств в кассах ККМ». Конечный остаток на конец дня после проведения закрытия смены должен быть равен нулю (или строго равен установленному лимиту остатка на сдачу).
Следите за стабильностью сети. Поскольку нефискальный принтер не страхует систему от сбоев на аппаратном уровне, любые сетевые задержки могут привести к рассинхронизации транзакций 1С. Обеспечьте бесперебойное питание кассовых компьютеров и стабильное локальное подключение к базе данных.