Перейти к основному содержимому

Архитектура решения для работы продуктов на платформе Mobile SMARTS с «1С: Предприятием»

Сердце обработки 1С от «Клеверенс» — это ядро обработки, программный интерфейс, обеспечивающий взаимодействие между товароучетными решениями на базе 1С и приложениями платформы Mobile SMARTS («Магазин 15»). Именно ядро определяет алгоритмы выполнения всех ключевых операций в рамках обработки: обмен справочниками, обмен документами, различные конфигурации и параметры.

Прямое редактирование ядра невозможно — для его взаимодействия с конфигурацией 1С применяется интеграционная обработка, в которую и вносятся все необходимые изменения.

Этот раздел создан для того, чтобы объяснить, как устроено ядро и по каким принципам работает сама обработка.

Ядро и формы обработки 1С

Ядро

Ядро — это интерфейс, позволяющий наладить связь между учетной системой на базе 1С и программами «Магазин 15», построенными на Mobile SMARTS.

Ядро не зависит от конкретной конфигурации 1С — оно поставляется отдельно, а интеграция осуществляется за счёт специальной обработки, содержащей запросы справочников и механизмы импорта документов из Mobile SMARTS в 1С.

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

Ядро делится на два контекста:

  • Глобальный контекст (ядро) — запускается на сервере 1С. Включает модули, реквизиты и таблицы. Здесь размещены ключевые механизмы работы с базой Mobile SMARTS, настройками, обработкой данных. В режиме онлайн также хранятся активные параметры системы.
  • Локальный контекст (ядро) — форма, содержащая упрощённую версию ядра. Содержит функции и методы, отвечающие за взаимодействие с COM-объектами Mobile SMARTS.

Для обоих контекстов формируется кэш — наборы данных, получаемых из баз 1С и Mobile SMARTS при запуске ядра.

Локальное ядро необходимо только при размещении сервера Mobile SMARTS на локальной машине. Во всех остальных вариантах используется только глобальное ядро.

Технически взаимодействие организовано через реквизиты «ЯдроОбщее» и «ЯдроКомпоненты», создаваемые в каждом объекте и форме. Эти реквизиты обеспечивают ссылки на соответствующий контекст:

  • «ЯдроОбщее» — содержит ссылку на «ОбработкаОбъект» (глобальный контекст).
  • «ЯдроКомпоненты» — может содержать либо ссылку на «ОбработкаОбъект» (если компонент размещён на сервере), либо ссылку на форму с локальным контекстом (если компонент работает на клиенте).

Обращение к ядру строго регламентировано:

  • В модуле объекта используется ЭтотОбъект.ЯдроОбщее или ЭтотОбъект.ЯдроКомпоненты.
  • В модулях форм — ЭтаФорма.ЯдроОбщее или ЭтаФорма.ЯдроКомпоненты.

Методы локального ядра аналогичны методам глобального — разница только в способе вызова, например: ЭтотОбъект.ЯдроОбщее.ПолучитьНастройку(...) или ЭтаФорма.ЯдроКомпоненты.СохранитьДокументНаСервереSMARTS().

Обмен данными между глобальным контекстом и другими элементами происходит через механизм временного хранилища 1С.

Последовательность инициализации контекста:

  1. При старте системы глобальный контекст инициализируется: ЭтотОбъект.ЯдроОбщее = ЭтотОбъект.
  2. Читается настройка местоположения сервера SMARTS.
    • Если он размещён на сервере — ЭтотОбъект.ЯдроКомпоненты = ЭтотОбъект.
    • Если на клиенте — локальный контекст инициализируется только при открытии формы.
  3. Если локальный контекст доступен — из Mobile SMARTS читаются настройки и помещаются в кэш глобального контекста.
  4. В онлайн-режиме на этом всё, в остальных случаях (батч, автообмен) процесс продолжается.
  5. При открытии главной формы заново инициализируется глобальный контекст: ЭтаФорма.ЯдроОбщее = ЭтотОбъект.
  6. Повторно читается настройка местоположения сервера Mobile SMARTS.
    • Если он на сервере — ЭтаФорма.ЯдроКомпоненты = ЭтотОбъект.
    • Если на клиенте — ЭтаФорма.ЯдроКомпоненты = ПолучитьФорму("ФормаЛокальногоКонтекста").

Реквизиты «ЯдроОбщее» и «ЯдроКомпоненты» передаются в подчинённые формы при их открытии.

Локальный контекст не имеет доступа к глобальному — все нужные параметры нужно передавать напрямую при вызове методов.

Формы

Формы не входят в состав ядра напрямую. Они реализуют пользовательский интерфейс для трёх основных функций:

  • управление настройками;
  • обмен справочниками;
  • обмен документами.

Категории форм:

  • Ключевые формы — главная, обмен документами, список отборов справочников, локальный контекст.
  • Формы списков — используются для отображения таблиц (узлы, бизнес-процессы, отборы, параметры и др.), доступны только для просмотра (кроме списка отборов справочников); возможно экспортировать/импортировать данные.
  • Формы настроек — карточки, открывающиеся из списка, позволяют редактировать и сохранять данные.
  • Формы просмотра — используются только для отображения документов MS.
  • Служебные формы — выборы, загрузка новых ШК, параметры подключения, выбор документа/пользователя, редактирование запроса и др.

Методы работы с данными 1С или Mobile SMARTS не должны находиться в формах. Работа с 1С выполняется в глобальном ядре, с Mobile SMARTS — в локальном. Вся промежуточная логика — также в глобальном ядре.

Функциональность ядра обработки 1С

Основной функционал ядра делится на три блока:

  1. Управление параметрами обмена (настройки бизнес-процессов, торговых объектов, глобальные параметры, отборы и т.д.).
  2. Выгрузка справочников — онлайн, оффлайн, по расписанию.
  3. Выгрузка/загрузка документов между 1С и Mobile SMARTS.

Остальной функционал — вспомогательный.

обмен с 1с
  1. Транзитный блок — находится на клиенте, передаёт управление на сервер, использует временное хранилище для передачи параметров и результатов.

  2. Блок работы с ХОН (хранилищем общих настроек) — сохраняет/восстанавливает настройки подключения и параметры текущего узла. Работа возможна только на сервере, доступ с клиента — через транзитный блок.

  3. Прямой интерфейс работы с Mobile SMARTS (API) — доступен как на сервере, так и на клиенте. Работает через COM-объекты и включает:

    • управление настройками;
    • выгрузку справочников;
    • обмен документами;
    • получение информации о базах, ошибках, пользователях, шаблонах весового товара и др.
  4. Обёртки над API (клиент/сервер) — инициализируют кэши, читают и сохраняют настройки, работают с файлами форм списков и карточек настроек (только на клиенте).

  5. Методы выгрузки справочников и номенклатуры:

    • работа с данными 1С только на сервере;
    • формирование запросов, работа с СКД, постобработка — только сервер;
    • API-взаимодействие — и клиент, и сервер.
  6. Работа с документами 1С — аналогично справочникам, методы получения, записи и список документов доступны только на сервере.

  7. Внешние вызовы — работают только на сервере или в внешнем соединении, обеспечивают онлайн-работу терминалов:

    • выгрузка справочников и документов;
    • получение списков;
    • загрузка документов обратно в 1С.

Хранение объектов и переменных

Переменные ядра

Переменные ядра — это место хранения данных, к которым часто требуется обращаться из различных методов ядра. Их задача — обеспечить быстрый доступ к данным без необходимости постоянного получения информации из баз Cleverence 1С.

Данные, которые попадают в переменные ядра при запуске обработки (в режиме онлайн или интерактивно), поступают из разных источников: метаданных базы Cleverence, конфигурационных настроек, общих настроек 1С (ХОН), а также формируются программно или заполняются значениями по умолчанию.

В локальном ядре используются:

  • Клиентские переменные формы "ЛокальныйКонтекст" — доступны во всех клиентских методах формы.
  • Реквизиты формы "ЛокальныйКонтекст" — доступны как в клиентских, так и в серверных методах формы.
Имя переменнойНазначениеИсточникИзменяемость
Клиентские переменные формы "ЛокальныйКонтекст"
РасположениеКомпонентСтрока: «НаКлиенте» или «НаСервере». Указывает, откуда будет идти взаимодействие с
базой Cleverence: с клиентской или серверной части 1С. При обмене через COM важна регистрация внешней компоненты. При работе через REST API ничего дополнительно настраивать не требуется.
ХОНДа, через форму настроек подключения
ДанныеТекущегоУзлаСтруктура с ID узла, наименованием (например, «Магазин на Ленина») и ID базы Cleverence. Используется для определения, какая именно база (основная или частная) участвует в обмене. Частная база содержит документы и справочники, а основная — только настройки.Настройки базы CleverenceДа, на главной форме при выборе торговой точки
КатегорииНастроекMSСтруктура, включающая:
- сериализуемые настройки — таблицы, сохраняемые в файл;
- узловые настройки — параметры, зависящие от узла (магазина, склада);
- подключение — ID базы, строка подключения и пр.;
- справочники — флажки выгрузки объектов;
- настройки номенклатуры — шаблоны, префиксы и др.
ПрограммноНет
НастройкиИнициализированыБулево: показывает, загружены ли настройки из базы Cleverence. Если нет, требуется повторная загрузка.ПрограммноДа, при потере соединения
ПараметрыПодключенияMSСтруктура: ID базы, имя, строка подключения, QR, токен, путь и тип ИО, версия продукта и др.ХОНДа, через форму настройки
СтруктураМетаданныхСтруктура: метаданные документов 1С и MS, пользователи и устройства MS, таблицы и поля.Метаданные базы 1С и MS, настройки CleverenceНет
COMЧастнойБазыMSCOM-объекты (TerminalConnector, StorageConnector) для частной базы. Актуально при использовании COM. При REST API не используется.ПрограммноДа, при смене базы обмена
COMВременнойБазыMSИспользуется только на форме подключения, чтобы проверить соединение, не влияя на рабочие базы.ПрограммноДа, служебная переменная
COMБазыMSКак и COMЧастнойБазыMS, но применяется для основной базы MS.ПрограммноДа, при смене базы обмена
ТекущиеНастройкиMSСтруктура: содержит пары Ключ-Значение для активной базы Cleverence, например: ВыгружатьНоменклатуруСразу = Истина.Настройки базы MSДа, редактируется из разных форм
ПутьКОбработкеНЕ ИСПОЛЬЗУЕТСЯ! Используется поле ПутьИнтеграционнойОбработки из ПараметрыПодключенияMS.
КОМсозданБулево: подтверждает, что COM-объекты (TerminalConnector и StorageConnector) созданы.ПрограммноДа, при потере связи
ПраваПользователяСтрока: роль в 1С, например, «Администратор» или «Пользователь». Определяет доступность элементов интерфейса.Метаданные базы 1СНет
ФормаИнтеграционнойОбработкиТип — форма клиентского приложения. Используется для вызова обработчика "После открытия формы документа 1С".ПрограммноДа, в форме настройки ИО
Реквизиты формы "ЛокальныйКонтекст"
_ИнтеграционнаяОбработкаАдресСтрока: путь к интеграционной обработке во временном хранилище, откуда она потом вызывается сервером.ПрограммноДа, через форму настройки ИО
АдресаПеременныхСтруктура: хранит адреса других переменных ядра во временном хранилище, для возможности передачи в глобальное ядро. Содержит, в том числе:
- ДанныеТекущегоУзла
- ИнтеграционнаяОбработка
- ПараметрыПодключенияMS
- ТипИнтерфейса и др.
Программно, через уже инициализированные переменные
ЕстьЧастнаяБазаБулево: показывает, привязан ли к текущей 1С базе узел с частной базой Cleverence.ПрограммноДа, при выборе узла
ИмяИнтеграционнойОбработкиСтрока или СправочникСсылка:
- для внешней обработки — путь к файлу;
- встроенной — имя встроенной обработки;
- справочной — ссылка на элемент справочника.
ХОНДа, в форме настройки ИО
ИнтеграционнаяОбработкаПодключенаБулево: показывает, была ли успешно подключена интеграционная обработка.ПрограммноДа, при потере соединения
ПолноеИмяОбъектаСтрока: полное имя ядра обработки, например, ВнешняяОбработка.КлеверенсТСД_ОсновнаяОбработка.ПрограммноНет
ТипОбработкиСтрока: определяет, откуда берется ИО — «ФайлНаДиске», «Встроенная» или «СправочникСсылка».Настройки базы MSДа, в форме настройки ИО

Для глобального ядра доступны следующие данные:

  • реквизиты обработки, которые можно использовать из любого метода модуля объекта;

    • ЭтоWebСервис – логический признак, определяющий, работает ли ядро через веб-сервис;
    • COMЧастнойБазыMS, COMВременнойБазыMS, COMБазыMS – дублируют аналогичные переменные локального ядра.
  • серверные переменные, доступные во всех методах модуля объекта;

    • КэшАдресаПеременных – локальная копия переменной АдресаПеременных, используется только в онлайн-режиме, когда требуется сохранить значения переменных ядра между вызовами.
  • переменная АдресаПеременных из локального ядра, которая передается в глобальные методы ядра и обеспечивает доступ к основным локальным переменным.

Что хранится в общем хранилище настроек 1С (ХОН)

Как работает сохранение и загрузка настроек в ХОН

Если у пользователя включено право «Администрирование данных», то сохраняются и личные, и глобальные настройки (глобальные сохраняются с пустым именем пользователя — «»).

При отсутствии такого права сохраняется только личная настройка.

При загрузке действует тот же принцип: можно загрузить только личную настройку или включить загрузку глобальной.

КлючЗначение
Cleverence_ПараметрыПодключенияMSСтруктура с данными подключения: Ид базы, имя, Ид приложения, строка подключения, путь к ИО, версия приложения и др.
Cleverence_РасположениеКомпонентыМестоположение внешней компоненты COM (например, Cleverence.MobileSMARTS.ComConnector.dll), используемой для работы с базой MS из 1С. Компонента может располагаться на клиенте или сервере.
Cleverence_ДатаАктуальностиКэшаМомент последней загрузки настроек из MS (файл customsettings.xml) в кэш. Применяется только в веб-сервисе и внешних соединениях. Если с момента загрузки прошло больше 15 минут, настройки перечитываются.
Cleverence_СтруктураМетаданныхДокументы1СМетаданные 1С-документов: названия, реквизиты, табличные части.
Cleverence_СтруктураНастроекВсе настройки базы MS: фильтры документов и справочников, бизнес-процессы, произвольные коды и т.п.
Cleverence_СтруктураНастроек_ + ID_ТекущегоУзлаТе же настройки, но конкретно для текущего торгового объекта
Cleverence_СтруктураМетаданныхДокументыMSОписание документов MS – имена, реквизиты, табличные части
Cleverence_ПользователиMSСписок пользователей и групп, заведенных в базе MS
Cleverence_ТаблицыMSСписок таблиц базы MS: «Склады», «Остатки», «Цены» и др.
Cleverence_УстройстваMSИдентификаторы и имена мобильных устройств
Cleverence_ИмяИнтеграционнойОбработкиИмя интеграционной обработки, например «ИнтеграционнаяОбработка_УТ_11_4»
Cleverence_РежимВыбораБазыИсточник выбора базы — по строке подключения или из списка
Cleverence_ТипИнтерфейсаТип интерфейса — REST_API или COM
Cleverence_REST_API_ДатаАктуальностиСое-диненияМомент последнего подключения к базе MS через REST API. Используется в веб-сервисах.
Cleverence_ДатаАктуальностиНастроек_ + ПостфиксБазыДата последнего изменения настроек в MS. Обновляется методами КомЯдро_ЗаписатьНастройкиSMARTS. Используется для онлайн-проверки актуальности настроек.

Где хранятся типовые настройки базы

В каждом шаблоне базы Mobile SMARTS (например, «Клеверенс Магазин 15 Полный.mstmpl») есть папка \Обработки 1С\Настройки по умолчанию\, содержащая типовые настройки для разных 1С-конфигураций:

При создании новой базы из шаблона выбирается, с какой конфигурацией 1С будет идти обмен. Связь конфигураций и настроек задана в файле 1CConfigs.xml:

При распаковке шаблона в папку базы копируются:

  • каталог Обработки 1С;
  • файл 1CConfigs.xml;
  • выбранный XML-файл настроек под именем default_customsettings.xml.

Например, для конфигурации «Управление торговлей 11.4» в default_customsettings.xml копируется содержимое ut114.xml:

В default_customsettings.xml содержатся типовые настройки, которые не изменяются из кода 1С:

При первом запуске обработки 1С создается файл customsettings.xml с пользовательскими настройками:

При запросе настройки из MS, сначала ищется в customsettings.xml, затем — в default_customsettings.xml. Если не найдена — возвращается Неопределено.

Метаданные считываемых настроек определяются в методе _ГлЯдро_ПолучитьПустуюСтруктуруНастроекSMARTS()_, при обновлении релизов («Магазин 15») его нужно модифицировать:

Существуют составные сериализуемые настройки (таблицы значений, списки и т.п.), которые сохраняются в текстовом формате. Для этого используются:

  • ЗначениеВСтрокуВнут()
  • ЗначениеИзСтрокиВнут()

Список таких настроек описан в методах:

  • ГлЯдро_ПолучитьКатегорииНастроекMS()
  • ГлЯдро_СформироватьМетаданныеНастроекMS()

Пример:

Чтобы не обращаться к базе при каждом вызове, настройки кэшируются:

  • в переменной _АдресаПеременных.ТекущиеНастройкиMS_;
  • для онлайн-режима — дополнительно в ХОН под ключом Cleverence_СтруктураНастроек.

При изменении настроек они сохраняются и в базу, и в кэш. Каждые 900 секунд проверяется актуальность кэша.

Механизм обновления

В ХОН сохраняются:

  • Cleverence_ДатаАктуальностиНастроек — дата последнего изменения настроек.
  • Cleverence_ДатаАктуальностиКэша — дата загрузки кэша.

Если кэш старее настроек — он обновляется.

Например, если был изменён глобальный параметр, влияющий на фильтрацию документов, при онлайн-работе кэш не обновится, пока не переподключитесь — это и есть проверка актуальности.

Таким образом:

  • Cleverence_ДатаАктуальностиНастроек — время последней записи в MS;
  • Cleverence_ДатаАктуальностиКэша — время последнего считывания настроек из MS.

Если ДатаАктуальностиКэша <= ДатаАктуальностиНастроек, нужно перечитать настройки.

Настройки можно экспортировать или импортировать через файл в формах просмотра/редактирования (например, бизнес-процессов, фильтров документов и др.). Это полезно для резервного копирования или переноса настроек между базами.

Формат хранения настроек бизнес-процессов и произвольных кодов

Бизнес-процессы хранятся в 3х ключах:

  • НастройкиБизнесПроцессов_ПоУмолчанию.
  • НастройкиБизнесПроцессов_Пользовательские.
  • НастройкиБизнесПроцессов_ПользовательскиеНастройки.

НастройкиБизнесПроцессов_ПоУмолчанию — это наши типовые настройки, которые недоступны для редактирования. Они разворачиваются вместе с базой Mobile SMARTS и обновляются в файле default_customsettings.xml. Пользователь может только поменять некоторые параметры, например, «Использование», «Контроль количества», «Режим записи», «Выбор пользователя» и т.д.

НастройкиБизнесПроцессов_ПользовательскиеНастройки — сюда сохраняются те самые параметры, которые разрешено менять пользователю в типовых настройках. Они сохраняются в файл customsettings.xml. Если по этому ключу отсутствует настройка, значит, пользователь ничего не менял в типовых бизнес-процессах.

НастройкиБизнесПроцессов_Пользовательские — сохраняются бизнес-процессы, которые создал пользователь. Они сохраняются в файл « customsettings.xml».

При инициализации настройки бизнес-процессы собираются из этих трех ключей в единую таблицу (метод ГлЯдро_СобратьОбщуюСтруктуруБизнесПроцессов()) + проходит обновление настроек, если версия настроек ниже используемой в ядре.

Если пользователю надо что-то поменять в типовом бизнес-процессе, он может скопировать его, поменять что нужно и отключить типовой. Его скопированный бизнес-процесс будет иметь другой ID.

Главный вопрос — как мы обновляем наши типовые БП?

  1. Разворачиваем базу Mobile SMARTS с типовыми настройками.

  2. Открываем обработку, заходим в настройки бизнес-процессов.

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

  4. Заходим в папку с базой Mobile SMARTS.

  5. Удаляем, переименовываем или меняем расширение у файла default_customsettings.xml.

  6. Перезапускаем обработку, заходим в настройки бизнес-процессов.

  7. Видим пустой список, загружаем настройки из файла, в который сохраняли типовые.

  8. Настройки загрузились, теперь они доступны как пользовательские.

  9. Меняем всё что душе угодно.

  10. Открываем файл « customsettings.xml», форматируем в нормальный вид. Находим ключ НастройкиБизнесПроцессов_Пользовательские.

  11. Переименовываем этот ключ в НастройкиБизнесПроцессов_ПоУмолчанию.

  12. Если менялись произвольные коды, аналогично находим ключ ПроизвольныеКоды_Пользовательские и переименовываем в ПроизвольныеКоды_ПоУмолчанию.

  13. Копируем с заменой эти ключи в нужный файл настроек в зависимости от конфигурации —

«\Git\2.Git_m15\Общий\Обработки 1С\Настройки по-умолчанию».

Аналогичная ситуация с произвольными кодами:

  1. ПроизвольныеКоды_ПоУмолчанию— по этому ключу в файле «default_customsettings.xml» хранятся типовые произвольные коды. Они недоступны для изменения из обработки.
  2. ПроизвольныеКоды_Пользовательские — по этому ключу в файле «customsettings.xml» хранятся пользовательские произвольные коды. Они доступны для изменения из обработки.

При инициализации произвольные коды собираются из этих двух ключей в единую таблицу (метод ГлЯдро_СобратьОбщуюСтруктуруПроизвольныхКодов()) + проходит обновление настроек, если версия настроек ниже используемой в ядре. При экспорте бизнес-процессов в файл также экспортируются и произвольные коды

В прошлых релизах обработки пользовательские произвольные коды сохранялись в 4 ключа:

  • ПроизвольныеКоды_Выгрузка_ШапкаДокумента.
  • ПроизвольныеКоды_Выгрузка_ТабличнаяЧастьДокумента.
  • ПроизвольныеКоды_Загрузка_ШапкаДокумента.
  • ПроизвольныеКоды_Загрузка_ТабличнаяЧастьДокумента, но потом стали храниться в одном ключе ПроизвольныеКоды_Пользовательские, поэтому, для обратной совместимости с прошлыми релизами обработки, существует метод ГлЯдро_ОбъединитьПроизвольныеКоды(), который объединяет все пользовательские произвольные коды в один ключ ПроизвольныеКоды_Пользовательские.

Обновление версии структуры настроек

В типовых настройках (файл «default_customsettings.xml») хранится отдельная служебная настройка по имени «ВерсияНастроек_ПоУмолчанию» (ее значение представляет собой строку, например, «1.0.1.2»). При выходе нового релиза возможна ситуация, когда изменится структура настроек (добавляются новые настройки, удаляются существующие настройки, меняется тип значений существующих настроек). В этом случае версия настроек по умолчанию будет иметь другое значение, например, «1.0.1.3». Поэтому, чтобы обеспечить работоспособность уже существующих у пользователя настроек в новом релизе, предусмотрен механизм обновления структуры настроек.

В некоторых случах, при обновлении своей текущей базы Mobile SMARTS до нового релиза, пользователь только копирует новые файлы обработки-ядра и интеграционной обработки, а файл «default_customsettings.xml» не копирует, он остается тем же, каким он был при первом разворачивании текущей базы Mobile SMARTS из шаблона. Поэтому в самой обработке-ядре существует переменная, отвечающая за версию настроек - ВерсияОбработки, например, «1.3.0.1», она получается из метода СведенияОВнешнейОбработке().ВерсияСтруктурыНастроек.

В кэше хранятся:

  • ВерсияОбработки — версия из модуля обработки;
  • ВерсияОбработкиКлеверенсТСД, она же ВерсияНастроек_ПоУмолчанию — версия обработки по умолчанию из «default_customsettings.xml»;
  • ВерсияОбработкиНастроек — версия из « customsettings.xml»;
  • ВерсияНастроек — из «customsettings.xml», нужна для хранения версии типовых бизнес-процессов.

Обновление настроек при инициализации ядра

Краткий стек вызовов при инициализации ядра:

ГлЯдро_ПолучитьДанныеДляИнициализации => ГлЯдро_ВыполнитьОбновлениеСтруктурыНастроек => ГлЯдро_ВыполнитьОбработчикОбновления => ГлЯдро_ОбновлениеНастроекДоВерсии_1_0_1_1 …………………………………………………………………... => ГлЯдро_ОбновлениеНастроекДоВерсии_х_х_х_х => ГлЯдро_ПроверитьОбновлениеТиповыхБизнесПроцессов - конвертация будет выполняться для обратной совместимости, независимо от версии настроек => ГлЯдро_ОбновитьСтруктуруНастроекБизнесПроцессов => ГлЯдро_КонвертироватьВыгрузкуПолей - вызывается 2 раза для шапки и для ТЧ => ГлЯдро_КонвертироватьЗагрузкуПолей - вызывается 2 раза для шапки и для ТЧ

Подробный стек вызовов при инициализации ядра:

=> ГлЯдро_ПолучитьДанныеДляИнициализации() пСтруктураНастроек = Новый Структура("ВерсияОбработкиНастроек,ВерсияОбработкиКлеверенсТСД",Неопределено,Неопределено); пСтруктураНастроек = ГлЯдро_ПолучитьНастройкиНаСервереSMARTS(пСтруктураНастроек,,,АдресаПеременных); // пСтруктураНастроек.ВерсияОбработкиНастроек = 1 003 000 001 (берется из customsettings.xml) // пСтруктураНастроек.ВерсияОбработкиКлеверенсТСД = Ложь (откуда? из default? в customsettings такого ключа нет) => ГлЯдро_ВыполнитьОбновлениеСтруктурыНастроек() ВерсияНастроек_ПоУмолчанию = пСтруктураНастроек.ВерсияОбработкиКлеверенсТСД // ВерсияНастроек_ПоУмолчанию = 0 ВерсияОбработки = СведенияОВнешнейОбработке().ВерсияСтруктурыНастроек; // ВерсияОбработки = 1 003 000 001 (берется из модуля обработки) ВерсияНастроек = пСтруктураНастроек.ВерсияОбработкиНастроек; // ВерсияНастроек = 1 003 000 001

  1. Если КлючНастройки = Неопределено, Тогда // т.е. обновляем все настройки ИзмененияВКэше = Новый

    Структура("ВерсияОбработки,ВерсияОбработкиНастроек,ВерсияОбработкиКлеверенсТСД",ВерсияОбработки, ВерсияНастроек,ВерсияНастроек_ПоУмолчанию); // версия из модуля обработки, версия из кастом, версия из дефолта ИзменениеВНастройках = Новый Структура(“ВерсияОбработкиНастроек, ВерсияОбработкиКлеверенсТСД”); // + хранит ключи настроек, которые необходимо записать в настройки MS Если версия из модуля обработки > версия из кастом сеттингс, тогда => ГлЯдро_ВыполнитьОбработчикОбновления() // Обновление настроек, которые после реструктуризации отправятся в базу SMARTS и сохранится версия настроек (customsettings) (в структуре изменится только ИзменениеВНастройках.ВерсияОбработкиНастроек)

    Если версия из модуля обработки > Версия по умолчанию (из default?) тогда =>

    ГлЯдро_ВыполнитьОбработчикОбновления() // Обновление настроек, которые сохранить нет возможности, а все изменения возвращаются в кэш без сохранения (default_customsettings) (в структуре изменится ВерсияОбработкиКлеверенсТСД) в цикле вызываем все обработчики обновления ИзмененияВСтруктуре.Вставить(?(ОбновлениеКэша,"ВерсияОбработкиКлеверенсТСД","ВерсияОбработкиНастроек"),МассивПереходныхВерсий[ИндексВерсии].Значение); // последняя версия, на которую удалось перейти без ошибок ИзмененияВКэше.Вставить("ВерсияОбработкиНастроек",ИзменениеВНастройках.ВерсияОбработкиНастроек); Возврат Новый Структура("ИзмененияВКэше,ИзменениеВНастройках",ИзмененияВКэше,ИзменениеВНастройках);

  2. Реструктуризация по ключу настройки.

    Если версия из модуля обработки > версия настроек по умолчанию, тогда

    ГлЯдро_ВыполнитьОбработчикОбновления() // Обновление настроек, которые сохранить нет возможности, а все изменения возвращаются в кэш без сохранения (default_customsettings) Возврат Структура.ВерсияОбработкиКлеверенсТСД => ГлЯдро_ПроверитьОбновлениеТиповыхБизнесПроцессов - конвертация будет выполняться для обратной совместимости, независимо от версии настроек СтруктураНастроек = Новый Структура("ВерсияНастроек, ВерсияНастроек_ПоУмолчанию ",Неопределено,Неопределено); СтруктураНастроек = ГлЯдро_ПолучитьНастройкиНаСервереSMARTS(СтруктураНастроек,,,АдресаПеременных); … преобразование типовых бизнес-процессов из таблицы значений в массив структур и сохранение, но только в кэш … ГлЯдро_СохранитьНастройкуВБазеSMARTS("ВерсияНастроек", СтруктураНастроек.ВерсияНастроек_ПоУмолчанию ,,АдресаПеременных); ГлЯдро_ЗаписатьВКэшНастройкуSMARTS("ВерсияНастроек", СтруктураНастроек.ВерсияНастроек_ПоУмолчанию ,АдресаПеременных); … перенос пользовательских бизнес-процессов из ключа “НастройкиБизнесПроцессов” в ключ “НастройкиБизнесПроцессов_Пользовательские” … => ГлЯдро_ОбновитьСтруктуруНастроекБизнесПроцессов - изменение, добавление, удаление колонок из таблицы бизнес-процессов и т.д. => ГлЯдро_КонвертироватьВыгрузкуПолей - вызывается 2 раза для шапки и для ТЧ => ГлЯдро_КонвертироватьЗагрузкуПолей - вызывается 2 раза для шапки и для ТЧ … преобразование типовых произвольных кодов из таблицы значений в массив структур и сохранение, но только в кэш … … преобразование пользовательских произвольных кодов и сохранение в настройки и в кэш ...

Обновление настроек при получении настроек по умолчанию

ЛокЯдро_ПолучитьНастройкиПоУмолчаниюНаСервереSMARTS , если версия обработки из модуля > версии по умолчанию, то вызываем: => ГлЯдро_ВыполнитьОбновлениеНастроек - для каждого ключа из структуры настроек и записывает новое значение настройки по ключу, вызывает: => ГлЯдро_ВыполнитьОбработчикОбновления - вызывает по порядку все обработчики настроек вида ГлЯдро_ОбновлениеНастроекДоВерсии _1_0_1_1

Действия при экспорте настройки в файл

Вызывается при экспорте настройки в файл в формах списков «Узлы», «ГлобальныеПараметры», «БизнесПроцессы», «ОтборыСправочников», «ПроизвольныеКоды», «ПроизвольныеОтборыДокументов».

СтруктураНастроек = Новый Структура; СтруктураНастроек.Вставить("ТаблицаУзлов", ПолучитьСтруктуруУзловДляВыгрузки(Истина));_ _СтруктураНастроек.Вставить("ВерсияОбработкиНастроек",_ЛокКонтекст.ЛокЯдро_ПолучитьИзКэшаНастройкуSMARTS("ВерсияОбработкиНастроек"); // это версия из кастом сеттингс, сохраняемая в файл, которая, впоследствии, может стать устаревшей, неактуальной_ЛокКонтекст.ЛокЯдро_СохранитьНастройкиВФайл(СтруктураНастроек, "НастройкиУзлов");

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

Действия при импорте настройки из файла

Вызывается при импорте из файла настроек в формах списков “Узлы”, “ГлобальныеПараметры”, “БизнесПроцессы”, “ОтборыСправочников”, “ПроизвольныеКоды”, “ПроизвольныеОтборыДокументов” СтруктураНастроек = _ЛокКонтекст.ЛокЯдро_ПолучитьНастройкиИзФайла("НастройкиУзлов"); Если СтруктураНастроек <> Неопределено Тогда //Выполним обновление - Начало ВерсияОбработки =_ЛокКонтекст.ЛокЯдро_ПолучитьИзКэшаНастройкуSMARTS("ВерсияОбработки"); // а это текущая версия настроек, из модуля обработки Если СтруктураНастроек.Свойство("ВерсияОбработкиНастроек") Тогда ВерсияОбработкиНастроек = СтруктураНастроек.ВерсияОбработкиНастроек; Иначе ВерсияОбработкиНастроек = 0; КонецЕсли; Если ВерсияОбработки>ВерсияОбработкиНастроек Тогда // если текущая версия выше, чем версия из файла, тогда выполняем обработчики обновления СтруктураВызова = Новый Структура; СтруктураВызова.Вставить("ТипМетода", "Функция"); СтруктураВызова.Вставить("ИмяМетода", "_ **_ВыполнитьОбновлениеНастроек_** _"); // алгоритм такой же как при получении настроек по умолчанию СтруктураВызова.Вставить("ПараметрыМетода", Новый Структура("ВерсияНастроек,СтруктураНастроек",ВерсияОбработкиНастроек,СтруктураНастроек)); СтруктураНастроек = _ЛокКонтекст.Транзит_ВызватьГлобальныйМетодНаКлиенте(СтруктураВызова,,_ЛокКонтекст.АдресаПеременных); КонецЕсли; //Выполним обновление - Конец

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

Алгоритм работы с основной базой

Общее правило:

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

База для обмена определяется при открытии обработки или изменении текущего торгового объекта на главной форме по следующему алгоритму:

  1. Если текущий торговый объект не выбран, то базой для обмена считается основная база.

  2. Если текущий торговый объект выбран, то:

    • Если у него установлен переключатель, «Использовать основное подключение», то базой для обмена считается основная база.
    • Если у него установлен переключатель, «Использовать частную базу», то базой для обмена считается выбранная частная база.

Форма списка бизнес-процессов

- сохранение таблицы настроек бизнес-процессов
- выгрузка доп.таблицы «Бизнес-процессы»
- получение таблицы настроек БП и ТЧ с настройками
- получение списка типов документов MS
- восстановление настроек БП «по умолчанию»
- в основную базу
- во все базы: основная + все частные
- из основной базы
- из основной базы
- из основной базы

Форма настройки бизнес-процесса

- получение списка пользователей- из основной базы

Форма списка настроек обмена документами

- сохранение и восстановление ТЧ с настройками
- восстановление настроек «по умолчанию»
- в основной базе
- из основной базы

Форма списка настроек обмена справочниками

- сохранение и восстановление ТЧ с настройками- в основной базе

Форма списка торговых объектов

- сохранение и восстановление ТЧ с настройками
- выгрузка доп.таблицы «Узлы»
- в основной базе
- во все базы: основная + все частные

Форма настройки выгрузки номенклатуры

- настройки компоновки загружаются/сохраняются
- номенклатура выгружается

- очистка номенклатуры
- из основной базы
- в базу для обмена
- в базе для обмена

Форма настройки выгрузки справочников

- настройки компоновки загружаются/сохраняются
- справочник выгружается
- очистка справочника
- из основной базы
- в базу для обмена
- в базе для обмена

Форма настройки полей обмена

- сохранение и восстановление ТЧ с настройками- в основной базе

Форма настройки произвольного кода

- сохранение и восстановление ТЧ с настройками- в основной базе

Форма выбора табличной части

- получение списка доп.таблиц документа MS
- получение списка полей ТЧ документа MS
- из основной базы
- в основной базе

Форма настройки торгового объекта

- сохранение и восстановление ТЧ с настройками
- получение дерева пользователей
- выгрузка доп.таблицы «Узлы»
- в основной базе
- из основной базы
- во все базы: основная + все частные

Форма выбора параметра торгового объекта

- восстановление ТЧ с настройками- в основной базе

Форма выбора торгового объекта

- восстановление ТЧ с настройками- в основной базе

Форма выбора произвольного кода

- сохранение и восстановление ТЧ с настройками- в основной базе

Форма просмотра документа Mobile SMARTS

- получение данных документа MS
- получение данных шапки документа MS
- из базы для обмена
- из базы для обмена

Форма обмена документами

При открытии:
- получение ТЧ с настройками
- метод «СформироватьДеревоПользователейMS»
- команда «ЗаполнитьСписокДокументовMS» получает

шапки документов
- команда «УдалитьДокументMS»
- команда «ОткрытьФормуДокументаMS» получает

список колонок ТЧ «СтрокиПлан» и «СтрокиФакт»
- из основной базы
- из базы для обмена
- из базы для обмена
- из базы для обмена
- из базы для обмена
Выгрузка документов на ТСД:
- таблицу настроек БП получаем
- выгрузка документа идет
- из основной базы
- в базу для обмена
Загрузка документов с ТСД:
- таблицу настроек БП получаем
- при поиске подходящего БП получаем данные документа

MS и шапку документа MS
- удаление документа после загрузки
- получение списка доп.таблиц, получение данных из доп.таблиц
- получение данных документа MS для загрузки в 1С
- получение данных документа MS для создания новых штрихкодов
- из основной базы
- из базы для обмена
- из базы для обмена
- из базы для обмена
- из базы для обмена
- из базы для обмена

Форма выбора бизнес-процесса

При открытии:
- получение списка типов документов MS- из базы для обмена

Форма главная

- при выборе и очистке текущего узла получаем базу для обмена: «Объект.IDБазыMSДляОбмена = ПолучитьIDБазыMSДляОбмена();»

- при открытии формы и после удачного подключения базы MS в методе «СоздатьОбъектДрайвера»:
- получаем параметры подключения (ид, имя, строка подключения,

имя приложения, ид приложения)
- восстанавливаем настройки в методе «ВосстановитьНастройки»

(здесь восстанавливаются флажки выгрузки справочников и

параметры весового товара)
- восстановление ТЧ с настройками
- из основной базы
- из основной базы
- из основной базы
получаем базу для обмена: «Объект.IDБазыMSДляОбмена = ПолучитьIDБазыMSДляОбмена();»
- при закрытии формы или при скрытии группы настройки справочников

(если есть изменения и нажали «не сохранять изменения»), в методе «СохранитьНастройкиЗавершение» восстанавливаем настройки
- «СохранитьНастройкиВыгрузкиСправочниковMS» - сохраняет флажки

и параметры весового товара
- из основной базы
- в основную базу