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

09.04.17

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

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

Скачать файлы

Наименование Файл Версия Размер
Виртуальный блочный контейнер переменных:
.dt 101,26Kb
2
.dt 1.1.0 101,26Kb 2 Скачать

Продолжение публикции "Виртуальные глобальные контейнеры переменных". 

В данной реализации решена проблема с производительностью при изменении значения переменных и упрощено использование механизма глобальных переменных. Главное отличие - введен контейнер для адресации переменных и пул контейнеров для хранения значений переменных. Контейнер адресации изменяется только при добавлении или удалении переменных. При добавлении новой переменной автоматически  осуществляется выбор, в каком из наименее загруженных контейнеров из пула хранить значение
переменной. При изменении значения переменной  изменяется только контейнер из пула хранения.  Методы работы с блочным контейнером абстрагируются от указания места хранения переменной. Нужно только "имя" переменной
для считывания её значения или для записи. Удаление переменных может осуществлять по их "именам" или по "области", которая задана при создании переменной. Для создания блочного контейнера в конфигурации необходимо создать параметры сеанса с именами:
<ПрефиксИмени>0 .... <ПрефиксИмени>N с типом "фиксированное соответствие", и добавить в обработчик "ПриСозданииСеанса" вызов процедуры инициализации блочного контейнера. "Нулевой контейнер" используется в реализации в качестве контейнера адресации переменных, контейнеры 1...N - для хранения значений переменных.
Методы контейнера:
Функция ВКонтейнер(Ключ, Значение = Неопределено, Область = Неопределено) Экспорт
Функция ИзКонтейнера(Ключ) Экспорт
Функция УдалитьИзКонтейнера(Ключ) Экспорт
Функция ПеременныеВКонтейнере() Экспорт
Функция ОбластиКонтейнера() Экспорт
Функция ПеременныеОбластиКонтейнера(Область) Экспорт
Функция КоличествоПеременныхВКонтейнере() Экспорт
Процедура ДефрагментацияКонтейнеров() Экспорт
Процедура ОчиститьКонтейнер() Экспорт
Процедура ОчиститьОбластьКонтейнера(Область) Экспорт

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

Результаты тестов производительности: в обычном виртуальном контейнере две тысячи изменений значений переменных выполнялось 26 секунд, в блочном контейнере (из 50 блоков) - двадцать тысяч изменений выполняется за 7 секунд, быстрее в 37 раз.

Теперь можно использовать на практике "глобальные переменные" произвольных типов для обмена данными между серверным процедурами и функциями одного или различных модулей. Если переменные нужно создать на время существования формы и удалить после её закрытия, нужно просто вызывать фунцию ВКонтейнер(Ключ, Значение, ЭтаФорма.УникальныйИдентификатор) и в обработчике формы "ПриЗакрытии" вызвать ОчиститьОбластьКонтейнера(ЭтаФорма.УникальныйИдентификатор).

   Блочный контейнер можно использовать также для повышения производительности формы, поскольку он предоставляет альтернативный способ обмена данными между процедурами формы. Например, если форма содержит "развесистую" таблицу значений, то вызов функций РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() будет занимать длительное время. Если в некоторых процедурах формы нужен доступ только к некоторым реквизитам формы, "лишние" данные формы будут мешать. Такие процедуры можно скомпилировать с директивой &НаСервереБезКонтекста, передать в них дополнительным аргументом УникальныйИдентификаторФормы и осуществлять доступ к необходимым для работы всех процедур общим данным через блочный контейнер переменных.

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

Оптимизирована процедура удаления переменных по области - теперь выполняется однократная запись только в нужные блоки пула контейнеров, удаление теперь выполняется мгновенно. В процедуре инициализации блочного контейнера добавлена проверка целостности контейнера - наличия параметров сеанса, которые предполагаются к использованию блочным контейнером и их типов.
Версия 1.1.0, изменения:
  • добавлен параметр функции ВКонтейнер(Ключ, Значение = Неопределено, Область = Неопределено, Срок = 0). Задает "срок жизни" переменной  секундах;
  • добавлена процедура УдалитьУстаревшиеПеременные(). Удаляет переменные, "срок жизни" которых вышел;
  • аргументом функции УдалитьИзКонтейнера() может быть как один ключ, так и массив ключей.

Глобальные переменные обмен даннными

См. также

SALE! 20%

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

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

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

10000 8000 руб.

02.09.2020    122390    673    389    

716

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7342    22    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3638    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177835    1074    0    

852

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99379    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18138    6    8    

40

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28121    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23610    15    15    

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