В типовой конфигурации 1С:Управление торговлей 10.3 (УТ 10.3) архитектура ценообразования построена таким образом, что цена фиксируется для комбинации «Номенклатура + Тип цен + Характеристика». По умолчанию в системе отсутствует измерение Склад в основном регистре цен. Это создает сложности, когда из-за транспортных расходов или региональных особенностей товар на одном складе должен продаваться дороже, чем на другом. Рассмотрим подробнее, как решить задачу автоматической наценки при перемещении товаров между складами.
Если вы не хотите вносить изменения в программный код, можно воспользоваться механизмом характеристик. Мы можем создать характеристики, которые будут соответствовать «ценовым зонам» или конкретным складам. Например, характеристика «Склад 1 (базовая)» и «Склад 2 (с наценкой 10%)».
Проанализируем шаги реализации этого метода:
Склада 1 на Склад 2 будем использовать документ Комплектация номенклатуры или просто Перемещение товаров, где в качестве получателя укажем ту же номенклатуру, но с другой характеристикой.Установка цен номенклатуры.Важный момент: этот способ значительно увеличивает объем справочника характеристик и может усложнить складской учет (остатки будут висеть на разных характеристиках), зато он полностью соответствует типовой логике 1С.
Поскольку автор вопроса указал, что конфигурация «вскрыта» (доступна для редактирования), наиболее правильным техническим решением будет модификация структуры данных. Мы можем добавить измерение Склад непосредственно в регистр сведений ЦеныНоменклатуры.
Разберем алгоритм действий программиста:
ЦеныНоменклатуры новое измерение Склад (тип СправочникСсылка.Склады). Установим свойство «Неотрицательное» и разрешим пустое значение (для общих цен).Ценообразование функцию ПолучитьЦенуНоменклатуры. Ее нужно переписать так, чтобы при поиске цены система сначала искала запись с заполненным складом, а если она не найдена — брала общую цену (где склад пустой).Пример модифицированного запроса для получения цены может выглядеть так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Цена КАК Цена,
| Цены.Валюта КАК Валюта
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период,
| Номенклатура = &Номенклатура
| И ТипЦен = &ТипЦен
| И (Склад = &Склад ИЛИ Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))) КАК Цены
|УПОРЯДОЧИТЬ ПО
| Цены.Склад УБЫВАЮЩАЯ";
// Сначала подтянутся записи с заполненным складом
В УТ 10.3 уже реализован механизм учета цен в разрезе складов, но только для розничных складов. Если перевести Склад 2 в статус «Розничный», система начнет использовать регистр ЦеныНоменклатурыВРознице. В этом регистре измерение Склад присутствует штатно.
Как это работает в процессе перемещения:
Перемещение товаров на розничный склад, система предложит (или обяжет, в зависимости от настроек) сделать Переоценку товаров в рознице.Склада 2.Складе 1 цена останется прежней.Чтобы пользователю не приходилось вручную высчитывать наценку, мы можем автоматизировать процесс создания цен на основании Перемещения товаров. Рассмотрим, как это реализовать программно:
Перемещение товаров добавим реквизит ПроцентНаценки.Установка цен номенклатуры.ЦенаНаСкладе2 = ЦенаНаСкладе1 * (1 + ПроцентНаценки / 100).Проанализируем пример кода для заполнения нового документа установки цен:
НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
НоваяСтрока.ТипЦен = ТипЦенДляСклада2;
// Получаем текущую цену по базовому типу цен
БазоваяЦена = Ценообразование.ПолучитьЦенуНоменклатуры(СтрокаТЧ.Номенклатура, ТипЦенБазовый);
НоваяСтрока.Цена = БазоваяЦена * (1 + ЭтотОбъект.ПроцентНаценки / 100);
КонецЦикла;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Если менять саму цену в базе нежелательно, можно использовать функционал Автоматических скидок. В 1С наценка — это скидка с отрицательным значением.
Выясним, как это настроить:
СкидкиНаценки.Склад 2.Склада 2 в документе Реализация товаров и услуг и нажатии кнопки «Рассчитать скидки», цена товара будет увеличиваться на нужный процент.Выбор метода зависит от того, насколько глубоко вы готовы менять конфигурацию:
Склад в регистр цен и доработать функцию ПолучитьЦенуНоменклатуры.Помните, что при изменении структуры регистра цен потребуется также обновить все отчеты, которые выводят прайс-листы, чтобы они учитывали новый параметр склада.