Инициализация локального или глобального ядра, в зависимости от того, откуда доступна база Mobile SMARTS (с клиента или с сервера). Для глобального ядра будут вызываться методы, аналогичные методам локального ядра.
Открывается главная форма, срабатывает обработчик ПриОткрытии(), в нем:
-
создаем форму «ЛокальныйКонтекст» и сохраняем ее в переменную ядра «ЛокКонтекст»;
-
создаем пустую структуру «ЛокКонтекст.АдресаПеременных», куда будут закэшированы данные, необходимых для работы ядра и интеграционной обработки;
-
получаем из хранилища общих настроек 1С (ХОН) сохраненные при первом запуске «ПараметрыПодключенияMS» - и общую, и пользовательскую настройки;
-
если удалось получить пользовательскую настройку, используем ее, иначе - общую настройку;
-
сохраняем их в структуру «_ЛокКонтекст.ПараметрыПодключенияMS»;
-
аналогичным алгоритмом получаем из ХОН значение переменной ядра «РасположениеКомпоненты», если в ХОН отсутствует значение, тогда «РасположениеКомпоненты» = «НаСервере» (по умолчанию), сохраняем переменную в «_ЛокКонтекст.РасположениеКомпоненты»;
-
аналогичным алгоритмом получаем из ХОН значение переменной ядра «ТипИнтерфейса», сохраняем значение в «_ЛокКонтекст.ТипИнтерфейса»;
Здесь не устанавливается значение по умолчанию, поэтому, если в ХОН не найден тип интерфейса, то будет «Неопределено»).
СтатусОбработки = «НачалоВыполненияПроцедурыЗапускаОбработки».
-
Проверяем соединение с сервером MS, стек вызовов:
_ЛокКонтекст.ЛокЯдро_ПроверитьСоединениеССерверомSMARTS()
если подключение через COM, то:
_ЛокКонтекст.КомЯдро_ПроверитьСоединениеССерверомSMARTS() →
_ЛокКонтекст.КомЯдро_ПодключитьсяКСерверуSMARTS() - помещение COM-объектов «TerminalConnector» и «StorageConnector» в соответствующую переменную ядра → COMЧастнойБазыMS / COMВременнойБазыMS / COMБазыMS, подключение базы MS к COM-объектам и авторизуемся по токену, если авторизация сохранена →
_ЛокКонтекст.КомЯдро_ПолучитьСтруктуруПодключенияБазыСМАРТС() - создание COM-объектов «TerminalConnector» и «StorageConnector» →
_ЛокКонтекст.КомЯдро_ПодключитьсяКБазеSMARTS() - подключение базы Mobile SMARTS к COM-объектам и авторизуемся по токену, если авторизация сохранена → _ЛокКонтекст.КомЯдро_ПодключитьсяКБазеSMARTSНаСервереЗавершение() - получаем структуру описания базы и проверяем соединение с базой.
если подключение через REST_API, то:
_ЛокКонтекст.REST_API_ПодключитьсяКБазеSMARTS() - устанавливаем HTTP-соединение с сервером Mobile SMARTS по строке подключения и выполняем авторизацию HTTP-методом GET
Если требуется авторизация для подключения к серверу Mobile SMARTS и она не сохранена, тогда открываем форму для ввода логина и пароля и после ее закрытия снова проверяем соединение с сервером Mobile SMARTS - _ЛокКонтекст.ЛокЯдро_ПроверитьСоединениеССерверомSMARTS().
Если не удалось подключиться с пользовательской настройкой, пробуем подключиться с общей настройкой.
Если проверка соединения с сервером Mobile SMARTS прошла успешно, тогда меняем статус обработки:
СтатусОбработки = «БезОшибок»
Иначе - меняем статус обработки:
СтатусОбработки = «РаботаССерверомБазаНедоступна»
Для подключения через COM проверяем, что были созданы COM-объекты «TerminalConnector» и «StorageConnector». Далее проверяем, что заполнена строка подключения базы в методе _ЛокКонтекст.ЛокЯдро_ПроверитьСозданиеКОМОбъекта(), меняем статус обработки:
СтатусОбработки = «НачалоПодключенияИнтеграционнойОбработкиСообщениеБезопасности»
-
Подключаем интеграционную обработку в методе _ЛокКонтекст.ЛокЯдро_ПодключитьИнтеграционнуюОбработку(), результаты помещаем в соответствующие переменные ядра ИмяИнтеграционнойОбработки, _ИнтеграционнаяОбработкаАдрес, ИнтеграционнаяОбработкаПодключена, ФормаИнтеграционнойОбработки, ТипОбработки, АдресаПеременных.ИнтеграционнаяОбработка
-
Для подключения через COM проверяем, что созданы COM-объекты «TerminalConnector» и «StorageConnector», в методе _ЛокКонтекст.ЛокЯдро_ПроверитьСозданиеКОМОбъекта().
Если COM-объекты не созданы, тогда выдается сообщение пользователю о том, что не удалось подключить внешнюю компоненту
-
Если COM-объекты созданы, но сервер недоступен, открывается форма настройки подключения и меняем статус обработки:
СтатусОбработки = «КоннекторMSСозданПроверяемДоступностьБазы»
Если COM-объекты созданы, сервер доступен, но недоступна текущая база, открываем форму настройки подключения
Если COM-объекты созданы, сервер доступен и доступна текущая база, тогда запускаем инициализацию ядра, метод _ЛокКонтекст.ЛокЯдро_Инициализация().
Начало инициализации ядра
-
В переменную ядра «КатегорииНастроекMS» получаем категории настроек: сериализуемые, узловые, настройки подключения, настройки справочников, настройки номенклатуры.
-
Получаем пустую структуру настроек в переменную ядра «ТекущиеНастройкиMS» – все возможные ключи настроек (например, «ВыгружатьНоменклатуруСразу», «НастройкиОбменаСправочников», «НастройкиБизнесПроцессов»).
-
Получаем значения настроек из базы Mobile SMARTS и заполняем ими пустую структуру настроек. Если выбран какой-либо текущий узел для текущей базы 1С, то получаем настройки из базы Mobile SMARTS, привязанной к этому узлу (это может быть как частная база, так и основная).
-
В переменную ядра «СтруктураМетаданных» сохраняем метаданные документов 1С, метаданные документов Mobile SMARTS, пользователи, устройства, таблицы Mobile SMARTS, UniПолейНоменклатуры.
-
В переменную ядра «ДанныеТекущегоУзла» получаем ID, Имя узла и ID базы Mobile SMARTS, привязанной к этому узлу.
-
В переменную ядра «ПраваПользователя» получаем права пользователя, например, «Администратор», «Пользователь». Механизм пока в разработке, является заготовкой для своей системы разграничения прав.
-
Если инициализация проходит в локальном контексте, то вызываем метод «ГлЯдро_ОтправитьДанныеДляИнициализацииВГлКонтекст».
-
Выполняем обновление структуры настроек, если структура настроек изменилась (описание механизма обновления структуры настроек приведено в статье).
-
Временная заплатка: объединяем произвольные коды, если произвольные коды лежат в 4-х ключах:
ПроизвольныеКоды_Выгрузка_ШапкаДокумента.
ПроизвольныеКоды_Выгрузка_ТабличнаяЧастьДокумента.
ПроизвольныеКоды_Загрузка_ШапкаДокумента.
ПроизвольныеКоды_Загрузка_ТабличнаяЧастьДокумента.
-
Проверяем обновление типовых бизнес-процессов.
-
Собираем общую структуру настроек бизнес-процессов из ключей «НастройкиБизнесПроцессов_ПоУмолчанию», «НастройкиБизнесПроцессов_Пользовательские», «НастройкиБизнесПроцессов_ПользовательскиеНастройки» в один ключ «НастройкиБизнесПроцессов» и сохраняем в кэш.
-
Собираем общую структуру произвольных кодов из ключей «ПроизвольныеКоды_ПоУмолчанию», «ПроизвольныеКоды_Пользовательские» в один ключ «ПроизвольныеКоды» и сохраняем в кэш.
-
Заполняем список выбора узлов (торговых объектов) на главной форме для возможности смены узла для текущей базы 1С.
-
Устанавливаем заголовок формы в зависимости от продукта — «Магазин 15», «Склад 15» и т.д.
-
Устанавливаем ссылку на базу знаний в зависимости от продукта — «Магазин 15», «Склад 15» и т.д.
-
Установливаем QR-код на главной форме для быстрого подключения к нужной базе путем сканирования кода терминалом сбора данных.
-
Устанавливаем статус обработки: Конец инициализации ядра.
СтатусОбработки = “БезОшибок”
Обновление информации о интеграционной обработке (ИО)
Если интеграционная обработка не соответствует конфигурации (версии конфигурации) или её версия не подходит для текущей версии обработки-ядра, то меняем статус обработки и меняем текст и цвет статуса на соответствующий.
Например, СтатусОбработки = “ПодключеннаяИнтеграционнаяОбработкаДляДругойКонфигурации”, цвет текста - томатный и т.д. для того чтобы пользователь понял, в чем ошибка, насколько она критична и как ее можно устранить.
Если интеграционную обработку не удалось подключить, то аналогично, меняем статус (“ПодключеннаяИнтеграционнаяОбработкаНеТотФайл”, “ОшибкаПриЗапускеИнтеграционнойОбработки”) и выводим соответствующее сообщение об ошибке.