Имя: Пароль:
1C
1С v8
Запись реквизита документа.
,
0 Vasya1c
 
12.10.19
10:59
Здравствуйте, есть простенький вопрос.
Необходимо через доп реквизит документа, записать в реквизит Расш1_ПоследнийРедактор_(СправочникСсылка.Пользователи) пользователя который записывает документ, реквизит выведен на форму.

В модуле формы док-та пишу

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    ИмяПользователь=ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя;
    КонтрагентДляПоиска = Справочники.Пользователи;
        ЭтотОбъект.Расш1_ПоследнийРедактор_=КонтрагентДляПоиска.НайтиПоНаименованию(ИмяПользователь);
        Сообщить(ЭтотОбъект.Расш1_ПоследнийРедактор_);


В отладчике ЭтотОбъект.Расш1_ПоследнийРедактор_ , все прекрасно то что нужно и сообщить тоже правильно выводит, но при открытии документа остается в этом реквизите старое значение.
1 ads55
 
12.10.19
11:56
ЭтотОбъект.Записать();
2 Фрэнки
 
12.10.19
12:11
Э... В модуле формы ЭтотОбъект ?!

Если обращаешься в контексте "на сервере" в модуль формы, т.е. это все-таки Форма - у формы есть реквизиты Формы, а значение из реквизита получается вызовом соотв. функции.
3 Vasya1c
 
12.10.19
12:12
Добавил в конце
ЭтотОбъект.Записать();

При попытке записать документ программа крашится, нажимаю записать она думает и закрывается без всяких окон.

а так, все работает )) //ЭтотОбъект.Записать();
4 Фрэнки
 
12.10.19
12:19
Какой тип у этого ЭтотОбъект ? - глянь, не поленись, пжл
5 Vasya1c
 
12.10.19
12:25
ЭтотОбъект    ФормаКлиентскогоПриложения
6 Фрэнки
 
12.10.19
12:33
и? извиняюсь за мой французский - какой смысл в записи Формы? Она же не доступна для записи, т.к. пишется из режима конфигурировании.
7 Фрэнки
 
12.10.19
12:36
Тебе же Объект в виде документа нужен или что?
8 Vasya1c
 
12.10.19
12:38
Фрэнки, я туплю
переделал так, но не записывается.

Объект.Расш1_ПоследнийРедактор_=КонтрагентДляПоиска.НайтиПоНаименованию(ИмяПользователь);


Объект    тип значения ДанныеФормыСтруктура
9 Vasya1c
 
12.10.19
12:38
Мне нужно записать в реквизит значение и я пытаюсь это сделать.
10 Vasya1c
 
12.10.19
13:00
Ребята спасибо, раньше работал с 7.7 пока много непонятного  , прочитал https://helpf.pro/faq82/view/1283.html и понял.

Мне нужен был модуль объекта, ПередЗаписью

Все ок
11 Фрэнки
 
12.10.19
13:03
Не совсем понимаю логику установки некоего значения в форме в событии ПередЗаписью - может это не совсем логично? Не знаю.

Но допустим, что у твоей Формы есть реквизит Объект
---

ОбъектЗначение = РеквизитФормыВЗначение("Объект"); // можно еще вторым параметром Тип этого объекта указать явно.
ОбъектЗначение.Расш1_ПоследнийРедактор_ = КонтрагентДляПоиска.НайтиПоНаименованию(ИмяПользователь);
ЗначениеВРеквизитФормы(ОбъектЗначение, "Объект");

---
С другой стороны, как ты сам уже написал, что тоже самое в модуле Объекта и в ПередЗаписью сделать намного удобней
12 Vasya1c
 
12.10.19
13:32
Фрэнки, благодарю за помощь
13 RomanYS
 
12.10.19
13:37
(11) Зачем в такой ситуации РеквизитФормыВЗначение-ЗначениеВРеквизитФормы?

Чем это лучше простого
Объект.Расш1_ПоследнийРедактор_ = ...
?
14 Фрэнки
 
12.10.19
13:48
(13) А есть непростые примеры, на которых можно прямо, явно и однозначно увидеть, что пара методов
РеквизитФормыВЗначение - ЗначениеВРеквизитФормы
заведомо лучше прямого обращения к полям Реквизита формы через точку?

Под руками у меня ничего готового нет, кроме одного пояснения, что в Объект установлен тип значения ДанныеФормыСтруктура
15 RomanYS
 
12.10.19
13:55
(14) Ну я только одну причину для таких преобразований вижу: вызов методов объекта. По самим полям ДанныеФормыСтруктура вполне соответствует объекту, а те свойства, которых нет в ДФС (например, ДополнительныеСвойства) всё равно потеряются при ЗначениеВРеквизитФормы.
16 Rovan
 
гуру
12.10.19
14:36
может лучше
ТекущийОбъект.Реквизит = ...
17 Фрэнки
 
12.10.19
15:09
(16) может и лучше...

Как думаешь, вот эта запись ниже произвольная или жестко предопределенная?

---
В модуле формы док-та пишу
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
18 RomanYS
 
12.10.19
15:18
(16) Если реквизит не выведен на форму, то лучше. Если выведен то лучше
&НаСервере
Процедура ПередЗаписью(...)
  Объект.Реквизит = ...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.