Ценообразование

Материал из Окнософт
Перейти к: навигация, поиск

Цены в строках заказа

Плановая себестоимость, цена для клиента и цена внутренней продажи (последняя имеет смысл только при Холдинговой либо Дилерской схеме работы)
пересчитываются при изменении любых реквизитов строки табличной части Продукция документа Расчет по следующему алгоритму:

Общие вычисления
  • По реквизитам шапки документа + свойствам продукции текущей строки ищется запись регистра Маржинальные коэффициеты
  • Из найденной записи получаем Типы цен, по которым будут рассчитываться Плановая себестоимость, цена для клиента и цена внутренней продажи
Плановая себестоимость
  • Для каждой строки спецификации продукции
  • Если продукция не имеет спецификации или сумма плановой себестоимости по строкам спецификации = 0, предпринимается попытка получить цену плановой себестоимости по Номенклатуре продукции с учетом привязанных к ней Формул
Цена продажи для клиента
  • Если в текущей записи Маржинальных коэффициетов указан Тип цен продажи, делается попытка рассчитать стоимость продажи без учета плановой себестоимости - по Типу цен и Формуле
  • Если Тип цен продажи не указан или цена продукции не найдена в регистре, она определяется, как [Плановая себестоимость] * [Маржинальный коэффициент] (это самый распространенный вариант настроек)
  • Если для номенклатуры продукции в Расширении номенклатуры или в Маржинальных коэффициетах задана корректирующая формула, выполняется её код
  • Если в учетной политике включено использование Автоматических скидок по Условиям продаж или Дисконтным картам, выполняется код типовой конфигурации, корректирующий цену продажи по заложенному в типовую конфигурацию алгоритму
Цена внутренней продажи
  • Рассчитывается аналогично цене продажи для клиента, только Типы цен и Формула берутся из других полей и не используется подсистема автоматических скидок типовой конфигурации

Примеры фрагментов кода

Запрос для сценария цены продукции по прайсу с привязкой к размерам и цвету

Если ТипЦен = Парам["ТипыЦен"].ТипЦенПрайс Тогда
	Запрос = Новый Запрос("ВЫБРАТЬ ЦеныСрезПоследних.Цена
                      |ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                      |			&Период, ТипЦен = &ТипЦен И Номенклатура = &Номенклатура) КАК ЦеныСрезПоследних
                      |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
                      |			ХарактеристикаЦены.Ссылка КАК Ссылка
                      |		ИЗ
                      |			Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикаЦены
                      |		ГДЕ
                      |			ХарактеристикаЦены.Владелец = &Номенклатура
                      |			И ХарактеристикаЦены.Расчет = ЗНАЧЕНИЕ(Документ.итРасчет.ПустаяСсылка)
                      |			И ХарактеристикаЦены.X = &Длина
                      |			И ХарактеристикаЦены.Y = &Высота
                      |			И ХарактеристикаЦены.Цвет = &Цвет) КАК ХарактеристикаЦены
                      |		ПО ЦеныСрезПоследних.ХарактеристикаНоменклатуры = ХарактеристикаЦены.Ссылка");
	Запрос.УстановитьПараметр("Период", Парам["Дата"]);
	Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	ТекСтр = Парам["тзПродукция"][Парам["НомерСтроки"]-1];
	Запрос.УстановитьПараметр("Длина", Парам["Длина"]);
	Запрос.УстановитьПараметр("Высота", Парам["Высота"]);
	Запрос.УстановитьПараметр("Цвет", Парам["Цвет"]);			
	
	Рез = Запрос.Выполнить().Выбрать();
	Если Рез.Следующий() Тогда 
		Стр.Цена = Рез.Цена;
	Иначе 
		Стр.Цена = 0;
	КонецЕсли;
КонецЕсли;

см.
Кмарж в спецификации