При работе с информационной базой 1С через тонкий клиент или веб-сервер специалисты часто сталкиваются с ситуацией, когда прямого доступа к серверу по RDP нет, а для доработки требуется файл конфигурации (.cf). Попытка запустить режим конфигуратора прямо из клиентского приложения не приносит успеха, так как исполняемый файл тонкого клиента 1cv8c.exe не содержит функционала разработки и выгрузки метаданных.
Рассмотрим подробно, почему возникает это ограничение и каким образом можно программно сформировать и получить файл конфигурации, имея только учетную запись с административными правами.
Проанализируем архитектуру взаимодействия клиентского приложения с базой данных:
.cf.1cv8c.exe, в котором вызов Конфигуратора физически отсутствует. Полноценный Конфигуратор доступен только в исполняемом файле 1cv8.exe (или 1cestart.exe при установленном полном дистрибутиве).Таким образом, единственным штатным способом выгрузить файл конфигурации является запуск платформы в пакетном режиме с соответствующими ключами командной строки.
Если у пользователя есть учетная запись с полными правами в 1С, решение задачи сводится к вызову исполняемого файла платформы на стороне сервера приложений с помощью функции ЗапуститьПриложение().
Для выгрузки конфигурации применяются следующие ключи командной строки пакетного режима:
/DumpCfg <имя файла.cf> — выгрузка основной конфигурации базы./DumpDBCfg <имя файла.cf> — выгрузка конфигурации базы данных (актуальной исполняемой версии)./N "<Логин>" и /P "<Пароль>" — параметры аутентификации пользователя с правами администратора.Выясним, какие действия необходимо выполнить для программной выгрузки:
1cv8.exe или 1cestart.exe./DumpDBCfg и путь во временный каталог на сервере..cf во временную директорию.Рассмотрим пример серверного кода, который можно поместить во внешнюю обработку или модуль:
&НаСервере
Функция ВыгрузитьКонфигурациюНаСервере(Логин1С, Пароль1С) Экспорт
// Формируем путь к временному файлу cf на сервере
ИмяФайлаCF = КаталогВременныхФайлов() + "UnloadedConfig.cf";
// Путь к исполняемому файлу платформы на сервере
ПутьКПлатформе = "C:\Program Files\1cv8\8.3.23.1688\bin\1cv8.exe";
// Формируем строку командной строки для пакетного запуска
// Для файловой базы используется /F, для серверной — /S
ПараметрыЗапуска = СтрШаблон("DESIGNER /S""ServerName\BaseName"" /N""%1"" /P""%2"" /DumpDBCfg ""%3""",
Логин1С, Пароль1С, ИмяФайлаCF);
// Отключаем безопасный режим для вызова внешних программ
УстановитьБезопасныйРежим(Ложь);
// Запускаем процесс и ждем его завершения
КодВозврата = 0;
ЗапуститьПриложение(ПутьКПлатформе + " " + ПараметрыЗапуска, , Истина, КодВозврата);
Если КодВозврата = 0 И ФайлСуществует(ИмяФайлаCF) Тогда
// Считываем файл в ДвоичныеДанные для передачи на тонкий клиент
Возврат Новый ДвоичныеДанные(ИмяФайлаCF);
Иначе
ВызватьИсключение "Ошибка выгрузки конфигурации в пакетном режиме. Код возврата: " + КодВозврата;
КонецЕсли;
КонецФункции
При использовании данного метода нужно учитывать несколько критически важных условий:
1cv8.exe или 1cestart.exe). Если сервер работает под управлением OS Linux, помимо серверных пакетов должен быть установлен пакет клиентской части 1С.ragent (например, usr1cv8), должна иметь права на запуск исполняемых файлов 1С и права на запись в КаталогВременныхФайлов().ЗапуститьПриложение() заблокирован. Обязательно требуется программно отключить безопасный режим вызовом УстановитьБезопасныйРежим(Ложь) или открыть обработку с соответствующим разрешением./DumpDBCfg не требует монопольного режима, но на базе не должно быть блокировок реструктуризации.Таким образом, несмотря на отсутствие прямого функционала выгрузки в тонком клиенте, задача успешно решается с помощью пакетного режима запуска платформы на стороне сервера.