Почему в РМК 1С:Розница остатки отображаются только по одному складу и как настроить работу с несколькими складами?

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

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

Разберем причины такого поведения платформы и конфигурации 1С:Розница, а также проанализируем варианты решения задачи — от административных и методических настроек до программной доработки.

Выясним причину проблемы

Проанализируем логику работы типового механизма РМК:

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

Вариант 1. Административное разделение на отдельные магазины

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

  1. Создаем в справочнике Магазины отдельные карточки под каждую торговую площадку или отдел.
  2. В каждой карточке магазина указываем свой соответствующий склад в качестве склада продажи.
  3. Привязываем рабочие места и кассы ККМ пользователей к соответствующим магазинам.

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

Вариант 2. Программная подстановка склада по текущему продавцу

Если разделение на разные магазины неудобно для бизнес-процессов компании, разберем программный способ решения задачи. Добавим функционал, который определяет склад списания на основании персональных настроек выбранного продавца.

Реализуем доработку в форме РМКУправляемыйРежим (рекомендуется выносить данный код в расширение конфигурации):

  1. Создадим функцию на сервере, которая извлекает значение настройки ОсновнойСкладПродажи для текущего пользователя и магазина:

Функция ПолучитьСкладПоПродавцуНаСервере(Магазин, Продавец)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Пользователи.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |    Пользователи.ФизическоеЛицо = &ФизическоеЛицо";
    
    Запрос.УстановитьПараметр("ФизическоеЛицо", Продавец);
    ВыборкаПользователя = Запрос.Выполнить().Выбрать();
    
    Если Не ВыборкаПользователя.Следующий() Тогда
        Возврат Магазин.СкладПродажи;
    КонецЕсли;
    
    ТекПользователь = ВыборкаПользователя.Ссылка;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    НастройкиПользователей.Значение КАК Значение
        |ИЗ
        |    РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
        |ГДЕ
        |    НастройкиПользователей.Пользователь = &Пользователь
        |    И НастройкиПользователей.Магазин = &Магазин
        |    И НастройкиПользователей.Настройка = &Настройка";
    
    Запрос.УстановитьПараметр("Магазин", Магазин);
    Запрос.УстановитьПараметр("Пользователь", ТекПользователь);
    Запрос.УстановитьПараметр("Настройка", ПланыВидовХарактеристик.НастройкиПользователей.ОсновнойСкладПродажи);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Если ВыборкаДетальныеЗаписи.Следующий() И ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Значение) Тогда
        Возврат ВыборкаДетальныеЗаписи.Значение;
    Иначе
        Возврат Магазин.СкладПродажи;
    КонецЕсли;
    
КонецФункции
  1. В процедуре ТоварыПриИзмененииНоменклатуры переопределим склад для добавляемой строки табличной части:

СтрокаТабличнойЧасти.Склад = ПолучитьСкладПоПродавцуНаСервере(Объект.Магазин, Объект.Продавец);

В результате при подборе и сканировании номенклатуры в чек будет подставляться склад, закрепленный за конкретным продавцом в регистре НастройкиПользователей.

Вариант 3. Альтернативные типовые методики учета

Рассмотрим типовые механизмы, которые позволяют организовать продажи с нескольких складов без вмешательства в исходный программный код:

  1. Ордерная схема отгрузки: В РМК кассир пробивает чек и принимает оплату без немедленного списания остатков с физических мест хранения. Фактическая выдача стройматериалов со складов оформляется складскими документами РасходныйОрдерНаТовары непосредственно кладовщиками.
  2. Продажи по предварительным заказам: Менеджер в торговом зале оформляет документ ЗаказПокупателя, где построчно указывает склады отгрузки для каждого товара. Кассир в РМК находит готовый заказ, принимает оплату и закрывает чек.
  3. Правила распределения продаж: Использование встроенной системы распределения номенклатурных групп по складам и организациям позволяет программе автоматически определять склад списания на уровне категорий товаров.

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

← На главную