Каталог решений - Расширение формул видов цен для УНФ 3.0

Расширение формул видов цен для УНФ 3.0

Расширение формул видов цен для УНФ 3.0

В наличии

В УНФ 3.0 показатели для формулы расчёта динамических цен ограничены ценами номенклатуры и ценами контрагентов. В данном расширении предлагается решение, позволяющее подключить другие показатели. Конечно, для расчёта цены можно использовать произвольный запрос или расширение, но это не так прозрачно и наглядно для пользователя, да и в данном случае задача стоит модифицировать формулы.

Категория:

Описание

Опишу пошагово процесс разработки. Исправлений и добавлений потребуется внести совсем немного. 

Для редактирования формул исправим несколько методов. В модуле формы КонструктовФормул исправим метод ЗаполнитьДеревоОперандов для добавление своих показателей.

&НаСервере
&ИзменениеИКонтроль("ЗаполнитьДеревоОперандов")
Процедура ФВЦ_ЗаполнитьДеревоОперандов(ИсключитьСсылку, ЭтоФормированиеЦен, ВключаяЦеныНоменклатуры, ВключаяЦеныКонтрагентов)

	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ
	|	ВидыЦен.ИдентификаторФормул КАК Операнд,
	|	ПРЕДСТАВЛЕНИЕ(ВидыЦен.Ссылка) КАК Представление,
	|	ИСТИНА КАК ЭтоВидЦенНоменклатуры,
	|	0 КАК Картинка
	|ИЗ
	|	Справочник.ВидыЦен КАК ВидыЦен

----------------------------------------------------------------

----------------------------------------------------------------
	#Вставка
	НоваяГруппа = ДеревоРезультата.Строки.Вставить(0);
	НоваяГруппа.Картинка		= 1;
	НоваяГруппа.Представление	= НСтр("ru ='ДЛЯ РАСЧЁТА'");
	НоваяГруппа.ЭтоВидЦенНоменклатуры = Ложь;
	
	НоваяСтрока = НоваяГруппа.Строки.Добавить();
	НоваяСтрока.Картинка = 0;
	НоваяСтрока.Операнд = "Логистика";
	НоваяСтрока.Представление = "Логистика";
	НоваяСтрока.ЭтоВидЦенНоменклатуры = Ложь;
	
	НоваяСтрока = НоваяГруппа.Строки.Добавить();
	НоваяСтрока.Картинка = 0;
	НоваяСтрока.Операнд = "Наценка";
	НоваяСтрока.Представление = "Наценка";
	НоваяСтрока.ЭтоВидЦенНоменклатуры = Ложь;
	
	НоваяСтрока = НоваяГруппа.Строки.Добавить();
	НоваяСтрока.Картинка = 0;
	НоваяСтрока.Операнд = "Комиссия";
	НоваяСтрока.Представление = "Комиссия";
	НоваяСтрока.ЭтоВидЦенНоменклатуры = Ложь;
	
	НоваяСтрока = НоваяГруппа.Строки.Добавить();
	НоваяСтрока.Картинка = 0;
	НоваяСтрока.Операнд = "Налог";
	НоваяСтрока.Представление = "Налог";
	НоваяСтрока.ЭтоВидЦенНоменклатуры = Ложь;
	#КонецВставки
	
	ЗначениеВРеквизитФормы(ДеревоРезультата, "ДеревоОперандов");

КонецПроцедуры

 

Для хранения показателей добавим одноименные константы и общую форму для их редактирования.

Следующие исправления внесены в методы общего модуля ЦенообразованиеФормулыСервер, которые отвечают за проверку правильности формулы и за вычисление результата. 

Сохраненные значения показателей подставляются в формулу в методе ПодготовитьДанныеСтрокиКоллекции.


&ИзменениеИКонтроль("ПодготовитьДанныеСтрокиКоллекции")
Процедура ФВЦ_ПодготовитьДанныеСтрокиКоллекции(СоответствиеОперандов, СтрокаКоллекции, ТаблицаОперандов, РасчетныеДанные)

-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
		ИначеЕсли СтрокаОперанда.Операнд = "[ТекущееЗначение]" Тогда

			Значение 			= СтрокаКоллекции["ТекущееЗначение"];

			КлючЕдиницыИзмерения = "ЕдиницаИзмерения_ТекущееЗначение";
			ЕдиницаИзмерения	= СтрокаКоллекции.Номенклатура.ЕдиницаИзмерения;
		#Вставка
		ИначеЕсли СтрокаОперанда.Операнд = "[Логистика]" 
			Или СтрокаОперанда.Операнд = "[Наценка]" 
			Или СтрокаОперанда.Операнд = "[Комиссия]" 
			Или СтрокаОперанда.Операнд = "[Налог]" Тогда
			
			Значение = Константы["ФВЦ_"+СтрЗаменить(СтрЗаменить(СтрокаОперанда.Операнд, "[", ""), "]", "")].Получить();
			
			КлючЕдиницыИзмерения = "ЕдиницаИзмерения_Базовая";
			ЕдиницаИзмерения	= СтрокаКоллекции.Номенклатура.ЕдиницаИзмерения;
			
		#КонецВставки
		Иначе

			Значение 			= СтрокаОперанда.Значение;

	-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------

		СоответствиеОперандов.Вставить(СтрокаОперанда.Операнд, Значение);

	КонецЦикла;

КонецПроцедуры

Таким образом формула наполнена новыми показателями и готова к вычислению.

has been added to your cart:
Оформление заказа