Имя: Пароль:
1C
1С v8
УТ 10.3 Не обновляются данные на форме (только у не проведенных документов)
0 Good_Smile
 
19.08.16
16:31
в документ Заказ покупателя в тч Товары был добавлен реквизит ДопПроцентСкидкиНаценки - должен пересчитывать Сумму, но у не проведенных документов в отладке Сумма меняется, а на форме нет

Процедура ТоварыДопПроцентСкидкиНаценкиПриИзменении(Элемент)
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    ПересчитатьСуммуСУчетомДополнительнойСкидки(СтрокаТабличнойЧасти,ЭтотОбъект,Истина);
    Обновить();
КонецПроцедуры

Процедура ПересчитатьСуммуСУчетомДополнительнойСкидки(Строка,ЭтотОбъект,ПересчитатьСтроку = Ложь) Экспорт
    
    Если ПересчитатьСтроку Тогда
        ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(Строка, ЭтотОбъект);
    КонецЕсли;
    
    Если Строка.ПроцентСкидкиНаценки = 0 Тогда
        Строка.ДопПроцентСкидкиНаценки = 0;//Обнулим значение доп скидки, если ручная скидка не назначена
        ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(Строка, ЭтотОбъект);
        Возврат;
    КонецЕсли;    
    
    Строка.Сумма =  Строка.Сумма - Строка.Сумма*Строка.ДопПроцентСкидкиНаценки/100;
    
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(Строка, ЭтотОбъект);
    
КонецПроцедуры    

Подскажите, в чём может быть подвох?
1 Good_Smile
 
19.08.16
16:32
у проведенного документа всё пересчитывается корректно
2 Good_Smile
 
19.08.16
17:25
Ни у кого нет предположений?

кеш чистила, изменила стандартную процедуру

Процедура РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, СпособРасчета = Неопределено) Экспорт

    ИмяТабличнойЧасти = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);

    МетаданныеДокумента = ДокументОбъект.Метаданные();

    Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    СуммаСкидки = 0;

    Если (СпособРасчета = Неопределено)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.СУчетомВсехСкидок)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки) Тогда
        Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок", МетаданныеДокумента,
                                             ИмяТабличнойЧасти) Тогда
            СуммаСкидки = Сумма * СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок / 100;
        КонецЕсли;

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

    СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;

КонецПроцедуры // РассчитатьСуммуТабЧасти()

не помогло, ещё данный алгоритм корректно работает в РТиУ
3 Good_Smile
 
23.08.16
13:21
подниму что ли.. делать задачу надо.... ооочень
4 Good_Smile
 
26.08.16
13:59
апну
5 John83
 
26.08.16
14:30
чего ап, пройтись отладчиком несколько минут займет
PS помнится был прикол с заказом, можно вручную поменять сумму если ее нужно подогнать, но работает только на непроведенных документах
6 Good_Smile
 
26.08.16
14:43
(5) в конце процедуры ТоварыДопПроцентСкидкиНаценкиПриИзменении() сумма рассчитана правильно, нажимаю F11 - отладка заканчивается, на форме отображается старое значение суммы

непонятна данная фраза "можно вручную поменять сумму если ее нужно подогнать", пожалуйста можно поподробнее
7 youalex
 
26.08.16
15:00
(6) Замер производительности включить перед "нажимаю F11 - отладка заканчивается". Может там еще какой код выполняется (маловероятно, но вдруг.)
8 Good_Smile
 
26.08.16
15:31
(7) спасибо большое, нашла процедуру ТоварыПриОкончанииРедактирования() (внезапно, с первого взгляда не разгледела)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший