1с найтифайлы не находит ничего
« Как стать программистом 1С » Язык 1С » Работа с файловой системой из 1С
Работа с файловой системой из 1С
Следующие функции языка 1С позволяют манипулировать файлами:
- СоздатьКаталог 1С
- НайтиФайлы 1С
- КопироватьФайл 1С
- ПереместитьФайл 1С
- УдалитьФайлы 1С
- РазделитьФайл 1С
- ОбъединитьФайлы 1С.
Работа с каталогами — СоздатьКаталог 1С
//создает недостающие каталоги в указанном пути
//если каталога нет – создаст всю вложенную структуру
//если есть D:\Temp, то создаст подкаталоги
СоздатьКаталог("D:\Temp\1\2\3")
Поиск файлов — НайтиФайлы 1С
//найти все файлы 1С в каталоге «Sc»
НайденныеФайлы = НайтиФайлы("D:\Sc", "*");
//найти все ТЕКСТОВЫЕ файлы 1С в каталоге, включая вложенные подкаталоги
НайденныеФайлы = НайтиФайлы("D:\Sc", "*.txt", Истина);
//найти все файлы 1С в каталоге, в имени которых встречается слово "копия"
НайденныеФайлы = НайтиФайлы("D:\Sc", "*копия*");
//найти все файлы 1С в каталоге, в имени которых встречается любая цифра в скобочках, например "(1)" или "(100)"
НайденныеФайлы = НайтиФайлы("D:\Sc", "*(*)*");
//найти все файлы 1С в каталоге, в имени которых встречается цифра в скобочках меньше 10, например "(1)" или "(9)"
НайденныеФайлы = НайтиФайлы("D:\Sc", "*(?)*");
Для каждого Файл из НайденныеФайлы Цикл
Если Файл.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Копирование, перемещение и удаление файлов — КопироватьФайл 1С, ПереместитьФайл 1С, УдалитьФайлы 1С
ИмяФайла = "Текстовый файл.txt";
КаталогИсточник = "D:\sc\";
КаталогПриемник = "D:\";
//копирование файла
ФайлИсточник = Новый Файл(КаталогИсточник + ИмяФайла);
Если не ФайлИсточник.Существует() или ФайлИсточник.ЭтоКаталог() Тогда
ВызватьИсключение "Файл '" + КаталогИсточник + ИмяФайла + "' не существует или является каталогом";
КонецЕсли;
Попытка
КопироватьФайл(КаталогИсточник + ИмяФайла, КаталогПриемник + ИмяФайла);
Исключение
ВызватьИсключение "Нет прав на копирование файла";
КонецПопытки;
ФайлПриемник = Новый Файл(КаталогПриемник + ИмяФайла);
Если не ФайлПриемник.Существует() или ФайлПриемник.Размер() <> ФайлИсточник.Размер() Тогда
ВызватьИсключение "Не удалось корректно скопировать файл";
КонецЕсли;
//перемещение файла
Попытка
ПереместитьФайл(КаталогИсточник + ИмяФайла, КаталогПриемник + ИмяФайла);
Исключение
ВызватьИсключение "Нет прав на копирование файла";
КонецПопытки;
ФайлПриемник = Новый Файл(КаталогПриемник + ИмяФайла);
Если не ФайлПриемник.Существует() Тогда
ВызватьИсключение "Не удалось корректно перенести файл";
КонецЕсли;
Разделение и слияние файлов — РазделитьФайл 1С, ОбъединитьФайлы 1С
//функция создает каталог с именем файла
//в нем создает разделенные части файла, каждая размером в указанное кол-во мегабайт
//каждую часть сжимает архиватором
//возвращает имя каталога
До этого была 8.1 функция работала без ошибок и шикарно.
Потом переделал все в файловой базе 8.2, то же все хорошо.
Сейчас перевел файловую базу в серверную (на тот же комп где и 8.1 стоит), перестал искать файлы. Причем даже не ругается, просто ничего не находит.
Куда копать?
А можно поподробней. а то мне никакие файлы создавать не надо, мне надо определить путь до файла:
(5) :D ну это же азы vb скриптинга. http://www.intuit.ru/department/os/compromtwin/6/ поиск вам поможет.
fso=Новый COMОбъект("Scripting.FileSystemObject");
(2) отжег ! :D
(5) TimofeySin,
Хорошая функция НайтиФайлы(, , ), не нужна никаких сом-объектов и скриптов.
Только если запускаем ее на стороне сервера, то и пути будут относительно сервера
то, что на клиенте было доступно как НайтиФайлы("\\Digserver4\arhive\*")
на сервере будет уже иначе, возможно как НайтиФайлы("C:\arhive\*") или НайтиФайлы("D:\arhive\*") или к примеру НайтиФайлы("С:\users\1c\arhive\*")
(7) tango вам предложил альтернативный вариант, как хотите. а что там за непонятки у вас, решать придется вам, есть подозрение, что либо трабла с правами,либо с путями
(7) "а на фига"
на фига: файл логов в полгига, 5 млн. записей - ничитается вообще ничем. 1ска выдает белый экран и делает вид. что думает. думает долго. всякие дллки от братьеев 1снегов - тот же эффект.
а FileSystemObject спокойненько глотает. строчка за строчкой.
Он у меня виснет, поскольку там каталогов более 5000 штук.
раньше я искал:
("\\Server\arhive\"+НомерЗаказчика+"_*");
А эта зараза ругается.
ЗЫ Запустил я эту систему, но она сейчас ищет каждый файлик секунды 2, а при помощи НайтиФайлы пол секунди и меньше
Тип: Строка.
Путь к каталогу, в котором производится поиск. Каталог может быть как на локальной сети, так и на ftp-сервере. При использовании этой схемы в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Допускается указание полного имени файла (путь + имя).
TimofeySin 04.03.11 14:57
ответ через почти 4 года
pavelyar 19.03.15 14:27
круто. и тема вновь ожила
(14) Tiger86,
Да, глупо получилось :)
Но кажется хорошим тоном является закрыть тему после получения нужного ответа, разве не так?!
Столкнулся с похожей ситуацией. Оказалось всё просто и логично. В моем случае выполнялась НайтиФайлы() в процедуре с директивой &НаСервере, а путь для поиска вводился на стороне клиента. Поскольку сервер и клиентский компьютер - это две разных машины, то путь с клиентского компьютера выдавал пустой результат. После переноса поиска на клиент всё заработало.
Управляемые формы. MS SQL. И база и эксель физически лежат на одной машине. Но эксель упорно не открывается, мол 1с не видит его. COMОбъект на клиенте вроде как нельзя создавать. Как боритесь с этой ситуевиной?
Добавлено через 38 минут
Нашел на инфостарте способ, как сделать через каталог временных файлов, но оказывается на папку пользователя USR1CV82 нужны права админа, и я в растерянности.
Как открыть новый эксель файл?
Как через код вба открыть нужный файл экселя?
Необходимо открыть и вернуть файл эксель из аксесс
Добрый день! Подскажите пожалуйста как реализовать такую нехитрую вещь - для автоматического.
Чем открыть csv файл если в нем 500000 строк, а в эксель файле 65536
чем открыть csv файл если в нем 500000 строк, а в эксель файле 65536
Код то работает в файловом варианте. а в серверном не дает открыть эксель. Встречались с такой ошибкой?
_ЕГОР_, Предположение. Полный путь к файлу как определяется в отладчике? Если что-то типа С: то это локальный путь. Должно быть сетевое имя компа
_ЕГОР_, Конечно доступ должен быть открыт
Добавлено через 3 минуты
Попрбуй вру ную прописать сетевой путь к файлу в процедуре с сом объектом. Увидит?
polax, ох в этом то и будет загвоздка.
Добавлено через 8 минут
polax, если прописываю путь типа \\192.168.0.1 то такая же ошибка
_ЕГОР_, а если путь указать по имени компа? Типа \\Server1 Делал когда-то. БП выкладывает файл на сервер, ЗУП использует этот файл. Брал файл по пути с именем компа
а почему ЗагрузкаНаСервере(Адрес) не использовать на клиенте? Формировать на сервер временный файл, а на клиенте его записать
: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "\\server2\obmen\platonov\Список готовый к загрузке Белашов ПОДУШКИ, ОДЕЯЛА (15.05.2018) - в работе.xlsx". Это может быть вызвано одной из следующих причин.
ВнешняяОбработка.ЗагрузкаЭксель.Форма.Форма.Форма(81)>• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
дает типа C:\Users\%UserName%\AppData\Local\Temp\prncss_Megan_дата.xls
А у тебя пытается открыть из \\server2\obmen\platonov\Список готовый к загрузке Белашов ПОДУШКИ, ОДЕЯЛА (15.05.2018) - в работе.xlsx
Мониторь в какой момент темп_Путь забивается этим тупым путем.
Volexovich, ну это я менял уже вот ошибка с временным каталогам
: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "C:\Users\e.platonov\AppData\Local\Temp\14\prncss_Megan_2011 88086.xls". Это может быть вызвано одной из следующих причин.
• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
Регулярно при сохранении конфигурации появляется ошибка вида "Файл не обнаружен 'C:UsersuserLOCALS~1Temp1v8_E0E3_e.tmp' 2(0x00000002): Не удаётся найти указанный файл". Файла действительно не обнаруживается, другие аналогичные временные файлы в каталоге лежат. Пробовал на разных терминальных серверах под разными пользователями. Ошибка всё равно возникает. Что это может быть и как с этим бороться?
Вполне современные терминальные сервера. Никакого ФАТа. Win 2012. Нашёл Win 2003 и тоже попробовал. Не помогло.
Антивируса, упаси боже, на терминальных серверах нет. Есть виртуализация. Сервера виртуальные на Proxmox
Если ничего не путаю, совместимость со старыми программами и генерация коротких имён типа "LOCALS~1" по умолчанию включена. Даже на самых современных виндах.
попробуй сохранить конфигурацию поставщика отдельно. Или сделать сверку конфигурации поставщика с основной конфигурацией. Если будут ошибки, значит у тебя разрушилась конфигурация поставщика. Было у меня такое.
Права выглядят нормально. И пробовал на двух разных серверах. Проблема сохраняется - где-то один раз из десяти при сохранении конфигурации вылетает. Пробовал. Не помогает. Сравнение с конфигурацией поставщика делал. Проходит без ошибок. Проблем не видно. Мои изменения в сравнении видны корректно. Может связано с хранилищем конфигурации? Но без него как-то не хочется работать.
Автор так и не описал, когда же у него возникает ошибка. "При сохраненни конфигурации" - Я как минимум три варианта тут вижу
Поясни. Туплю, наверное, но не понимаю, о чем речь. Пробовать мучать конфигуратор на другой базе? Так дорабатывать нужно эту. Даже если на другой базе проблемы нет, мне это не поможет.
Мне кажется, что попробовав на разных серверах разных версий, я исключил проблемы windows и профайла пользователя. Завтра попробую исключить влияние доменной политики и терминала, запустив на недоменном компьютере. Остаётся проблема в базе (ТИИ к утру что-то скажет) и проблема релиза (релиз поменять проблемно, много удалённых пользователей).
было у меня такое на локальном компьютере. После chkdsk, chkdfl, ТИИ и убрать/добавить базу в список базы, этот глюк исчез.
Сохрани основную конфигурацию, загрузи в чистую базу, внеси изменения, обнови конфигурацию БД. Затем то же самое, только вместо первого пункта сохрани конфигурацию БД.
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Внимание особо умных. Предложенная процедура актуальна для конфигураций на платформе 8.1 и ниже.
В них для функции НайтиФайлы не был реализован рекурсивный поиск в подкаталогах.
Это указано в справке.
Задача
Найти путь к вложенному каталогу.
Пример
Каталог AST содержит каталоги A1, S1, T1
Каталог A1 содержит каталоги 0001, 0002, 0003
каталог S1 содержит каталоги 1001, 1002, 1003
Каталог Т1 содержит каталоги 2001, 2002, 2003
На входе функции КорневойКаталог = "D:AST"
КаталогПоиска = "1002"
На выходе функции НайденныйПуть = "D:ASTA11002"
Уточнение – имена КаталогПоиска уникальны и не повторяются.
Функция НайтиФайлы не помогает – она ищет их только в текущем каталоге.
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. При обращении из кода конфигурации к файлам и каталогам файловой системы следует иметь в виду, что доступ к ним ограничен правами пользователя операционной системы, от имени которого запущено приложение.
1.1. Если доступ к файловой системе осуществляется из кода, выполняемого на клиенте, то он выполняется под правами пользователя, от имени которого запущено приложение (тонкий, толстый или веб-клиент). Как правило, это текущий пользователь операционной системы.
1.2. Если доступ к файловой системе осуществляется из кода, выполняемого на сервере, то:
- при использовании клиент-серверной информационной базы, доступ ограничен правами пользователя, от имени которого запущен сервер 1С:Предприятия (*);
- при использовании файловой базы, опубликованной на веб-сервере, доступ ограничен правами пользователя, от имени которого запущен веб-сервер.
* Рабочие процессы могут быть также запущены от имени другого пользователя, отличного от того, под которым запускается агент сервера. Подробнее см. руководство администратора клиент-серверного варианта, описание служебного файла swpuser.ini
Область применения (уточнение): управляемое приложение, обычное приложение.
2. Запрещается выполнять запись каких-либо файлов в каталог исполняемых файлов 1С:Предприятия, получаемого с помощью метода КаталогПрограммы . Использование метода КаталогПрограммы допустимо только для чтения или запуска файлов. Например, при работе в ОС Windows, для запуска копии тонкого клиента 1С:Предприятия текущей версии, допустимо использовать:
3. Даже если не планируется локализация конфигурации на другие языки, следует обеспечивать переносимость файлов, сформированных из кода конфигурации, между различными операционными системами с различными кодировками. Для этого необходимо:
3.1. В именах файлов, автоматически формируемых из кода конфигурации, указывать только английские буквы, а также цифры, а в качестве кодировки текстовых файлов использовать только UTF-8 (именно этот формат предпочтителен, т.к. только с ним корректно работает операционная система macOS).
3.2. В тех случаях, когда имя файла не генерируется системой, а его явно вводит пользователь, разрешить ввод русскоязычных имен, но при этом дать возможность транслитерировать его в англоязычное имя. По умолчанию, если это технически возможно и не снижает удобство работы, рекомендуется предлагать англоязычное имя файла, а для текстовых файлов – сохранение в кодировке UTF-8.
Также эти рекомендации по выбору имени и кодировки файла следует разместить в справке к тем местам программы, где пользователь имеет возможность сохранять файлы и выбирать кодировку.
В конфигурациях на базе Библиотеки стандартных подсистем для транслитерации имен файлов рекомендуется использовать функцию СтроковыеФункцииКлиентСервер.СтрокаЛатиницей .
Работа с временными файлами и каталогами
При необходимости использования временных файлов и каталогов необходимо соблюдать следующие требования:
1. Для получения имени временного файла следует использовать метод ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). В противном случае возможна некорректная работа конфигурации в многопользовательском режиме, с включенными профилями безопасностями, возникновение проблем с правами доступа к файлам операционной системы, а также неконтролируемое увеличение количества ненужных временных файлов, которые не будут своевременно удалены.
ИмяПромежуточногоФайла = "C:Временные файлы 1СTempFile.xml";
Данные.Записать(ИмяПромежуточногоФайла);
У текущего пользователя может не быть прав на запись в указанный каталог. Кроме того, при одновременном выполнении этого кода из двух разных сеансов возникнет ошибка.
При использовании этой функции будет получено уникальное имя, гарантирован доступ к файлу.
Кроме того, при использовании метода ПолучитьИмяВременногоФайла платформа 1С:Предприятие сохраняет контроль над такими файлами и автоматически удаляет их при перезапуске рабочего процесса (если файл был создан на стороне сервера) или клиентского приложения (если файл был создан на стороне клиента).
Если же имя временного файла было сформировано каким-то другим способом, и прикладной код не удалил (либо по какой-то причине не смог удалить) ранее созданный временный файл, то платформа такой файл не контролирует, и он остается в файловой системе на неопределенное время. Накапливание «потерянных» временных файлов может представлять серьезную проблему, особенно для информационных баз с большим количеством активно работающих пользователей (например, при работе в режиме сервиса).
Таким образом, неправильно :
Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);
Если по каким-то причинам прикладной код не удалит созданный файл (например, между блоками создания и удаления временного файла возникнет штатное или нештатное исключение), этот файл так и останется в каталоге временных файлов.
При использовании метода ПолучитьИмяВременногоФайла будет получено уникальное имя, гарантирован доступ к файлу, а также временный файл будет автоматически удален платформой 1С:Предприятие после завершения рабочего процесса сервера или клиентского приложения.
2. Для создания временного каталога рекомендуется также использовать имя, полученное при помощи метода ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). Это гарантирует уникальность имени создаваемого каталога при работе в многопользовательском режиме и гарантирует, что после перезапуска рабочего процесса или клиентского приложения временный каталог будет автоматически удален платформой 1С:Предприятие. После этого, внутри созданного каталога можно создавать другие каталоги и файлы без ограничений.
3.1. При выполнении кода веб-клиентом метод ПолучитьИмяВременногоФайла недоступен. Поэтому для формирования имен временных файлов и каталогов необходимо использовать функцию КаталогВременныхФайлов и объект УникальныйИдентификатор .
Каталог = КаталогВременныхФайлов();
ИмяФайла = "TempDataFile.xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);
Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);
3.2. Если в конфигурацию встроена Библиотека стандартных подсистем , для создания временных каталогов на стороне клиента необходимо использовать процедуру ФайловаяСистемаКлиент.СоздатьВременныйКаталог .
4. После окончания работы с временным файлом или каталогом, его необходимо удалить самостоятельно. Нельзя рассчитывать на автоматическое удаление файлов и каталогов при следующем запуске платформы, это может привести к исчерпанию свободного места в каталоге временных файлов.
// Работа с файлом
.
// Удаляем временный файл
Попытка
УдалитьФайлы(ИмяПромежуточногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = ‘Мой механизм.Действие’"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
5. При использовании временных файлов и каталогов на сервере, необходимо полностью завершать работу с ними в рамках одного серверного вызова. При работе конфигурации с использованием кластера серверов, при следующем вызове эти файлы могут стать недоступны, так как код начнет исполняться на другом компьютере. При необходимости сохранить данные между серверными вызовами в пределах одного сеанса следует использовать временное хранилище платформы (методы ПоместитьВоВременноеХранилище , ПолучитьИзВременногоХранилища ).
5.1. В редких случаях может возникнуть необходимость передачи данных во временных файлах между сеансами, например, при подготовке данных для фонового задания, при организации длительного процесса, обслуживающего несколько последовательных вызовов web-сервиса. Необходимо самостоятельно обеспечивать гарантировано общее место хранения, права для доступа к файлам из разных мест их обработки, удаление файлов по истечению сроков их обработки или аварийного завершения процесса обработки. Рекомендуется использовать следующий подход:
- Для обеспечения доступа со всех возможных мест обработки заводится константа для хранения общего пути к файлам, доступного для доступа со всех серверов кластера;
- При создании временных файлов их имена заносятся во вспомогательный регистр сведений с сохранением времени создания файла;
- При штатном прохождении процесса, последняя операция, которой были нужны файлы, перед своим завершением удаляет как сам файл, так и записи о них во вспомогательном регистре;
- Вспомогательное регламентное задание периодически проверяет наличие записей во вспомогательном регистре, время существования которых заведомо превышает время штатного завершения процесса. При обнаружении таких записей, задание удаляет временные файлы и записи о них.
Передача файлов между клиентом и сервером
1. При одновременной работе с файлом на клиенте и на сервере необходимо использовать передачу файла через временное хранилище (методы ПоместитьФайлы , ПолучитьФайл , ПолучитьФайлы , НачатьПомещениеФайла , ПоместитьВоВременноеХранилище , ПолучитьИзВременногоХранилища ). В общем случае клиент и серверы кластера – это разные компьютеры с разной файловой системой, причем доступ к файлам может происходить под разными пользователями ОС с различными правами.
Чтение = Новый ЧтениеТекста(ИмяФайла);
.
Результат = Чтение.Прочитать();
Возврат Результат;
ИмяФайлаДляОбработки = "C:Файлы для обработкиЗагрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
Данные = ПолучитьИзВременногоХранилища(Адрес);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
Данные.Записать(ИмяПромежуточногоФайла);
Чтение = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
.
Результат = Чтение.Прочитать();
.
2. Для сохранения данных во временном хранилище между несколькими серверными вызовами, при помещении его в хранилище необходимо использовать параметр УникальныйИдентификаторФормы метода ПоместитьФайл , передав в него идентификатор текущей формы. Такие значения будут удалены из временного хранилища только при закрытии указанной формы. При этом, при повторном помещении того же файла во временное хранилище, предыдущее значение необходимо удалять вручную. Например:
.
// Первый серверный вызов
ИмяФайлаДляОбработки = "C:Файлы для обработкиЗагрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.
.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.
// Третий серверный вызов с новой версией файла
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
При этом во временном хранилище формы останется две копии файлов. Адрес второй копии будет находиться в переменной Адрес , а адрес первой копии будет утерян. Это приводит к затрате дополнительных ресурсов приложения, замедлению работы.
.
// Первый серверный вызов
ИмяФайлаДляОбработки = "C:Файлы для обработкиЗагрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
.
&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.
.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.
// Третий серверный вызов с новой версией файла
УдалитьИзВременногоХранилища(Адрес);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
&НаКлиенте
Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
3. Если в конфигурацию встроена Библиотека стандартных подсистем для помещения файлов во временное хранилище необходимо использовать процедуры ЗагрузитьФайл и ЗагрузитьФайлы общего модуля ФайловаяСистемаКлиент . Для сохранения данных файла между несколькими серверными вызовами необходимо использовать свойство ИдентификаторФормы параметра ПараметрыЗагрузки :
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыЗагрузки.Интерактивно = Ложь;
ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения,
ПараметрыЗагрузки, ИмяФайлаДляОбработки);
&НаКлиенте
Процедура ОбработатьФайлЗавершение(ПомещенныйФайл, ДополнительныеПараметры)
Читайте также: