УФ, Внешняя Обработка для конфигурации БП 3.0.
Исходная задача: По заданным условиям на форме создаются ПРОГРАММНО страницы, на каждой странице табличная часть, в табличной части несколько колонок, одна из них СуммаПлатежа, в подвале этой колонки ИТОГ. Пользователь будет менять суммы платежей в колонке чтобы подогнать к определенной итоговой сумме. Далее эти табличные части будут передаваться на подготовленные Макеты на печать.
Код рабочий, всё ок, тут вопросов нет.
Проблема: НЕ пересчитывается ИТОГ по колонке СуммаПлатежа если в ячейки пользователь меняет цифру:
НоваяКолонка.УстановитьДействие("ПриИзменении", "СуммаПлатежаПриИзменении").
Не понимаю как этот метод должен отрабатывать, нужно ли создать процедуру с директивой на клиенте и как это увязать.
*Напоминаю что это программно созданные реквизиты формы (страницы, табличные части, колонки табличной части и подвал табличной части).
Весь код процедуры по ссылке:
Часть кода:
&НаСервере
Процедура СформироватьНаСервере()
//...
//Создаем ТабличнуюЧасть на выше созданной странице
НоваяТаблица = Элементы.Добавить("Стр"+ИмяСтраницы,Тип("ТаблицаФормы"),НоваяСтраница);
НоваяТаблица.ПутьКДанным = "НовТаб";
НоваяТаблица.Отображение = ОтображениеТаблицы.Список;
НоваяТаблица.ТолькоПросмотр = Ложь;
НоваяТаблица.Подвал = Истина;
НоваяТаблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
//Прописываем пути к Колонкам Новой Таблицы
//1.Ваучер
НоваяКолонка = Элементы.Добавить("Ваучер"+ИмяСтраницы, Тип("ПолеФормы"), НоваяТаблица);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = "НовТаб.Ваучер";
НоваяКолонка.Заголовок = "Ваучер";
//2.СуммаПлатежа
НоваяКолонка = Элементы.Добавить("СуммаПлатежа"+ИмяСтраницы, Тип("ПолеФормы"), НоваяТаблица);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = "НовТаб.СуммаПлатежа";
НоваяКолонка.Заголовок = "Сумма платежа";
//ИмяДляДействия = НоваяКолонка.Имя;
//...
//Добавляем подвал ТабличнойЧасти
ДобавляемыеРеквизиты = Новый Массив;
РеквизитПодвала = Новый РеквизитФормы("Итого"+ИмяСтраницы, Новый ОписаниеТипов("Число"));
ДобавляемыеРеквизиты.Добавить(РеквизитПодвала);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
НоваяКолонка.ПутьКДаннымПодвала = "Итого"+ИмяСтраницы+"";
Если ТЗДанныеПроформы.Количество()>0 Тогда
ОтборПоПроформе = Новый Структура;
ОтборПоПроформе.Вставить("ДокументПроформы", Строчка.ДокументПроформы);
НоваяТаблицаСОтбором = ТЗДанныеПроформы.НайтиСтроки(ОтборПоПроформе);
ВсегоСуммаПлатежей = 0;
Для каждого СтрокаМассива из НоваяТаблицаСОтбором Цикл
НовСтрока = НовТаб.Добавить();
НовСтрока.Ваучер = СтрокаМассива.Ваучер;
НовСтрока.СуммаПлатежа = СтрокаМассива.СуммаПлатежа;
НовСтрока.ВалютаПлатежа = СтрокаМассива.ВалютаПлатежа;
НовСтрока.ДокументПроформы = СтрокаМассива.ДокументПроформы;
ВсегоСуммаПлатежей = ВсегоСуммаПлатежей + СтрокаМассива.СуммаПлатежа; //Цифра для ИТОГа по Колонке СуммаПлатежа
КонецЦикла;
КонецЕсли;
Элементы["СуммаПлатежа"+ИмяСтраницы+""].ТекстПодвала = ВсегоСуммаПлатежей; //Выводим в ПОДВАЛ Сумму по колонке СуммаПлатежа
НоваяКолонка.УстановитьДействие("ПриИзменении", "СуммаПлатежаПриИзменении"); //вот тут загвоздка Как обновить сумму в подвале если в строках колонки СуммаПлатежа изменили цифру??
КонецЦикла;
КонецПроцедуры
Я сама смогла. Антон *Дед* Беляков, если вдруг однажды будешь это читать, то большое спасибо тебе за точную наводку и по делу, без праздных нравоучений :)
Решение: