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

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

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

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

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

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    170115    940    403    

906

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

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

8400 руб.

20.08.2024    13161    100    46    

104

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

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

9360 руб.

17.05.2024    26789    90    48    

134

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

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

22200 руб.

06.10.2023    16953    41    15    

75

SALE! %

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

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

4800 3840 руб.

14.01.2013    190741    1151    0    

918

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

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

15000 руб.

10.11.2023    11471    40    27    

66

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    946    2    0    

5

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104006    244    100    

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