Архитектура решения для работы продуктов на платформе Mobile SMARTS с «1С: Предприятием»
Сердцем обработки 1С от «Клеверенс» является так называемое ядро обработки — программный интерфейс для взаимодействия между товарно-учетными системами на базе 1С и программами на платформе Mobile SMARTS («Склад 15»). В нем заложены принципы функционирования всех основных операций, выполняемых с помощью обработки 1С: выгрузка справочников, выгрузка/загрузка документов, различные настройки.
Ядро недоступно для редактирования — для его интеграции с конфигурацией 1С нужно вносить изменения в интеграционную обработку.
Для того, чтобы помочь вам разобраться с принципами построения ядра (следовательно, и с принципами функционирования самой обработки 1С), был создан этот раздел.
Ядро и формы обработки 1С
Ядро
Ядро обработки представляет собой программный интерфейс для взаимодействия между товарно-учетными системами на базе 1С и программами «Магазин 15»/ «Склад 15» на платформе Mobile SMARTS.
Ядро полностью отвязано (абстрагировано, независимо) от конкретной конфигурации 1С. Для интеграции с конкретной конфигурацией предназначена отдельно поставляемая интеграционная обработка, содержащая в себе запросы для выгрузки справочников и обработчики загрузки документов из Mobile SMARTS в 1С.
Предполагается, что вносить изменения в ядро могут ТОЛЬКО разработчики «Клеверенс». Для интеграции ядра с конфигурацией 1С нужно вносить изменения в интеграционную обработку. Поэтому всегда используется одна и та же версия ядра, а разница лишь в интеграционных обработках и настройках Mobile SMARTS. Аналогично у платформы и конфигураций «1С: Предприятия» — платформа 1С предоставляет интерфейс для разработки конфигураций и закрыта от изменений разработчиками.
Весь функционал ядра разбит на глобальное ядро/ контекст (исполняется на сервере 1С) и локальное ядро/ контекст (исполняется на тонком клиенте):
- Глобальное ядро (контекст). Это модуль обработки, реквизиты и табличные части обработки. Здесь хранится основная часть ядра – механизмы работы с базой Mobile SMARTS, механизмы работы с настройками, универсальные и вспомогательные механизмы работы с данными. При работе в онлайн-режиме здесь же (в реквизитах) хранятся текущие настройки системы.
- Локальное ядро (контекст). Специально созданная форма обработки, в которой хранится мини-копия ядра – экспортные методы и функции, отвечающие ТОЛЬКО за работу с компонентой (обращение к методам COM-объекта Mobile SMARTS).
Для каждого из контекстов существует кэш — структуры данных, которые при запуске ядро получает из баз 1С и Mobile SMARTS, необходимые для дальнейшей работы ядра.
Локальное ядро необходимо только в случаях, когда сервер Mobile SMARTS (COM-компонента) установлен на локальной машине (там же, откуда запускается 1С). В иных случаях (файловая база 1С, сервер Mobile SMARTS установлен на сервере 1С) — используется глобальное ядро.
Техническая реализация данного механизма проста — в реквизитах объекта и в КАЖДОЙ форме создаются обязательные реквизиты «ЯдроОбщее» и «ЯдроКомпоненты» произвольного типа. Данные реквизиты содержат «транзитные» ссылки на используемый контекст.
- Реквизит «ЯдроОбщее» всегда содержит в себе значение «ОбработкаОбъект» для доступа к глобальному контексту.
- Реквизит «ЯдроКомпоненты» содержит в себе либо значение «ОбработкаОбъект» (в случае, если компонента установлена на сервере 1С), либо ссылку на форму с мини-копией ядра (в случае использования клиент-серверного варианта работы и компоненты, установленной на локальной машине).
Для исключения «перекрестного» обращения к контекстам в связи с идентичными именами реквизитов, содержащих в себе ссылки на контексты, жестко регламентируется обращение к ним:
- Из модуля объекта обращение к ядру производится только через предикат «ЭтотОбъект.»: «ЭтотОбъект.ЯдроОбщее» или «ЭтотОбъект.ЯдроКомпоненты».
- Из всех остальных модулей форм обращение производится только через предикат «ЭтаФорма.»: «ЭтаФорма.ЯдроОбщее» или «ЭтаФорма.ЯдроКомпоненты».
Процедуры и функции мини-ядра клиентского контекста полностью идентичны аналогичным процедурам и функциям серверного контекста (можно их просто копипастить). Разница будет только в их вызове, например «ЭтотОбъект.ЯдроОбщее.ПолучитьНастройку(ИмяНастройки)» или «ЭтаФорма.ЯдроКомпоненты.СохранитьДокументНаСервереSMARTS()».
Все процессы передачи данных между глобальным контекстом и остальными субъектами (формами и даже локальным контекстом, вне зависимости от месторасположения последнего) производятся строго через механизм временного хранилища 1С.
Порядок инициализации контекстов:
-
При запуске системы из модуля объекта инициализируется глобальный контекст«ЭтотОбъект.ЯдроОбщее = ЭтотОбъект»
-
Считывается настройка «Место установки сервера SMARTS».
Если место установки компоненты – на сервере, тогда инициализируется локальный контекст «ЭтотОбъект.ЯдроКомпоненты = ЭтотОбъект».
Если место установки компоненты – на клиенте, тогда локальный контекст не инициализируется, и будет инициализирован только при открытии главной формы обработки.
-
Если локальный контекст инициализирован – в кэш глобального контекста считываются все настройки из базы Mobile SMARTS («ЯдроОбщее.Настройки = ЯдроКомпоненты.ИнициализироватьНастройки»).
-
В случае работы в онлайн-режиме инициализация на этом заканчивается, ибо онлайн-режим может работать только в случае, когда компонента установлена на сервере (либо использование файлового варианта). В противном случае, при батч-режиме или при режиме автообмена – инициализация продолжается.
-
При открытии главной формы обработки мы повторно инициализируем глобальный контекст, но уже применительно к реквизитам формы – «ЭтаФорма.ЯдроОбщее = ЭтотОбъект».
-
Считывается настройка «Место установки сервера Mobile SMARTS».
Если место установки компоненты – на сервере, тогда инициализируется локальный контекст «ЭтаФорма.ЯдроКомпоненты = ЭтотОбъект».
Если место установки компоненты – на клиенте, тогда локальный контекст инициализируется как «ЭтаФорма.ЯдроКомпоненты = ПолучитьФорму(«ФормаЛокальногоКонтекста»)».
Реквизиты форм «ЯдроОбщее» и «ЯдроКомпоненты» являются наследуемыми, и должны всегда передаваться в подчиненную форму при ее открытии (например, при открытии формы обмена документами из главной формы обработки).
Локальная обработка не имеет доступа к глобальной, соответственно, все необходимые данные настроек (из глобальной обработки) для работы методов локального контекста должны передаваться непосредственно при их вызове.
Формы
Формы не являются непосредственной частью ядра. Они являются пользовательским интерфейсом для использования 3 главных функций ядра: работа с настройками, обмен справочниками, обмен документа ми.
Формы делятся на:
- ключевые формы — главная форма, форма обмена документами, форма списка отборов справочников, локальный контекст
- формы списков(для различных таблиц, т.е. сериализуемых настроек) — узлы, бп, отборы документов, глобальные параметры, произвольные коды, произвольные отборы документов. Содержимое этих форм хранится в настройках базы MS, далее, при старте обработке, помещается в кэш и хранится там до завершения работы обработки. Эти формы доступны только для просмотра (за исключением формы списка отборов справочников) + опционально можно экспортировать/импортировать содержимое список во внешние файлы.
- формы настроек (формы карточек) — узла, бп, отбора справочников, отбора документов, правила выгрузки полей, правила загрузки полей, правила выгрузки ТЧ, правила загрузки ТЧ, связи выгрузки ТЧ, произвольный код, произвольный отбор документов. При открытии в данные формы передаётся содержимое текущей строки того списка, из которого она была открыта. Форма позволяет редактировать данные и сохранять их.
- формы просмотра (ReadOnly) — документа MS и шапки/строки документа MS
- служебные формы — выбор строки из таблицы, загрузки новых ШК, настройки подключения, выбор документа для загрузки в 1С, выбор пользователя или группы, редактирования текста запроса
Формы обработки НЕ ДОЛЖНЫ содержать никаких методов работы с объектными данными 1С или Mobile SMARTS. Вся работа с данными 1С происходит в глобальной обработке, а с данными Mobile SMARTS – в локальной обработке. Все промежуточные методы подготовки, обработки и прочего с полученными данными – находятся только в глобальной обработке.
Функционал ядра обработки 1С
Функционал ядра разбит на 3 крупных блока:
- Работа с настройками обмена (настройки бизнес-процессов, торговых объектов, глобальных параметров, отборов документов и справочников в разрезе торгов ых объектов и типов обмена и т.д.).
- Выгрузка справочников в режимах онлайн, оффлайн и по регламенту согласно настройкам обмена.
- Выгрузка/загрузка документов из 1С в Mobile SMARTS согласно настройкам обмена.
Все остальные блоки являются вспомогательными для работы с этими 3 блоками.
-
Транзитный блок — расположен на клиенте, нужен для передачи управления на сервер (при необходимости), параметры и результат функции передаются через временное хранилище
-
Блок сохранения/восстановления настроек подключения и параметров текущего узла в хранилище общих настроек (далее ХОН) — доступно только на сервере, с клиента доступны через транзитный блок.
-
Программный интерфейс для работы напрямую с MS (API) — полностью дублируются на клиенте и на сервере, т.к. база Mobile SMARTS может быть зарегистрирована на клиенте либо на сервере 1С. Фактически, это обмен данными с Mobile SMARTS непосредственно через COM-объекты и вызовы их методов: терминал коннектор, база, настройки, сторадж коннектор, среда.
- сохранение/восстановление настроек, удаление настроек, получение настроек по умолчанию;
- выгрузка справочников (номенклатуры и доп.таблиц);
- обмен документами — выгрузка, загрузка, удаление, получение списков документов;
- служебные — получение списка баз, базы по ид, настроек базы, получение текста ошибки, метаданных документов, пользователей, шаблонов весового товара.
-
Клиентские и серверные обёртки для работы с настройками MS:
- вызывают соответствующие методы API MS (инициализация кэшей, чтение, установка настроек, запись/чтение из кэша, получение настроек по умолчанию);
- вспомогательные механизмы;
- ТОЛЬКО КЛИЕНТСКИЕ МЕТОДЫ: сохранения/восстановления из файла таблиц из форм список, либо отдельных элементов таблиц из форм настроек.
-
Клиентские и серверные методы выгрузки справочников и номенклатуры:
- методы для получения данных из 1С есть ТОЛЬКО НА СЕРВЕРЕ, т.к. только оттуда можно получить данные из базы, поэтому они вызываются с клиента через транзитный блок;
- также методы для формирования текстов запроса, работы с СКД, постобработка таблиц данных выполняются ТОЛЬКО НА СЕРВЕРЕ;
- методы для взаимодействия с API MS одинаковые на клиенте и сервере.
-
Работа с документами 1С— аналогично п.5, получение документов из 1С, запись в 1С, получение списка документов и т.д. выполняется ТОЛЬКО НА СЕРВЕРЕ, с клиента вызываются через транзитный блок
-
Внешние вызовы — выполняются только на сервере или внешнем соединении, нужны для работы ТСД в онлайн-режиме. В свою очередь, решают следующие задачи:
- получение актуальных данных справочников из 1С согласно настройкам отборов,
- получение списка документов 1С согласно настройкам отборов,
- выгрузка документа 1С в Mobile SMARTS для его набора на терминале,
- загрузка (завершение) документа из Mobile SMARTS в 1C.
Хранение объектов и переменных
Переменные ядра
Переменные ядра хранят данные, к которым требуется часто обращаться во многих методах ядра (фактически, это кэш). Необходимы для быстрого доступа к часто используемым данным, чтобы не получать их из баз Mobile SMARTS 1С при каждом обращении к ним.
Все данные, которые помещаются в переменные ядра при инициализации обработки (интерактивно или онлайн) откуда-то загружаются — из метаданных базы Mobile SMARTS, настроек базы Mobile SMARTS, из хранилища общих настроек 1С (ХОН), из метаданных конфигурации 1С или создаются программно и заполняются постоянными значениями-константами.
Для локального ядра это:
- клиентские переменные формы «ЛокальныйКонтекст», которые доступны в любых, но только клиентских методах формы
- реквизиты формы «ЛокальныйКонтекст», которые доступны в любых и клиентских, и серверных методах формы.
| Имя переменной | Для чего нужна | Откуда загружается | Может ли изменяться |
| Клиентские переменные формы «Локальный контекст» | |||
| РасположениеКомпонент | Тип — Строка, значения — «НаКлиенте» или «НаСервере». Означает, что с клиента 1С или с сервера 1С будет осуществляться взаимодействие с базой Mobile SMARTS. Для обмена через COM обязательно наличие зарегистрированной внешней компоненты на соответствующей стороне (клиент/сервер). Для REST API ничего дополнительно делать не нужно. | ХОН | Да, в форме настройки подключения |
| ДанныеТекущегоУзла | Тип — Структура. Содержит в себе ID узла, наименование (например, «Магазин на Ленина») и ID базы Mobile SMARTS, которая привязана к этому узлу. При этом, к узлу может быть привязана либо частная база, либо основная база. Необходимо для случая, когда к текущей базе 1С привязан определенный узел (торговый объект – магазин, склад) и необходимо осуществлять обмен документами и справочниками не с основной базой Mobile SMARTS, а с частной. В этом случае, в основной базе Mobile SMARTS хранятся только настройки, а справочники и документы – в частной базе. | Настройки базы Mobile SMARTS | Да, на главной форме при выборе узла (торгового объекта) Категории НастроекMS |
| КатегорииНастроекMS | Тип – Структура. Содержит метадан- ные о настройках, сгруппированные по определенным критериям: - сериализуемые настройки– это настройки, которые являются таблицами. Нужны только для того чтобы знать, нужно ли сериализовывать/десериализо-вывать при экспорте/импорте настроек в файл/из файла - узловые настройки – это настройки, которые можно сохранять в разрезе узлов (магазинов, складов), например, настройки обмена справочниками – т.к. для каждого узла может быть необходимость выгружать только «свою» номенклатуру, склады, остатки и т.д. - настройки подключения– нужны, в первую очередь, для подключения к базе Mobile SMARTS – ID базы, имя базы, строка подключения, имя ИО, ID текущего узла, данные о конфигурации 1С - настройки справочников – хранит флажки, означающие, какие справочники нужно выгружать – номенклатура, склады, остатки и т.д. - настройки номенклатуры – хранит настройки выгрузки справочника «номенклатура» – использовать шаблоны весового товара, префикс кода весового товара, длина кода весового товара, переписывать номенклатуру при выгрузке и т.д. | Программно | Нет |
| НастройкиИнициализированы | Тип – Булево. Означает, что настройки успешно загружены из базы Mobile SMARTS. Если флаг = Ложь, значит, необходимо перезагрузить настройки из базы | Программно | Да, если потеряна связь с сервером MS |
| ПараметрыПодключенияMS | Тип – Структура. Хранит настройки подключения к базе Mobile SMARTS — ID базы, Имя базы, ID приложения, Строка подключения, QR, Логин, Токен, имя ИО, путь ИО, тип ИО, тип установленного продукта, уровень приложения | ХОН | Да, в форме настройки подключения |
| СтруктураМетаданных | Тип – Структура. Хранит метаданные документов 1С, метаданные документов MS, пользователи MS, устройства MS, таблицы MS, UniПолейНоменклатуры | Метаданные базы 1С, метаданные базы MS, Настройки базы MS | Нет |
| COMЧастнойБазыMS | Тип – Структура. Хранит COM-объекты для работы с частной базой – TerminalConnector и StorageConnector. Заполняется, только если подключение к базе Mobile SMARTS осуществляется через COM. Для REST API не заполняется. | Программно | Да, если изменим базу, к которой будем подключаться для обмена |
| COMВременнойБазыMS | Аналогично COMЧастнойБазыMS, но используется только в форме подключения для проверки соединения, чтобы не затирать соединение с существующими базами | Программно | Да, т.к. служебная переме нная |
| COMБазыMS | Аналогично COMЧастнойБазыMS, но используется для взаимодействия с основной базой MS | Программно | Да, если изменим базу, к которой будем подключаться для обмена |
| ТекущиеНастройкиMS | Тип – Структура. Содержит все настройки текущей базы MS в виде пар Ключ-Значение, например, ВыгружатьНоменклатуруСразу = Истина и т.д. | Настройки базы MS | Да, из всех форм, где могут редактироваться настройки |
| ПутьКОбработке | НЕ ИСПОЛЬЗУЕТСЯ!!! Путь хранится в переменной ядра ПараметрыПодключенияMS. ПутьИнтеграционнойОбработки | — | — |
| КОМсоздан | Тип – Булево. Означает, что успешно созданы COM-объекты для работы с базами MS – TerminalConnector и StorageConnector и помещены в структуры COMЧастнойБазыMS/ COMБазыMS | Программно | Да, если потеряна связь с сервером MS |
| ПраваПользователя | Тип – Строка. Хранит роль пользователя в 1С – «Администратор», «Пользователь», влияет на отображение некоторых кнопок на главной форме – кнопки настройки, кнопки выбора ИО | Метаданные базы 1С | Нет |
| Ф ормаИнтеграционной Обработки | Тип – ФормаКлиентскогоПриложения. Используется для вызова клиентского обработчика «После открытия формы документа 1С» | Программно | Да, в форме настройки ИО |
| Реквизиты формы «Локальный контекст» | |||
| _ИнтеграционнаяОбработка Адрес | Тип – Строка. Хранит адрес интеграционной обработки во временном хранилище. Впоследствии, интеграционная обработка извлекается из временного хранилища на стороне сервера и из нее вызываются экспортные методы – обработчики загрузки документа и т.д. | Программно | Да, в форме настройки ИО |
| АдресаПеременных | Тип – Структура. Хранит в себе адреса во временном хранилище других переменных ядра. При изменении значений в самих переменных ядра параллельно изменяются эти же значения и во временном хранилище. Эту структуру можно передавать в глобальное ядро и оттуда иметь доступ практически ко всем переменным локального ядра. Состав структуры, жирным и подчеркнутым выделены пере- менные, хранящие адреса аналогичных переменных ядра: - ДанныеТекущегоУзла - ИдентификаторФормы – служебный УИД для хранения данных во временном храни- лище, пока открыта обработка - ИнтеграционнаяОбработка - см. _ИнтеграционнаяОбработка - Адрес - ИнформацияСовместимости– версия ИО, поддерживаемые конфигурации 1С, поддерживаемые версии конфигураций 1С, использу- ется для сообщения на главной форме о успешном/неуспешном подключении ИО и её совместимости с текущей базой 1С - ИспользоватьREST_API– флаг, означает возможность использования REST API - НастройкиИнициализированы - ПараметрыПодключенияMS - РасположениеКомпоненты - СтруктураМетаданных - СтруктураПодключения - БазыMS – аналог ПараметрыПодключенияMS - ТекущиеНастройкиMS - ТипИнтерфейса | Программно, т.к. в нее просто сохраняются другие, уже инициализи- рованные, переменные ядра | — |
| ЕстьЧастнаяБаза | Тип – Булево. Означает, что к текущей базе 1С привязан какой-либо узел и этот узел будет использовать частную базу для обмена документами и справочниками | Программно | Да, на главной форме при выборе узла (торгового объекта) |
| ИмяИнтеграционнойОбра- ботки | Тип – Строка, СправочникСсылка Для внешней ИО – путь к файлу внешней обработки. Для встроенной в конфигурацию 1С ИО – имя метаданных встроенной обработки. Для ИО из справочника «Дополнительные отчеты и обработки» — ссылку на элемент справочника | ХОН | Да, в форме настройки ИО |
| ИнтеграционнаяОбработка Подключена | Тип – Булево. Означает, что интеграционная обработка успешно подключена. Флаг взводится при инициализации ядра | Программно | Да, если потеряна связь с сервером MS |
| П олноеИмяОбъекта | Тип – Строка. Полное имя обработки-ядра, например, «ВнешняяОбработка.КлеверенсТСД_ ОсновнаяОбработка» | Программно | Нет |
| ТипОбработки | Тип – Строка. Определяет расположение ИО — «ФайлНаДиске», «Встроенная» или «СправочникСсылка» | Настройки базы MS | Да, в форме настройки ИО |
Для глобального ядра это:
-
реквизиты обработки, доступны из любого метода модуля объекта;
- ЭтоWebСервис – флаг, означающий работу ядра из веб-сервиса;
- COMЧастнойБазыMS, COMВременнойБазыMS, COMБазыMS – аналоги одноименных переменных локального ядра.
-
серверные переменные модуля объекта, доступны из любого метода модуля объекта;
- КэшАдресаПеременных– копия переменной АдресаПеременных, но используется только для онлайн-режима, когда между вызовами ядра нужно сохранять значения переменных ядра.
-
переменная локального ядра АдресаПеременных, передающаяся в методы глобального ядра в качестве параметра, посредством которой есть доступ к большинству переменных локального ядра.