Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Зачем функция глВзятьКонтекст?

v7: Зачем функция глВзятьКонтекст?
Я
   Shrk_V_V_V
 
13.08.18 - 11:04
Тут
Книга знаний: Параметр и контекст формы

такую функцию нашел

Функция глВзятьКонтекст(Конт) Экспорт
            Возврат Конт;
      КонецФункции // глВзятьКонтекст()

Зачем она, объясните пожалуйста.
 
 
   Провинциальный 1сник
 
1 - 13.08.18 - 11:12
Чтобы можно было сохранить контекст в переменную.
   Franchiser
 
2 - 13.08.18 - 11:14
Наверно потому что так получишь копию контекста
   Shrk_V_V_V
 
3 - 13.08.18 - 11:20
Переспрошу.
Может быть эта конструкция нужна, когда вы хотите передать свой контекст в чужую форму? А чтобы просто порулить чужой формой ничего в нее не передавая можно смело писать
ОткрытьФорму("Обработка...", ЕйныйКонтекст)
   HawkEye
 
4 - 13.08.18 - 11:22
(3) смело пиши....
   Fedor-1971
 
5 - 13.08.18 - 11:51
(3) Всё крайне просто: Контекст записать ни куда нельзя, т.е. кон = Контекст вызовет ошибку, а через финт ушами из (0) всё пройдёт гладко.

Смелое утверждение, но не имеющее практического применения, отправить контекст текущей формы в обработку интересно (опять же, при прямой передаче тебя пошлют в или на), но получить контекст открытой обработки - смысла нет, форма уже открыта и рулить ей будет пользователь.
   Shrk_V_V_V
 
6 - 13.08.18 - 12:04
>но получить контекст открытой обработки - смысла нет

Ровно эта задача передо мной и стоит. Есть обработка, на ней 8 кнопочек, пользователь их нажимает по порядку и любуется на результат. Надо открыть, нажать 8 кнопочек по порядку автоматически и закрыть. Так что мне сейчас ровно получить контекст нужно.
   Fedor-1971
 
7 - 13.08.18 - 12:19
(6) Ну раз тебе нужно просто нажать кнопки.
Не ищи себе проблемы и не геморойся с контекстами.

Передаёшь в Параметр из ОткрытьФорму() строку "АвтоматомНажатьКнопкиИЗакрыть"

в форме обработки ПриОткрытии() ловишь
Если Форма.Параметр = "АвтоматомНажатьКнопкиИЗакрыть" тогда
  //жмакаем кнопки в нужном порядке

   СтатусВозврата(0);// типа запретили открывать

   Возврат;
КонецЕсли;
   Shrk_V_V_V
 
8 - 13.08.18 - 12:23
Так и хотел сначала делать)) А потом, когда прочитал про контекст, решил что мне удобнее сделать не "ПриОткрытии", а через контекст чужой формы
   Shrk_V_V_V
 
9 - 13.08.18 - 12:24
Гемороя вроде как нет никакого, пока не вижу во всяком случае.
   Shrk_V_V_V
 
10 - 13.08.18 - 12:29
Ну и передавать в моей задаче в варианте с ПриОткрытии надо не строку, а список значений,где строка - один из элементов, поскольку еще параметры есть.
 
 Рекламное место пустует
   Fedor-1971
 
11 - 13.08.18 - 12:33
(8)пока не видишь, но когда тебе придётся что-то исправить (а может и не тебе), замучаешься искать где рулил контекстом данной обработки (уберут одну кнопочку и понеслась веселуха искать где мы рулили и всюду ли поправили).
Второй момент: нужно реализовать проверку факта "Форма открыта и заполнена" (открыта - тип 100, а заполнена ли?)

(10) я предложил вариант "Замкнутая система", как делать тебе виднее.
   Shrk_V_V_V
 
12 - 13.08.18 - 12:35
(11) Большое спасибо за обсуждение вам и другим коллегам, стало понятнее про контексты.
   Злопчинский
 
13 - 13.08.18 - 14:48
я думаю, что ВызовМоейФункции(Контекст) или открыть форму с прямым указанием Контекста - проканает.

только становится интересно, как будет возвращаться через Конекст то, что возвращается при открытии формы обработки...
   Shrk_V_V_V
 
14 - 13.08.18 - 15:07
Если честно, мне так до конца и не понятно, почему вызов функции прокладки что-то меняет. Копирования контекста не происходит, контекст явно мутабельный, т.е это ссылка. Т.е эта функция не делает ничего. Разве что 1с пытается вернуть новый контекст не по адресу старого контекста, а по адресу функции. И поэтому от прокладки получается какая-то польза.
   Злопчинский
 
15 - 13.08.18 - 15:11
(14) ОткрытьФорму("Отчет",Контекст,ИмяОбработки);
- в третьем параметре _возвращается_ кое-что при открытии обработки. как думаешь, что будет с системой когда обработка в чужлй Конекст попыфтается что-то принудительно запихнуть...? мне вот тоже интересно, но лень проверять
   Fedor-1971
 
16 - 13.08.18 - 15:19
(13) вызов функции проканает, предать Контекст в ОткрытьФорму, нет, т.к. считается прямым сохранением контекста (по крайней мере, когда я пытался, платформа выдавала ошибку)

(14) есть платформа и она запрещает сохранять контекст формы, но есть лазейка, его можно отправить в функцию, а то что возвращает функция, как-бы уже и не контекст, а переменная

(15)потому и реализован запрет на передачу в ОткрытьФорму контекста текущей формы на уровне платформы
   Shrk_V_V_V
 
17 - 13.08.18 - 15:22
(16) Шаманство))
   Shrk_V_V_V
 
18 - 13.08.18 - 15:23
Если то, что возвращает функция, отличается от того, что в нее передали, тогда что-то проясняется)
   Shrk_V_V_V
 
19 - 13.08.18 - 15:25
ну да, в семерке же нет явного понятия ссылки. Если документ, полученный методом "СоздатьОбъект", и тот, который живет в реквизите. Это, наверное, способ сделать из объекта ссылку.
   Провинциальный 1сник
 
20 - 13.08.18 - 18:24
(16) "есть платформа и она запрещает сохранять контекст формы, но есть лазейка"
Скорее не так. Платформа не запрещает сохранять контекст. В ней просто не реализовано обращение в контексту в операторе присваивания. Литерал "Контекст" - это не псевдопеременная, а некий псевдооператор, который может быть только параметром вызова функции. И вот из-за этой недоделки и придумали костыль - присваивать через функцию.
   Franchiser
 
21 - 13.08.18 - 21:39
(0) далее в статье контекст передается через список значений, не понятно зачем пишут про эту функцию

Процедура ОткрытьПример()        
    Парам = СоздатьОбъект("СписокЗначений");
    Парам.ДобавитьЗначение(Контекст,"Конт");  
    ОткрытьФорму("Обработка.Пример",Парам);
    ПримерКонт = Парам;    
КонецПроцедуры//ОткрытьПример
   Провинциальный 1сник
 
22 - 13.08.18 - 22:10
(21) Ну вот значит еще один вариант костыля - запихать контекст в переменную через список значений, без создания функции. В общем, главное чтобы контекст передавался как параметр куда-то откуда его можно взять.
   Злопчинский
 
23 - 14.08.18 - 01:44
(22) взять не проблема, лучше в него ничего не пихать...
   Провинциальный 1сник
 
24 - 14.08.18 - 07:43
(23) Пихать не всем требуется, многим достаточно брать оттуда что-то
   НЕА123
 
25 - 14.08.18 - 07:54
(19)
>способ сделать из объекта ссылку
ИМХО, это и есть ответ на (0).
Получить ссылку на Контекст.
   ADirks
 
26 - 14.08.18 - 08:59
(25) единственно правильный ответ - в (20)
всё остальное, уж простите ребята, но это ваши собственные измышления, не имеющие ничего общего с реальностью.

и да, запихать в контекст что-либо у вас просто не получится.
   Fedor-1971
 
27 - 14.08.18 - 10:01
(20) простыми буквами "платформа не может" - понятно 98%,
как реализовано: нет присваивания или есть функция запрета (то же присваивание, но с вызовом исключения) - это технические варианты реализации, они волнуют около 5-10% вопрошающих / утверждающих (вот, как в 26) и не имеют достоверного ответа, а остальным тех.подробности без разницы (нет, так нет, будем извращаться).

(26) Реальность вещь изменчивая. На вопрос человека, не знакомого с благами цивилизации, "Как работает факс?" можно долго рассказывать про электричество и протоколы передачи данных, а можно ответить "Дух природы взял листок из этой коробки и отнёс в другую коробку у получателя". И ты не обманул (тем более, что тонкостей всех использованных технологий можешь и сам не знать) и человеку стал более - менее понятен принцип данного способа обмена информацией. Что немаловажно, без визгов про демонов и проч. злыдней и записывания тебя в их приспешники.
  Про телефон, ещё более круто: "Зачем это Толик залез в столь маленькую коробку и говорит из неё?" (Баба яга в одной из экранизаций сказок).
   ADirks
 
28 - 14.08.18 - 12:49
(27) Чтобы было понятно всем и окончательно, как раз и надо с подробностями объяснять. а то измыщлений не избежать.
Например с факсом, после такого объяснения, может возникнуть вопрос "а почему бы духу природы не перенести получателю жареную курицу?"

Что же касается данной конкретной реальности, то это именно особенность синтаксического анализатора, а не сознательный запрет. (он у 1С вообще забавный, анализатор этот)
   Fedor-1971
 
29 - 14.08.18 - 13:07
(28) не может дух отнести курицу, стащит из вредности, а бумагу 100% передаст, бо она ему не нужна (даже для самой употребимой цели, поскольку дух бесплотен)

Может синтаксический анализатор, может недоработка, может запрет, а может и ошибка - суть остаётся той-же платформа не позволяет сделать операцию. Почти плакат получился "ЛЮДИ!!! примите к сведению ..."
   ADirks
 
30 - 14.08.18 - 13:35
На плакате должно быть так:

ТЫ
    ПРИНЯЛ К СВЕДЕНИЮ?!!

и красноармеец с ружьём


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует