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

09.04.17

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

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

Файлы

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

Наименование Скачано Купить файл
Виртуальный блочный контейнер переменных:
.dt 101,26Kb ver:1.1.0
2 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

15500 руб.

02.09.2020    213426    1167    413    

1050

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

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

8400 руб.

20.08.2024    40743    222    115    

212

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

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

16000 руб.

10.11.2023    18856    76    39    

92

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    26683    67    30    

96

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

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

9500 руб.

17.05.2024    37736    134    55    

176

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

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше.<br/> Далее в публикации:<br/> MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    4250    8    10    

15

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

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

3600 руб.

27.12.2024    3709    7    0    

12
Для отправки сообщения требуется регистрация/авторизация