Небольшие костыли для редактора цен УНФ

У клиента нужно было скопировать цены из одной колонки в другие колонки цен. Или расчитать все цены по закупочной.

Но штатный функционал изменяет либо только одну колонку, либо все колонки.

Получается, если выбрать все колонки, сначала на этот процент меняется закупочная цена, а потом уже от нее меняются цены по колонкам.

Колонок много, по одной не получится менять.

Была сделана доработка с двумя кнопками:

Код изменений в модуле формы:

			  
			  
&НаКлиенте
Процедура дор_дор_СкопироватьЦеныПосле(Команда)
	дор_ОбработатьЦены("СкопироватьЦены");
КонецПроцедуры

&НаКлиенте
Процедура дор_ПересчитатьЦеныПосле(Команда)
	дор_ОбработатьЦены("ПересчитатьПоПроценту");
КонецПроцедуры    

&НаКлиенте
Процедура дор_ОбработатьЦены(ВидОбработки) 
	
	ИдентификаторБазовойЦены = "Закупочная";    
	ИмяТабличнойЧасти = "ТЧНоменклатура";
	ИдентификаторыВидаЦен = дор_ПолучитьВидыЦен(ИмяТабличнойЧасти);  
	
	
	Если ВидОбработки = "СкопироватьЦены" Тогда
		ИмяТекущегоЭлемента = Элементы[ИмяТабличнойЧасти].ТекущийЭлемент;
		Если ИмяТекущегоЭлемента <> Неопределено Тогда
			ИмяТекущегоЭлемента = ИмяТекущегоЭлемента.Имя;  
		КонецЕсли;
		Если Лев(ИмяТекущегоЭлемента, СтрДлина(ИмяТабличнойЧасти)) <> ИмяТабличнойЧасти
			 ИЛИ Найти(ИмяТекущегоЭлемента, "_ЦенаНовая") = 0 
			Тогда
			ПоказатьПредупреждение(, "Установите курсор в ячейку копируемой цены!");
			Возврат;
		КонецЕсли;   
		
		ИдентификаторКопируемойЦены = СтрЗаменить(СтрЗаменить(ИмяТекущегоЭлемента, ИмяТабличнойЧасти, ""), "_ЦенаНовая", "");
		
	Конецесли;
	
	
	Для Каждого ВыделеннаяСтрока ИЗ Элементы.ТЧНоменклатура.ВыделенныеСтроки Цикл   
		
		ДанныеТекущейСтроки = ТЧНоменклатура.НайтиПоИдентификатору(ВыделеннаяСтрока);  
		БазоваяЦена = ДанныеТекущейСтроки["ТЧНоменклатура" + ИдентификаторБазовойЦены + "_ЦенаНовая"];
		
		Для Каждого ИдентификаторВидаЦен ИЗ ИдентификаторыВидаЦен Цикл                       

			//Пропускаем базовую
			Если ИдентификаторВидаЦен = ИдентификаторБазовойЦены Тогда Продолжить; Конецесли;
			
			Если ВидОбработки = "СкопироватьЦены" Тогда                                                   

				//Пропускаем копируемую
				Если ИдентификаторВидаЦен = ИдентификаторКопируемойЦены Тогда Продолжить; Конецесли;

				ДанныеТекущейСтроки["ТЧНоменклатура" + ИдентификаторВидаЦен + "_ЦенаНовая"] = ДанныеТекущейСтроки["ТЧНоменклатура" + ИдентификаторКопируемойЦены + "_ЦенаНовая"];
				ДанныеТекущейСтроки["ТЧНоменклатура" + ИдентификаторВидаЦен + "_ЦенуИзменили"] = Истина;
				ЭтаФорма.Модифицированность = истина;
				
			ИначеЕсли ВидОбработки = "ПересчитатьПоПроценту" Тогда
				
				ДанныеТекущейСтроки["ТЧНоменклатура" + ИдентификаторВидаЦен + "_ЦенаНовая"] = Окр(БазоваяЦена * (100 + дор_ПроцентНаценки) / 100, 0);
				ДанныеТекущейСтроки["ТЧНоменклатура" + ИдентификаторВидаЦен + "_ЦенуИзменили"] = Истина;
				ЭтаФорма.Модифицированность = истина;
				
			КонецЕсли;                   
			
			//ОтразитьИзменениеНовойЦены(ДанныеТекущейСтроки, ИдентификаторВидаЦен, "ТЧНоменклатура"); 
			ПересчитатьДельтуВПолеНаКлиенте(ДанныеТекущейСтроки, ИмяТабличнойЧасти + ИдентификаторВидаЦен); 
			//Если Элементы.Найти("ТЧНоменклатура" + ИдентификаторВидаЦен + "_ЦенаДо") <> Неопределено Тогда
			//	ПересчитатьПроцентИзменения(ДанныеТекущейСтроки, ИдентификаторВидаЦен);                          
			//КонецЕсли;
			//ПересчитатьПроцентНаценки(ДанныеТекущейСтроки, ИдентификаторВидаЦен, ИмяТабличнойЧасти);
		КонецЦикла;
		
	КонецЦикла;  
	// Вставить содержимое обработчика.
КонецПроцедуры

		
Функция дор_ПолучитьВидыЦен(ИмяТабличнойЧасти) Экспорт
	М = Новый Массив();  
	ТЗ = ТЧНоменклатура.Выгрузить();
	Для Каждого Колонка ИЗ ТЗ.Колонки Цикл
		Если Прав(Колонка.Имя, 10) = "_ЦенаНовая" Тогда  
			ИдентификаторВидаЦен = СтрЗаменить(СтрЗаменить(Колонка.Имя, ИмяТабличнойЧасти, ""), "_ЦенаНовая", "");
			М.Добавить(ИдентификаторВидаЦен);
		КонецЕсли;
	КонецЦикла; 
	Возврат М;
КонецФункции

Столкнулись с проблемой, что измененные цены не сохраняются в базу. В форме показывается все хорошо, но при записи и последующем открытии документа цены остаются старыми.

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

Кстати, 1С оказывает медвежью услугу, если не взводить флаг «Модифицированность», цены не перезаписываются:

Процент наценки и изменения цен не стал пересчитывать. Там были функции, но они работают с какой-то таблицей, где колонки не содержат префикса ТЧНоменклатура, разбираться не стал.

Среда: Розница 3.0.12.237 Объем: 2 час.