Область применения:
Изначально планировалось использование компоненты для передач данных между клиентским сеансом и Фоном (подробное описание этого механизма можно посмотреть в статье Управление фоном) , но в конечном счете, можно будет передавать данные примитивных типов и Двоичные данные между разнородными платформами в приближенном к реальному времени. В режиме обмена с Фоном в рамках одного процесса обеспечивается самый быстрый способ обмена, практически без потерь в результате одномоментных попыток доступа к Структуре. Но применение не ограничивается только этим функционалом, мы можем использовать этот Аддон и для других целей. Пример:
- Между клиентским сеансом и Фоном (уже обозначено).
- Между клиентскими сеансами одного серверного процесса, также в режиме реального времени. Обычно средние и малые предприятия используют только один серверный процесс (хост 1С), поэтому им этого будет достаточно для мгновенно обмена данными между пользователями. Т.е. можно им организовать с помощью компоненты "Мгновенный обмен Сообщениями", и другие возможности.
- Между разными окнами и обработками одного процесса, без обращения к серверу, даже в Управляемых формах, когда нам необязательно даже иметь переменную формы, чтобы в неё передать какую-то информацию (примитивных типов или файл).
- В перспективе, в дальнейшем, будет доработан функционал для передач между не только приложениями одной ИБ в рамках одного серверного процесса, но и разными ИБ, разных версий 1С, на одном компьютере или через один физический сервер. Что позволит в случае если сервера 1С находятся на одном физическом сервере - организовать обмен данных, уже не в реальном времени, но используя быстрый и прозрачный механизм передачи.
- Следующим шагом, будет расширение функционала для передач в рамках одной корпоративной сети через посредника Базу данных. Это практически расширяет область применения компоненты на все пространство разнородных ИБ.
Очень важно: Данная компонента не защищает от несанкционированного доступа к обмениваемым данным! Если у пользователя имеется доступ или право запуска компоненты и он знает ИД структуры, в которой передаются данные и в каком контексте, то он может их прочитать. Однако при передачи например через Сервер, которая осуществляется через Общий модуль, Вы можете самостоятельно организовать проверку прав доступа, а также организуя обмен, можно и зашифровать перед отправкой данные, которые хотите защитить.
Технические требования:
- Версии и релизы 1С:
- 1С 7.7 - (на системе Windows 98 - только с помощью загруженного reg-файла).
- 1С 8.0, 8.1, 8.2, 8.3 - без ограничений
- Системы:
- Windows 98 - с помощью reg-файла
- Windows XP (x86)
- Windows 2003 (x86)
- Windows 7, 8.1, 10 (x32|x64)
- Версии систем и приложений на которых проводилось тестирование компоненты:
- Windows 10 x64 - Релизы платформ версии 8.3: (6.2530, 10.2252, 11.3133, 12.1924, 13.1926, 14.2095, 15.2107, 16.1973, 17.2306, 18.1208, 19.1726, 20.2184, 21.1641, 22.1750)
- Windows 10 x86 - Релизы платформ версий 8.3: (3.721, 4.496, 5.1625, 6.2530, 7.2027, 8.2322, 10.2252, 11.3133, 12.1924, 13.1926, 14.2095, 15.2107, 16.1973, 17.2306, 18.1208, 19.1726, 20.2184, 21.1641, 22.1750).
- Windows 10 x86 - Релизы платформ других версий: (8.0.18, 8.1.15, 8.2.19.130)
- Windows 2003 x86 - Релизы следующих версий: (8.0.16, 8.1.15, 8.2.19.130, 8.3.9.1818, 8.3.10.2168).
- Windows XP (SP2) - Релизы 1С 7.7.18 и 7.7.20.
- Windows 98 - Релизы 1С 7.7.18, 7.7.20.
Функциональные возможности:
- Сам Аддон обладает динамическим набором свойств и методов и имеет 3 уровня, в котором объект может находиться, в зависимости от состояния (уровня) у него могут быть свои статические свойства или набор динамических свойств как у Структуры 1С. Всего имеется 3 состояния:
- Первое состояние Аддона (Уровень 0), после создания Объекта - Корень. В нем мы можем задать параметры подключения, подключиться к Пулу структур и включить/отключить Синхронизацию. А также перейти в следующее состояние (уровень) путем создания или позиционирования существующей структуры.
- Второе состояние Аддона (Уровень 1) - Структура. В это состояние Аддон попадает после позиционирования на существующей в Пуле структуре. На этом уровне объект не поддерживает свойства Корня, но может обладать набором динамических свойств и одно общее для всех состояний свойство Ключ, которое в данном состоянии является именем текущей структуры.
- Третье состояние Аддона (Уровень 2) - Выборка. Аналогичен ключевой паре Структуры 1С, имеет свойства Ключ и Значение, за исключением того что здесь мы можем записывать в поле Значение. Следует отметить, важно, что каждая структура поддерживает до 5 одновременных Итераций с этой структурой из 5 разных объектов Аддонов, в случае попытки присоединиться 6-му объекту - будет вызвано стандартное исключение блокировки. Этого должно быть достаточно для любых вариантов реализаций последовательных чтений/записи. Также нулевой элемент Выборки содержит пустую строку в свойстве Ключ и значение Неопределено в свойстве Значение.
- Динамические свойства могут иметь следующие типы: Число (целое/вещественное), Булево, Дата (со временем), Строка - любая длина, Двоичные данные (для доступа к двоичным данным в Аддоне в старых версиях 1С, младше 8.3.10.2168 можно использовать конвертацию в Base64).
- Принцип работы такой: Приложения 1С, окна на клиентском компьютере или в контексте Сервера, Фоновые задачи через создаваемый объект Аддона, получают доступ к пулу разделяемых Структур как показано на схеме
- Аддон поддерживает 2 режима: Автономный, когда мы можем работать только со своими структурами или Разделяемый, когда все структуры могут быть использованы любым объектом, а значит любым контекстом этого процесса (формой, обработкой или Фоновым потоком на сервере). За переключение между режимами отвечает глобальное свойство "Синхронизация", её можно включить или выключить для всех Аддонов. На Сервере имеет смысл только режим Синхронизация: для обменов с другими потоками. А на клиенте в локальной форме для целей работы с Аддоном как со структурой, например в версии 7.7, где нет Структур 1С - Автономный.
- Аддон обладает следующими полезными характеристиками и другими особенностями:
- Поддержка одним объектом практически неограниченного количества структур, с неограниченным количеством свойств. Ограничения имеются только со стороны компьютера, в зависимости от ресурсов (память, разрядность).
- В рамках одного процесса в 32-х разрядных приложениях можно в зависимости от количества памяти создать до 3-5 тысяч объектов, которые работают со структурами. В 64-х разрядных - до 50 тысяч. Количество свойств на котором тестировалась компонента доходило до миллиона (при небольшом количестве объектов).
- Может хранить и обмениваться Двоичными данными даже в той платформе 1С старых версий, которые не поддерживают работу 1С.
- Аддон устойчив к падениям в следствии ошибок, и обеспечивает корректные стандартные исключения, которые отлавливаются программой 1С, в случае блокировок или отказов выполнения метода из-за неверных входящих данных.
- В режиме Синхронизации использует плавный алгоритм, который не приводит к мертвым блокировкам (deadlock) даже при наличии большого числа одновременных обращений и интенсивной работе с Аддоном.
- Обеспечивается защищенность от сбоев в параллельном режиме работы, например, если в режиме Выборки элемент стоит на свойстве, которое другой объект параллельного потока может менять или удалить. В таком случае, если текущий элемент прочитает удаленное свойство, то ему вернется пустой ключ и пустое значение, и следующий переход будет на следующее неудаленное свойство.
Состав поставки:
Файлы
Комплект поставки является набор из 2-х запакованных в единый архив (ExchangeStruc.zip и ExchangeStrucCOM.zip) файлов компонент только типа Native и двух- Native/COM для старой и новых версий Windows, под x86 и x64 архитектуры.
- ExchangeStruc.zip - файл компоненты типа Native для 32-х разрядных версий Windows, от версии Windows 98 до Windows 10
- ExchangeStruc64.zip - файл компоненты типа Native для 64-х разрядных версий Windows, от версии Windows XP до Windows 10
- ExchangeStrucCOM_XP.zip - файл компоненты типа Native/COM для 32-х разрядных версий Windows, от версии Windows 98 до Windows 7
- ExchangeStrucCOM64_XP.zip - файл компоненты типа Native|COM для 64-х разрядных версий Windows, от версии Windows XP до Windows 7
- ExchangeStrucCOM_Win81.zip - файл компоненты типа Native/COM для 32-х разрядных версий Windows, от версии Windows 8.1 до Windows 10
- ExchangeStrucCOM64_Win81.zip - файл компоненты типа Native/COM для 64-х разрядных версий Windows, от версии Windows 8.1 до Windows 10
- ExchangeStrucCOM_Win98.reg - reg файл для ручной регистрации компоненты COM в версии Windows 98/Me (путь к файлу dll требуется корректировать)
- ТестированиеКомпонентыСтруктураОбмена v.3.7.zip - обработка тестирования компоненты для версий 8.2+
- ТестированиеКомпонентыСтруктураОбмена.zip - набор обработок тестирования компоненты для версий 7.7, 8.0, 8.1 и 8.2+
- Файлы с расширением MD5 - Хеш суммы исполняемых файлов для контроля что они не были изменены.
Доступность кода
Код полностью закрыт.
Демонстрация решения:
Демонстрация работы компоненты из 2-х окон, на момент начала записи, уже была создана структура "МояСтруктура" с 3-мя свойствами. Открыл 2-е окно и подхватил эту структуру с новыми свойствами. Далее демонстрация других методов и свойств.
Демонстрация работы COM-компоненты в старой версии 1С:8.0.
Демонстрация работы тестирования COM-компоненты в режиме Клиент в версии 1С:8.1
Демонстрация работы Тестирования компоненты в Фоне показаны в статье Управление фоном
Руководство по использованию:
Здесь и далее будут приведены скриншоты обработки Демо-версии обработки Тестирования Структур обмена, взятой из статьи Управление фоном. По скриншотам можно определить имя свойства/ метода на 2-х языках, как используется свойство (чтение/запись), порядок, возвращает ли значение, количество параметров (Мин/Макс)
- Первое состояние Аддона (Уровень 0), Корень, обладает следующими свойствами и методами
ТипSQLСервера (TypeofSQLServer) - перечисление в виде типа Строка - Определяет тип работы структур, которые будут созданы этим Аддоном. Пока реализован только тип Подключения "Разделяемая память" (SharedMemory)
.
- Подключен (Connected) - признак того что в соответствии с Типом SQL будут теперь создаваться новые структуры. Также разрешена работа с найденными в Пуле структурами.
- КоличествоИнициализации (InitCount) - установка максимального количества значений для создаваемых структур при их инициализации методом ПолучитьСтруктуру. По умолчанию: 20. Максимальное значение не превышает 48. Если нужно создать структуру более этого количества свойств, то можно просто их установить после инициализации.
- Поле Ключ (Key)- важное поле для идентификации не только пары Ключ/Значение в режиме Выборки (уровень 2), но и идентифицирует название структуры в уровне 1 и название пула структур в уровне 0.
- Поле Синхронизация (Synchronization) - описано ранее, поля ИмяПутьКСерверу (DSN), СтрокаПодключения (ConnectionString) - пока не используются.
- Метод Подключить (Connect) - выполняет подключение в соответствии с текущим типом SQL - сервера.
- Метод ПолучитьСтруктуру (GetStructure) - Основной метод для создания новой, или позиционирования на уже существующей структуре.
При его успешном выполнении переводит Аддон в состояние "Структура" (уровень 1). Когда этот метод вызывается как конструктор, то этот метод не изменяет значения тех свойств, значения которых нет в параметрах вызова функции. В целом синтаксис метода почти такой же как для структуры, за исключением, что больше параметров и первый параметр - это название (ключ) структуры. На скриншоте в порядке очереди:
- Ключ структуры - не изменяемое свойство структуры - идентифицирующее её в Пуле. Может быть представлением УИ (Guid). Если структура с таким ключом присутствует в Пуле, то будет выполняться позиционирование на существующей структуре, либо, если с таким ключом нет структур, то будет создана пустая структура.
- Список свойств для добавления. Свойства которые заданы этим параметром, добавляются к свойствам уже существующих структур, если их не было. Значения совпадающих с этим списком свойств будут переписаны, если заданы в последующих параметрах этой функции.
- Метод УдалитьСтруктуру (DelStructure) - находит и пытается удалить структуру по имени ключа. Может быть вызвано стандартное исключение, если в данный момент каким то объектом идет операция по Итерации той же самой структуры.
- Метод КоличествоСтруктур (StructureCount) - Возвращает количество всех структур доступных для работы.
- Метод Уровень (Level) - возвращает текущий уровень вложенности (стадий): Корень - 0, Структура - 1, Выборка - 2. Рекомендуется периодически им проверять, в какой стадии объект, чтобы понять какими свойствами и методами может обладать объект.
- Второе состояние Аддона (Уровень 1) - Структура
- Обладает следующими свойствами и дополнительными методами:
- Свойство Ключ (Key) - название структуры
- Далее ряд динамических свойств, которые мы либо вставили при инициализации, либо были до нас, либо вставили методом Вставить.
- Методы Очистить (Clear), Количество (Count), Удалить (Delete), Вставить (Insert), Свойство (Свойство) - полностью идентичны свойствам Структуры 1С, поэтому описывать подробно их не буду. Скажу только что Вставить и Свойство поддерживает ещё и конвертацию бинарных типов в Base64 строку, но это позже.
- Метод Выбрать (Select) - запускает состояние (уровень 2) последовательной Выборки свойств для структуры. Т.е. подменяет итерацию в структурах 1С операторов Для...каждого. Если свойств нет ни одного, то возвращает Ложь и не входит в это состояние. Что означает, что всегда надо проверять результат этой функции, чтобы не было обращений к несуществующей функции или свойству, что может вызвать стандартное исключение 1С и прекращению обработки в Фоне.
- Метод Сортировать (Sort) - сортирует свойства по ключам в алфавитном порядке для количества свойств менее 10. Если свойств более 10 - они сортируются автоматически, это существенно ускоряет работу с Аддоном особенно при большом количестве свойств. Для небольшого количества свойств сортировка не ускоряет доступ, но есть такая возможность отсортировать.
- Метод Владелец (Owner) - общий для уровней 1 и 2 метод, который возвращает Состояние аддона на предыдущий уровень. Если был уровень 2 (Выборка), то переходит к уровню 1 - Структура, дальше в режим Корень (уровень 0).
- Метод ПолучитьСтатус (GetStatus) - информационный метод, который получает значения таймштампов времени для операций для структуры в целом (Уровень 1) и для каждого из ключевой пары (Уровень 2), а также хеш ключа структуры или ключевой пары .
- Третье состояние Аддона (Уровень 2). Выборка. Имеет свойства Ключ (Key) и Значение (Value). Значение доступно для записи для ненулевой позиции выборки. Также имеется несколько дополнительных методов:
- Метод Следующий (Next), переход на следующий по порядку Ключ. При позиционировании на непустом ключе, возвращает Истина, иначе Ложь.
- Метод Сбросить (Reset), переход на начало Выборки.
- Для версий младше релиза 8.3.10.2168 - все динамические свойства Структур и поле Значение Выборки поддерживает конвертацию в строку формата Base64. Как это работает:
Чтобы записать Двоичные данные в старых версиях 1С в Аддон, мы используем префикс "base64" перед названием свойства (или 1-й параметр метода для метода Вставить)
Значение же записываемой строки должно быть строкой в формате Base64, которую можно получить используя глобальную функцию Base64Строка().
Чтобы получить Строку формата Base64 в любых версиях 1С из двоичных данных в Аддоне, мы также используем префикс "base64" (или 1-й параметр метода Свойство)
Значение, которое получим будет иметь тип Строка в формате Base64, если это действительно Двоичные данные. И другого типа, если он примитивный.
То же касается свойства Значение при выборке (Уровень 2), когда мы читаем свойство с префиксом "base64", или записываем с ним.
Анализ результатов тестирования (оценка производительности)
- Первая часть , реквизиты - Параметры тестирования за последнее время, для разных систем/платформ и других опций.
- Вторая часть , время в секундах - Результаты тестирования за последнее время по указанным выше параметрам.
Последняя колонка, выделенная желтым, показывает превышение времени всех операций по сравнению со временем затраченным на те же операции со структурами 1С в %. Следует отметить что в процессе разработки код менялся и наиболее правдоподобный результат в последних 10-20 строках тестирования.
Список дополнительных методов Аддона в режимах работы Компонента COM и OLE Auto (IDispatch):
- УстановитьСовместимуюВерсию (SetCompatibleVersion) - функция, предварительное назначение версии приложения 1С для загружаемого Аддона. Параметр: Версия, тип: строка. Возвращает предыдущую версию. Её практическое применение помогает при тестировании поведения функционала конвертации Двоичных данных.
- УничтожитьОбъект (DestroyObject) - процедура для режима подключения компоненты типа COM. Означает что 1С принудительно освободит ресурсы созданного объекта. Необходимая процедура для исключения зависания 1С в памяти после выхода из программы. Без параметров. В режиме запуска через IDispatch - она не нужна.
- ОбновитьКоличествоСвойств (RefreshnProps) - процедура, позволяет принудительно передать в 1С версий 8.3.5+ количество свойств при изменении состава свойств Аддоном для режима компоненты COM. Без параметров. Обычно Аддон сам обновляет этот показатель, но возможно на практике будет полезно её применение когда текущая Структура поменяется другим потоком.
- Получить (Get) - функция, предназначена для получения значения свойства по его имени, если в версии 1С не доступно получение значения по индексу [] (например: версия 1С 7.7). Параметр: ИмяСвойства, тип: строка. Возвращает значение свойства. Поддерживает префикс имени "base64" для получения в формате Base64 бинарного значения.
- Установить (Set) - процедура, предназначена для установки значения по его имени, если в версии 1С не доступно установка значения по индексу []. (например в версиях 1С 7.7). Параметры:
- ИмяСвойства - тип: строка, имя устанавливаемого свойства. Поддерживает префикс "base64" для передачи в Аддон бинарного значения, конвертируемого из формата Base64.
- Значение - тип: число, булево (кроме версий 7.7), строка, дата. Устанавливаемое значение.
- ТекущаяУниверсальнаяДатаВМиллисекундах (CurrentUniversalDateInMilliseconds) - функция, аналог функции 1С начиная с версии 8.2. Можно применять для младших версий. Без параметров. Возвращает целое число типа long. (*Используется для тестирования 7.7, 8.0, 8.1)
- СлучайноеЧисло (RandomNumber) - функция, получает случайное число из передаваемого диапазона. Аналог одноименной функции в версиях 1С от 8.1. Возвращает целое число, от 1 до максимально заданного значения. (*Используется для тестирования 7.7, 8.0). Параметры:
- МинЗначение - тип: число (целое), минимальное значение диапазона.
- МаксЗначение - тип: число (целое), максимальное значение диапазона.
- Методы работы с буфером Внешних событий и инициация Внешнего события доступны только в Демо-версии, практического значения тут не имеют, поэтому их описания тут не будет. То же касается остальных методов для целей тестирования или отладки.
Список реализуемых служебных методов Аддона:
- Свойства (Properties) - функция. Без параметров. Получает список свойств компоненты в виде строки, доступных в данный момент в соответствии с Уровнем и другими параметрами.
- Методы (Methods) - функция. Без параметров. Получает список методов компоненты в виде строки, доступных в данный момент в соответствии с Уровнем и другими параметрами.
Техническая поддержка и обновления
Бесплатный период техподдержки и бесплатных обновлений составляет 3 месяца со дня покупки
По окончанию бесплатного периода вы можете приобрести услугу технической поддержки с доступом к обновлениям на 12 месяц на платной основе.
Проверить наличие обновлений можно в личном кабинете. Если обновления недоступны - загрузить новую версию можно после покупки обновлений/технической поддержки.
Задать вопрос по программе можно по кнопке "Техподдержка" на странице описания.
При создании тикета необходимо предоставить:
- Номер заказа
- Описание вопроса. Если это ошибки - напишите порядок ваших действий с программой, которые к ней привели (приложите видео/скриншоты/отчеты об ошибке)
- Точную конфигурацию 1С, и версию платформы, на которой используете купленное решение (наименование и версию 1С можно взять из раздела "О программе"), версию купленной программы.
К созданной заявке подключается специалист. Дальнейшее обсуждение проблемы будет проходить в тикете техподдержки. Стандартный срок реакции - 24 часа в рабочие дни с момента обращения.
Причины купить
Если Вы хотите отлаживать Фоновые процессы, или отслеживать их работы в реальном времени без значительных затрат ресурсов памяти и процессорного времени.
Если не хотите иметь проблемы с Блокировками
Если хотите чтобы сообщения Фоновых заданий не пропадали и не перезаписывались, при этом не расходуя зря память до перезагрузки сервера.
Если Вы используете разные версии, в том числе те, в которых глючит работа с Сообщениями Фоновых заданий или где нет этих механизмов.
Если Вы хотите использовать и управлять Фоновыми процессами или эмуляцией Фона на старых версиях 1С.
Если Вы хотите мгновенный обмен между окнами и параллельными потоками (сеансами) на одном серверном процессе, а в перспективе и между процессами и всеми пользователями баз Сервера.
Тогда Вас должен ЗАИНТЕРЕСОВАТЬ этот продукт.
Достоинства
- Стабильность, отказоустойчивость.
- Высокая производительность при операциях в режиме "Разделяемая память", соизмеримая с работой структур 1С. Для режима IDispatch скорость заметно отличается от стандартной структуры только на больших количествах свойств и созданных объектах.
- Совместимость со всеми версиями 1С, включая работу на серверах 8.0 и 8.1 в режиме IDispatch.
- Совместимость с 32-х и 64-х системами Windows
- Совместимость с ограничением по установке со старыми системами как Windows 98/Me
- Возможность хранить и обмениваться Двоичными данными в старых версиях 1С через конвертацию в Base64.
- Надежность, данные не пропадают при обмене с параллельными потоками.
Сравнение версий
3.1.2.6 - Базовый функционал, позволяющий работать с компонентой Структура обмена в 2-х режимах Native и COM - разных версий 1С. Сервера 8.0 и 8.1 не поддерживали этот режим.
3.1.2.7 - Добавлен функционал подключения компоненты как OLE Auto объект через интерфейс IDispatch, что позволяет использовать это компоненту для коммуникации с Фоновыми заданиями в 8.1 и эмуляцией Фона (параллельного серверного сеанса) в версии 8.0.
3.1.2.8 - Исправления.