Глобальные переменные в 8.2

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 16 май 2011.

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Спустя время вынужден опять задуматься над проблемой. 8.2 возненавидела глобальные переменные (ГП). А именно общие модули их не видят. В силу чего я хранил глобальные объекты в "ПараметрыСеанса". Но возникают ситуации, что ПараметрыСеанса не универсальны. И вот, кровь износу, нужны переменная. Получается дурнота:
    - Объявленные ГП в Глобальном модуле (ГМ) видят все документы, справочники
    - Но их не видят Общие модули. Передавать параметрами все ГП при вызове нереально.
    - Думал такое решение: ф-ии работающие с ГП описать в ГМ, но их не вызовут Общие модули.
    Засада, обложили по полной. У меня полное непонимание такого ограничения.

    А механизм ГП нужен. Многие объекты я хочу инициализировать при старте: OLE внешних компонент, несколько неизменяемых в сеансе ТЗ, особо часто используемые константы (для удобства и скорости).

    Еще про переменные. В нормальных языках есть способ объявления переменной процедуры как статический. При каждом очередном вызове процедуры переменная "помнит" старое значение. В 8-ке такого точно нет? А то вот и приходится такую переменную объявлять глобальной.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Писать в параметры сеанса адрес во временном хранилище не подойдет?
     
  3. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    В приличном обществе за такое расстреливают :)
    Шучу, конечно, но попытаюсь объяснить...
    8.2 - клиент-серверная. Причем, с наличием тонкого клиента. Парадигма этой схемы сводится к тому, что сервер должен работать вне зависимости состояния клиента и просто обязан инкапсулировать собственное состояние.
    Иными словами, сервер обязан отдавать данные клиенту только по запросу и не предоставлять возможностей изменения собственных данных напрямую. Клиент же, в свою очередь имеет только те данные, которые получил в результате своего запроса, и тоже обязан скрыть свое состояние от сервера. наличие же глобальной переменной, доступной из общих модулей приведет к тому, что к ней возможен доступ как сервера, так и с клиента, что может привести к определенным коллизиям. Не забывайте, что 8.2 - это фактически n+1 приложений, где n - это количество клиентских приложений.

    В общем, если есть желание, можем немного пофлудить на тему кошерности глобальных переменных. Как человек, проникшийся сущностью паттеронов ООП, я могу пару часов изощренно бредить на тему абстракций.
     
  4. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Вот не думал. А быстродействие временного хранилища? Сопоставимо с переменной.


    Ну не могу я понять, почему как таковые ГП остались в глобальном модуле. И их область действия не ограничена справочниками и документами. А вот общим модулям - фигу.
     
  5. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Не знаю. Самому пока психологически трудно помещать объекты в хранилище.
     
  6. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Это баг, а не фича :)
    Глобальные переменные в многопоточных распределенных приложениях - зло. Для таких целей используются синглтоны в качестве хранилища каких-то общих данных в оперативном режиме.
     
Загрузка...
Похожие Темы - Глобальные переменные
  1. Omh
    Ответов:
    21
    Просмотров:
    8.813
  2. Medevic
    Ответов:
    2
    Просмотров:
    3.180
  3. gx6060
    Ответов:
    3
    Просмотров:
    327
  4. erhe
    Ответов:
    22
    Просмотров:
    1.274
  5. sasha465
    Ответов:
    0
    Просмотров:
    1.368

Поделиться этой страницей