При подготовке правил обмена и выгрузке структуры метаданных конфигурации разработчики нередко сталкиваются с исключением платформы:
{ВнешняяОбработка.ВыгрузкаМетаданных.МодульОбъекта(44)}: Ошибка при вызове метода контекста (ОткрытьФайл) мЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки, "UTF-8"); по причине: Ошибка доступа к файлу
Разберем детально, почему возникает эта ошибка, как влияют контексты выполнения «клиент/сервер», а также почему важно правильно сопоставлять версии обработок выгрузки и конфигурации «Конвертация данных».
Проанализируем основные факторы, приводящие к блокировке записи XML-файла:
MD83Exp.epf формирует файл в контексте сервера. Если на клиенте указан локальный путь (например, C:\1\UPP.XML), серверный процесс rphost.exe пытается найти или создать этот файл на физическом диске сервера, а не на компьютере пользователя.usr1cv8), часто не имеет прав на запись в корень диска C:\ или в локальные пользовательские папки.MD82Exp.epf, MD83Exp.epf) с конфигурацией «Конвертация данных 3.0», использующей совершенно другой формат данных (EnterpriseData / XDTO).Выясним архитектурные различия между конфигурациями и правилами выгрузки:
MD82Exp.epf или MD83Exp.epf.Если выгрузка выполняется для устаревшей конфигурации (такой как УПП 1.3), необходимо использовать «Конвертацию данных, редакция 2.1» и обработку MD82Exp.epf в обычном приложении.
Рассмотрим, как правильно организовать процесс выгрузки, чтобы исключить ошибки файлового доступа:
1Cv8.1CD) на рабочем компьютере и выполнить выгрузку в ней.usr1cv8 полные права на папку, в которую выполняется сохранение файла на сервере.БезопасныйРежим отключен.Посмотрим на пример правильной организации записи XML-файла на сервере с последующей передачей на клиент. В управляемом приложении запись надежнее всего выполнять во временный каталог сервера:
// Серверная часть формирования файла выгрузки
ИмяФайлаНаСервере = ПолучитьИмяВременногоФайла("xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайлаНаСервере, "UTF-8");
// ... формирование структуры метаданных ...
ЗаписьXML.Закрыть();
// Помещение во временное хранилище для передачи клиенту
АдресФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайлаНаСервере), УникальныйИдентификатор);
УдалитьФайлы(ИмяФайлаНаСервере);
После этого на стороне клиента полученные двоичные данные сохраняются по пути, выбранному пользователем, что полностью исключает конфликт прав доступа сервера к клиентским дискам.