|
v7: Зачем функция глВзятьКонтекст? | ☑ | ||
---|---|---|---|---|
0
Shrk_V_V_V
13.08.18
✎
11:04
|
Тут
Книга знаний: Параметр и контекст формы такую функцию нашел Функция глВзятьКонтекст(Конт) Экспорт Возврат Конт; КонецФункции // глВзятьКонтекст() Зачем она, объясните пожалуйста. |
|||
1
Провинциальный 1сник
13.08.18
✎
11:12
|
Чтобы можно было сохранить контекст в переменную.
|
|||
2
Franchiser
гуру
13.08.18
✎
11:14
|
Наверно потому что так получишь копию контекста
|
|||
3
Shrk_V_V_V
13.08.18
✎
11:20
|
Переспрошу.
Может быть эта конструкция нужна, когда вы хотите передать свой контекст в чужую форму? А чтобы просто порулить чужой формой ничего в нее не передавая можно смело писать ОткрытьФорму("Обработка...", ЕйныйКонтекст) |
|||
4
HawkEye
13.08.18
✎
11:22
|
(3) смело пиши....
|
|||
5
Fedor-1971
13.08.18
✎
11:51
|
(3) Всё крайне просто: Контекст записать ни куда нельзя, т.е. кон = Контекст вызовет ошибку, а через финт ушами из (0) всё пройдёт гладко.
Смелое утверждение, но не имеющее практического применения, отправить контекст текущей формы в обработку интересно (опять же, при прямой передаче тебя пошлют в или на), но получить контекст открытой обработки - смысла нет, форма уже открыта и рулить ей будет пользователь. |
|||
6
Shrk_V_V_V
13.08.18
✎
12:04
|
>но получить контекст открытой обработки - смысла нет
Ровно эта задача передо мной и стоит. Есть обработка, на ней 8 кнопочек, пользователь их нажимает по порядку и любуется на результат. Надо открыть, нажать 8 кнопочек по порядку автоматически и закрыть. Так что мне сейчас ровно получить контекст нужно. |
|||
7
Fedor-1971
13.08.18
✎
12:19
|
(6) Ну раз тебе нужно просто нажать кнопки.
Не ищи себе проблемы и не геморойся с контекстами. Передаёшь в Параметр из ОткрытьФорму() строку "АвтоматомНажатьКнопкиИЗакрыть" в форме обработки ПриОткрытии() ловишь Если Форма.Параметр = "АвтоматомНажатьКнопкиИЗакрыть" тогда //жмакаем кнопки в нужном порядке СтатусВозврата(0); // типа запретили открывать Возврат; КонецЕсли; |
|||
8
Shrk_V_V_V
13.08.18
✎
12:23
|
Так и хотел сначала делать)) А потом, когда прочитал про контекст, решил что мне удобнее сделать не "ПриОткрытии", а через контекст чужой формы
|
|||
9
Shrk_V_V_V
13.08.18
✎
12:24
|
Гемороя вроде как нет никакого, пока не вижу во всяком случае.
|
|||
10
Shrk_V_V_V
13.08.18
✎
12:29
|
Ну и передавать в моей задаче в варианте с ПриОткрытии надо не строку, а список значений,где строка - один из элементов, поскольку еще параметры есть.
|
|||
11
Fedor-1971
13.08.18
✎
12:33
|
(8)пока не видишь, но когда тебе придётся что-то исправить (а может и не тебе), замучаешься искать где рулил контекстом данной обработки (уберут одну кнопочку и понеслась веселуха искать где мы рулили и всюду ли поправили).
Второй момент: нужно реализовать проверку факта "Форма открыта и заполнена" (открыта - тип 100, а заполнена ли?) (10) я предложил вариант "Замкнутая система", как делать тебе виднее. |
|||
12
Shrk_V_V_V
13.08.18
✎
12:35
|
(11) Большое спасибо за обсуждение вам и другим коллегам, стало понятнее про контексты.
|
|||
13
Злопчинский
13.08.18
✎
14:48
|
я думаю, что ВызовМоейФункции(Контекст) или открыть форму с прямым указанием Контекста - проканает.
только становится интересно, как будет возвращаться через Конекст то, что возвращается при открытии формы обработки... |
|||
14
Shrk_V_V_V
13.08.18
✎
15:07
|
Если честно, мне так до конца и не понятно, почему вызов функции прокладки что-то меняет. Копирования контекста не происходит, контекст явно мутабельный, т.е это ссылка. Т.е эта функция не делает ничего. Разве что 1с пытается вернуть новый контекст не по адресу старого контекста, а по адресу функции. И поэтому от прокладки получается какая-то польза.
|
|||
15
Злопчинский
13.08.18
✎
15:11
|
(14) ОткрытьФорму("Отчет",Контекст,ИмяОбработки);
- в третьем параметре _возвращается_ кое-что при открытии обработки. как думаешь, что будет с системой когда обработка в чужлй Конекст попыфтается что-то принудительно запихнуть...? мне вот тоже интересно, но лень проверять |
|||
16
Fedor-1971
13.08.18
✎
15:19
|
(13) вызов функции проканает, предать Контекст в ОткрытьФорму, нет, т.к. считается прямым сохранением контекста (по крайней мере, когда я пытался, платформа выдавала ошибку)
(14) есть платформа и она запрещает сохранять контекст формы, но есть лазейка, его можно отправить в функцию, а то что возвращает функция, как-бы уже и не контекст, а переменная (15)потому и реализован запрет на передачу в ОткрытьФорму контекста текущей формы на уровне платформы |
|||
17
Shrk_V_V_V
13.08.18
✎
15:22
|
(16) Шаманство))
|
|||
18
Shrk_V_V_V
13.08.18
✎
15:23
|
Если то, что возвращает функция, отличается от того, что в нее передали, тогда что-то проясняется)
|
|||
19
Shrk_V_V_V
13.08.18
✎
15:25
|
ну да, в семерке же нет явного понятия ссылки. Если документ, полученный методом "СоздатьОбъект", и тот, который живет в реквизите. Это, наверное, способ сделать из объекта ссылку.
|
|||
20
Провинциальный 1сник
13.08.18
✎
18:24
|
(16) "есть платформа и она запрещает сохранять контекст формы, но есть лазейка"
Скорее не так. Платформа не запрещает сохранять контекст. В ней просто не реализовано обращение в контексту в операторе присваивания. Литерал "Контекст" - это не псевдопеременная, а некий псевдооператор, который может быть только параметром вызова функции. И вот из-за этой недоделки и придумали костыль - присваивать через функцию. |
|||
21
Franchiser
гуру
13.08.18
✎
21:39
|
(0) далее в статье контекст передается через список значений, не понятно зачем пишут про эту функцию
Процедура ОткрытьПример() Парам = СоздатьОбъект("СписокЗначений"); Парам.ДобавитьЗначение(Контекст,"Конт"); ОткрытьФорму("Обработка.Пример",Парам); ПримерКонт = Парам; КонецПроцедуры //ОткрытьПример |
|||
22
Провинциальный 1сник
13.08.18
✎
22:10
|
(21) Ну вот значит еще один вариант костыля - запихать контекст в переменную через список значений, без создания функции. В общем, главное чтобы контекст передавался как параметр куда-то откуда его можно взять.
|
|||
23
Злопчинский
14.08.18
✎
01:44
|
(22) взять не проблема, лучше в него ничего не пихать...
|
|||
24
Провинциальный 1сник
14.08.18
✎
07:43
|
(23) Пихать не всем требуется, многим достаточно брать оттуда что-то
|
|||
25
НЕА123
14.08.18
✎
07:54
|
(19)
>способ сделать из объекта ссылку ИМХО, это и есть ответ на (0). Получить ссылку на Контекст. |
|||
26
ADirks
14.08.18
✎
08:59
|
(25) единственно правильный ответ - в (20)
всё остальное, уж простите ребята, но это ваши собственные измышления, не имеющие ничего общего с реальностью. и да, запихать в контекст что-либо у вас просто не получится. |
|||
27
Fedor-1971
14.08.18
✎
10:01
|
(20) простыми буквами "платформа не может" - понятно 98%,
как реализовано: нет присваивания или есть функция запрета (то же присваивание, но с вызовом исключения) - это технические варианты реализации, они волнуют около 5-10% вопрошающих / утверждающих (вот, как в 26) и не имеют достоверного ответа, а остальным тех.подробности без разницы (нет, так нет, будем извращаться). (26) Реальность вещь изменчивая. На вопрос человека, не знакомого с благами цивилизации, "Как работает факс?" можно долго рассказывать про электричество и протоколы передачи данных, а можно ответить "Дух природы взял листок из этой коробки и отнёс в другую коробку у получателя". И ты не обманул (тем более, что тонкостей всех использованных технологий можешь и сам не знать) и человеку стал более - менее понятен принцип данного способа обмена информацией. Что немаловажно, без визгов про демонов и проч. злыдней и записывания тебя в их приспешники. Про телефон, ещё более круто: "Зачем это Толик залез в столь маленькую коробку и говорит из неё?" (Баба яга в одной из экранизаций сказок). |
|||
28
ADirks
14.08.18
✎
12:49
|
(27) Чтобы было понятно всем и окончательно, как раз и надо с подробностями объяснять. а то измыщлений не избежать.
Например с факсом, после такого объяснения, может возникнуть вопрос "а почему бы духу природы не перенести получателю жареную курицу?" Что же касается данной конкретной реальности, то это именно особенность синтаксического анализатора, а не сознательный запрет. (он у 1С вообще забавный, анализатор этот) |
|||
29
Fedor-1971
14.08.18
✎
13:07
|
(28) не может дух отнести курицу, стащит из вредности, а бумагу 100% передаст, бо она ему не нужна (даже для самой употребимой цели, поскольку дух бесплотен)
Может синтаксический анализатор, может недоработка, может запрет, а может и ошибка - суть остаётся той-же платформа не позволяет сделать операцию. Почти плакат получился "ЛЮДИ!!! примите к сведению ..." |
|||
30
ADirks
14.08.18
✎
13:35
|
На плакате должно быть так:
ТЫ ПРИНЯЛ К СВЕДЕНИЮ?!! и красноармеец с ружьём |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |