Имя: Пароль:
1C
 
Опрос, зачем в V8 общие модуля?
Ø
0 Sheridan
 
21.07.05
14:15
Весчь нужная и хорошая, позволяет нам сгрупировать логически наши общие функции и процедуры... Но, какого нельзя использовать глобальные переменные в модулях объявленные в глобальном модуле?? В чем прикол, где нас хотят развести, логика где???
1 Sheridan
 
21.07.05
14:19
В итоге функции и процедуры в которых сам бог велел использовать глобальные перемнные приходится выносить в модуля документов или глобальный модуль. Так зачем тогда общие модуля?/?
2 Sheridan
 
21.07.05
14:26
Мне вообще религия не позволяет не использовать глобальные переменные там где это можено (
3 pit
 
21.07.05
14:51
Гы, сына, LOL!!!
4 Тот
 
21.07.05
15:31
Есть же параметры сеанса. Мало?
5 DZIDen
 
21.07.05
15:36
Их можно объявлять в модуле приложения
6 Трактор
 
21.07.05
15:53
0. >>логика где???
Модуля могут исполняться на сервере и на клиенте. А это значить тянуть на сервер все глобальные переменные, что весьма геморно :-(
.
4 Мало. Нужно глобальную переменную типа ТаблицаЗначений.
7 defender1
 
21.07.05
17:05
(6) а кто мешает сделать параметр сеанса типа хранилище значений, туда не то что таблицу значений, дистрибутив винды затолкать можно...
8 Sheridan
 
21.07.05
17:23
Не убедили меня особо...LOL тоже мне знатоки
9 StackOverflow
 
21.07.05
17:31
В общих модулях располагаются общие функции. Т.е. такие функции, вызов которых возможен из нескольких мест программы одновременно. Соответственно для них не имеют смысла глобальные переменные.
10 pit
 
21.07.05
19:47
(8) Почитай об объектно-оренторованном программировании и правилах написания программ (требования к написанию)...
.
и не будешь задавать идиотских вопросов... ибо (9) - всего лишь малая толика этих правил...
11 Holder
 
21.07.05
21:23
(9) Что в данном контексте может означать слово "одновременно"?
12 Holder
 
21.07.05
21:37
(8) Ну и передавай свою "глобальную" параметром в процедуру общего модуля. Они по ссылке передаются, так что счастье полное.
13 ProBoy
 
21.07.05
22:17
Немного теории..."Общее описание языка v8"
В системе 1C-Предприятие существуют несколько видов программных модулей. Они различаются по месту размещения и доступному контексту.
Общие модули
Общие модули располагаются в отдельной ветке дерева метаданных. Основным назначением общих модулей является содержание общих алгоритмов конфигурации, доступных из разных модулей. В общих модулях отсутствует раздел определения переменных и раздел основной программы, то есть они содержат только раздел процедур и функций (см. раздел «Структура про­граммного модуля»).
В любом общем модуле возможно объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации, кроме других общих модулей, дополняя глобальный контекст прикладной задачи.
Для общих модулей конфигурации предусмотрен признак выполнения «Предпочтительно на сервере». Это означает, что данный модуль будет предпочтительно исполняться на сервере 1C: Предприятия. Если исполнение модуля происходит на сервере, то выполнение операторов, приводящих к интерактивному диалогу с пользователем или выводу сообщений на экран, в теле процедур и функций такого модуля будет приводить к ошибке выполнения. Например, вызов диалогов ввода данных, выдача предупреждений и тому подобные действия. Это относится и ко всем процедурам и функциям, вызываемым в процессе выполнения. Исключение составляет метод глобального контекста Сообщить.
Важно! При проектировании процедур и функций общих модулей следует иметь в виду, что в одном общем модуле не доступны процедуры и функции, объявленные в другом общем модуле с ключевым словом Экспорт.
Глобальный модуль
Глобальный модуль располагается в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы. В глобальном модуле возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации, кроме общих, дополняя глобальный контекст прикладной задачи.
Существует набор правил взаимодействия глобального модуля и общих модулей:
• в общих модулях недоступны переменные, процедуры и функции, объявленные в глобальном модуле с ключевым словом
Экспорт;
• в глобальном модуле доступны процедуры и функции, объявленные в общих модулях с ключевым словом Экспорт;
Модули прикладных объектов
..........................
Модули форм
..........................
Откудо видно, что скорее разделение глобалки произошло по причине попытки ускорения чистого общета данных. (ИМХО)
14 Sheridan
 
22.07.05
00:11
2(Pit):И какого ты приплел объектно-ориентированное программирование. что то я не припоминаю, что бы в концепции объектно ориентированного программитрование речь шла об общих модулях. Помнится, на паскале, я на сях не работал, с помощью команды uses можно было подключать модуля разные, но это ближе к концепции процедурного программирования, но я спокойно делал unit variables в котором описывал основные типы, объект, методы и свойства объектов их поведение, а потом с успехом подключая этот модуль вызывал их, включая общие переменные, там где надо было.
Давно заметил, ты любишь, извини за выражение, тупо что то пукнуть в чейто адрес, немного обос..ть, но когда тебя по существу просишь, ты нихрена не пишешь.
15 Sheridan
 
22.07.05
00:15
Приведи для примера ссылочку на общие правила написания программ (не на 1С) и цитатуу из концепции ООП про общие модуля в которых не видны глобальные переменные, папа, блин
16 pit
 
22.07.05
06:48
У меня инет диалапный и искать я не буду. Тебе надо - ищи сам.
Использование глобальных переменных даже в условиях однопоточного приложения при обработке прерывания от таймера может привести к ошибке...
.
Использование глобальных переменных (особый криминал - изменение глоб переменной в общем модуле) приводит к трудно диагностируемым ошибкам.
17 Кукуруза
 
22.07.05
07:19
Действительно,
а если ее одновременно менять будут?
18 echo
 
22.07.05
07:20
(0)Sheridan, ты такое слово "инкапсуляция" слышал когда - нибудь?
19 echo
 
22.07.05
07:31
(9) А как можно в однопоточном приложении одну функцию вызвать из разных мест одновременно?
20 Holder
 
22.07.05
10:47
(16) Насчет глобальных переменных - возражения исключаются. Использование глобальных переменных считается крайне дурным стилем программирования, нарушается принцип Low Coupling - High Cohesion. А вот насчет прерывания от таймера...
Синтакс-помощник:
ПодключитьОбработчикОжидания()
. . . . . .
ВЫЗОВ БУДЕТ ОСУЩЕСТВЛЯТЬСЯ ТОЛЬКО В "СОСТОЯНИИ ПОКОЯ", ТО ЕСТЬ В ТОТ МОМЕНТ, КОГДА ПРОГРАММА НЕ ВЫПОЛНЯЕТ НИКАКИХ ДЕЙСТВИЙ.
.
Еще раз: что в (9) подразумевается под одновременностью?
21 Джордж
 
22.07.05
10:52
(20) В v8 ПодключитьОбработчикОжидания() - работает правильно, даже при наличии открытых модальных окон.
22 Holder
 
22.07.05
10:57
(21) А кто с этим спорит?
23 Sheridan
 
22.07.05
17:00
Блин, столько написал и окошко закрыл...
24 Sheridan
 
22.07.05
17:22
Кто в лес, а я п дрова... Нет слов, посмешивали грешное с праведным, и еще инкапсуляцию приплели. Да ежели, когда я делаю наследование я могу наследовать все методы и свойства наследуемого объекта и его родителей. Правда, в новых языках программирования некоторые свойства и методы можно публиковать и они становятся доступные при наследовании, а другие методы и свойства можно защищать. Но ведь мы про 1С говорим, какая в 1С нах инкапсуляция.
Когда я пишу программу на Delphi я создаю объекты, определяю их поведение, общие методы, свойства, типы, массивы данных и т.п. Тут я и закладываю то, что называется в 1С глобальными переменными. И причем сдесь дурной тон в 1С?
2(pit):У меня тоже инет не бесплатный. Но если ты такой профи в ООП у тебя должна быть книжечка по ООП, ну на крайняк по любому языку программирования высокого уровня с поддержкой ООП. Вот я тебя и прсил привести ссылочку по твоему замечанию в ООП. Не дождался, ну что ж, не в первый раз.
По поводу глобальных переменных... Ты хочешь сказать, что написанный однотипный код в нескольких местах программы приводит к меньшим ошибкам, особенно в условиях экстремального программирования???
Есть некоторые вещи, такие как структуры, массивы данных которые имеет смысл один раз определить, что с успехом делается в ООП и как раз плохим стилем считается дублирования кода во многих местах программы, программисты, блин.
Любая объявленная как экспорт переменная в контексте 1С является глобальной, т.к. она видна во всем модулях, кроме общих модулей. И кто тут не пользуется этим, и что нельзя менять эти переменные, причем сдесь обработка прерывания???
Вот я и спрашиваю, общие модуля тогда для чего? Если есть потребность часть функций и процедур выполнять на стороне сервера, логичнее для этого было бы определить такой модуль отдельно, также как модуль внешнего соединения. В итоге не правильное использование общих модулей привело к тому, что в УПП в глобальнике функций и процедур как кот наплакал, зато все остальные экспортируемые функции и процедуры повыносили в модуля документов. Супер стиль, теперь поиск вызываемой процедуры в УПП довольно таки приятное времяпрепровождения, т.к. думаешь, а хрен его знает, в каком месте объявили эту процедуру...
И скажите мне, для чего предпочтительнее выполнять процедуры и функции на стороне сервера? Разве что только для выборки данных, для оптимизации ртраффика сети, может еще есть какието причины???
25 Sheridan
 
22.07.05
17:34
Хотелось бы обратить Ваше внимание на код в УПП. Например, одна и таже переменная
мВалютаРегламентированногоУчета
со словом Экспорт объявляется в разных модулях разных документов. Имеет место быть дублирование кода, т.к. в этом случае мВалютаРегламентированногоУчета объявляется столько же раз, сколько документов в конфигурации в которых эта переменная имеет смысл. Где лгика, может есть логика в таком подходе.
Потом, во многих модулях присуствуют такие конструкции как
#Если Клиент Тогда
мояпроцедура()
#КонецЕсли
это, видать говорит о том, что не только общие модуля могут исполнятся на стороне сервера. что вы на это скажете, господа хорошие.
К сожалению, нормального описалова по архетиктуре V8 нет не у Митичкина, не у Радченка, нет в руководстве пользователя. вот я и спрашиваю про общие модуля, хотя, правильнее было бы задать вопрос на itland.ru, там бы уже давно ответили бы и не было бы столько вони. Эх, раньше на Кубани тоже любили издеваться, но отвечали по существу... Даже Гения 1С тут не видать, совсем обыделся.
26 Dэни
 
22.07.05
17:41
(0) Как я понял, тебе нужны не объяснения, а сочувствие ... я тебе сочувствую.
27 defender1
 
22.07.05
17:42
(25) ну что ты паришься, интересно зачем это сделала 1С обратись туда. Про мозговитость разработчиков УПП это совсем другой вопрос, пусть то что они делают остаётся на их совести, а по сути есть другие способы как сделать доступными данные нужные во всех модулях, зачем зацикливаться на варианте глобальных переменных...
28 Sheridan
 
22.07.05
17:50
Я тебе объясню зачем. Я согласен, мы можем передавать в общие модуля глобальные переменные через параметры, но, например, тебе нужно описать некую структуру, которая может быть использована в некоторых местах программы. Ну что, ты будешь в каждой процедуре описывать эту структуру? В случае изменения алгоритма, прийдется вносить изменения в каждую такую процедуру. При экстремальном программировании, чем и занимаются все разработчики 1С это повлечет за собой ошибки в программе, и как сдледствие, ущерб.
потом, типовые пишут одни, обслуживают другие. Не знание в каких местах могут быть заложены такие бомбы чревато.
2(26):Причем сдесь сочуствие? Из всех приведенных объяснений только одно было, что эти п и ф из общ. мод. могут выполнятся на стороне сервера, все остальное к ООП приплели.
Теперь, вопрос, что быстрее будет, обращение в сегменте памяти к указателю на переменную, структуру и т.п. объявленную ранее, или повторная инициализация ? Это вопрос, тогда бы мне хотелось знать, если все объявления глобальных переменных я повыношу в общие модуля как это скажется на скорости работы и на производительности?
А по поводу УПП не надо чушь городить, это ведь не только в УПП но и в УТ и бухгалтерии и в других типовых.
29 Sheridan
 
22.07.05
17:53
И еще, не зная архитектуры V8, внутренней логики, движок интерпритатора, любые разговоры про производительность, оптимизацию и прочие абсолютно бесполезные.
30 defender1
 
22.07.05
17:55
(28) блин, зачем через параметры...:-)
Делаешь ПараметрСеанса с именем ВсеМоиГлобальныеПеременные, тип ХранилищеЗначений и туда пишешь всё что угодно, можно внутри неё создать массив где каждый элемент массива это твоя переменная, а значение элемента массива, может быть хоть список, хоть таблица, хоть картинка... и ПараметрыСеанса доступны везьде...
31 echo
 
22.07.05
17:56
(24)Четыре столпа ООП: инкапсуляция, полимормизм, наследование и абстракция. Они дополняют друг друга. Но это совсем не значит, что принцип инкапсуляции имеет смысл только в ООП. Это общий принцип. Что ты, например, скажешь о том, что домены переменных - отношений инкапсулируют в себе типы данных, из которых они состоят, открывая тем самым дорогу объектной технологии в СУРБД? И принцип инкапсуляции ценен прежде всего не как основополагающий принцип ООП, а как общий принцип.
Что же касается глобальных переменных, то они подрывают всякую инкапсуляцию на корню. Проще говоря, понавтыкаешь ты этих переменных в своем коде тут и там, а потом сам забудешь где и сколько их. А придет время изменить логику программного кода, - вот тут то и придет час расплаты за безграмотность.
PS В современных языках программирования вообще нет даже такого понятия, как глобальная переменная.
32 Sheridan
 
22.07.05
17:57
Т.е. повторяясь, вопрос, для чего выносить выполнение отдельных процедур и функции на сторону сервера?
1. Для оптимизации траффика по сети и скорости выполнения запроса/выборки данных?
2. ???
3. ???
33 mes
 
22.07.05
18:01
а что 32 - мало???!!
ок
2. для мира во всем мире
3. чтобы было как у людей
34 Sheridan
 
22.07.05
18:06
2(31): Опять 25. Я еще раз напоминаю вопрос: Опрос, зачем в V8 общие модуля? (подчеркиваю, в V8).
Я с тобюой согласен, но, я же написал, в контексте 1С любая переменная объявленная как Экспорт доступна в других модулях кроме общих. Пожалуста, делай себе глобальных переменных тыкай их в любой участок программы и будет тебе счастье под названием хаос.
Потом, язык программирования V8 псевдобъектноориентированный язык программирования. Т.е. ну нельзя там создать абстрактный объект, поэтому концепцию ООП к V8 примерять бессмысленно.
Еще раз обращаю внимание на такие вещи, как избыточность и дублированиекода. Это штука не менее вредная чем глобальные переменные.
А насчет позабываю, не знаю давно ли вы писали на другом кроме 1С, в Delphi определяю Unit, назовем его Variables в котором описываю все переменные которые потом буду использовать, вот это я называю глобальными переменными, потому как потом в любом другом юните в разделе uses указываю этот модуль. Так в чем же сдесь безграматность, и вообще, причем сдесь ООП???
35 Sheridan
 
22.07.05
18:08
2(33):Не по существу. тогда бы
1. общие модуля можно было бы использовать для внешнего соединения. Поставил галочку, предпочтительно для внешнего соединения и все ок
2. Что означает конструкция в модуле документа%
#Если Клиент Тогда
мояпроцедура()
#КонецЕсли
36 echo
 
22.07.05
18:09
(34) (31)это реакция на (2).
37 Sheridan
 
22.07.05
18:10
Похоже, что модуля документов тоже могут выполнянтся на стороне сервера???
38 Sheridan
 
22.07.05
18:12
2(36): Дык я ж про 1С, а не глобально, а глобально как это в Delphi я написал, хоть ООП, хоть без ООП. Если уж ООП так все что надо размещаю в описании объектов )
39 pit
 
22.07.05
21:17
Хм... Добили Sheridan-a......
.
Оставим в стороне теоретические споры. Похоже, (31) тебя не убедило...
.
(с) 1С
.
Инструкции препроцессора
В 1С:Предприятии 8.0 были введены несколько предопределенных инструкций для препроцессора, которые говорят о том, где должен исполняться тот или иной фрагмент программы.
К инструкциям препроцессора относятся:
#Если Клиент Тогда
#КонецЕсли
 Выполнение фрагмента модуля на клиентской машине
.
#Если Сервер Тогда
#КонецЕсли
 Выполнение фрагмента модуля на сервере 1С:Предприятие8.0
.
#Если ВнешнееСоединение Тогда
#КонецЕсли
 Эта инструкция позволяет возможность использования процедур и функций в сесии СОМ-соединения
.
Место выполнения общего программного модуля также может регулироваться установкой его свойств. Подробнее об инструкциях препроцессора и свойствах общих модулей написано в документации.
40 Z1
 
22.07.05
22:21
(Sheridan) По аналогии глобал переменые вредно использовать по той же причине что и оператор goto. При их использовании на порядок сложнее отследить Логику (алгоритма)программы ( при этом любой модуль может изменить эту глоб переменную порушив твою правильную логику).
" зачем в V8 общие модуля? " - можешь их рассматривать как объект или класс
который не может содержать подклассов - маленький шажок к ООП.
И как следствие встает вопрос правильного проэктирования Хороших общих модулей в v8 ( смотри как проэктирование классов) Если Общие модули спроэктироаны плохо то это только ухудшает их использование и отладку.
Как реализовано в УПП сказать не могу.
Язык v8 очень сложен в тонкостях по сравнению с v7 ( ИМХО) а так как тонкостей много и меняються они еще от релиза к релизу то писать и отлаживать сейчас большие проэкты на v8 достаточно тяжело.
41 MDSer3
 
23.07.05
00:26
Блин, уже писал, но пропало.
1) 1С - интерпретатор, а не компилятор - поэтому делает синтаксический и семанический контроль, что занимает время.
2) Суешь в глобальник - а как обновлять? А тут отдельный модуль и все
3) Особенное преимущество - на куче машин.
4) На 10.2.2.5 была ошибка - 1С не устранял -тянул, я написал общий модуль, который все решил, (я выкладывал).
1С 8.0 - круто, а общие модули - это скорость, универсальность и совместимость.
42 pit
 
23.07.05
09:11
(41) Общие модули - это хорошо, конечно, но написание их предъявляет особые требования... Там должен быть только программный код, без данных иглоб переменных. И оперировать такой модуль (процедура в нем) должен только данными, полученными при вызове...
43 Пьер
 
23.07.05
10:51
Sheridan:
В одной самописной конфигурации, которую я поддерживал, благодаря глобальным переменным и неаккуратной работе с ними разработчиков, я около 1.5 лет отлавливал ошибку типа: "иногда не формруется отчет".
P.S. Если бы этот отчет писали на v8 у них просто не было бы шанса эту ошибку сделать
44 Пьер
 
23.07.05
10:53
Опять же не использование глобальных переменных это хороший стиль еще процедурного программирования, когда все необходимые данные получаешь через параметры
45 pit
 
23.07.05
11:03
(44) в бух 7.7 для России такая ошибка и сейчас присутствует...
Возникает очень редко... Причем именно из-за глобальной переменной, когда ее зачем то переписывают в доке (скорее всего просто совпали имена, а прог не знает об этом) возникает потом ошибка
46 Пьер
 
23.07.05
11:06
(45) Ну только в самописке это было при печати накладной, поэтому почаще происходило, а так прийдешь, они говорят, вот не сработал пару раз отчет, посмотришь вроде все работает, пока не связал, что почсле печати накладной не формируется отчет не нашел
47 pit
 
23.07.05
11:19
а я уже эту ошибку и не правлю, надоело. Говорю, выйдите и зайдите снова...
Это достаточно редко возникает...
48 любитель пива
 
23.07.05
11:28
Sheridan:
Я ты часом может ещё и метками балуешься?
49 Sheridan
 
24.07.05
00:26
Опять, еще раз, для тех кто в танке, нет в V8 ООП, ну нет и близко там, что Вы все туда киваете. По поводу глобальных перемнных, я объяснил, что в моем понимании глобальные переменные. Ну не будете вы определенную структуру описывать каждый раз там где надо передать ее в качестве параметра или использовать, ну это бред. Если ООП, я ж написал, что в этом случае я весь функционал, структуры данных вынесу в объекты. И не все пишут с использованием ООП.
Еще раз, для тех кто в танке, в типовых V8 глобальные переменные, то как они понимаются в контексте 1С используют сплошь и рядом. Натыкали экспортируемых процедур и функций в модуля документов, и потом хрен их найдешь.
Так и не ответили вопрос, откуда известно, что функционал вынесенный в общие модуля будет работать быстрее, кто то тут проверял, или знает внутреннюю архитектуру V8?
2(pit): В этом и вопрос, чем же тогда общие модуля отличаются от модулей документов и справочников, если они тоже могут исполнятся на стороне сервера? Мне эта информация важна, я хочу получить проф. ответ, если знаете, я не спорю ради того что бы спорить...
А по поводу gotu иногда этим пользуются настоящие программеры, иногда в некоторых сложных вложенных циклах без метки не обойтись, но єто редкость
 
50 Sheridan
 
24.07.05
18:47
Да и еще, по поводу разработчиков типовых, они ведь под маркой 1С и я так понимаю, что то типа 1С:Совместимо, значит 1С принимает такой стиль программирования...
51 pit
 
24.07.05
21:45
Программирование в типовых - далеко не лучший образец кода.
Поэтому имхо, код типовых нельзя воспринимать как эталон, там есть все...
И хорошие находки и такая туфта... Причем туфты многовато...
.
примеры в типовых с использованием глобальных переменных .... не комментируется... А когда начали приводить здесь примеры из ООП - ну так ООП - это набор неких универсальных правил и следовать им желательно всегда...
.
В моем понимании общие модули - скорее место сбора общих универсальных процедур, принимающих данные в параметрах и возвращающие результат через параметры, самодостаточные.
.
Для того, ЧТО хотели сказать разработчики - надо иметь ХОРОШУЮ документацию, которой НЕТ и НЕ БУДЕТ (экономия, итить их мать)...
.
(50)
Под маркой 1С-Совместимо частенько встречается такой код... что проще утопиться...
   Нарушение всяческих рекомендаций самой 1С.... Примеров я нагляделся...
52 echo
 
25.07.05
07:49
Мне кажется, что в общих модулях нельзя использовать глобальные переменные потому, что COM сервер 8.0 - это многопоточное приложение. Когда на COM сервер приходит запрос от клиента #1, то сервер создает для обработки этого запроса отдельный поток. Пока идет обработка первого запроса, может поступить запрос от клиента #2. Для обработки этого запроса сервер также создает отдельный поток. Так как каждый поток выполняется со своим стеком, то локальные переменные и параметры функций надежно защищены. А глобальные переменные - нет. Поэтому от них и отказались, тем более, что это повышает степень инкапсуляции программного кода, если можно так сказать :)
53 panvartan
 
25.07.05
08:58
Почему нет глобальных переменных в общих модулях это технический вопрос, который разработчиков особо не касается - нет и все тут, вопрос - как с этим жить, я , например, глобальные переменные использую только для данных, затраты на вычисление которых существены для производительности (их очень не много), если же нет , то Перем сВалютаУчета и ПолучитьВалютуУчета()- это одно и тоже, а в свете (52), второе даже предпочтительней.
54 cathode
 
25.07.05
09:43
Господа, рассуждения о том, нужны ли общие модули в V8 являются чистой воды философским спором - 1С их уже сделала, на чужое мнение им начхать, а пользоваться ими или нет является сугубо интимным делом каждого. Концепция общих модулей есть реализация структурного и модульного программирования от 1С. Использование глобальных переменных напрямую в функциях является плохим стилем и порождает кучу ошибок. Если нужна какая-то структура данных, нужно сделать функцию, которая возвращает при вызове эту структуру, раз уж в платформах 1С типов, определяемых пользователем нет. Хау, я все сказал. Можете обс..ть :)
55 Holder
 
25.07.05
09:57
(51) Да. 1С волей-неволей потакает опошлению своего собственного имиджа. Уже превращается в комедию сертификация, а также 1С:Совместимо.
Документация... Не понаслышке знаком я с их технологией ее составления и издания - картина, слез достойная. Дело не в экономии, у меня стойкое впечатление, что ее преднамеренно делают плохо.
56 Morrison
 
25.07.05
10:21
2(48) я пользуюсь, и ничего плохого в этом не вижу.
57 fisher
 
25.07.05
10:35
2(Sheridan) Не буду ввязываться в спор о причинах, почему так сделано (мысли есть но вопрос еще в стадии осмысления ;), но аргументы против - неубедительны. Может, я чего-то не понимаю...
Тот же пример со структурой. Если хочется сделать её глобальной и использовать общем модуле, то в чем проблема объявить структуру в глобальном модуле, а ссылку на неё передавать параметром в функцию общего модуля при её вызове? По мне, так это более правильно, чем напрямую использовать в общих модулях глобальные переменные.
Честно говоря, не пробовал (я в основном еще с 7.7 парюсь), но вроде как проблем никаких быть не должно...
58 echo
 
25.07.05
10:44
(57) Когда передаешь структуру как параметр функции, то она надежно защищена, так как помещается в стек потока.
59 fisher
 
25.07.05
10:59
2(58) Это если передаешь как значение. Я что, в 8.0 не могу передать ССЫЛКУ на структуру в параметре функции (чтобы внутри функции я мог менять исходную структуру)?
60 echo
 
25.07.05
11:30
(59) Какая разница, что у тебя в стеке: размерная переменная или указатель?
Я тебе говорю о глобальной переменной, которая НЕ в стеке. Как ты ее будешь защищать от аереприсвоения в другом потоке?
61 echo
 
25.07.05
12:04
60+ Здесь имеет место таже проблема, что и "грязное чтение" в СУБД. В СУБД она решается путем выполнения транзакций с соответствующим хинтом. А как быть в случае многопоточного приложения? Решения, конечно, есть, но они очень сложные. Поэтому отказ от глобальных переменных вообще - решение абсолютно правильное со всех точек зрения. Такова моя точка зрения.
62 fisher
 
25.07.05
12:14
2(58,60) Провел эксперимент. Передал ссылку на глобальную структуру в функцию общего модуля где успешно добавил еще одно значение в структуру. Что я сделал не так?
63 echo
 
25.07.05
12:28
(62)Проблема в том, что ты вообще не понимаешь о чем идет речь. Не обижайся, пожалуйста, но это факт. Больше тут ничего и не доавишь :(
64 Романнист
 
25.07.05
12:44
ту 59... Я может возникнуть два потока в одном сеансе 1С8...???
65 Романнист
 
25.07.05
12:47
упс... 64 было для 60... Э-э-э-э-э.. Промахнулся казак молодой, подвело его ружьишко хууудое... Не дождеться милка молодца... Выпьет квас весь сама...
66 Романнист
 
25.07.05
12:51
...ту 60 или мы уже говорим в общем о стиле? (... ла, ла, ла-а-а-... стиллляга из Москвы, конечно Вассяяя...)...
67 fisher
 
25.07.05
12:55
2(63) Меня обидеть сложно, но рецепты есть ;)
В данном случае, не обижайся, но ты либо зациклился на своём предположении, либо я в самом деле не понимаю, о чем ты ведешь речь ;)
68 echo
 
25.07.05
13:01
(64)Потоки, они как раз для того и созданы, чтобы выполняться в одном процессе. Но клиент 8.0 - это однопоточное приложение. Если я не прав - переубедите.
Но как ты думаешь, COM сервер 8.0 - это однопоточное приложение или нет?
69 Романнист
 
25.07.05
13:11
ту 68... Да... Клиент 1С8 однопоточный, потому и спор о глобальных в них - не предметный (относительно конечно 8-)))...) только конечно если свалиться в спор, ещё раз повторюсь, о стиле и принципах программирования вообще. Но даже если и так, то чем плохи глобальные переменные? Даже если приложение многопоточное. Ну вот не используется этот код в разных потоках... И что? Например работа с формой... ПО большому счёту - потоки это (не по определнию физически) функционал заложенный для распараллеливания, а следовательно и увеличения производительности, вычислительных процессов. Там да... Какие к чёрту глобальные переменные, запизнули что надо в поток - получили результат и всё. По поводу СОМ сервера 1С8, так увлекся разработкой конфы, что даже и не знаю... 8-))) Но если предположить, что нет - то глобальным переменным все карты в руки! А если да - то тут возникает ситуация - СОМ сервер 1С8 будет многопоточным тогда и только тогда, когда его вызывает приложение из разных своих потоков и то не факт. Потому что в этом случае для каждого соедения сви сеансы могут образоваться... И что в этом случае? Тоже нет предела совершенству?
70 echo
 
25.07.05
13:23
(69)Так вот, я считаю, что сервер 8.0 - многопоточное приложение.
Если ты с этим согласен, то ответь - будет ли глобальная переменная защищена от воздействия со стороны других потоков, когда с ней работает данный поток? Я имею в виду случай, когда модуль выполняется на сервере. Подсказка: глобальная переменная находится вне стека данного потока...
71 echo
 
25.07.05
13:26
(69)<< Но даже если и так, то чем плохи глобальные переменные? Даже если приложение многопоточное. Ну вот не используется этот код в разных потоках... И что?
LOL
72 Романнист
 
25.07.05
13:34
ту 71... Я рад...!!! 8-))) Что тебе понравилось...
ту 70... Хм-м-м-... А глобальная переемнная разве в этом случае будет доступна...? По моему нет...
73 echo
 
25.07.05
13:39
(72) Ты глубоко заблуждаешься. Глобальная переменная будет доступна (и беззащитна), так как потоки выполняются в едином адресном пространстве процесса.
74 fisher
 
25.07.05
13:52
Вроде бы понял, что ты имеешь в виду. Т.е. ты не отрицаешь техническую возможность, а обсуждаешь правомочность её использования в многопоточной среде? Если так, то однозначный ответ могут дать только разработчики платформы. Т.к. нужно знать, выполняется ли расспараллеливание запросов с одного и того же клиента (в чем я лично сомневаюсь)? Если да, то когда и как?
75 fisher
 
25.07.05
13:55
(74) было к echo
76 Романнист
 
25.07.05
14:02
ту 73... Ну что это применому к 1с8 и к её глобальному модулю, то не уверен... Может конечно и тут я не прав.. 8-)))
77 Sheridan
 
25.07.05
18:19
Ребята, спасибо. Вот теперь пошел действительно предметный разговор. За это вот большое спасибо.
С многопоточными приложениями понятно. В этом случае использование принципов ООП вполне обосновано, т.к. создаем объект, возвращается указатель на совершенно новый объект данные которого физически находится в своем сегменте памяти, отсюда и вытекают некоторые ограничения при разработке COM объктов. Правда платим за это ресурсами компа.
Остается не совсем понятным тот факт, почему эти же глобальные переменные допускается использовать в других модулях кроме общих. В этом случае логичнее было бы ограничить область видимости переменных и передавать переменные между формами через реквизиты, например, но мы можем передавать епременные в пределах всего приложения кроме общих модулей. В этом случае, мало вероятно, что V8 многопоточное приложение, но в этом вопросе я не специалист.
2(pit): Теперь я полостью с тобой согласен и всецело разделяю твое мнение. Отсуствие описания внутренних принципов разработчиками очень огорчает. Фактически, это черный ящик. Отсюда и возник вопрос.
Я заметил, что многие типовые и не типовые конфигурации практически не используют глобальный модуль.
По поводу стиля, все это хорошо, но если я уверен, что на лету мои глобальные переменные не могут быть изменены, то что эффективнее обращение к функции, которая вернет структуру (ведь это затраты процессорного времени), или обращение к указателю на перменную.
Да, если вспомнить ассемблер, там редко передавали переменные да и вообще пользовались процедурами и функциями :), т.к. это влекло за собой неменуемое увеличение размера исполняемого модуля и потерю скорости выполнения ).
Так что я так думаю, на мой взгляд обращение к указателю перменной гораздо быстрее, чем в вызове функции, и если я уверен, что глобальные переменные не могут менятся на лету (например, описание структур) эффективней пользоваться именно ими.
78 Sheridan
 
25.07.05
18:22
Так что стиль написания, эт одно, а скорость и ресурсоемкость другое )
Хотя с метками полностью согласен, страшная вещь если ими злоупотреблять, но надо сказать, что разберать сложные вложенные структуры передеаваемые между функциями и процедурами типовых еще то занятие )
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn