Имя: Пароль:
1C
1С v8
Открытие формы через Элемент
, ,
0 mir-mup
 
09.09.14
17:35
Доброго времени суток всем!
уже не один день мучаюсь, причем уже когда то решал эту задачу(вдвойне обидно)

"ДокументаОтписанногоСотрудникам", "Сотрудники" - это элементы формы.

вобщем вот так программно все работает:
<code> Форма=получитьФорму(Справочник.докОтписанныйСотрудникам.ФормаОбъекта")
форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники
<code>
нужно так:
<code>
Форма=получитьФорму(Элементы.докОтписанныйСотрудникам.ФормаОбъекта")
форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники
<code>
чтобы именно элемент формы заполнялся ссылкой на созданный Объект.
33 bolobol
 
10.09.14
11:31
(27) "он должен стать в форму с которой откывали сотрудника"
(29) "неужели нельзя форму объекта из элемента формы открыть" (32) "если получать форму через элемент, он сам и заполнится при закрытии формы"

Переводим:
(27) "Ссылка на объект, открытый из элемента формы-владельца, должна встать в элемент формы-владельца"
(29) "Как открыть форму объекта из элемента формы-владельца?"
(32) "Если открыть форму из элемента формы-владельца, то всё хорошо"
- так я и не понял - а где вопрос, если у вас всё хорошо??
34 mir-mup
 
10.09.14
14:14
35 DrZombi
 
гуру
10.09.14
14:20
(16) На сервере :)
36 mir-mup
 
10.09.14
14:21
нужно через элемент  обратиться чтобы в него запись получить
выше уже написал об этом.
37 DrZombi
 
гуру
10.09.14
14:21
(34) А ты на чем программируешь, в основном?
38 DrZombi
 
гуру
10.09.14
14:21
(36) Обратись, в чем проблема?
1С сама тебя туда отправит :)
39 mir-mup
 
10.09.14
14:24
<code> Форма=получитьФорму(Справочник.докОтписанныйСотрудникам.ФормаОбъекта")
Нов=Справочники.докОтписанныйСотрудникам.СоздатьЭлемент();
нужно через:
этаФорма.Элементы.докОтписанныйСотрудникам.формаВыбора

может функцией другой какой то?
40 DrZombi
 
гуру
10.09.14
14:26
(39)
Это уже создает элемент, при открытии :)

Форма=получитьФорму("Справочник.докОтписанныйСотрудникам.ФормаОбъекта")
Форма.Открыть();
41 DrZombi
 
гуру
10.09.14
14:26
+(39) формаВыбора... Тебя не наталкивает, что форма выбора, только для выбора :)
42 DrZombi
 
гуру
10.09.14
14:27
+ Это к тому же список, а не элемент. :)
43 mir-mup
 
10.09.14
14:30
конечно создает при открытии так и нужно, но он не встановится на форму - картинку посмотри
44 DrZombi
 
гуру
10.09.14
14:30
+(39) Примерно так можно ввести документ на основании

Параметр = Новый Структура("Основание",ТекущиеДанные.Ссылка);
Форма = ПолучитьФорму("Документ.ПриходныйКассовый.ФормаОбъекта",Параметр);
Форма.Открыть();
45 DrZombi
 
гуру
10.09.14
14:31
(43) Какую форму? Пиши со знаками препинания, тебя трудно читать.

ПолучитьФорму("Документ.ПриходныйКассовый.ФормаОбъекта",Параметр,   УКАЖИ ТУТ ПЕРЕМЕННУЮ НА Твой Элемент в Диалоге); :)
46 DrZombi
 
гуру
10.09.14
14:32
47 mir-mup
 
10.09.14
14:46
сотрудники= пустой
ДокОтписаныйСотруднику = тоже пустой

это на одной форме находится

выбрали сотрудника, открылась форма ДокОтписаныйСотруднику
ты его поправил записал и закрыл и получилось:
Сотрудники= Иванов
ДокОтписанныйСотруднику = 9.10.Ивановщина

а сейчас вот так
СотрудникПриИзменении
<code> Форма=получитьФорму(Справочник.докОтписанныйСотрудникам.ФормаОбъекта")
форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники
<code>  
и получается

Сотрудник = иванов
докОтписанныйСотруднику = пустое(а нужно 9.10.Ивановщина)
48 Ёпрст
 
10.09.14
14:50
Еще постов 50 и тс задаст вопрос по-человечьи, что же ему на самом деле нужно было..
А пока -  моя твоя не понимат чего оне хочютъ

ЗЫ: скриншоты надо с конфы лепить, а не в пэинте рисовать
49 mir-mup
 
10.09.14
15:01
что скин формы с двумя элементами не понятно? или что не понятно? может нужно базу выложить? ты ее откывать смотреть будешь - оно нужно кому?
вопрос простой как достучаться до объекта который создается элементом.
Форма=получитьФорму(Справочник.докОтписанныйСотрудникам.ФормаОбъекта")
вот так он создает.
мне нужно не просто создать нужно чтобы на форме которую изначально открыл вот так было:
сотрудники= выбранный сотрудник
ДокОтписаныйСотруднику = созданный док
50 mir-mup
 
10.09.14
15:04
сори за запятые, очень мезинец правый болит, и иногда очень тяжко ставить.
51 mir-mup
 
10.09.14
15:04
недожимаю всмысле.
52 Ёпрст
 
10.09.14
15:05
(49) Ну, к примеру, нихрена не понятно, что есть в вашем понимании
"Открытие формы через Элемент" ?
53 mir-mup
 
10.09.14
15:09
сотрудники= пустой
ДокОтписаныйСотруднику = тоже пустой

изначально на форме два элемента мне нужно эти поля заполнить
54 mir-mup
 
10.09.14
15:11
приИзмененииСотрудника должен открыться новый докОтписанныйСотруднику.
55 mir-mup
 
10.09.14
15:12
мы его сохр и закрыть.
и смотрим и видим
сотрудники= Иванов
ДокОтписаныйСотруднику = ИвановуНовыйДокумент
56 mir-mup
 
10.09.14
15:13
это осталось на форме которую мы открывали изначально
57 mir-mup
 
10.09.14
15:14
а сейчас вот так получается
Сотрудники = Иванов
ДокОтписаныйСотруднику = пустое
58 Ёпрст
 
10.09.14
15:16
ну вот при закрытии открытой формы, или при событии выбора оповещай форму-владельца об этом, в первой форме лови это событие и помещай своего ИвановуНовыйДокумент в реквизит
59 mir-mup
 
10.09.14
15:17
Форма=получитьФорму(Справочник.докОтписанныйСотрудникам.ФормаОбъекта")
так вот мне нужно получить форму объекта через элемент, чтобы он заполненым остался что то типа этого:
Форма=получитьФорму(Элементы.докОтписанныйСотрудникам.ФормаОбъекта")
чтобы не искать открытие, закрытие и др...
может функцией другой какой это можно сделать а не получитьФорму?
60 Мимохожий Однако
 
10.09.14
18:49
В открываемую форму передавай Параметры, а в форме пропиши обработку полученных параметров для заполнения.
61 beholder13
 
10.09.14
18:52
Док = ДокОтписаныйСотруднику.ПолучитьОбъект();
Форма = Док.ПолучитьФорму("ФормаОбъекта");
Форма.Открыть();
62 beholder13
 
10.09.14
18:55
(61) Реквизиты можешь сразу напрямую присваивать между получением формы из объекта и открытием
63 beholder13
 
10.09.14
18:56
Если у тебя нет ссылки, то вместо первой строки
Док = Справочник.докОтписанныйСотрудникам.СоздатьОбъект();
64 beholder13
 
10.09.14
18:58
Логика в том, что основная форма справочника обязательно связана с экземпляром объекта по основному реквизиту, а потому надо сначала иметь в распоряжении сам экземпляр объекта, после чего получать его форму.
65 mir-mup
 
11.09.14
10:44
ссылка есть. я уже решал эту задачу, в одну строчку, обращался через элемент(он же ссылка на объект) .
сейчас забыл как, и по новой рою.
спасибо что пытаетесь помочь, но это все не то, зачем вылавливать открытие и закрытие формы - писать обратку итд...
нужно получить форму объекта через элемент который уже есть на форме. Вопрос как это сделать:

Форма= элементы.докОтписанныйсотруднику.ФормаВыбора....

чтобы новая форма открылась, и после закрытия которой ссылка в  элементе осталась.
66 1Сергей
 
11.09.14
10:55
(65) ПолучитьФорму можно у Объекта, Ссылки или Менеджера. У элемента формы форму никак не получишь. Тебе нужно понять смысл одинесовского недоООП
67 mir-mup
 
11.09.14
11:07
может быть тогда не форму а значение? или хз еще что. говорю решал уже через элементы, одна строчка получалась.
68 Ёпрст
 
11.09.14
11:11
И как вы все понимаете автора. Кто нить может по-человечьи написать, что тс нужно ?
69 mir-mup
 
11.09.14
11:20
вот тут нужно получить НовуюФорму с элементаЭтойФормы который является ссылкой-справочником:
//Форма = элементы.докОтписанныйСотруднику; эту строчку ковыряем, не через объект а через элемент к объекту получаем как?
Форма.Открыть();
70 olegves
 
11.09.14
11:33
(69) посмотри, там тебе решение: http://youtu.be/UoKlKx-3FcA
71 Ёпрст
 
11.09.14
11:35
(69)
Давай я заместо тебя вопрос задам ?

У меня есть форма, на форме 2 реквизита:
первый с типом  Справочник.Вася
второй с типом  Справочник.Федя.

Необходимо, при выборе первого реквизита, перехватить вызов, открыть форму Списка Справочника Маша, в ней сделать то то и тото, при выборе из справочника Маша, в первый реквизит на форме должно прилететь значение ВыбранныйЭлементМаша.ДругВаси, во второй реквизит
ВыбранныйЭлементМаша.ДругФеди.

Как это реализовать ?

А то что ты спрашиваешь - я хз, понял ли кто вообще.
72 mir-mup
 
11.09.14
13:00
маши нету, есть только Федя и Вася, открыли Васю - заполнили отрылся федея.
в итоге оба реквизита заполнены.
73 Ёпрст
 
11.09.14
13:07
(72) >>>>открыли Васю - заполнили отрылся федея.
Это как ?

Нужно последовательно открыть Васю, потом федю ?

Или открыть Васю, выбрать васю, и после этого заполнить феду по результатам выбранного васи ?
Если последнее, то в событии ПриИзменении напиши, что федя = Вася.РеквизитИзВаси  и привет..
74 mir-mup
 
11.09.14
14:02
меня есть форма, на форме 2 реквизита:
первый с типом  Справочник.Сотрудники
второй с типом  Справочник.ПисьмаСотрудникам
выбрал сотрудника открылось письмо и ты его заполнил и записал
на форме остались два заполненных реквизита.
75 DrZombi
 
гуру
11.09.14
14:08
(74) У типа справочник, нужно задать и ВИД, тогда выберется тот справочник, который тебе нужен :)

Если там несколько справочников, то в любом случае выбираемый справочник должен быть один, т.е. пользователю должно быть предложено выбрать Вид справочника в любом случае :)
76 DrZombi
 
гуру
11.09.14
14:10
(73) >>> Или открыть Васю, выбрать васю, и после этого заполнить феду

А ты телепат...
Думается

Или открыть Васю, выбрать васю, получили Федю :)
77 mir-mup
 
11.09.14
14:14
меня есть форма, на форме 2 реквизита:
первый с типом  Справочник.Сотрудники
второй с типом  Справочник.ПисьмаСотрудникам
выбрал сотрудника открылось письмо и ты его заполнил и записал
на форме остались два заполненных реквизита.

Форма=получитьФорму(Справочник.ПисьмаСотрудникам.ФормаОбъекта")
форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники

у меня на форме остался
первый с типом  Справочник.Сотрудники  - иванов выбран
а второй с типом  Справочник.ПисьмаСотрудникам = пустое
а нужно то которое пользователь создал только что.
78 mir-mup
 
11.09.14
14:14
СотрудникПриИзменении
Форма=получитьФорму(Справочник.ПисьмаСотрудникам.ФормаОбъекта")
форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники
79 mir-mup
 
11.09.14
14:16
а второй с типом  Справочник.ПисьмаСотрудникам = пустое  а нужно чтобы со значением только что созданным было
80 Ёпрст
 
11.09.14
14:26
(77)
У тебя ПисьмаСотрудникам  подчинен Справочник.Сотрудники  ?

Как ты при выборе Сотрудника открываешь форму ПисьмаСотрудников ?

Перехватываешь событие НачалоВыбора и ручонками форму открываешь ?
Если да, вот в этом событии форму открывай для выбора значения

Затем в событии ОбработкаВыбора лови своё значение и присваивай Обоим реквизитам значения
81 mir-mup
 
11.09.14
14:29
Справочник.Сотрудники родитель ПисьмаСотрудников
приИзмененииСотрудники
форма = вот тут не могу написать чтобы через реквезит открывал
Форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники
82 Ёпрст
 
11.09.14
14:31
>>>>Справочник.Сотрудники родитель ПисьмаСотрудников

Это как ?
Может всё же Владелец ?
83 Ёпрст
 
11.09.14
14:37
тебе всего лишь надо,
1.в свойстве реквизита ПисьмаСотрудников указать, что
Связь по владельцу Сотрудник
2.в свойствах реквизита Сотрудник прописать событие НачалоВыбора:

Процедура СотрудникНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ФормаПодбора = Справочники.ПисьмаСотрудников.ПолучитьФормуВыбора(,ЭтаФорма);
    Если ФормаПодбора.Открыта() Тогда
        ФормаПодбора.Активизировать();
    Иначе
        ФормаПодбора.Открыть();
    КонецЕсли;
    ФормаПодбора.РежимВыбора = Истина;
КонецПроцедуры

3.в свойствах формы прописать событие ОбработкаВыбора

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
   Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ПисьмаСотрудников")Тогда
        ПисьмаСотрудников= ЗначениеВыбора;
        Сотрудник = ПисьмаСотрудников.Владелец;
   КонецЕсли;
КонецПроцедуры

4. кушать печенки
5. наслаждаться положительными эмоциями
84 DrZombi
 
гуру
11.09.14
14:38
(81) Родитель, это Группа справочника "Х"
А Владелец, это Другой справочник "Ц", который стоит во главе Справочник "Х".
85 DrZombi
 
гуру
11.09.14
14:45
Если только у него у родителя вместо групп элементы :)

Тогда по сути любой элемент играет роль, как родителя, так и элемента в зависимости от желания пользователя :)
86 DrZombi
 
гуру
11.09.14
14:46
В общем навертели, теперь разобраться в собственной структуре не могут :)
87 mir-mup
 
11.09.14
14:51
справочника всего два... два реквезита, один владелец другого.
88 DrZombi
 
гуру
11.09.14
14:52
(87) Тогда не путай нас, Родитель и Владелец разные вещи :)
89 mir-mup
 
11.09.14
14:54
Ёпрст, сейчас гляну, но конечно извини, очень грАмоздко как то получилось. через реквезит формы можно форму объекта(ссылку  на справочник) получить как нибудь?
90 mir-mup
 
11.09.14
14:56
дрЗомби читай код.  там написано все.
два справочника - они же на форме реквизитами стоят.

СотрудникПриИзменении
Форма=получитьФорму(Справочник.ПисьмаСотрудникам.ФормаОбъекта")
форма.Открыть()
Форма.Объект.Владелец= Объект.Сотрудники

так работает только реквезит Письма сотрудникам не заполнен остается.
91 Ёпрст
 
11.09.14
14:58
+83.. а можно сделать так:

в форму списка справочника Сотрудники поместить табличное поле, в котором отображать подчиненные элементы - письма сотрудников. И посылать  ОповеститьОвыборе в событии выбора этой таблички, если форма открыта из твоей формы (о чем предварительно сказать ей)..

Тогда достаточно в твоей форме будет нажимать на выбор сотрудника - в котором сразу выбирать "письма", видя при этом и самих сотрудников и их письма.
92 Ёпрст
 
11.09.14
15:00
(90) ты себе противоречишь.
СотрудникПриИзменении будет только , если ты ужо выбрал сотрудника.
Там да, можешь открыть сразу ПисьмаСотрудникам.. весь код есть в (83). Замени только СотрудникНачалоВыбора на СотрудникПриИзменении и выкини оттуда тандартнаяОбработка = Ложь;
93 palladyi
 
11.09.14
15:02
Открой форму модально и не парься. А вообще ИМХО ветку можно уже в юмор перекидывать.
94 mir-mup
 
11.09.14
15:04
пользователь открывает сотрудника, и выбирает его, открывается письмо для сотрудника пользователь его заполняет всё.
на форме видим:
Сотрудник - Иванов
ПисьмоСотруднику - Иванов09.11
95 Ёпрст
 
11.09.14
15:10
(94) утомил

1.в свойстве реквизита ПисьмаСотрудников указать, что
Связь по владельцу Сотрудник
2.в свойствах реквизита Сотрудник прописать событие ПриИзменении:

Процедура СотрудникПриИзменении(Элемент)
    ФормаПодбора = Справочники.ПисьмаСотрудников.ПолучитьФормуВыбора(,ЭтаФорма);
    Если ФормаПодбора.Открыта() Тогда
        ФормаПодбора.Активизировать();
    Иначе
        ФормаПодбора.Открыть();
    КонецЕсли;
    ФормаПодбора.РежимВыбора = Истина;
    ФормаПодбора.ПараметрОтборПоВладельцу = Сотрудник;
   ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Владелец.Доступность = Ложь;

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

3.в свойствах формы прописать событие ОбработкаВыбора

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
   Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ПисьмаСотрудников")Тогда
        ПисьмаСотрудников= ЗначениеВыбора;
      //  Сотрудник = ПисьмаСотрудников.Владелец;
   КонецЕсли;
КонецПроцедуры

4. кушать биомать, наконец печенки!!!!!!!!!!!!!!!

5. наслаждаться положительными эмоциями
96 Ёпрст
 
11.09.14
15:11
ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Владелец.Доступность = Ложь;

вот это вот еще поправь на
ФормаПодбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Владелец.Доступность = Ложь;

или совсем выкини, ежели нет настроек отбора в форме
97 mir-mup
 
11.09.14
15:12
Паладий, рад что весело, эт лучше чем когда грусно, но куда читабельнее и понятнее если предложение с кодом будет.
итак вопрос в том чтобы не писать на всех формах код.
а на одной обратиться к новой форме, через реквезит.
а отбор не нужен ни где. Решал год назад все тремя сторочками на одной форме!
98 mir-mup
 
11.09.14
15:13
Приятного аппетита Ёпрст, и спасибо за помощь посильную.
99 Ёпрст
 
11.09.14
15:16
(98) чего, (95) не осилил
100 Ёпрст
 
11.09.14
15:17
,
101 Ёпрст
 
11.09.14
15:17
?
102 1Сергей
 
11.09.14
15:18
(101) Сейчас ты ещё виноват останешься :)
103 mir-mup
 
11.09.14
15:18
Ёпрст, не хотел ни чем обидеть,
104 Ёпрст
 
11.09.14
15:21
(103) и ?
105 palladyi
 
11.09.14
15:21
(97) Смотри, сделал у себя, подставь свои реквизиты в нужные места:
106 palladyi
 
11.09.14
15:21
Объект = Справочники.Доставка.СоздатьЭлемент();
    Форма = Объект.ПолучитьФорму("УФ_ФормаЭлемента");
    Форма.ОткрытьМодально();
    Ссылка = Объект.Ссылка;
    Сообщить(Ссылка);
107 palladyi
 
11.09.14
15:22
+ (106) вместо сообщить() просто подставляешь к себе
108 Ёпрст
 
11.09.14
15:22
модальность зло
109 palladyi
 
11.09.14
15:23
(108) не в данном случае
110 Ёпрст
 
11.09.14
15:24
(109) есть уверенность, что автору  форма Нового элемента нужна всегда ?
111 Ёпрст
 
11.09.14
15:24
при каждом выборе сотрудника ?
112 palladyi
 
11.09.14
15:25
(110) исходя из ТЗ - да
113 palladyi
 
11.09.14
15:25
(112) + в смысле из (0)
114 Ёпрст
 
11.09.14
15:26
:))
115 palladyi
 
11.09.14
15:26
=)
116 Ёпрст
 
11.09.14
15:27
ну-ну..
Предлагаю автору выбрать хотя бы пару раз сотрудника в этой форме с этим кодом..
а лучше пять раз.
Когда надоесть плодить новые подчиненные элементы, сделать по-другому и наконец, кушать печенки.
117 palladyi
 
11.09.14
15:29
(116) ну, это другой вопрос =)
Можно вместо создания нового объекта делать выборку последнего заведенного с этим владельцем. Можно добавить единорогов какающих обработками, но только после постановки соответствующего ТЗ. ;)
118 palladyi
 
11.09.14
15:32
Автор, ты тут или мы зря стараемся?
119 DrZombi
 
гуру
11.09.14
15:39
(117) Предлагаю выпилить единорогов :)
120 palladyi
 
11.09.14
15:40
(119) Без единорогов - не то =)
121 mir-mup
 
11.09.14
15:43
Да тут, еще раз извиняюсь если кого обидел чем, ни хотел ни разу.
122 palladyi
 
11.09.14
15:43
(121) да ты не извиняйся, ты читай и комментируй =)
123 mir-mup
 
11.09.14
15:49
это не то
124 Ёпрст
 
11.09.14
15:50
чем (95) не устраивает ?
125 palladyi
 
11.09.14
15:52
(123) чем конкретно не то?
126 palladyi
 
11.09.14
15:52
в реквизит формы ты можешь подставить только ссылку на объект, но не форму.
127 palladyi
 
11.09.14
15:52
(124) он в 3 строчки хочет
128 mir-mup
 
11.09.14
15:54
написал же форма
два реквизита
один Сотрудники
другой ПисьмаСотруднику
нужно чтобы работало как то так:
Форма=получитьФорму(тут мне значение элемента нужно записать)
мне надо чтобы на форме было так:
сотрудник: Иванов
Письмо: Иванов делай вещи.

выбрали сотрудника, и создавай письмо, чтобы пользователю не клацать по форме выбора письма и создать новое.
129 palladyi
 
11.09.14
15:56
(128) в (106) так и будет
130 palladyi
 
11.09.14
15:57
+(129) просто запихни код в СотрудникПриИзменении
131 Ёпрст
 
11.09.14
15:59
(128) уверен, что так и надо ?
При каждом изменении создавать новый подчиненный элемент ПисьмаСотрудников ? Прям так и надо ?!
132 Ёпрст
 
11.09.14
16:00
И открывать форму нового элемента письмаСотрудников ?