Виртуальные глобальные контейнеры переменных

08.04.17

Разработка - Инструментарий разработчика

Концепция и реализация механизма виртуальных контейнеров глобальных переменных. Виртуальные контейнеры могут содержать переменные различных типов (ссылки, данные, таблицы значений и др.). Добавлять, изменять и считывать данные можно из клиентских (только примитивные типы) и серверных процедур. Возможно использование нескольких контейнеров и групповое удаление переменных. Механизм работает в толстом, тонком клиенте на платформе 1С 8.2 и выше.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Виртуальные глобальные контейнеры переменных:
.dt 81,96Kb ver:1.0.0
0
0 Скачать (1 SM) Купить за 1 850 руб.
Это первая статья на тему глобальных переменных в тонком клиенте, продолжение здесь:  //infostart.ru/public/608185/

     В приложениях 1С, разработанных для работы в толстом клиенте, была распространена практика использования переменных вне тела функций или процедур. Многие к ней привыкли и пользовались простым способом передачи данных между процедурами и функциями.

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

Концепции и реализации такого механизма и посвящена данная публикация. Изложить концепцию можно с помощью следующих аналогий:

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

    
После этой преамбулы перейдем к сути реализации. 

    В качестве якорей, который держат виртуальные контейнеры, используются параметры сеанса с типом  "фиксированное соответствие". Пусть, например одним из якорей будет параметр сеанса с именем "КонтейнерПеременных1".  Получать информацию о содержимом виртуального контейнера можно практически мгновенно по ключу соответствия.   А чтобы изменить что-либо в контейнере, необходимо выполнить следующие операции:  

    Соответствие = Новый Соответствие(ПараметрыСеанса.КонтейнерПеременных1);
    //.... здесь выполняем манипуляции над Соответствием ...
    ПараметрыСеанса.КонтейнерПеременных1 = Новый ФиксированноеСоответствие(Соответствие);

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

 
    Еще о деталях реализации:
       Ключ элемента соответствия является "именем" переменной. Таким образом, "именем" переменной может быть произвольная строка,  уникальный идентификатор, ссылка на объект базы данных, в общем объект произвольного типа.      
       Значением элемента фиксированного соответствия является структура со свойстами:

  •          Время - время создания переменной. Может быть использовано для автоматической "сборки мусора";
  •          Тип - информация о типе переменной;
  •          URI - служебное свойство для преобразования информации о типе в Тип конфигурации;
  •          Область - свойство управления временем жизни переменной. Тип свойства - произвольный.
  •          Значение или Адрес. Переменные простых типов сохраняются в Значение, для сложных типов
  •            в свойстве Адрес сохранятся адрес, который вернула функция ПоместитьВоВременноеХранилище().

    Изменение переменных возможно поодиночке или пакетное. Скорость пакетного изменения практически не зависит  от количества переменных в пакете, поэтому выполняется намного быстрее нескольких одиночных.

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

В конце концов, как говорится в одной известной пословице: "Если нечто выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, утка и есть" .

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159695    876    399    

862

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7888    59    23    

69

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23502    68    45    

117

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10468    36    25    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 19980 руб.

06.10.2023    15438    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    188066    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17319    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7721    8    35    

23
Оставьте свое сообщение