Как реализовать установку разных цен на один товар в разрезе складов в 1С:Управление торговлей 10.3

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

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

Метод 1: Использование характеристик номенклатуры (без изменения конфигурации)

Если вы не хотите вносить изменения в программный код, можно воспользоваться механизмом характеристик. Мы можем создать характеристики, которые будут соответствовать «ценовым зонам» или конкретным складам. Например, характеристика «Склад 1 (базовая)» и «Склад 2 (с наценкой 10%)».

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

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

Важный момент: этот способ значительно увеличивает объем справочника характеристик и может усложнить складской учет (остатки будут висеть на разных характеристиках), зато он полностью соответствует типовой логике 1С.

Метод 2: Доработка регистра сведений «Цены номенклатуры» (для «вскрытой» конфигурации)

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

Разберем алгоритм действий программиста:

  1. Модификация регистра: Добавим в регистр ЦеныНоменклатуры новое измерение Склад (тип СправочникСсылка.Склады). Установим свойство «Неотрицательное» и разрешим пустое значение (для общих цен).
  2. Изменение логики получения цены: Нам потребуется найти в общем модуле Ценообразование функцию ПолучитьЦенуНоменклатуры. Ее нужно переписать так, чтобы при поиске цены система сначала искала запись с заполненным складом, а если она не найдена — брала общую цену (где склад пустой).

Пример модифицированного запроса для получения цены может выглядеть так:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    Цены.Цена КАК Цена,
|    Цены.Валюта КАК Валюта
|ИЗ
|    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, 
|        Номенклатура = &Номенклатура 
|        И ТипЦен = &ТипЦен 
|        И (Склад = &Склад ИЛИ Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))) КАК Цены
|УПОРЯДОЧИТЬ ПО
|    Цены.Склад УБЫВАЮЩАЯ"; 
// Сначала подтянутся записи с заполненным складом

Метод 3: Использование розничной схемы учета (НТТ и розничные склады)

В УТ 10.3 уже реализован механизм учета цен в разрезе складов, но только для розничных складов. Если перевести Склад 2 в статус «Розничный», система начнет использовать регистр ЦеныНоменклатурыВРознице. В этом регистре измерение Склад присутствует штатно.

Как это работает в процессе перемещения:

Метод 4: Автоматизация наценки через «Документ-основание»

Чтобы пользователю не приходилось вручную высчитывать наценку, мы можем автоматизировать процесс создания цен на основании Перемещения товаров. Рассмотрим, как это реализовать программно:

  1. В документе Перемещение товаров добавим реквизит ПроцентНаценки.
  2. Добавим кнопку или процедуру в модуле объекта, которая при проведении создает документ Установка цен номенклатуры.
  3. Алгоритм расчета: ЦенаНаСкладе2 = ЦенаНаСкладе1 * (1 + ПроцентНаценки / 100).

Проанализируем пример кода для заполнения нового документа установки цен:


НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
    НоваяСтрока = НовыйДокумент.Товары.Добавить();
    НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
    НоваяСтрока.ТипЦен = ТипЦенДляСклада2;
    // Получаем текущую цену по базовому типу цен
    БазоваяЦена = Ценообразование.ПолучитьЦенуНоменклатуры(СтрокаТЧ.Номенклатура, ТипЦенБазовый);
    НоваяСтрока.Цена = БазоваяЦена * (1 + ЭтотОбъект.ПроцентНаценки / 100);
КонецЦикла;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

Метод 5: Использование механизма скидок и наценок

Если менять саму цену в базе нежелательно, можно использовать функционал Автоматических скидок. В 1С наценка — это скидка с отрицательным значением.

Выясним, как это настроить:

Резюме и рекомендации

Выбор метода зависит от того, насколько глубоко вы готовы менять конфигурацию:

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

← На главную