![]() |
![]() |
![]() |
|
v.8 Для чего нужны и где стоит применять глобальные переменные? Ø |
☑ | ||
---|---|---|---|---|
0
paxan
07.12.05
✎
07:16
|
Здравствуйте.
Когда-то было обсуждение "Опрос, зачем в V8 общие модуля?"... В свете непосредственного изучения восьмерки, вопрос участникам обсуждения - по прошествии времени кто-нибудь все-таки понял, зачем нужны глобальные переменные в модуле приложения? Я к тому, что в настоящий момент проектирую конфигурацию, и не хотелось бы изначально делать неправильные шаги (хотя понятно, что все еще не раз будет переделываться). То, что глобальные переменные недоступны в общих модулях - это понятно, но почему они доступны тогда во всех остальных местах... Короче запутался я совсем... Буду признателен всем, кто прояснит эту ситуацию. |
|||
1
paxan
07.12.05
✎
07:56
|
да ёлы-палы... неужели на просторах нашей великой Родины нет спецов по восьмерке..
уже какой вопрос, а ответы из области "а черт его знает, как там 1С придумала" или пустозвонство... грустно.. :-( однако, 8-ка по официальным сообщениям идет семимильными шагами по стране.. и обидно, что это на самом деле тенденция, а точнее политика скрытия фирмой 1С особенностей использования движка, языка и т.п.. Что с семеркой такая ситуация была, что сейчас...аа ..ладно.. дальше одни маты.. |
|||
2
paxan
07.12.05
✎
09:04
|
ап
|
|||
3
Pilcrow
07.12.05
✎
09:20
|
Забей. Использование глобальных переменных - вообще дурной тон, вроде безусловного перехода.
|
|||
4
paxan
07.12.05
✎
09:39
|
тогда вся типовая торговля не просто дурной тон...
в чем разница применения глобальных переменных и параметров сеанса? если звезды зажигают, значит это кому-нибудь нужно.. |
|||
5
FLENDGER
07.12.05
✎
10:19
|
И действительно... Я уже месяцев 3 минимум из 8ки не вылазию, при этом ни разу не использовал глобальные переменные... Просто 8ка так спроектирована, что без вполне можно обойтись. А в тех случаях, когда нужно что-то глобальное, в 8ке сделали ПараметрыCеанса..
|
|||
6
FLENDGER
07.12.05
✎
10:22
|
(4) че-то ощущение, что ты не особо видел УТ... там максимум 10 глоб. переменных, и то совсем общего назначения, как то - для работы с торг. оборудованием... есть мысля, что их оставили для совместимости с 7кой
|
|||
7
paxan
07.12.05
✎
10:24
|
причем тут количество как таковое..
я говорю про количество вызовов глобальных переменных.. а совместимость с семеркой - это смех.. о какой совместимости тут может быть речь. |
|||
8
FLENDGER
07.12.05
✎
10:58
|
про совместимость - никакого смеха... обработки по работе с торг. оборудованием практически не переписывались с 7й версии, поэтому и оставили такого рода "совместимость"
а количество тут при том - ТиС - Сколько переменных глобальных? на них вся работа построена... в 8ке работа строится на ПараметрахСеанса, поэтому практически нет глобальных переменных... Ответных вопрос - причем тут количество вызовов глоб. переменных? Если тебе нужна всего одна переменная глобального характера, но ты ее будешь миллион раз вызывать, так чего тогда подобные вопросы задавать - разницы никакой, что через параметрысеанса, что через глоб. переменные А вот если их много, тогда уже будет разница... Хотя бы в том, что к Параметрам ты сможешь устанавливать права (т.к. это уже объект, а не переменная), кроме того всю систему безопасности и разграничения доступа к объектам сможешь на этих параметрах строить... |
|||
9
paxan
07.12.05
✎
11:05
|
во-о-о...
насчет прав это мысль... это да, важно. В этом есть большое различие... Но все равно, спорно надо-ли.. |
|||
10
FLENDGER
07.12.05
✎
11:15
|
Кстати, ответ на "Зачем нужны глобальные переменные в модуле приложения"...
Модуль приложения - такой же модуль, как и все остальные (модули объектом, форм и т.д.) => Значит у него могут быть переменные, причем если добавить слово экспорт, то они становятся глобальными - а т.к. модуль приложения в иерархии на самом высоком уровне, то эти переменные становятся доступны всем остальным модулям Почему они не доступны Общим модулям: т.к. общие модули выпадают из т.н. иерархии модулей - они стоят особняком, они - подобие dll-ки - "склад" процедур и функций, каждая из которых стоит особняком от остальных, то есть локализована - по этой же причине в Общих модулях вообще нет глобальных переменных... Ну а доказывать тебе, надо ли использовать глобальные переменные или нет, у меня, боюсь, времени нет... Единственный совет - забей на 7шную психологию, если хочешь писать в 8ке - надо полностью менять мышление в сторону большей "объектности" (НЕ объективности) :) |
|||
11
paxan
08.12.05
✎
02:16
|
Всем спасибо за ответы!
До конца все равно не прояснил ситуацию... но постараюсь, по возможности, в конфигурациии не использовать глобальных переменных. |
|||
12
clappa
08.12.05
✎
10:36
|
В защиту глобальных переменных:
Есть в конфигурации обработка "ЛогПроведенияДокументов". Примерно то же самое, что окно сообщений, но только для комментариев проведения. По логике вещей, должен существовать только один активный экземпляр этой обработки. И как это сделать без глобальных переменных? |
|||
13
AuDim
08.12.05
✎
12:44
|
Если все обобщить:
Глобальные переменные: физически находятся на машине, с которой запущенн сеанс. Соотвественно эти переменные не видны ни серверу предприятия ни SQL серверу. Только текущему сеансу. Т.К. общие модули могут работать и на сервере предприятия, то соотвественно такие общие модули ну ни как не увидят эти глобальные переменные. По этому и было введено такое искуственное ограничение на видимость глобальных переменных из общих модулей. Параметры сеанса: физически находятся на SQL сервере и видны всем - и глобальному модулю и объектам, и общим модулям где-бы они не исполнялись, и даже видны SQL запросам. Рекомендации по использованию: В глобальных переменных хранить информацию, связанную с интерфейсной работой. В параметрах сеанса хранить информацию, связанную с обработкой данных. |
|||
14
FLENDGER
08.12.05
✎
22:33
|
(13) Мде, интересные выводы, особенно интересно - откуда они могли появиться... С Вами сложно согласиться :) А как Вы объясните файловый вариант базы? где же тогда хранятся, по-Вашему, глоб. переменные, общие модули, модули внешнего соеднинения, и параметры сеанса в этом случае?
Я вообще не понимаю смысла сравнения глоб. переменных и параметров сеанса. Это разные вещи. Параметры - это объекты конфиги, переменные - это переменные, и объектной сущности не имеют сами по себе (даже, если значением переменной является объект) RE: Параметры сеанса: физически находятся на SQL сервере и видны всем - мде, но боюсь это тоже подходит больше к определению Констант, потому что параметры сеанса - это именно параметры СЕАНСА и, как и любая переменная (в этом у них и есть общее или сходство) - имеют ЗНАЧЕНИЕ (не значимость) только для текущего сеанса и у другого пользователя - это значение также индивидуально; параметры к тому же инициализируют тоже только для текущего сеанса (хотя, кажется, и есть возможность сохранения и восстановления их (подобие сохранение и восстановление значений параметров обработок) |
|||
15
AuDim
09.12.05
✎
10:43
|
(14)
"А как Вы объясните файловый вариант базы? где же тогда хранятся, по-Вашему, глоб. переменные, общие модули, модули внешнего соеднинения, и параметры сеанса в этом случае?"- Файловый вариан - частный лучай SQL версии, и ограничения по видимости глобальных переменных были введены как раз для того чтобы файловая версия вела себя также как и SQL версия. "Я вообще не понимаю смысла сравнения глоб. переменных и параметров сеанса. Это разные вещи."- Как раз по сути это одинаковые вещи, различающиеся местом их ранения. "Параметры сеанса: физически находятся на SQL сервере и видны всем"- Вы не правы, то что есть такой параметр сеанса - действительно виден всем, но вот его значение - только своему сеансу. "...но боюсь это тоже подходит больше к определению Констант" - Значения констант одинаковы для всех сеансов, и ее изменение увидят в других сеансах. ", потому что параметры сеанса - это именно параметры СЕАНСА и, как и любая переменная (в этом у них и есть общее или сходство) - имеют ЗНАЧЕНИЕ (не значимость) только для текущего сеанса и у другого пользователя - это значение также индивидуально; параметры к тому же инициализируют тоже только для текущего сеанса (хотя, кажется, и есть возможность сохранения и восстановления их (подобие сохранение и восстановление значений параметров обработок)"- И гл.пер. и пар.сеан. создаются на время сеанса и имеют значение только для текущего сеанса, и у других пользователей гл.пер. и пар.сеан будут иметь индивидуальные значения. В этом плане гл.пер. и пар.сеан. ведут себя абсолютно одинаково. Поэтому их можно и нужно сравнивать. И поэтому возникает так много вопросов по их применению. Вся разница только в том что гл.переменные находятся в памяти клиента и доступны коду выполняемому на клиенте, пар.сеан. создаются в таблице на SQL сервере. Поэтому, если переменную не надо использовать в запросах и общих модулях, то ее можно описать глобальной переменной, а если надо использовать переменную в запросах и общих модулях то ее лучше поместить в параметр сеанса (чтобы каждый раз не передавать в запрос и не отсылать ее на сервер, тем более что это не всегда возможно). Пример - RLS в типовых. |
|||
16
FLENDGER
09.12.05
✎
11:48
|
(15) И все таки с Вами сложно согласиться до конца :)
Вопрос: откуда Вы взяли, что Параметры сеанса хранятся на сервере? Если так, то тогда ТЕОРЕТИЧЕСКИ есть возможность получить ПараметрСеанса другого пользователя - очень сомнительно... К тому же вообще сомнительно, что они имеют табличную структуру, и как следствие, хранятся на сервере Далее... Цитата из книги по конфигурированию и администрированию: "Параметры сеанса предназначены, в основном, для участия в запросах и разграничения доступа к объектам базы..." Их использование снижает время доступа к данным за счет исключения связанных таблиц..." Думаю, достаточно ясно описано их назначение. Отсюда можно сделать еще раз один и тот же вывод - почему бы не почитать сначала литературу, а уж потом пытаться что-то и с чем-то сравнивать А вот проблема глобальных переменных - это уже как заметил (3) больше проблема стиля (или тона) программирования и относится не к 8ке, а к любому языку программирования - и не было у разработчиков платформы какой-то особой задумки по поводу глобальных переменных - ведь, повторяю еще раз, они всего лишь переменные и больше ничего, как и в других языках программирования. Поэтому, хочешь научиться красиво писать - читай соответствующую литературу, касающуюся того, как писать и где писать без привязки к языку... В отличие от этих вот переменных ПараметрыСеанса - это задумка 1С, и по этой причине - у них появляется свое предназначение (указано цитатой выше) А их сравнение с переменными, константами и пр. пр. - ну давайте еще сравним их со справочниками, регистрами и т.п. Заменить всегда можно что угодно и чем угодно, а вот использовать в нужном месте нужный инструмент - это уже признак мастерства и опыта! Думаю, дальше не стоит заниматься балтовней и гаданием, что где храниться,зачем используется... Кому как нравиться,тот пусть так и пишет - а уж советами пусть 1С занимается, ей видней, все же сами писали :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |