При работе с конфигурацией 1С:Управление торговлей 11 (а также КА 2 и ERP) многие специалисты сталкиваются с ситуацией, когда при закрытии кассовой смены не все чеки ККМ попадают в итоговый документ Отчет о розничных продажах (ООРП). Особенно часто это происходит, если в течение смены по каким-то причинам в чеках фигурировали разные виды цен. В результате документ формируется не полностью, выручка "теряется", а складские остатки не списываются корректно.
В этой статье мы подробно разберем, почему так происходит, проанализируем архитектуру решения и рассмотрим способы обхода этого ограничения.
Для начала давайте разберемся, как устроен документ Отчет о розничных продажах. Если мы откроем форму этого документа или посмотрим на его реквизиты в конфигураторе, мы обнаружим важную деталь.
Реквизит ВидЦены находится в шапке документа. Это фундаментальное архитектурное решение разработчиков типовой конфигурации. Оно означает, что весь перечень товаров, указанный в табличной части Товары, продан по одному конкретному типу цен (например, "Розничная" или "Цена магазина №1").
Логика работы системы следующая:
Склада (или формата магазина) задается Розничный вид цены. Это "нормативная" цена для данной торговой точки.Соответственно, если в выборке чеков за смену встречаются документы с другим видом цены, система их намеренно игнорирует. Это не ошибка в коде (баг), а защита целостности данных (фича). Типовой механизм не умеет "смешивать" разные колонки прайс-листа в одном документе продажи, так как это нарушило бы логику ценообразования и анализа маржинальности в разрезе видов цен.
Давайте посмотрим, как это выглядит с точки зрения программиста. Автор темы на форуме верно заметил, воспользовавшись отладчиком, что алгоритм заполнения жестко фильтрует данные.
При нажатии кнопки "Закрыть смену" или запуске регламентного задания, система выполняет запрос к документам ЧекККМ. В этом запросе или при последующей обработке выборки происходит отбор. Упрощенно логику можно представить следующим псевдокодом:
// Получаем настройки склада
НормативныйВидЦены = Склад.РозничныйВидЦены;
// Создаем новый Отчет о розничных продажах
ООРП = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
ООРП.ВидЦены = НормативныйВидЦены;
// При заполнении товаров отбираем только те чеки, где вид цены совпадает
Для Каждого СтрокаЧека Из ВыборкаЧеков Цикл
Если СтрокаЧека.ВидЦены = НормативныйВидЦены Тогда
// Добавляем в отчет
ЗаполнитьСтрокуООРП(ООРП, СтрокаЧека);
Иначе
// ИГНОРИРУЕМ чек
// Именно здесь "пропадают" данные с другим видом цен
КонецЕсли;
КонецЦикла;
Если бы система попыталась добавить товары с другим видом цены, возникла бы проблема: цена в строке не соответствовала бы виду цены в шапке, что при пересчете документа или печати ценников привело бы к искажению сумм.
Возникает закономерный вопрос: если методология запрещает разные цены, как они вообще появляются в базе? В стандартном Рабочем месте кассира (РМК) 1С оперативно сменить вид цены крайне сложно или невозможно. Обычно "аномальные" чеки появляются по трем причинам:
Теперь, когда мы выяснили причину, давайте разберем, как исправить ситуацию и предотвратить ее повторение. Существует три основных пути.
Это самый правильный путь. В идеологии 1С цена — это база, а любые отклонения (акции, скидки для своих, уценка) должны оформляться через механизм скидок/наценок.
В этом случае:
ВидЦены (Розничная).Отчет о розничных продажах.Если проблема возникает при обмене с внешним ПО, необходимо настроить правила конвертации так, чтобы разница в цене садилась именно как скидка, а не как подмена вида цены.
Если бизнес-процесс требует именно разных видов цен (например, жесткое разделение на "Розница" и "Мелкий опт" через одну кассу), вам придется дорабатывать процедуру закрытия смены.
Стандартный механизм не справится, поэтому потребуется создать Расширение конфигурации. Алгоритм действий программиста будет следующим:
ВидЦены.Отчет о розничных продажах.В итоге, вместо одного документа за день, у вас будет создаваться два или три документа — каждый для своего вида цен. Это корректно с точки зрения учета и позволит провести все продажи.
Если ситуация разовая (например, кто-то случайно поменял настройки склада), и вам нужно просто закрыть период, можно воспользоваться групповой обработкой реквизитов.
Изменение выделенных элементов установите в них правильный (основной) вид цены. Внимание: это может изменить суммы документов, если цены отличаются!Проблема с попаданием чеков в отчет о розничных продажах в УТ 11 вызвана строгой архитектурой: один склад = один вид цены. Игнорирование чеков с другими ценами — это защитный механизм системы.
Чтобы избежать подобных ситуаций в будущем, мы рекомендуем настроить использование скидок вместо варьирования видов цен или, в крайнем случае, реализовать доработку для автоматического разделения итогового отчета на несколько документов.