В типовой конфигурации «1С:Управление торговлей 10.3» часто возникает задача зафиксировать особые стоимостные условия для конкретных покупателей. Проблема заключается в том, что стандартный механизм типов цен ориентирован на группы товаров, а не на персонализацию под клиента. Если создавать отдельный тип цен для каждого контрагента, справочник быстро станет неуправляемым. Рассмотрим основные способы решения этой задачи: от штатных инструментов до разработки собственного механизма с учетом фактора времени.
Проанализируем наиболее подходящий штатный механизм, который часто упускают из виду. В конфигурации УТ 10.3 существует документ УсловияПоставокПоДоговорамКонтрагентов. Он предназначен именно для того, чтобы зафиксировать индивидуальные цены для конкретного контрагента в рамках его договора.
Разберем, как это работает:
Важно понимать приоритет работы системы: при заполнении документа ЗаказПокупателя или РеализацияТоваровУслуг система сначала обращается к этому регистру. Если для пары «Контрагент + Номенклатура» найдена запись на дату документа, цена подставится автоматически, игнорируя тип цен, указанный в договоре. Это решает проблему «зависимости от времени» без внесения изменений в код.
Если индивидуальных цен не так много или они строятся как процентная наценка от базового прайса, рассмотрим вариант с расчетными типами цен. Выясним, как правильно организовать структуру данных:
В справочнике ТипыЦенНоменклатуры мы можем создать тип цены, например, «Цена для ООО Вектор». Однако, чтобы не запутаться, рекомендуется использовать механизм расчетных цен. Выберем в поле «Способ расчета» значение «По процентной наценке на базовый тип». В качестве базового типа укажем «Оптовую цену».
После этого в карточке ДоговорыКонтрагентов на закладке «Дополнительно» установим созданный тип цен. При создании нового заказа, как только вы выберете контрагента и договор, система автоматически подтянет этот тип цен. Если цены на базовый тип изменятся (документом УстановкаЦенНоменклатуры), индивидуальные цены пересчитаются автоматически по заданному проценту.
Рассмотрим ситуацию, когда цена для контрагента — это не фиксированная сумма, а отклонение от общего прайса. В УТ 10.3 механизм скидок является очень гибким инструментом. Разберем шаги настройки:
УстановкаСкидокНоменклатуры.В этом случае в документе продажи будет фигурировать базовая «Оптовая цена», но итоговая стоимость будет уменьшена на сумму скидки. Это удобно для управленческого анализа, так как мы всегда видим разницу между прайсом и ценой продажи клиенту.
Если стандартные способы не подходят и вы решили создать собственный регистр сведений (как планировал автор темы), проанализируем, как реализовать «зависимость от времени». Главная ошибка начинающих разработчиков — создание непериодического регистра.
Для корректной работы нам необходимо:
ИндивидуальныеЦеныПокупателей.Контрагент (тип СправочникСсылка.Контрагенты) и Номенклатура (тип СправочникСсылка.Номенклатура).Цена (тип Число).Теперь выясним, как получить актуальную цену на дату документа в коде 1С. Для этого используется метод СрезПоследних. Рассмотрим пример кода, который можно разместить в модуле формы документа ЗаказПокупателя в обработчике события НоменклатураПриИзменении:
// Функция получения цены из нашего регистра
Функция ПолучитьИндивидуальнуюЦену(АктуальнаяДата, ВыбранныйКонтрагент, ВыбраннаяНоменклатура) Экспорт
Отбор = Новый Структура;
Отбор.Вставить("Контрагент", ВыбранныйКонтрагент);
Отбор.Вставить("Номенклатура", ВыбраннаяНоменклатура);
// Получаем последнюю запись на указанную дату
ПоследниеЦены = РегистрыСведений.ИндивидуальныеЦеныПокупателей.СрезПоследних(АктуальнаяДата, Отбор);
Если ПоследниеЦены.Количество() > 0 Тогда
Возврат ПоследниеЦены[0].Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Проанализируем этот код: использование СрезПоследних позволяет системе автоматически находить ту запись, которая была актуальна на момент формирования заказа, даже если цены менялись каждую неделю. Это и есть решение проблемы «зависимости от времени».
Рассмотрим частую проблему, упомянутую в сообщении 9: документ «Установка цен номенклатуры контрагентов» проведен, но цена в заказе не меняется. Выясним причины:
УстановкаЦенНоменклатурыКонтрагентов чаще всего используется для регистрации цен поставщиков (закупочных цен) или цен конкурентов. Он не связан напрямую с алгоритмом заполнения цен продажи в заказах покупателей. Для продаж используйте документ «Условия поставок», описанный в Способе 1.Подводя итог, отметим, что для большинства задач в УТ 10.3 достаточно штатного функционала Условия поставок по договорам контрагентов. К программированию собственного регистра стоит прибегать только в случае, если требуется специфическая бизнес-логика, не предусмотренная разработчиками 1С.