Версия для печати темы (https://pro1c.org.ua/index.php?s=6a65863c1333aa7e92181c93d16eb4df&showtopic=56369)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ УФ. ПриАктивацииСтроки - несколько раз просчитывает код

Автор: Inkognito 15.01.20, 14:18

Перевожу код с обычных форм на управляемые. Бухгалтерия 2.0
Нужно: подсчитать суммы (БезНДС, НДС, СНДС) по выделенным строкам. В обычных формах все работает, типовая процедура табличной части: ПриАктивацииСтроки()
В управляемых формах все считает в первый раз корректно, но потом цикл срабатывает только по последней выделенной строке (дважды, хотя вызовов больше нигде нет). И суммы в результате - некорректны (по последней выделенной строке показывает в результате):

Код

ИтогПоВыделеннымСуммаБезНДС = 0; ИтогПоВыделеннымСуммаНДСДокумента = 0;  ИтогПоВыделеннымСуммаДокумента = 0; 
Вариант = Элементы.ТЧДокументы.ТекущиеДанные;
Если Вариант = Неопределено Тогда
    Возврат;
КонецЕсли;
Для Каждого Строка Из Элементы.ТЧДокументы.ВыделенныеСтроки Цикл
    НайденнаяСтрока = Элементы.ТЧДокументы.ДанныеСтроки(Строка);
    Сообщить("До: " + ИтогПоВыделеннымСуммаБезНДС);    
    ИтогПоВыделеннымСуммаБезНДС = ИтогПоВыделеннымСуммаБезНДС + Формат(НайденнаяСтрока.СуммаБезНДС, "ЧЦ=10; ЧДЦ=2; ЧН=0,00");  
    ИтогПоВыделеннымСуммаНДСДокумента = ИтогПоВыделеннымСуммаНДСДокумента + ?(ЗначениеЗаполнено(НайденнаяСтрока.СуммаНДСДокумента), Формат(НайденнаяСтрока.СуммаНДСДокумента, "ЧЦ=10; ЧДЦ=2; ЧН=0,00"), 0);
    ИтогПоВыделеннымСуммаДокумента = ИтогПоВыделеннымСуммаДокумента + Формат(НайденнаяСтрока.СуммаДокумента, "ЧЦ=10; ЧДЦ=2; ЧН=0,00");
    Сообщить("После: " + ИтогПоВыделеннымСуммаБезНДС);
КонецЦикла;
Сообщить("------------------");


В результате почему-то происходит три вызова, где первый - правильный, а остальные непонятно откуда и зачем берутся:
Результат
До: 0
После: 833,33
До: 833,33
После: 1 833,33
До: 1 833,33
После: 2 477,33 //прекрасно, то что нужно
------------------// Зачем считает непонятно что?
До: 0
После: 644
------------------// Зачем считает непонятно что?
До: 0
После: 644
------------------


Вопрос: как корректно просчитать суммы по выделенным строкам?


Автор: fly 15.01.20, 16:50

Inkognito @ Сегодня, 14:18 * ,

по сути кож должен сработать.
проверьте, может есть "связь по типу" у Элементов каких то - там так же участвовать может событие "При активации строки"

Автор: daveal 17.01.20, 14:07

Возможно из-за того что дергается сервер (ЗначениеЗаполнено). С явным вызовом серверного метода так и было, здесь нужно проверить.
В таких случаях обычно в событии вызывают обработчик ожидания через 0.1 секунды для вызова кода:

Если Элементы.Список.ВыделенныеСтроки.Количество() = 1 Тогда

ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиСписка",0.1,Истина);

КонецЕсли;


Попробуйте точку останова поставить ПриАктивизацииСтроки и пройтись по шагам, в какой момент происходит второй вызов?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua