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

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

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

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

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

    Запрос.УстановитьПараметр("ТабличнаяЧастьДокумента", ТаблицаЗапасы);
    Запрос.УстановитьПараметр("ДатаДокумента", ДатаДокумента);
    Запрос.УстановитьПараметр("ВидЦены", Объект.фот_ВидЦены);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    МассивСРезультатомЗапроса = Новый Массив;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СтрокаРезультатЗапроса = Новый Структура;
         СтрокаРезультатЗапроса.Вставить("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
         СтрокаРезультатЗапроса.Вставить("ВидЦен", ВыборкаДетальныеЗаписи.ВидЦен);
         СтрокаРезультатЗапроса.Вставить("Цена", ВыборкаДетальныеЗаписи.Цена);
         МассивСРезультатомЗапроса.Добавить(СтрокаРезультатЗапроса);
     КонецЦикла;
     
     Возврат МассивСРезультатомЗапроса; 
    
КонецФункции

Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. МимохожийОднако 142 27.12.21 07:40 Сейчас в теме
Можно в процедуру заполнения таблицы с ценами добавить условие с проверкой количества строк. Если количество строк больше нуля, то заполнять как обычно. Если есть хоть одна строка, то не заполнять строки, по каждой строке заполнять цену.
Т.е вместо блока //типовые процедуры написать свою для изменения цен в каждой строке
Массив в ЦеныНоменклатуры перед этим можно преобразовать в таблицу значений, чтобы удобнее искать для каждой номенклатуры свой набор цен
Оставьте свое сообщение

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