Вывод информации на УФ (поле, декорация)

1. Lexx32 20 29.04.19 11:04 Сейчас в теме
Всем привет, подскажите новичку..
Есть УФ внешней обработки, есть Таблица значений ТЗ, на форме и нужно вывести поле или декорацию на форму о сумме по данной ТЗ. Создал реквизит глСум - число, и на форму вешаю элемент поле стСумма путь к даннм глСум в процедуре ТЗПриОкончанииРедактирования, сделал прямой пересчет суммы (т.к. ТЗ.ИТог("Сум")) не работает..
&НаКлиенте
Процедура ТЗПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	ИдентификаторСтроки = Элементы.ТЗ.ТекущаяСтрока; // Получаем идентификатор в Таблице
	СтрокаТЗ = ТЗ.НайтиПоИдентификатору(ИдентификаторСтроки);
	СтрокаТЗ.Сум = СтрокаТЗ.Кол * СтрокаТЗ.Цен;
	СМ=0;
	Для Каждого ТекСтрока Из ТЗ Цикл
		СМ = Число(СМ) + Число(ТекСтрока.Сум);
	КонецЦикла;
	//Сообщить(СМ);
	Элементы.стСумма.Заголовок=СМ;
	ПересчетНаСервере();
КонецПроцедуры

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

Пробовал и на клиенте и на сервере - никак не хочет выводить данные на форму, большая просьба подскажите в чем причина?? Как исправить??
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. lefthander 29.04.19 11:31 Сейчас в теме
(1)Что бы пересчитать на сервере итоги по таблице перенесите ее с помощью РеквизитФормыВЗначение, пересчитайте а потом верните ЗначениеВРеквизитФормы...
В СП понятный пример есть
5. spacecraft 29.04.19 11:32 Сейчас в теме
(1)
Элементы.стСумма.Заголовок=глСум;

Зачем использовать заголовок?
вешаю элемент поле стСумма путь к даннм глСум

Вот и меняйте глСум.
6. Lexx32 20 29.04.19 11:39 Сейчас в теме
(5) Не работает.. Будет такое работать на клиенте в ТЗПриОкончанииРедактирования() ??
7. spacecraft 29.04.19 11:42 Сейчас в теме
(6) глСум какой тип данных? стСумма это поле ввода?
8. Lexx32 20 29.04.19 11:52 Сейчас в теме
(7) глСум реквизит число использую для суммирования, а стСумма поле ввода для числа
9. spacecraft 29.04.19 11:54 Сейчас в теме
(6) обработчик лучше выбрать другой. Использовать 2 обработчика ПриИзменении для колонок, которые участвуют в вычислении цены.
Пример:
&НаКлиенте
Процедура ТЗЦенаПриИзменении(Элемент)
	СуммаТЗ();
КонецПроцедуры

&НаКлиенте
Процедура ТЗКоличествоПриИзменении(Элемент)
	СуммаТЗ();
КонецПроцедуры

&НаКлиенте
Процедура СуммаТЗ()
	ТекДанные = Элементы.ТЗ.ТекущиеДанные;
	ТекДанные.Сумма = ТекДанные.Цена * ТекДанные.Количество;
	Итог = ТЗ.Итог("Сумма");
КонецПроцедуры
Показать
10. Lexx32 20 29.04.19 12:04 Сейчас в теме
(9) не работает - вот как переписал

&НаКлиенте
 Процедура ТЗПриИзменении(Элемент)
	 // Вставить содержимое обработчика.
	 СуммаТЗ();
 КонецПроцедуры
 
 &НаКлиенте
Процедура СуммаТЗ()
	ТекДанные = Элементы.ТЗ.ТекущиеДанные;
	ТекДанные.Сум = ТекДанные.Цен * ТекДанные.Кол;
	стСумма = ТЗ.Итог("Сум");
КонецПроцедуры
Показать
11. spacecraft 29.04.19 12:10 Сейчас в теме
(10)
Процедура ТЗПриИзменении(Элемент)

я же сказал, для колонки ТЗ, а не для всей ТЗ. См. код в (9)

стСумма = ТЗ.Итог("Сум");

Нужно присваивать не поле ввода, а реквизит формы глСум
12. Lexx32 20 29.04.19 12:15 Сейчас в теме
(11) переписал так, все заработало (старым дедовским перебором)

 &НаКлиенте
Процедура СуммаТЗ()
	ТекДанные = Элементы.ТЗ.ТекущиеДанные;
	ТекДанные.Сум = ТекДанные.Цен * ТекДанные.Кол;
	глСум = 0;
	Для Каждого ТекСтрока Из ТЗ Цикл
		глсум = глСум + Число(ТекСтрока.Сум);
	КонецЦикла;	
	стСумма = глСум;	
КонецПроцедуры
Показать
14. spacecraft 29.04.19 12:19 Сейчас в теме
(12) бред. Заработало только потому, что все же реквизит формы глСум изменялся. А стСумма = глСум просто игнорировался из-за несовместимости и создалась локальная переменная стСумма, которая уничтожалась по окончании процедуры. Ничего общего с поле ввода стСумма не имеющая.
Вот код:
&НаКлиенте
Процедура ТЗЦенПриИзменении(Элемент)
    СуммаТЗ();
КонецПроцедуры

&НаКлиенте
Процедура ТЗКолПриИзменении(Элемент)
    СуммаТЗ();
КонецПроцедуры

&НаКлиенте
Процедура СуммаТЗ()
    ТекДанные = Элементы.ТЗ.ТекущиеДанные;
    ТекДанные.Сум = ТекДанные.Цена * ТекДанные.Количество;
    глСум= ТЗ.Итог("Сум");
КонецПроцедуры
Показать
13. Lexx32 20 29.04.19 12:18 Сейчас в теме
(11) А еще вопрос - есть какие варианты вывода на печать нескольких реквизитов, например ТЗ и стСумма (пока с макетом не получается), вот мой работающий вариант - выводит только ТЗ, а как вывести еще и итог по колонке??

&НаСервере
Функция ПечатьЗаявкиНаСервере()
	ТабДок = Новый ТабличныйДокумент;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ.Выгрузить());
    Построитель.ВыводитьОбщиеИтоги=Истина;
    Построитель.РазмещениеИзмеренийВСтроках=ТипРазмещенияИзмерений.Отдельно;
    Построитель.ЗаполнитьНастройки();
    Построитель.Выполнить();
    Построитель.Вывести(ТабДок);
    Возврат ТабДок;
 КонецФункции

Показать
2. Henkin 29.04.19 11:17 Сейчас в теме
Насколько я помню, если использовать не таблицу значений, а табличную часть обработки, то можно просто указать вывод итогов в табличной части.
3. Lexx32 20 29.04.19 11:28 Сейчас в теме
(2) НЕ совсем понятно чем отличается ТЗ от табличной части на форме?? Я когда создавал ТЗ не видел вариантоов добавления табличной части на форму..
Вот что я нашел но как исправить??
&НаСервере
Функция ПечатьЗаявкиНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ.Выгрузить());
    Построитель.ВыводитьОбщиеИтоги=Истина;
    Построитель.РазмещениеИзмеренийВСтроках=ТипРазмещенияИзмерений.Отдельно;
	
    Построитель.ИсточникДанных.Колонки.Сум.Итог = "СУММА(СУМ)"; // сдесь ругается
    спзИтоги=Новый СписокЗначений();
    спзИтоги.Добавить("Сум","СУМ");
    
   //обУстановитьИтогиПостроителяОтчета(Построитель, спзИтоги);
    
    Построитель.ЗаполнитьНастройки();
    Построитель.Выполнить();
    
    //Построитель.Макет=МакетОтчета;
    
    Построитель.Вывести(ТабДок);
    Возврат ТабДок;
 КонецФункции

Показать
15. Henkin 29.04.19 13:08 Сейчас в теме
(3) Табличная часть - это элемент обработки, а не формы. Добавляем табличную часть на форму, через основной объект формы обработки. Включаем в свойствах элемента "Таблица", связанного с ТЧ флаг "Подвал". Для колонки "Сумма" указываем текст подвала, что-то типа "Объект.ТабличнаяЧасть1.ИтогСумма". И все
16. Lexx32 20 30.04.19 08:19 Сейчас в теме
Всем спасибо, сделал всетаки через макет.. (оказалось намного проще) Вот шаблон
&НаСервереБезКонтекста 
Функция ПолучитьМакетНаСервере() 
ОбработкаОбъект = Новый ("ВнешняяОбработкаОбъект.МояОбработка");
Возврат ОбработкаОбъект.ПолучитьМакет("Макет"); 
КонецФункции

&НаСервере
Функция ПечатьЗаявкиНаСервере()
	
Табл=Новый ТабличныйДокумент;
Макет = ПолучитьМакетНаСервере();
ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Парам1 = СокрЛП(ТекстовоеПоле.Ссылка); //+Символы.ПС+СокрЛП(ТекстовоеПоле.Ссылка.Контрагент)+Символы.ПС+
ОбластьШапка.Параметры.Кому="Кому " + СокрЛП(ТО.Ссылка.Контрагент);
ОбластьШапка.Параметры.Када="ИФ " +СокрЛП(ТО.Ссылка.ИсточникФинансирования)+" дата поступления: "+СокрЛП(ТО.Ссылка.ЖелаемаяДатаПоступления);
ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
Табл.Вывести(ОбластьШапка);
СМ = 0;
Ном=0;
Для каждого стр из Тз Цикл
 Ном=Ном+1;
 ОбластьСтрока.Параметры.Ном=Ном;
 ОбластьСтрока.Параметры.ТЗ_Товар = стр.Товар;
 ОбластьСтрока.Параметры.ТЗ_Кол = стр.Кол;
 ОбластьСтрока.Параметры.ТЗ_Цен = стр.Цен;
 ОбластьСтрока.Параметры.ТЗ_Сум = стр.Сум;
 Табл.Вывести(ОбластьСтрока);
 СМ = Число(СМ) + Число(стр.Сум);
КонецЦикла;

ОбластьПодвал=Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтСум = СокрЛП(СМ);
Табл.Вывести(ОбластьПодвал);
Возврат Табл;	
КонецФункции

Показать

Тема закрыта
Оставьте свое сообщение

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