Алгоритм получения настроек с сервера во внешнюю обработку — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
Строка 6: Строка 6:
 
==Алгоритм загрузки файла настроек из СБИС==
 
==Алгоритм загрузки файла настроек из СБИС==
  
=== 1. Идентификатор настройки (ConnectionId) отсутствует в пользовательских параметрах ===
+
=== 1. Идентификатор настройки (ConnectionID) отсутствует в пользовательских параметрах ===
  
'''1.1.''' Проверяем имеется ли для данной базы 1С общие настройки .
+
'''1.1.''' Проверяем имеются ли для данной базы 1С общие настройки, либо настройка уже проводилась, но по какой-либо причине, ConnectionID в обработку не сохранился/стерся.
* Получаем список настроек [[ReadConnectionList_(IntegrationConnection)|ReadConnectionList]]
+
* Получаем список настроек [[ReadConnectionList_(IntegrationConnection)|ReadConnectionList]]. Сразу получаем сбисМеню, в котором содержится информация по составу настроек и тому, какие файлы включены, а какие - нет.
 
** Параметры вызова:
 
** Параметры вызова:
 
*** service - идентификатор сервиса ВО 1С - Com1C82
 
*** service - идентификатор сервиса ВО 1С - Com1C82
Строка 16: Строка 16:
 
* Если список соединений пуст, переходим к процедуре выбора подходящих стандартных настроек (Пункт 3).
 
* Если список соединений пуст, переходим к процедуре выбора подходящих стандартных настроек (Пункт 3).
  
'''1.2.''' Берём первое соединение из полученного списка.
+
'''1.2.''' Берём первое соединение из полученного списка. В списке стоит сортировка: сперва идут настройки, которые сохранены только для выбранного пользователя, а затем общие для аккаунта.
* Кэшируем меню выбранного соединения.
+
* Кэшируем сбисМеню выбранного соединения, чтобы в дальнейшем не получать повторно.
  
 
'''1.3.''' Переходим к  пункту 2.
 
'''1.3.''' Переходим к  пункту 2.
Строка 23: Строка 23:
 
=== 2. Идентификатор настройки (ConnectionId) указан в пользовательских настройках ===
 
=== 2. Идентификатор настройки (ConnectionId) указан в пользовательских настройках ===
  
'''2.2.''' Составляем список файлов Получает меню соединения.
+
'''2.1.''' Составляем список файлов настроек, которые необходимо получить.
* Проверяет наличие сбисМеню в кэше по выбранному ID, берёт его.
+
* 2.1.1. Получаем сбисМеню, в котором содержится информация по составу настроек и тому, какие файлы включены, а какие - нет.  
* Если меню нет, то получает его:
+
** Проверяем наличие сбисМеню в кэше по выбранному ConnectionID и берём его.
** Вызывает метод [[ReadConnection_(IntegrationConnection)|readConnection]]
+
* 2.1.2. Если меню нет, то читаем его с сервера по выбранному ConnectionID:
 +
** Читаем настройки с сервера, но не все, а только сбисМеню [[ReadConnection_(IntegrationConnection)|readConnection]]
 
*** Параметры вызова:
 
*** Параметры вызова:
**** id - 128 битный идентификатор соединения.
+
**** id - ConnectionID, 128 битный идентификатор соединения.
 
**** version - числовое представление версии системы, где каждый разряд версии, кроме первого, дополнен нулями до 4 символов. Пример: 3.2.0.11 = 3000200000011
 
**** version - числовое представление версии системы, где каждый разряд версии, кроме первого, дополнен нулями до 4 символов. Пример: 3.2.0.11 = 3000200000011
 
**** ini - массив со структурой, вида: ключ - строка "ini_type", значение - строка "Меню".
 
**** ini - массив со структурой, вида: ключ - строка "ini_type", значение - строка "Меню".
*** Кэширует полученное меню.
+
*** Кэшируем полученное меню.
 +
* 2.2.3. Читаем меню и составляем список включенных файлов настроек, которые необходимо получить.
 +
** Включенным считается файл с установленным флагом в поле "enable". Если один и тот же файл встречается в меню несколько раз, в разных разделах, то он должен быть везде либо включен, либо отключен.
 +
** Структура элементов списка:
 +
*** Массив структур "ini" с элементами:
 +
**** Ключ - "ini_type", значение - тип ини.
 +
**** Ключ - "ini_name", значение - системное имя ини.
  
'''Шаг 2.''' Получает данные настроек и сбисПараметров.
+
'''2.2.''' Получаем файлы настроек и сбис параметры.
* Собирает список включенных ини по меню соединения.
+
* 2.2.1. Возможно, настройки, либо их часть, были получены ранее, поэтому смотрим их наличие в кэше по выбранному ConnectionID.
** Включенной считается ини с установленным флагом в поле "enable".
+
** Найденные файлы исключаем из списка настроек, которые необходимо получить.
** Структура элементов списка:
+
* 2.2.2. Читаем с сервера недостающие данные [[ReadConnection_(IntegrationConnection)|readConnection]]
*** Массив "ini" с элементами:
 
*** Ключ - "ini_type", значение - тип ини.
 
*** Ключ - "ini_name", значение - системное имя ини.
 
* Проверяет наличие настроек в кэше по идентификатору и сформированному списку.
 
* Вызывает метод [[ReadConnection_(IntegrationConnection)|readConnection]]
 
 
** Параметры вызова:
 
** Параметры вызова:
*** id - 128 битный идентификатор соединения.
+
*** id - ConnectionID, 128 битный идентификатор соединения.
 
*** version - числовое представление версии системы, где каждый разряд версии, кроме первого, дополнен нулями до 4 символов. Пример: 3.2.0.11 = 3000200000011.
 
*** version - числовое представление версии системы, где каждый разряд версии, кроме первого, дополнен нулями до 4 символов. Пример: 3.2.0.11 = 3000200000011.
*** ini - массив объектов "ini", которые не удалось найти кэше. Если все файлы найдены, не передаётся.  
+
*** ini - массив объектов "ini", которые не удалось найти кэше. Если все файлы найдены, параметр не передаётся.  
 
** Кэширует полученные настройки.
 
** Кэширует полученные настройки.
* Получает структуру сбисПараметров из поля "json_connection"
+
* 2.2.3. Читаем структуру сбис параметров из поля "json_connection" для проверки изменений, произошедших с последнего запуска.
  
'''Шаг 3.''' Выполняет проверку настроек.
+
'''2.3.''' Проверяем настройки.
* Проверяет необходимость проверки.
+
* 2.3.1. Прежде чем выполнять проверку, нужно посмотреть на изменения, которые могли произойти с момента последнего запуска обработки на этой конфигурации. Пользователь мог обновить конфигурацию, либо могли поменяться файлы настроек.
** Проверка выполняется при изменении версии конфигурации базы данных:
+
** Для того, чтобы отследить изменения версии конфигурации, сравним значение узла "ВерсияКонфигурации" в сбис параметрах и текущую версию конфигурации - Метаданные.Версия. Если не совпадает, значит проверка нужна.
*** Сравнивает значение узла "ВерсияКонфигурации" в сбисПараметрах и текущую версию конфигурации - Метаданные.Версия.
+
** Для того, чтобы отследить изменения файлов настроек конфигурации, сравним дату последней проверки каждой включенной настройки в сбис параметрах и поле в настройках "update_date". Если не совпадает хотя бы для одного файла, значит проверка нужна.
** Проверка выполняется при создании нового подключения:
+
* 2.3.2. Выполняет проверку, если были изменения.
*** Выбранные настройки являются общими - поле "user" пусто.
 
** Проверка выполняется при изменении файлов настроек:
 
*** Сравнивает дату последней проверки каждой включенной настройки в сбисПараметрах и поле соединения "update_date".
 
* Выполняет проверку, если требуется.
 
 
** Выполняет  функцию ПроверитьИниФайлы на формаНастроекОбщее.
 
** Выполняет  функцию ПроверитьИниФайлы на формаНастроекОбщее.
 
** Обновляет дату проверки в сбисПараметрах.
 
** Обновляет дату проверки в сбисПараметрах.

Версия 11:58, 2 ноября 2017

ВО СБИС поддерживает два варианта хранения файлов настроек: "в каталоге" и "в СБИС". В первом варианте настройки находятся на локальном диске, путь до папки указывается в настройках обработки, и сохраняется в пользовательских параметрах 1С. Основной недостатком является необходимость общего доступа к каталогу и более сложная настройка в Linux и клиент-серверных версиях 1С, не работает в веб клиентах 1С.

Во втором варианте настройки хранятся в СБИС, в пользовательских параметрах 1С хранится только идентификатор настройки. Данный способ доступен только для при использовании способа обмена extSDK, либо extSDKCrypto. Данный вариант избавлен от недостатков, а также имеет дополнительный функционал - общие настройки. Можно создать для всех настройки по-умолчанию, которые автоматически будут применяться у пользователей при запуске обработки на этой базе 1С.

Алгоритм загрузки файла настроек из СБИС

1. Идентификатор настройки (ConnectionID) отсутствует в пользовательских параметрах

1.1. Проверяем имеются ли для данной базы 1С общие настройки, либо настройка уже проводилась, но по какой-либо причине, ConnectionID в обработку не сохранился/стерся.

  • Получаем список настроек ReadConnectionList. Сразу получаем сбисМеню, в котором содержится информация по составу настроек и тому, какие файлы включены, а какие - нет.
    • Параметры вызова:
      • service - идентификатор сервиса ВО 1С - Com1C82
      • URL - строка соединения базы данных.
      • ini - массив со структурой, вида: ключ - строка "ini_type", значение - строка "Меню".
  • Если список соединений пуст, переходим к процедуре выбора подходящих стандартных настроек (Пункт 3).

1.2. Берём первое соединение из полученного списка. В списке стоит сортировка: сперва идут настройки, которые сохранены только для выбранного пользователя, а затем общие для аккаунта.

  • Кэшируем сбисМеню выбранного соединения, чтобы в дальнейшем не получать повторно.

1.3. Переходим к пункту 2.

2. Идентификатор настройки (ConnectionId) указан в пользовательских настройках

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

  • 2.1.1. Получаем сбисМеню, в котором содержится информация по составу настроек и тому, какие файлы включены, а какие - нет.
    • Проверяем наличие сбисМеню в кэше по выбранному ConnectionID и берём его.
  • 2.1.2. Если меню нет, то читаем его с сервера по выбранному ConnectionID:
    • Читаем настройки с сервера, но не все, а только сбисМеню readConnection
      • Параметры вызова:
        • id - ConnectionID, 128 битный идентификатор соединения.
        • version - числовое представление версии системы, где каждый разряд версии, кроме первого, дополнен нулями до 4 символов. Пример: 3.2.0.11 = 3000200000011
        • ini - массив со структурой, вида: ключ - строка "ini_type", значение - строка "Меню".
      • Кэшируем полученное меню.
  • 2.2.3. Читаем меню и составляем список включенных файлов настроек, которые необходимо получить.
    • Включенным считается файл с установленным флагом в поле "enable". Если один и тот же файл встречается в меню несколько раз, в разных разделах, то он должен быть везде либо включен, либо отключен.
    • Структура элементов списка:
      • Массив структур "ini" с элементами:
        • Ключ - "ini_type", значение - тип ини.
        • Ключ - "ini_name", значение - системное имя ини.

2.2. Получаем файлы настроек и сбис параметры.

  • 2.2.1. Возможно, настройки, либо их часть, были получены ранее, поэтому смотрим их наличие в кэше по выбранному ConnectionID.
    • Найденные файлы исключаем из списка настроек, которые необходимо получить.
  • 2.2.2. Читаем с сервера недостающие данные readConnection
    • Параметры вызова:
      • id - ConnectionID, 128 битный идентификатор соединения.
      • version - числовое представление версии системы, где каждый разряд версии, кроме первого, дополнен нулями до 4 символов. Пример: 3.2.0.11 = 3000200000011.
      • ini - массив объектов "ini", которые не удалось найти кэше. Если все файлы найдены, параметр не передаётся.
    • Кэширует полученные настройки.
  • 2.2.3. Читаем структуру сбис параметров из поля "json_connection" для проверки изменений, произошедших с последнего запуска.

2.3. Проверяем настройки.

  • 2.3.1. Прежде чем выполнять проверку, нужно посмотреть на изменения, которые могли произойти с момента последнего запуска обработки на этой конфигурации. Пользователь мог обновить конфигурацию, либо могли поменяться файлы настроек.
    • Для того, чтобы отследить изменения версии конфигурации, сравним значение узла "ВерсияКонфигурации" в сбис параметрах и текущую версию конфигурации - Метаданные.Версия. Если не совпадает, значит проверка нужна.
    • Для того, чтобы отследить изменения файлов настроек конфигурации, сравним дату последней проверки каждой включенной настройки в сбис параметрах и поле в настройках "update_date". Если не совпадает хотя бы для одного файла, значит проверка нужна.
  • 2.3.2. Выполняет проверку, если были изменения.
    • Выполняет функцию ПроверитьИниФайлы на формаНастроекОбщее.
    • Обновляет дату проверки в сбисПараметрах.
    • Обновляет поле "ВерсияКонфигурации" на текущую версию конфигурации - Метаданные.Версия.

Шаг 4. Сохраняет выбранное соединение.

  • Если проверка настроек проводилась.
    • Готовит структуру на запись.
      • Поле "ini" не указывается.
      • Все поля остальные поля берутся из выбранного соединения.
    • Записывает сбисПараметры:
      • В поле "json_connection" записываются сбисПараметры с учетом изменений.
    • Определяет необходимость создания нового подключения.
      • Если выбранное соединение является общим, то его идентификатор указывается в качестве параметра "parent". Поле "id" очищается.
    • Сохраняет изменения.
  • Сохраняет ID соединения в обработку
    • ID выбранного соединения записывается в пользовательский параметр "ConnectionID".

Шаг 5. Выполняет переход в раздел(Пункт 3).

Пункт 3. Переход в раздел:

Если полученные файлы ини прошли проверку:

  • Выполняет переход в раздел, установленный по-умолчанию.

Если настройки полученного соединения не прошли проверку:

  • Шаг 1. Если были ошибки при проверке, показывает протокол об ошибках.
    • ВывестиПротоколПроверкиИниФайлов на форме ФайлыНастроекОбщее.
  • Шаг 2. Переходит в "Настройки", подраздел "Файлы настроек".
    • ПерейтиВРаздел на форме ГлавноеОкно
  • Шаг 3. Заполняет список доступных конфигураций.
    • ОбновитьКонтент на форме Раздел_Настройки_ФайлыНастроек
      • Вызывает ReadConfigList.
        • Параметры вызова:
          • service - идентификатор сервиса ВО 1С - Com1C82
      • Заполняет список, кэширует.
  • Шаг 4. Проверяет наличие выбранного соединения.
    • Если соединение не выбрано:
      • а. Подбирает подходящую типовую конфигурацию.
        • ОпределитьТипНастроекПоПрефиксу на форме ФормаНастроекОбщее.
      • б. Получает меню выбранной конфигурации.
        • Проверяет меню в кэше. Если есть, берёт.
        • Если в кэше нет, получает:
          • Вызывает ReadConfig
            • Параметры вызова:
              • service - идентификатор сервиса ВО 1С - Com1C82.
              • subsystem - поле "subsystem" выбранной конфигурации.
              • version - поле "version" выбранной конфигурации.
              • ini - массив со структурой, вида: ключ - строка "ini_type", значение - строка "Меню".
          • Кэширует полученное меню.
      • в. Формирует массив имен и типов включенных ини по меню.
        • Включенной считается ини с установленным флагом в поле "enable".
        • Структура элементов массива "ini":
          • Ключ - "ini_type", значение - тип ини.
          • Ключ - "ini_name", значение - системное имя ини.
      • г. Получает ини выбранной конфигурации.
        • Проверяет ини в кэше по сформированному массиву. Если есть, берёт.
        • Если в кэше нет, вызывает ReadConfig
          • Параметры вызова:
            • service - идентификатор сервиса ВО 1С - Com1C82
            • subsystem - поле "subsystem" выбранной конфигурации.
            • version - поле "version" выбранной конфигурации.
            • ini - массив объектов "ini", которые не удалось найти кэше.
        • Кэширует полученные настройки
      • д. Выбранная конфигурация назначается выбранным соединением с пометкой создания нового при записи.
      • е. Выполняется проверка выбранного соединения.
  • Шаг 5. Находит конфигурацию выбранного соединения.
    • ОпределитьТипНастроекПоПрефиксу на форме ФормаНастроекОбщее.
  • Шаг 6. Получает меню выбранной конфигурации.
    • Проверяет меню в кэше. Если есть, берёт.
    • Если в кэше нет, вызывает ReadConfig
      • Параметры вызова:
        • service - идентификатор сервиса ВО 1С - Com1C82
        • subsystem - поле "subsystem" выбранной конфигурации.
        • version - поле "version" выбранной конфигурации.
        • ini - массив со структурой, вида: ключ - строка "ini_type", значение - строка "Меню".
      • Кэширует полученное меню
  • Шаг 7. Строит список доступных ини.
    • ПолучитьМассивФайловДляКонфигурации на форме ФайлыНастроекСервер.
    • ПолучитьМассивУстановленныхИниФайлов на форме ФайлыНастроекСервер.
  • Шаг 8. Отображает выбранные ини соединения и конфигурации.
    • сбисОбновитьТаблицыИниФайлов на форме ГлавноеОкно.
      • В левой колонке список ини полученной конфигурации.
      • В правой колонке список ини выбранного соединения.