|   |   | 
| 
 | 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) он явно говорит про форму документа
 "...в форме документа...." . правда там же уже смешивает реквизит формы с просто переменной "...идентификатор переменной которой надо присвоить значение..." . все-таки думаю, что хочется ему установить реквизит формы документа, который является реквизитом документа... а как оно на самом деле - хз.. . бардак в голове, бардак в изложении, бардак в исполнении... | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |