Как сделать, что бы процедура "ЦенаПриИзменении" отработала для всех строк, а не для одной?

1. I_train 26.12.21 19:31 Сейчас в теме
У меня есть расширение, с помощью которого на форме документа я указываю тип цены (закупочная, оптовая и тд) и номенклатура в табличной части этого документа заполняется ценами в соответствии с этим типом цены (код ниже), цены все подставляются правильно. Но вот в чем проблема, ведь в типовой конфигурации есть определенные процедуры, которые отрабатывают при изменении цены, и эти процедуры отрабатывают у меня только на той строчке на которую я навелся, на других ничего не меняется, укажите мне, пожалуйста, в чем я не прав, возможно ли пересчитать сразу все строчки?

&НаКлиенте
Процедура фот_фот_СебестоимостьПриИзмененииПосле(Элемент)
	ЦеныНоменклатуры = фот_фот_СебестоимостьПриИзмененииПослеНаСервере();
	Индекс = 0;
	Для каждого СтрокаТаблицы Из Объект.Запасы Цикл
		СтрокаМассиваСЦенами = ЦеныНоменклатуры.Получить(Индекс);
		СтрокаТаблицы.Цена = СтрокаМассиваСЦенами.Цена;
		Индекс = Индекс + 1; 

		// Типовые процедуры
		РассчитатьСуммуВСтрокеТабличнойЧасти();
		ОбновитьИтогиКлиент();
		ПересчитатьПлатежныйКалендарь();
		ОчиститьКалькуляцию();
		ВключитьИндикаторНеобходимостиПересчетаСтоимостиДоставки();
	
	КонецЦикла;
КонецПроцедуры

&НаСервере
Функция фот_фот_СебестоимостьПриИзмененииПослеНаСервере()
    ТаблицаЗапасы=Объект.Запасы.Выгрузить(,"Номенклатура");
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТабличнаяЧастьДокумента.Номенклатура КАК Номенклатура
	|ПОМЕСТИТЬ НоменклатураДокумента
	|ИЗ
	|	&ТабличнаяЧастьДокумента КАК ТабличнаяЧастьДокумента
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	НоменклатураДокумента.Номенклатура КАК Номенклатура,
	|	ЦеныНоменклатурыСрезПоследних.ВидЦен КАК ВидЦен,
	|	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
	|ИЗ
	|	НоменклатураДокумента КАК НоменклатураДокумента
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
	|				&ДатаДокумента,
	|				Номенклатура В
	|						(ВЫБРАТЬ
	|							НоменклатураДокумента.Номенклатура КАК Номенклатура
	|						ИЗ
	|							НоменклатураДокумента КАК НоменклатураДокумента)
	|					И ВидЦен = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
	|		ПО НоменклатураДокумента.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

	Запрос.УстановитьПараметр("ТабличнаяЧастьДокумента", ТаблицаЗапасы);
	Запрос.УстановитьПараметр("ДатаДокумента", ДатаДокумента);
	Запрос.УстановитьПараметр("ВидЦены", Объект.фот_ВидЦены);
	
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	МассивСРезультатомЗапроса = Новый Массив;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		СтрокаРезультатЗапроса = Новый Структура;
		 СтрокаРезультатЗапроса.Вставить("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
		 СтрокаРезультатЗапроса.Вставить("ВидЦен", ВыборкаДетальныеЗаписи.ВидЦен);
		 СтрокаРезультатЗапроса.Вставить("Цена", ВыборкаДетальныеЗаписи.Цена);
		 МассивСРезультатомЗапроса.Добавить(СтрокаРезультатЗапроса);
	 КонецЦикла;
	 
	 Возврат МассивСРезультатомЗапроса; 
	
КонецФункции
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. МимохожийОднако 141 27.12.21 07:40 Сейчас в теме
Можно в процедуру заполнения таблицы с ценами добавить условие с проверкой количества строк. Если количество строк больше нуля, то заполнять как обычно. Если есть хоть одна строка, то не заполнять строки, по каждой строке заполнять цену.
Т.е вместо блока //типовые процедуры написать свою для изменения цен в каждой строке
Массив в ЦеныНоменклатуры перед этим можно преобразовать в таблицу значений, чтобы удобнее искать для каждой номенклатуры свой набор цен
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот