ЗначениеВРеквизитФормы не понимаю как работает

1. Ujine1313 10 19.01.22 18:39 Сейчас в теме
Всем привет. Помогите пожалуйста разобраться как это работает
Есть РеквизитФормы и есть РеквизитОбъекта
Надо по кнопки изменить реквизит формы, но сделать это через реквизит объекта

Как записать реквизит формы из реквизита объекта не прямым присвоением (РеквизитФормы =объект.РеквизитОбъекта)
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. nomad_irk 81 19.01.22 18:58 Сейчас в теме
(1)Не совсем понятно, для чего именно такой изврат, почему нельзя использовать РеквизитФормы =объект.РеквизитОбъекта или сразу сделать элемент формы, у которого ПутьКДанным = Объект.РеквизитОбъекта как очевидное решение поставленной задачи.
2. AnryMc 849 19.01.22 18:57 Сейчас в теме
Насколько я понимаю Функция (СообщениеПролзователю(Ф)) нет "волшебного" слова ВОЗВРАТ...
4. nomad_irk 81 19.01.22 18:58 Сейчас в теме
(2)Функция не обязательно должна иметь это слово.....
19. AnryMc 849 20.01.22 09:39 Сейчас в теме
(4)
Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, т.е. в языке допускается не принимать от функции возвращаемое значение.


Век живи - век учись...
21. nomad_irk 81 20.01.22 10:06 Сейчас в теме
(19) Я ничего не назначал, это все ТС :)
Реквизит формы обновлять не нужно, оно обновляется сразу, при изменении значения.
При бесконтекстном изменении реквизита объекта необходимо обновлять данные формы.
22. Ujine1313 10 20.01.22 10:25 Сейчас в теме
(19)
Прикрепленные файлы:
23. Sashares 33 20.01.22 10:28 Сейчас в теме
24. Ujine1313 10 20.01.22 10:42 Сейчас в теме
(23)тогда как работает ОбновитьОтображениеДанных(элементы.РеквизитОбъектаНаФорме);
и смысл от него если он не обновляет данные из данных реквизита объекта.
25. SlavaKron 20.01.22 10:51 Сейчас в теме
(24) Они уже обновились, когда вы вызвали ЗначениеВРеквизитФормы(ДокументОбъект, "Объект").
27. Ujine1313 10 20.01.22 10:55 Сейчас в теме
(25)
ЗначениеВРеквизитФормы

Если не вызывать этот метод то тогда как обновить реквизиты?
28. SlavaKron 20.01.22 11:03 Сейчас в теме
(27) Есть костыль, который любят некоторые коллеги, в том числе и на этом форме – записать прикладной объект и и вызвать метод формы Прочитать, но по мне это противоречит логике работы с формой.
30. starik-2005 3165 20.01.22 11:09 Сейчас в теме
(28)
Прочитать
Если перед этим объект не записать, то толку от этого, сами понимаете, никакого...
31. Ujine1313 10 20.01.22 11:18 Сейчас в теме
(30) в данном примере э
то внешняя обработка - как вы ее можно записать? что бы потом Прочитать.
33. starik-2005 3165 20.01.22 11:23 Сейчас в теме
(31)
что бы потом Прочитать.
Ну а в чем смысл тогда вообще "читать"?
34. Ujine1313 10 20.01.22 11:26 Сейчас в теме
(33)тут смысл в понимании - получается что записать реквизиты объекта можно только в документах/справочниках - потом записать объект и Прочитать() или ОбновитьОтображениеДанных() (в чем различие этих методов);
5. polax 19.01.22 20:43 Сейчас в теме
У тебя просто код заполнения реквизита в модуле объекта. Поэтому ты вызываешь метод РеквизитФормыВЗначение, чтобы добраться до функции. Хорошо, заполнил реквизит объекта, а дальше как в (1) подсказали Реквизит Формы = Объект.РеквизитОбъекта
6. Ujine1313 10 19.01.22 21:12 Сейчас в теме
Весь этот изврат я то же вижу как изврат...но задача стоит в том что бы понять как сделать с извратом не через присвоение, не через возврат...а именно через ЗначениеВРеквизитФормы что бы понять как оно работает.
7. nomad_irk 81 19.01.22 21:24 Сейчас в теме
(6)Оно работает вот так:

на форму выводим Элемент с ПутьКДанным Объект.РеквизитОбъекта

далее

в модуле формы:

&НаСервере
Процедура МояПроцедура()

ТекОбъект = РеквизитФормыВЗначение("Объект");
ТекОбъект.ИзменитьЗначение(а);
ЗначениеВРеквизитФормы(ТекОбъект, "Объект");

КонецПроцедуры


в Модуле объекта:

Процедура ИзменитьЗначение(ВхЗначение) Экспорт

      РеквизитОбъекта = ВхЗначение * 3;

КонецПроцедуры


После выполнения значение в элементе формы должно изменится.
8. Ujine1313 10 19.01.22 21:36 Сейчас в теме
(7)
на форму выводим Элемент с ПутьКДанным Объект.РеквизитОбъекта

Зачем тогда все манипуляции с ЗначениеВРеквизитФормы(ТекОбъект, "Объект");
Если мы и так пропишем что элемент на форме получает данные из реквизита формы и как только мы заполним реквизит объекта то заполнится и поле на форме.
Задача именно заполнить реквизит на форме не связанный с реквизитом объекта.
10. nomad_irk 81 19.01.22 21:39 Сейчас в теме
(8)
Зачем тогда все манипуляции с ЗначениеВРеквизитФормы(ТекОбъект, "Объект");

Нужны для получения самого прикладного объекта, для использования процедур/функций его модуля, например.

Для изменения реквизита формы РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() не нужны вообще.

Оно необходимо в том случае, когда реквизиты объекта меняются вне формы и нужно видеть эти изменения.
Самый простой пример - заполнение/изменение ТЧ внешней обработкой, подключенной в качестве доп. обработки.
12. Ujine1313 10 19.01.22 21:49 Сейчас в теме
(10)
в таком случае, РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() не нужен вообще.

РеквизитФормыВЗначение() нужен что бы обратиться к функции в модуле объекта.
Глобальная задача стоит отучится писать код в модуле формы и писать его в модуле объекта...но уперся в вопрос как реквизиты передавать на форму если они не связаны с реквизитами объекта...допускаю что есть пробел в понимании механизма...по этому про Вашей помощи.
13. nomad_irk 81 19.01.22 21:55 Сейчас в теме
(12)
РеквизитФормыВЗначение() нужен что бы обратиться к функции в модуле объекта.

Если при этом вам нужно значение реквизита формы передать в модуль/вернуть в форму, то используйте структуру в качестве одного из параметров вызываемой процедуры/функции модуля объекта.

но уперся в вопрос как реквизиты передавать на форму если они не связаны с реквизитами объекта

Присваиванием значения реквизиту в модуле формы, либо передачей структуры, ключи которой называются именами реквизитов формы, в качестве параметра процедуры/функции модуля объекта.

Использовать модуль объекта вместо модуля формы - должно быть оправдано, а не просто потому что захотелось.
14. polax 19.01.22 22:05 Сейчас в теме
(12)
но уперся в вопрос как реквизиты передавать на форму если они не связаны с реквизитами объекта...

Никак. У объекта НЕТ реквизита формы, из модуля объекта никак не добраться до реквизита формы его там НЕ существует. Реквизит формы (уточняю, реквизит созданный в форме и не имеющий пути типа Объект.....) по сути интерактивный рисунок и живет только пока живет форма. Ушли в объект - нет реквизита формы
starik-2005; +1 Ответить
15. polax 19.01.22 22:11 Сейчас в теме
(12)
Глобальная задача стоит отучится писать код в модуле формы и писать его в модуле объекта

А смысл? Модуль объекта (грубо) предназначен для обработки стандартных событий. В принципе, их можно было бы обрабатывать в модуле формы, но тогда эти события были бы недоступны программно без вызова формы. Зачем ВСЕ перетаскивать туда?
9. polax 19.01.22 21:39 Сейчас в теме
(7)
на форму выводим Элемент с ПутьКДанным Объект.РеквизитОбъекта

И вот тут нестыковка с вопросом. См скрин. ДВА реквизита, один объекта и один формы. Записать надо в реквизит формы у которого НЕ МОЖЕТ быть пути Объект.... Или ТС неверно поставил вопрос
11. nomad_irk 81 19.01.22 21:41 Сейчас в теме
(9)ТС просто не понимает, что реквизит формы - это реквизит формы и он доступен ТОЛЬКО в масштабах формы и никакие РеквизитФормыВЗначение() тут не помогут никак.
16. Ujine1313 10 19.01.22 22:14 Сейчас в теме
тогда зачем этот метод?? ни как понять не могу

ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>)
Параметры:
<Значение> (обязательный)
Тип: Произвольный.
Значение прикладного типа, которое необходимо преобразовать в реквизит формы и для которого определено преобразование в данные формы.
<ИмяРеквизита> (обязательный)
Тип: Строка.
Имя реквизита формы, в который необходимо поместить преобразованное значение.


Первый параметр: Значение прикладного типа - это получается значение реквизита объекта ?
Второй параметр: Имя реквизита формы, в который необходимо поместить - тут как бы все понятно и так - реквизит формы куда будет класть наше значение реквизита объекта.


или как это вообще работает в жизни.
17. nomad_irk 81 20.01.22 06:25 Сейчас в теме
(16)Реквизит формы в данном случае определенного типа: ДанныеФормыСтруктура(прикладной объект: Справочник/Документ/...), ДанныеФормыКоллекция(ТабличнаяЧастьОбъекта), ДанныеФормыДерево(ДеревоЗначений), ДанныеФормыСтруктураСКоллекцией(наборы записей регистров)
18. Ujine1313 10 20.01.22 09:25 Сейчас в теме
(17)объясните мне плиз логику
Прикрепленные файлы:
20. nomad_irk 81 20.01.22 09:40 Сейчас в теме
(18)1. Да, в модуле формы РеквизитОбъекта = 2 будет простой переменной со значением 2(число).
2.Объект.РеквизитОбъекта = 2 - пишем Объект для того, чтобы работать с реквизитом, принадлежащим объекту, а не форме. В модуле объекта нет смысла писать Объект потому, что доступны только реквизиты самого объекта, реквизиты формы не доступны вообще никак.
3. Потому что изменение происходит без участия формы и форма ничего не знает об этом изменении. Именно для того. чтобы "увидеть" изменения необходимо "копию" (созданную с помощью РеквизитФормыВЗначение()) прикладного объекта с новыми значениями его реквизитов "передать" в форму с помощью ЗначениеВРеквизитФормы().

В модуле формы вы можете напрямую менять значение реквизитов как формы, так и объекта.
Ujine1313; +1 Ответить
26. Ujine1313 10 20.01.22 10:53 Сейчас в теме
Что бы систематизировать знания:
Что бы увидеть значение в элементе форме связанным с реквизитом объекта (ПутьКДанным: Объект.РеквизитОбъекта)
ИЗ ФОРМЫ ОБЪЕКТА
1. Объект.РеквизитОбъекта = <Присвоить Значение>
либо
2. ДокументОбъект = РеквизитФормыВЗначение("Объект"); //Попадаем в модуль объекта, в нем меняем значение реквизита РеквизитОбъекта = <Присвоить Значение>

ЗначениеВРеквизитФормы(ДокументОбъект, "Объект"); //Переносим значение в элементе форме связанным с реквизитом объекта (ПутьКДанным: Объект.РеквизитОбъекта)

3. Есть еще варианты?
29. starik-2005 3165 20.01.22 11:07 Сейчас в теме
(26)
Есть еще варианты?
Достаточно первого варианта, второй вообще нигде желательно не использовать, т.к. в нем нет практического смысла на Вашем уровне понимания механизмов платформы. Фактически. объект, выгруженные из реквизита, нужен лишь за тем, чтобы вызвать функцию модуля этого объекта, что вообще сомнительно в плане использования, т.к. у объектов теперь есть модуль менеджера (исключение - внешние обработки, но даже там это далеко не всегда нужно).

Поэтому можно (и нужно) прямо безо всяких процедур и функций просто и примитивно делать прям на клиенте так:
&НаКлиенте
ПроцедураФункция ПриНажатииНаБольшуюКраснуюКнопку(Элемент)
  Объект.Реквизит1 = Объект.Реквизит1 + 2
КонецПроцедурыФункции
32. nomad_irk 81 20.01.22 11:18 Сейчас в теме
(26)Вариант 2 - это прям какой-то очень большой изврат, но эффект будет равен эффекту варианта 1.
В подавляющем большинстве случаев используется вариант 1.

Еще есть варианты:
3. ОбновитьОтображениеДанных(элементы.РеквизитОбъектаНаФорме);
4. Прочитать()

Оба варианта служат для чтения текущего значения БД. Если объект не хранится в БД/никак не менялся/новый, то будет соответствующий результат
35. Ujine1313 10 20.01.22 11:27 Сейчас в теме
(32)
3. ОбновитьОтображениеДанных(элементы.РеквизитОбъектаНаФорме);
4. Прочитать()


это одно и то же? или между ними есть разница? вызывать можно любой из них или только совместно?
36. nomad_irk 81 20.01.22 11:41 Сейчас в теме
(35)3.Читает значение указанного реквизита
4. Читает весь объект
37. Ujine1313 10 20.01.22 12:05 Сейчас в теме
(36)Читает и тем самым обновляет (значение появляется на форме)?
38. nomad_irk 81 20.01.22 12:06 Сейчас в теме
39. Ujine1313 10 20.01.22 12:10 Сейчас в теме
(38)Это работает только для прикладных объектов - Документы, справочники? для Отчет и Обработка- там же мы не может объект записать.
Я правильно понял?
40. nomad_irk 81 20.01.22 12:11 Сейчас в теме
(39)Да, но прикладной объект - это и отчет/обработка в том числе.

Прикладной - то, к чему что-то прикладывают(усилия/расчеты/.....)
Ujine1313; +1 Ответить
41. Ujine1313 10 20.01.22 12:52 Сейчас в теме
Пытаюсь теперь прочитать все через запись объекта.
Что я не так делаю?
Объект записываю в модуле объекта - реквизит заполняется (должен сохраниться в объекте)
открываю объект в модуле формы - там реквизит объекта пустой - как так?
Прикрепленные файлы:
42. nomad_irk 81 20.01.22 13:06 Сейчас в теме
(41)В данном случае у вас форма не знает о том, что объект записан в БД и появилась ссылка, поэтому не читает ничего.
Если сделать ЗначениеВРеквизитФормы(), то должно заработать.
43. Ujine1313 10 20.01.22 13:12 Сейчас в теме
(42)
Если сделать ЗначениеВРеквизитФормы(), то должно зара

Со ЗначениеВРеквизитФормы() тогда не надо манипуляций с Объект.Записать()
Хочется теперь разобраться с методами
ОбновитьОтображениеДанных(элементы.РеквизитОбъекта);
Прочитать();
44. nomad_irk 81 20.01.22 13:14 Сейчас в теме
(43)
ОбновитьОтображениеДанных(элементы.РеквизитОбъекта);
Прочитать();

Откройте форму существующего объекта, измените значение реквизитов вне формы, запишите объект в БД и выполните обновление данных формы - должно работать.
45. Ujine1313 10 20.01.22 13:18 Сейчас в теме
(44)
измените значение реквизитов вне формы

Значение меняю (присваиваю) в модуле объекта - это ведь и есть в не формы ил я не правильно понимаю?
Прикрепленные файлы:
46. nomad_irk 81 20.01.22 13:21 Сейчас в теме
(45)правильно, но нужно это делать для уже существующего объекта.
47. Ujine1313 10 20.01.22 13:27 Сейчас в теме
(46)Объект записал потом изменил реквизит - реквизит все так же пустой? я ЧТо то логику ни как не пойму- у нас есть реквизит в объекте, мы если реквизит заполняем и т.к. он принадлежит объекту то через объект уже можно видеть какое в реквизит помещено значение - мы его видим пока находимся в модуле объекта, как только возвращаемся в модель форму и открываем объект то значение реквизита объекта снова пусто? как так? Ведь мало того что мы реквизит объекта записали значение так и сам объект записали.
Прикрепленные файлы:
48. nomad_irk 81 20.01.22 13:33 Сейчас в теме
(47)пфф....вы постоянно меняете условия и последовательность выполнения действий, поэтому получается каша.

в данном случае произошло следующее:

1 открыли форму объекта с пустым значением реквизита объекта
2. записали объект в ИБ.
3. поменяли значение реквизита вне формы.
4. прочитали объект из ИБ.

Догадайтесь, какой операции не хватает?
49. Ujine1313 10 20.01.22 14:13 Сейчас в теме
(48)не хватает записать я так пологаю
вот что получилось - так работает. но вопросов стало еще больше.
Прикрепленные файлы:
50. nomad_irk 81 20.01.22 14:16 Сейчас в теме
(49)первый раз записывается из формы, второй - из самого объекта.
Записать из формы можно, если в качестве основного реквизита формы указан объект.
51. Ujine1313 10 20.01.22 14:23 Сейчас в теме
так зачем два раза то записывать по логике если смотреть? Почему нельзя записать на стороне формы (мы реквизит объекта поменяли, на форме привязан этот реквизит к элементу форму, при записи формы т.к. к элементу формы привязан реквизит объекта в котором есть значение то это значение должно отобразиться на форме (предположим что не отобразилось) тогда запускаем Прочитать() - типа прочитай данные из объекта (зачем записывать объект если данные уже в его реквизите) - ага там данные есть - а раз данные связаны с элементом формы то надо отобразить в этом элементе значение из реквизита объекта.) а тут мы записываем почему то сначала значение в реквизит объекта потом объект этот записываем в базу, потом записываем форму а потом еще и читаем форму. Как то все не логично не фига.
Объясните пожалуйста - давно не могу с этим разобраться...такое ощущение что понимают это единицы и все пишут как умеют не понимая как это работает.
53. nomad_irk 81 20.01.22 14:41 Сейчас в теме
(51)Записывать несколько раз нет необходимости для этого и связывают реквизит объекта с элементом формы.
Если выполняют изменения реквизитов объекта вне формы, то необходимо как-то сказать форме, чтобы она обновилась.
54. Ujine1313 10 20.01.22 15:43 Сейчас в теме
(53)
необходимо как-то сказать форме, чтобы она обновилась

говорим мы это ей через записать в модуле формы и в модуле объекта?
55. nomad_irk 81 20.01.22 15:54 Сейчас в теме
(54) говорим мы это явно с помощью:
1. ЗначениеВРеквизитФормы()
2. ОбновитьОтображениеДанных(элементы.РеквизитОбъекта)
3. Прочитать()

Не явно:
1. Объект.РеквизитОбъекта = <Присвоить Значение>
56. Ujine1313 10 20.01.22 16:38 Сейчас в теме
(55)

I
1. ЗначениеВРеквизитФормы()

II
2. ОбновитьОтображениеДанных(элементы.РеквизитОбъекта)
3. Прочитать()
с записью объекта из модуля объекта и с записью формы через метод Записать()

Не явно:
1. Объект.РеквизитОбъекта = <Присвоить Значение>
52. user1203706 15 20.01.22 14:38 Сейчас в теме
Оставьте свое сообщение

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