Имя: Пароль:
1C
 
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С занимается, ей видней, все же сами писали :)