Имя: Пароль:
   
1C
 
УТ 11.Программно заполнить созданное программно поле формы
0 kIR
 
02.11.16
18:02
Доброго вечера!
Программно создаю поля в подвале, в которых хочу выводить количество товара по родителям номенклатуры. создал доп.поле в ТЧ товары, в которое записываю родителя текущей номенклатуры.

Код создания поля такой такой:

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


&НаКлиенте
Процедура ОбработкаКоличества(Родитель)
    
    Эф = ЭтаФорма.Элементы.Найти(СтрЗаменить("Количество" + Родитель," ",""));
    Если Эф = Неопределено Тогда
        СоздатьПолеНаСервере(Родитель);
        Эф = ЭтаФорма.Элементы.Найти(СтрЗаменить("Количество" + Родитель," ",""));
        Эф.Заголовок = "Количество " + Родитель;        
    КонецЕсли;
    Эф.РастягиватьПоГоризонтали = Истина;
    
    Эф = ПолучитьКоличество(Родитель);
КонецПроцедуры

&НаСервере
Функция ПолучитьКоличество(РОдительНоменклатуры)
    Отбор = новый Структура("Родитель",РОдительНоменклатуры);
    Массив = Объект.Товары.НайтиСтроки(Отбор);
    кп = 0;
    Для Каждого Стр из массив Цикл
        кп = кп + стр.количество;
    КонецЦикла;

    возврат кп;
КонецФункции

&НаСервере
Процедура СоздатьПолеНаСервере(РОдительНоменклатуры)
    
    нРеквизиты = Новый Массив;
    Реквизит = Новый РеквизитФормы(СтрЗаменить("Количество" + РОдительНоменклатуры," ",""), Новый ОписаниеТипов("Число"), , , Истина);
    нРеквизиты.Добавить(Реквизит);
    ИзменитьРеквизиты(нРеквизиты);
    
        
    //Добавляем поле ввода
    Элемент = ЭтаФорма.Элементы.Добавить(СтрЗаменить("Количество" + РОдительНоменклатуры," ",""), Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаКоличество);
    Элемент.Вид = ВидПоляФормы.ПолеНадписи;
    Элемент.ПутьКДанным = СтрЗаменить("Количество" + РОдительНоменклатуры," ","");    
    
КонецПроцедуры



Но при выполнении процедуры Количество не отображается никак...Пробовал сверять "эф" и "ЭтаФорма.Элементы.<имя реквизита, который создаю>" - они совпадают

не пойму,как правильно((

Спасибо
1 Mort
 
02.11.16
19:54
ЭтотОбъект["Количество" + Родитель] = ПолучитьКоличество(Родитель);
2 kIR
 
03.11.16
09:11
(1) не вариант. Даже если мы используем не "ЭтотОбъект", а "Объект" (так как УФ), то у меня нет реквизит,который я создаю - это реквизит формы, а не объекта.
А реквизит формы - это,как раз, "эф"
3 FIXXXL
 
03.11.16
09:17
(0) Элементы.<имя реквизита, который создаю> = кп
ни у проверь кп, мож он = 0 :)
4 kIR
 
03.11.16
09:20
(3) проверял, конечно же)
5 singlych
 
03.11.16
09:48
(2) Ну конечно, не вариант. Значение надо пихать в реквизит формы, а не в элемент. Эф у тебя это элемент. ЭтотОбъект это форма, а не объект. А реквизит формы это ЭтотОбъект[Эф.Имя]. Вот и пиши
ЭтотОбъект[Эф.Имя] = ПолучитьКоличество(Родитель);
6 singlych
 
03.11.16
09:52
Правильней даже будет ЭтотОбъект[Эф.ПутьКДанным].
7 h-sp
 
03.11.16
10:11
(4) Этот объект - это как разщ сама форма, чего чудишь?
8 kIR
 
03.11.16
10:29
(7) в таком случае он пишет "Поле объекта не обнаружено"
9 kIR
 
03.11.16
10:29
(5) (6) хм..."Эф" - элемент формы, он доступен на клиенте, а "путькданным" - на сервере
10 singlych
 
03.11.16
10:35
(9) ну значит через имя
11 kIR
 
03.11.16
10:36
(10) через имя ругается на "поле объекта не обнаружено"))


{Документ.ОтчетОРозничныхПродажах.Форма.ФормаДокумента.Форма(406)}: Поле объекта не обнаружено (КоличествоLC01краски)
    Объект[Эф.Имя] = ПолучитьКоличество(Родитель)
12 singlych
 
03.11.16
10:37
Ну или вообще все делать на сервере, раз ПолучитьКоличество все равно на сервере.
13 singlych
 
03.11.16
10:40
Что у тебя в Элементы.КоличествоLC01краски.ПутьКДанным?
14 singlych
 
03.11.16
10:43
(11) пля. не Объект а ЭтотОбъект
15 kIR
 
03.11.16
10:43
(12)  Когда с клиента смотрю - ошибка чтения) а вообще я ж в коде задаю

Элемент.ПутьКДанным = СтрЗаменить("Количество" + РОдительНоменклатуры," ","");
16 kIR
 
03.11.16
10:46
(14) мляя))так когда мы указывам "ЭтотОБъект" на клиенте, то получаем "переменная не определена" )
17 singlych
 
03.11.16
10:47
Тебя спасет совсем не тот Объект который не ЭтотОбъект, а тот ЭтотОбъект, который не этот Объект.
18 singlych
 
03.11.16
10:49
Ну вообще ЭтотОбъект определен и там и там, и в нем содержится сама форма. А если у тебя древний релиз, в котором еще нет ЭтотОбъект, тогда пиши ЭтаФорма, но тогда вопрос, откуда у тебя ЭтотОбъект на сервере.
19 kIR
 
03.11.16
11:01
(18)да,релиз староват, но там сильно перепилено все,что решили не обновлять
А вот "ЭтаФорма[Эф.Имя] = ПолучитьКоличество(Родитель);" заработала! Спасибо!
20 kIR
 
03.11.16
15:06
А может кто еще подскажет, почему вот так криво последний выводится периодически?
https://gyazo.com/6fe5914a28d572cf8a71ad3f62a6b5bc
21 kIR
 
03.11.16
16:57
ОТбой,нашел косяк. Не надо было отдельно заголовок присваивать