Запуск одной базы из другой

24 января 2013

Файлы для загрузки:

Конфигурация с примером из статьи

Предисловие

Пуск!В ситуациях, когда на предприятии учет ведется в нескольких информационных базах, например "Бухгалтерия предприятия" и "Зарплата и управление персоналом", то руководством может быть поставлена задача создать функционал по запуску одной информационной базы из другой. 

Как это можно сделать рассмотрим в статье.

Вариант решения

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

Есть другой, более простой вариант. Мы можем запускать 1С:Предприятие с помощью метода глобального контекста "ЗапуститьПриложение("Параметр")", которому в качестве параметра передается путь на исполняемый файл запуска платформы. Таким образом, мы можем передать платформе некоторые параметры запуска, в которых укажем путь к запускаемой информационной базы и объект, который нам необходимо открыть при запуске.

Запускаем исполняемый файл платформы 1С:Предприятие 8.x программным образом из самой платформы

Именно последний предложенный вариант и будет рассмотрен в рамках этой статьи.

Запуск платформы с параметрами

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

Запуск платформы 1С:Предприятие 8.x будем выполнять с помощью метода глобального контекста "ЗапуститьПриложение()", первым параметром которому передается строка к запускаемому приложению (или открываемому файлу). Остальные параметры метода в текущей ситуации не интересны.

Для формирования строки запускаемой команды нам нужно решить следующие задачи:

  1. Узнать путь к файлу приложения платформы.
  2. Выбрать режим запуска: тонкий и толстый клиент.
  3. Указать путь к информационной базе, которая должна запуститься автоматически.
  4. Передать произвольный параметр запуска платформе, в котором будет содержаться навигационная ссылка на открываемую при старте форму.

Теперь по порядку  В первом пункте нам нужно узнать путь к каталогу, в котором находятся исполняемые файлы платформы. Тут все не просто, а очень просто! Платформа позволяет получать путь к каталогу исполняемых файлов с помощью глобального метода "КаталогПрограммы()". На следующем скриншоте показан пример использования данного метода и возвращаемый результат.

Метод глобального контекста "КаталогПрограммы()"

Как раз то, что нам нужно! Возвращаемый путь соответствует версии запущенной платформы (обратите внимание на каталог "8.2.16.368" в составе пути). Отлично, первая задача выполнена. Как же теперь узнать имя исполняемого файла?

В каталоге "BIN", путь к которому мы получили выше, находятся несколько файлов приложения:

  • "1cv8.exe"
  • "1cv8c.exe"
  • "1cv8s.exe"

Какой файл нужен нам? Тут все зависит от конкретной информационной базы, ее режима работы. Если запуск производится в толстом клиенте (если база работает в обычном приложении или нужно открыть конфигуратор), то используется файл "1cv8.exe". Если запускается тонкий клиент управляемого приложения, то нужно запускать "1cv8c.exe". Что касается "1cv8s.exe", то это универсальное приложение для запуска любого типа клиента. Можно использовать и его для практически всех ситуаций. 

Мы в текущем примере установим в настройках для информационной базы тип клиента. В зависимости от этого будет выбираться исполняемый файл.

В тестовой конфигурации создадим справочник "Информационные базы", где будут храниться все связанные с ИБ настройки. Сейчас добавим в справочник булев реквизит "ТонкийКлиент". Если он будет установлен в "Истина", то запускается "1cv8c.exe", иначе запускаем "1cv8.exe". В программном коде это выглядит следующим образом (см. след. скриншот).

Выбор приложения в зависимости от типа клиента

Вторая задача решена, остались два более интересных вопроса.

Для их решения обратимся к встроенной справке 1С:Предприятия в раздел "Запуск 1С:Предприятия 8 и параметры запуска". Нас интересует информация в подразделе "Общие параметры запуска".

Раздел содержит описание различных параметров для запуска платформы. С помощью параметров при запуске платформы можно открыть определенную базу, автоматически зайти под выбранным пользователем, открыть автоматически внешнюю обработку и много другое.

В нашем случае обратим внимание на три параметра:

  • /F"<путь>" и /S"&lt;путь>" - для указания пути к информационной базе, которую платформа откроет при запуске (файловый и клиент-серверный варианты запуска).
  • /C"<СтрокаСПараметрами>" - передача произвольного строкового параметра.

Эти параметры нужно будет добавить в строку параметра метода "ЗапуститьПриложение()". Оба параметра будем хранить в соответствующих реквизитах справочника "Информационные базы" с типом "Строка".Форма изменение элемента информационной базы

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

Реквизит "СтрокаПодключения" содержит значения ключа для запуска информационной базы. На скриншоте указан путь к файловой информационной базе.

В реквизите "ПараметрыОткрытия" содержится произвольный строковой параметр, который мы передаем как параметр запуска платформы. Для этого обязательно использовать ключ "/C".

Все, что идет после ключа "/C" можно будет обработать в платформе как строку, доступ к которой получаем через свойство глобального контекста "ПараметрЗапуска". Формат строки, которую мы передаем платформе, следующий:

LNK"НавигационнаяСсылка"

В дальнейшем переданную строку мы обрабатываем на стороне платформы при запуске ИБ. Алгоритм обработки строки и открытие навигационную ссылки такой:

Обработка параметра запуска

Часть строки "LNK" используется для однозначной идентификации  параметра с навигационной ссылкой. Если навигационная ссылка некорректная, то платформа не выдаст исключения, работа продолжится в штатном режиме. Команда запуска информационной базы находится в форме списка справочника "Информационные базы".

Команда запуска информационной базы находится в форме списка справочника "Информационные базы".

Форма списка информационных баз

Программный код процедуры команды Вы можете видеть на следующем скриншоте:

Команда запуска информационной базы

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

Проделав описанные выше действия мы решили задачу запуска информационной базы из другой.

Как это видит пользователь?

Данный пример Вы можете посмотреть в тестовой конфигурации, ссылка на которую доступна в конце статьи. Для наглядности Вы можете посмотреть работу написанного алгоритма на следующем видео.

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

comments powered by Disqus