Имя: Пароль:
1C
1C 7.7
v7: присвоить значение реквизиту внешней формы по идентификатору
0 jah1111
 
15.09.23
09:33
в форме обработки:
Докум = Форма.Параметр.Получить("Контекст"); // получаем контекст внешней формы
Реквизит = Форма.Параметр.Получить("Реквизит"); // получаем реквизит внешней формы, которому потом предстоит прсисвоить значение
//===============================================================================
Как теперь присвоить значение реквизиту внешней формы?

Пробую:

Докум.Форма.УстановитьАтрибут(Реквизит,ЗначениеКотороеНадоПрисвоить);

не работает
1 mikecool
 
15.09.23
10:34
Реквизит = ЗначениеКотороеНадоПрисвоит; не?
2 arsik
 
15.09.23
10:36
Может так?
Докум.Форма.УстановитьАтрибут("Реквизит",ЗначениеКотороеНадоПрисвоить);
3 jah1111
 
15.09.23
10:40
(2) ну так "Реквизит" мы просто получим строку с буквами "Реквизит"
4 jah1111
 
15.09.23
10:49
(1) в таком случае, мы просто присвоим значение переменной Ревизит в модуле Формы обработки, а нужно присвоить значение реквизиту справочника ФОРМЫ ДОКУМЕНТА, из которого открывается форма обработки

ну к примеру присвоить значение Докум.Клиент. Где клиент реквизит справочника на форме документа.
5 jah1111
 
15.09.23
10:56
или по другому пути...
как Строка("Докум."+реквизит) преобразовать в выражение Докум.<<реквизит>> ?
6 azernot
 
15.09.23
11:14
Чесгря от меня ускользает смысл задачи..
Открыто две формы и нужно из одной открытой формы установить значение реквизита в другой открытой форме?
7 АгентБезопасной Нацио
 
15.09.23
11:18
(6) Ну да. Открывает одну форму из другой, и из "условно дочерней" изменяет "условно родительскую".  Прикладная проктология.
8 azernot
 
15.09.23
11:20
Мне кажется, задача решается только модальным открытием подчиенной формы
9 АгентБезопасной Нацио
 
15.09.23
11:23
(8) не, можно через формекс. Но по хорошему - да, модально открыть, а после закрытия заполнить реквизиты. Но ТС - любитель проктологии..
10 jah1111
 
15.09.23
11:34
(6) да.
в форме документа при нажатии на кнопку:
Процедура ВыборЗн(Команда, ид)
конт = взятьКонтекст(Контекст);
сз = СоздатьОбъект("СписокЗначений");
сз.ДобавитьЗначение(конт, "Контекст"); // контекст формы
сз.ДобавитьЗначение(Команда, "Команда"); // Команда определения вида справочника в котором нужно осуществлять подбор в дочерней форме. Вид может быть разным, определятся сторонней функцией
сз.ДобавитьЗначение(ид, "Реквизит"); // идентификатор переменной которой надо присвоить значение в материнской форме
ОткрытьФормуМодально("Обработка.ВиборРекв",сз);

в форме обработки:

Докум = Форма.Параметр.Получить("Контекст"); // получаем контекст внешней формы
Команда = Форма.Параметр.Получить("Команда"); // получаем команду что делать и где выбирать
Реквизит = Форма.Параметр.Получить("Реквизит"); // получаем реквизит внешней формы, которому потом предстоит прсисвоить значение

как видите я открываю модально. а как дальше?
11 NikeArz
 
15.09.23
12:03
Форма.Параметр.Реквизит = Реквизит
12 jah1111
 
15.09.23
12:14
(11) чесгаря ничего не понял
это где? в родительской форме? а откуда там значение Реквизит появится?
13 NikeArz
 
15.09.23
12:24
Это заполняется в форме, которую вы открыли модально. Как правило при закрытии.
14 NikeArz
 
15.09.23
12:33
Перем Контекст;

ПриОткрытии()
Контекст = Форма.Параметр;
ВашРеквизит = Контекст.ВашРеквизит;

ПриЗакрытии()
Форма.Параметр.ВашРеквизит = ВашРеквизит;
15 azernot
 
15.09.23
12:41
(10) При выполнении
ОткрытьФормуМодально("Обработка.ВиборРекв",сз);

после закрытия модальной формы, в переменной сз будет всё то, что вы присвоите в дочерней обработке в Форма.Парметр перед её закрытием.
16 azernot
 
15.09.23
12:46
ОткрытьФормуМодально("Обработка.ВиборРекв",сз);
Если ПустоеЗначение(сз) = 0 Тогда
  УстановитьАтрибут(Ид,сз);
КОнецЕсли;


Ну а в своей подчиненной форме
Процедура ПриЗакрытии() (или как вы там определяете, что значение выбрано)
Форма.Параметр = ЗначениеКотороеНадоПрисвоить;
КонецПРоцедуры
17 jah1111
 
15.09.23
13:30
(16) спасибо.
но  УстановитьАтрибут(Ид,сз);

только с указанием конкретного справочника

во так

касса = сз;

работает...
и Форма.УстановитьАтрибут(Ид,сз);
тоже не работает
18 jah1111
 
15.09.23
13:40
в методах формы есть только ПолучитьАтрибут(), а УстановитьАтрибут() не понимает
19 azernot
 
15.09.23
13:59
(17) есть лайфхак с шаблоном
http://my1c-archive.narod.ru/knowhow/shablon.html
20 jah1111
 
15.09.23
14:03
короче, пришлось сделать так:

АФ = СоздатьОбъект("АтрибутФормы");
АФ.УстановитьАтрибут(Форма,ид);
АФ.Значение = сз;

жалко, что и модальное открытие и формекс, но работает
21 jah1111
 
15.09.23
14:03
(19) спасибо, посмотрю
22 jah1111
 
15.09.23
14:05
(19) дык с шаблоном то небось и без модального открытия можно обойтись
23 Злопчинский
 
15.09.23
14:26
Если ТС будет нести фигнь, то фигня, принесёт его...
Раза три прочитал поток сознания...
"..нужно присвоить значение реквизиту справочника ФОРМЫ ДОКУМЕНТА.."...
24 Злопчинский
 
15.09.23
14:28
При простом присвоении надо тупо после присвоения обновить форму контекста, Докум.Форма.Обновить(1);
25 Злопчинский
 
15.09.23
14:31
.. И можно без всякой модальности...
.
По идее всё должно нормально работать
26 Arbuz
 
15.09.23
15:06
Если открывается одна форма из другой, то в первой форме есть контекст второй и можно в первой, например в ПриАктивацииОкна(), дёргать из второй всё, что душе угодно, не считая штатной передачи параметра формы.
27 Злопчинский
 
15.09.23
20:48
(26) так в тис сделана связь дочернего окна по просмотру остатков ТМЦ, я её докрутил чтобы из формы справочника и из формы элементы и из документа, выкручивать можно беспроблемно, главное определить тип и аид контекста родительской формы
28 Злопчинский
 
16.09.23
00:34
Проверил, с Шаблон работает норм.
Также работает простой тупой вариант
Докум = Форма.Параметр.Получить("Контекст");
Сообщить(ТипЗначенияСтр(Докум));
Докум.УстановитьАтрибут("Контрагент",Константа.дРозничныйКлиент);
.
для ТС, который мутно не понимает различия межуду реквизитом и его именем (см. мутность в постановке задачи)
будет просто: Докум.УстановитьАтрибут(Реквизит,ЗначениеКотороеНадоПрисвоить); //Реквизит - это ИМЯ РЕКВИЗИТА
29 АгентБезопасной Нацио
 
16.09.23
11:16
(28) по его постановке - ему нужно установить не реквизит объекта, а реквизит формы (который с объектом может быть и не связан)
30 Злопчинский
 
16.09.23
11:25
(29) в (10) он явно говорит про форму документа
"...в форме документа...."
.
правда там же уже смешивает реквизит формы с просто переменной
"...идентификатор переменной которой надо присвоить значение..."
.
все-таки думаю, что хочется ему установить реквизит формы документа, который является реквизитом документа...
а как оно на самом деле - хз..
.
бардак в голове, бардак в изложении, бардак в исполнении...