Имя: Пароль:
1C
1С v8
Удаление временного файла
0 12040
 
31.12.15
00:29
Добрый вечер.
Почему-то не удалается временный файл.
Переменная "ПутьКФайлуНаСервере" в процедуре "УдалитьВременныеФайлыНаСервере()" с правильным значением "C:\Users\USR1CV8\AppData\Local\Temp\ИвановИванИванович\v8_670D_9aa.xls". Отладчик без ошибок просто проходит эту строку, но файл не удаляет.
Привожу код, включающий и создание файла:

&НаСервере
Процедура ЗагрузитьДанныеНаСервере()
//Основные действия обработки не привожу        

    Попытка
        УдалитьВременныеФайлыНаСервере();
        Исключение
                Сообщить(ОписаниеОшибки());
        КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
        ЗагрузитьДанныеНаСервере();
КонецПроцедуры

&НаКлиенте
Функция ПоместитьФайлНаСервер()
        ФайлEXCEL = ПутьКФайлуНаКлиенте;
        
        ПомещаемыеФайлы = Новый Массив;
        Описание = Новый ОписаниеПередаваемогоФайла(ФайлEXCEL, "");
        ПомещаемыеФайлы.Добавить(Описание);
        
        ПомещенныеФайлы = Новый Массив;
        
        Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Не удалось поместить файл на сервер";
                Сообщение.Сообщить();
                возврат 0;        
        КонецЕсли;        
        
        
        Для каждого ТекЭлемент Из ПомещенныеФайлы Цикл        
                ПутьКФайлуНаСервере = ПолучитьИмяФайлаСПутемНаСервере(ТекЭлемент.Хранение,"xls");
                //Сообщить(ПутьКФайлуНаСервере);
                возврат ПутьКФайлуНаСервере;                
        КонецЦикла;        
КонецФункции

&НаСервереБезКонтекста
Функция СформироватьУникальноеИмяФайла(ПереданныйПуть)
        Файл = Новый Файл(ПереданныйПуть);
        Путь = Файл.Путь;
        НовыйПуть = Путь + СтрЗаменить(ПользователиКлиентСервер.ТекущийПользователь()," ","") + "\";
        Каталог = Новый Файл(НовыйПуть);
        Если Не Каталог.Существует() Тогда
                СоздатьКаталог(НовыйПуть);
        КонецЕсли;
        НовоеИмяФайла = НовыйПуть + Файл.Имя;
        возврат НовоеИмяФайла;
        
КонецФункции // СформироватьУникальноеИмяФайла()

&НаСервереБезКонтекста
Функция ПолучитьИмяФайлаСПутемНаСервере(Адрес, Расширение)
        ИмяФайлаСПутем = "";
        
        ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(Расширение);
        НовыйПуть = СформироватьУникальноеИмяФайла(ИмяФайлаСПутем);
        ИмяФайлаСПутем = НовыйПуть;
        
        ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(Адрес);
        
        // Сохраним файл из БД на диск
        ДвоичныеДанныеФайла.Записать(ИмяФайлаСПутем);
        
        возврат ИмяФайлаСПутем;
        
КонецФункции

&НаКлиенте
Процедура ВыбратьФайл(Команда)
        Режим = РежимДиалогаВыбораФайла.Открытие;
        ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
        ДиалогОткрытияФайла.ПолноеИмяФайла = "";
        Фильтр = НСтр("Табличный документ'")
        + "|*.xls;*.xlsx;*.xlsm;*.xlsb";
        ДиалогОткрытияФайла.Фильтр = Фильтр;  
        ДиалогОткрытияФайла.Заголовок = "Выберите файлы";
        Если ДиалогОткрытияФайла.Выбрать() Тогда            
                ПутьКФайлуНаКлиенте = ДиалогОткрытияФайла.ВыбранныеФайлы[0];
                Сообщить("Выбран файл: " + ПутьКФайлуНаКлиенте);
                ЭтаФорма.Элементы.ЗагрузитьДанные.Доступность = Истина;
        Иначе
                Предупреждение(НСтр("ru = 'Файл не выбран!'; en = 'File is not selected!'"));
        КонецЕсли;
        
        ПоместитьФайлНаСервер();
КонецПроцедуры

&НаСервере
Процедура УдалитьВременныеФайлыНаСервере()        
        ИмяКаталога = "" + КаталогВременныхФайлов()
        + СтрЗаменить(ПользователиКлиентСервер.ТекущийПользователь()," ","") + "\";
        Каталог = Новый Файл(ИмяКаталога);
        Если Каталог.Существует() Тогда
                УдалитьФайлы(ПутьКФайлуНаСервере);
        КонецЕсли;
        Сообщить(ПутьКФайлуНаСервере);        
КонецПроцедуры // УдалитьВременныеФайлыНаСервере()
1 ЧеловекДуши
 
31.12.15
07:02
(0)Зачем вам оно?
ГАНО код, переписывай... Все отстой. Даже смотреть противно :)
2 ЧеловекДуши
 
31.12.15
07:02
+ Какова вообще цель?
3 Necessitudo
 
31.12.15
07:07
(1) Что, сам такое не сможешь написать?
Вполне нормальный код хоспади.
4 ЧеловекДуши
 
31.12.15
07:29
(3) Такое не могу. Бредовый код. Вы бы еще выяснили, откуда на сервере папочки и для чего вообще это надо? :)
5 ЧеловекДуши
 
31.12.15
07:34
+(3) Возьмем функцию "УдалитьВременныеФайлыНаСервере()", Зачем оно? Он файлы поместил во Временное хранилище. Какого, лешего, он пытается еще манипулировать с каталогом временных фалов? :)
6 ЧеловекДуши
 
31.12.15
07:35
Глобальный контекст.ПоместитьФайлы (Global context.PutFiles)
Глобальный контекст (Global context)
ПоместитьФайлы (PutFiles)
Синтаксис:

ПоместитьФайлы(<ПомещаемыеФайлы>, <ПомещенныеФайлы>, <НаборПомещаемыхФайлов>, <Интерактивно>, <УникальныйИдентификаторФормы>)
Параметры:

<ПомещаемыеФайлы> (необязательный)

Тип: Массив.
Массив объектов типа ОписаниеПередаваемогоФайла.
Каждый объект описывает получаемый файл:
Хранение - расположение данных во временном хранилище;
Имя - это локальный путь, по которому должен быть получен файл.
Массив может быть заполнен полностью, в этом случае известен набор помещаемых файлов и адреса, по которым они должны быть сохранены.
Массив может быть заполнен частично, у элементов массива заполнены только имена. В этом случае, набор помещаемых файлов определен, а места хранения не известны. Файлы будут размещены в новых временных хранилищах.
Массив может быть не заполнен. В этом случае набор помещаемых файлов определяется по значениям остальных параметров метода (поиском по маске, либо интерактивным выбором).
<ПомещенныеФайлы> (необязательный)

Тип: Массив.
Массив объектов типа ОписаниеПереданногоФайла.
Каждый объект описывает помещенный файл:
Хранение - расположение данных во временном хранилище;
Имя - это локальный путь, по которому получен файл.
<НаборПомещаемыхФайлов> (необязательный)

Тип: ДиалогВыбораФайла; Строка.
Определяет набор помещаемых файлов.
Может быть задан строкой поиска для метода НайтиФайлы, либо, заранее подготовленным, диалогом выбора файлов в режиме открытия файлов.
Если параметр определен, то параметр <ПомещаемыеФайлы> должен быть не определен либо быть пустым массивом.
<Интерактивно> (необязательный)

Тип: Булево.
Указывает использование интерактивного режима, при котором пользователю показывается диалог, в котором он может выбрать набор помещаемых файлов.
<УникальныйИдентификаторФормы> (необязательный)

Тип: УникальныйИдентификатор.
Уникальный идентификатор формы, который можно получить с помощью свойства УникальныйИдентификатор управляемой формы.
Файл помещается во временное хранилище и автоматически удаляется после удаление объекта формы.
Если параметр не указан, помещенное значение будет удалено, после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы.
Возвращаемое значение:

Тип: Булево.

Описание:

Помещает набор файлов из локальной файловой системы во временное хранилище.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

Для работы метода на веб-клиенте, необходимо предварительно подключить расширение работы с файлами.
7 ЧеловекДуши
 
31.12.15
07:36
<УникальныйИдентификаторФормы> (необязательный)

Тип: УникальныйИдентификатор.
Уникальный идентификатор формы, который можно получить с помощью свойства УникальныйИдентификатор управляемой формы.
Файл помещается во временное хранилище и автоматически удаляется после удаление объекта формы.
Если параметр не указан, помещенное значение будет удалено, после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы.
8 12040
 
31.12.15
10:02
Код не окончательный. Во многом стал таким из-за попыток решения этого вопроса.
Мне непонятно, почему когда я просто путь на сервере прописываю в "УдалитьФайлы(ПутьКФайлуНаСервере);", файл остается. Может быть, этот файл уже нельзя временным назвать, но всё же.
9 НЕА123
 
31.12.15
10:16
УдалитьФайлы(ПутьКФайлуНаСервере, "*.*");
10 ЧеловекДуши
 
31.12.15
10:34
(8) А все же может просто ""

Глобальный контекст.УдалитьИзВременногоХранилища (Global context.DeleteFromTempStorage)
Глобальный контекст (Global context)
УдалитьИзВременногоХранилища (DeleteFromTempStorage)
Синтаксис:

УдалитьИзВременногоХранилища(<Адрес>)
Параметры:

<Адрес> (обязательный)

Тип: Строка.
Адрес файла во временном хранилище, который необходимо удалить.
Описание:

Удаляет ранее помещенное значение из временного хранилища.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
11 ЧеловекДуши
 
31.12.15
10:36
(9) Главное не удалить системные файлы ;)
12 kiruha
 
31.12.15
11:09
(0)
Формат C тоже не работает ?
Программист всегда исправляет последнюю ошибку.