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

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

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

Способ 1. Использование документа «Условия поставок по договорам контрагентов»

Проанализируем наиболее подходящий штатный механизм, который часто упускают из виду. В конфигурации УТ 10.3 существует документ УсловияПоставокПоДоговорамКонтрагентов. Он предназначен именно для того, чтобы зафиксировать индивидуальные цены для конкретного контрагента в рамках его договора.

Разберем, как это работает:

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

Важно понимать приоритет работы системы: при заполнении документа ЗаказПокупателя или РеализацияТоваровУслуг система сначала обращается к этому регистру. Если для пары «Контрагент + Номенклатура» найдена запись на дату документа, цена подставится автоматически, игнорируя тип цен, указанный в договоре. Это решает проблему «зависимости от времени» без внесения изменений в код.

Способ 2. Индивидуальные типы цен и иерархия договоров

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

В справочнике ТипыЦенНоменклатуры мы можем создать тип цены, например, «Цена для ООО Вектор». Однако, чтобы не запутаться, рекомендуется использовать механизм расчетных цен. Выберем в поле «Способ расчета» значение «По процентной наценке на базовый тип». В качестве базового типа укажем «Оптовую цену».

После этого в карточке ДоговорыКонтрагентов на закладке «Дополнительно» установим созданный тип цен. При создании нового заказа, как только вы выберете контрагента и договор, система автоматически подтянет этот тип цен. Если цены на базовый тип изменятся (документом УстановкаЦенНоменклатуры), индивидуальные цены пересчитаются автоматически по заданному проценту.

Способ 3. Автоматические скидки как альтернатива ценам

Рассмотрим ситуацию, когда цена для контрагента — это не фиксированная сумма, а отклонение от общего прайса. В УТ 10.3 механизм скидок является очень гибким инструментом. Разберем шаги настройки:

  1. Создадим документ УстановкаСкидокНоменклатуры.
  2. В качестве условия выберем «По контрагенту» или «По договору».
  3. Укажем процент скидки.

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

Способ 4. Программная доработка: создание периодического регистра сведений

Если стандартные способы не подходят и вы решили создать собственный регистр сведений (как планировал автор темы), проанализируем, как реализовать «зависимость от времени». Главная ошибка начинающих разработчиков — создание непериодического регистра.

Для корректной работы нам необходимо:

  1. Создать регистр сведений, назовем его ИндивидуальныеЦеныПокупателей.
  2. В свойствах регистра установить свойство Периодичность (например, «В пределах дня»).
  3. Добавить измерения: Контрагент (тип СправочникСсылка.Контрагенты) и Номенклатура (тип СправочникСсылка.Номенклатура).
  4. Добавить ресурс: Цена (тип Число).

Теперь выясним, как получить актуальную цену на дату документа в коде 1С. Для этого используется метод СрезПоследних. Рассмотрим пример кода, который можно разместить в модуле формы документа ЗаказПокупателя в обработчике события НоменклатураПриИзменении:


// Функция получения цены из нашего регистра
Функция ПолучитьИндивидуальнуюЦену(АктуальнаяДата, ВыбранныйКонтрагент, ВыбраннаяНоменклатура) Экспорт
    Отбор = Новый Структура;
    Отбор.Вставить("Контрагент", ВыбранныйКонтрагент);
    Отбор.Вставить("Номенклатура", ВыбраннаяНоменклатура);
    
    // Получаем последнюю запись на указанную дату
    ПоследниеЦены = РегистрыСведений.ИндивидуальныеЦеныПокупателей.СрезПоследних(АктуальнаяДата, Отбор);
    
    Если ПоследниеЦены.Количество() > 0 Тогда
        Возврат ПоследниеЦены[0].Цена;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции

Проанализируем этот код: использование СрезПоследних позволяет системе автоматически находить ту запись, которая была актуальна на момент формирования заказа, даже если цены менялись каждую неделю. Это и есть решение проблемы «зависимости от времени».

Почему цена может не заполняться автоматически?

Рассмотрим частую проблему, упомянутую в сообщении 9: документ «Установка цен номенклатуры контрагентов» проведен, но цена в заказе не меняется. Выясним причины:

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

Подводя итог, отметим, что для большинства задач в УТ 10.3 достаточно штатного функционала Условия поставок по договорам контрагентов. К программированию собственного регистра стоит прибегать только в случае, если требуется специфическая бизнес-логика, не предусмотренная разработчиками 1С.

← На главную