Имя: Пароль:
1C
 
1с 8.0 - Дополнение контекста объектов и форм. (Рук-во по языку стр. 1-37)
0 Jaws
 
19.08.04
10:18
Как красиво написано (почти цитата) - "в языке при обращении извне к объектам и формам есть возможность доступа к перем. проц. и функц. как к свойствам объектов которые объявлены с ключевым словом "экспорт". Но у меня не работает. Помогите.

Более подробное описание проблемы

http://1c.proclub.ru/modules/newbb/viewtopic.php?topic_id=264944&forum=2
1 Pilcrow
 
19.08.04
10:28
(0) Ты делаешь:

MainWindow = Обработки.МояОбработка.ПолучитьФорму("Форма");

- и получаешь просто новый экземпляр формы. А Переменная у тебя, очевидно, имеет значение в другом, открытом экземпляре формы, с которым работаешь, а в новом, ессно, ее значение - Неопределено.
2 BorisG
 
19.08.04
10:32
0. Не стоит приводить ссылку на вопрос в другом форуме. Приведи вопрос тут, если уважаешь отвечающих.
3 Jaws
 
19.08.04
10:44
ОК.
Привожу свой монолог с чужого форума.

====================================================
v 8.0 - экспорт переменных контекста.


Имеется форма обработки. В её модуле объявлена переменная с модификатором export. Необходимо работать с этой переменной в процедуре другой формы этой же обработки.

Делаю примерно так так -

// Модуль другой формы
MainWindow = Обработки.МояОбработка.ПолучитьФорму("Форма");
Message("Переменная = " + MainWindow.Переменная);

Результат - никакой. Хотя Переменная имеет определенное значение, но оно не доступно. Ошибок нет. Замечательно, что если исправить имя переменной в модуле формы-"клиента" на не существующее то система ругается что переменная не определена. То есть система понимает о какой переменной идет речь, но её значение недоступно.
 

 Гость   Отправлено: 18/08/2004 12:33

 Re: v 8.0 - экспорт переменных контекста.


Или подскажите как иначе обмениваться данными между формами.

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

 Гость   Отправлено: 18/08/2004 13:54

 Re: v 8.0 - экспорт переменных контекста.


Еще непонятно как обрабатывается выбор пользователя в ТабличномПоле. Поведение этого элемента для меня непонятно. Иногда, после некоторых манипуляций с его свойствами в конфигураторе (к сожалению я немогу найти закономерности) он начинает работать как мне хочется - то есть когда пользователь даблкликает на товаре окно формы закрывается, и логично предположить что нам после этого будет доступен результат его выбора (правда пока непонятно как). НО! до разбора того как пулчить этот результат (выбор пользователя) дело не дошло, т.к. элемент ТабличноеПоле спонтанно переходит в иной режим работы - при даблклике на товаре открывается карточка товара! Поэтому я и решил повесить на событие ТабличногоПоля обработчик который закрывает форму и с помощью "голобальных" переменных передает данные главному окну, что и было причиной моего первого вопроса. Вообщем полный швах. Помогите. Спасибо.
 

 Гость   Отправлено: 18/08/2004 15:29

 Re: v 8.0 - экспорт переменных контекста.


Разобрался с одной проблемой. Не скрою - удивлен.

Цитата:

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


Окончательно ввести ТабличноеПоле в нужный режим удалось следующим образом:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

Table = Controls.Find("ТабличноеПоле1");
Table.РежимВыбора = True;

...


Ну скажите, а как же раньше оно впадало в такой режим? В пропертях редактируемых мышкой такого свойства не видно.  
 

 Гость   Отправлено: 18/08/2004 17:32

 Re: v 8.0 - экспорт переменных контекста.


Замучался. Не выходит каменный цветок.

Как все-таки обмениваться данными между формами. Можно не "вообще", а в моем конкретном случае (выше описано).

Уже и добавил к форме реквизит - но не пашет. Главное что, устанавливаю значение реквизита в его родной форме, печатаю его от туда же - все правильно (ну еще бы  ). Далее, по ходу дела вываливается вторая форма. В ней меняю его значение таким образом:

MainWindow= Обработки.МояОбработка.ПолучитьФорму("Главнаяформа");
MainWindow.ИмяРеквизита= ЕгоЗначение;

При возврате в модуль главной формы печатаю значение Реквизита - пожалуйста вам старое значение. Засомневался - можно (и надо ли) использовать метод ПолучитьФорму, возможно он создает новый экземпляр, уничтожающийся и т.д. и т.п. Но как поиметь этот реквизит иначе. Разные способы использовал но не получилось.

Всё.  
===============================================================

Спасибо. Я это уже предполагал. Но каково же решение.
В руководстве заботливо размешен кусок кода где демонстрируется вызов МЕТОДА формы. Спасибо писателям за посеенное сомнине - ведь методы в отличии от переменных существуют в единственном экземпляре для всех экземпляров класса.
4 Jaws
 
19.08.04
10:56
Хотя если метод работет с внутреннеми данными объекта, то вызов метода для нового экземпляра не имеет смысла, в общем случае.
5 Pilcrow
 
19.08.04
11:05
(4) Уверен - ты скоро дойдешь до всего сам. Думать любишь и умеешь. Скидывая такие вопросы на форумы, ты можешь облениться и разучиться думать.
6 Jaws
 
19.08.04
11:22
Pilcrow - спасибо за доверие :).

Но уменя тут много другого над чем думать надо быстро-быстро :). А в этой проблеме, с областью видимости, временными переменными, или еще с чем там связанную я лично виню "ортопедическое" руководство по языку.
7 Jaws
 
19.08.04
14:05
Нашел таки, волшебное слово "ЭтотОбъект". Получать формы необходимо у него.

Да... если это тот способ, который подразумевался разработчиками (?), то писателям руководства по языку надо руки оборвать :).
Ошибка? Это не ошибка, это системная функция.