Имя: Пароль:
1C
1С v8
Временные файлы и как с ними бороться?
0 hydro2588
 
22.03.17
08:49
Доброго дня!
Платформа 8.3.9.2033
"Управление торговлей", редакция 10.3 (10.3.40.1)
Создаю письмо, программно с вложением.
Сообщение = Новый ИнтернетПочтовоеСообщение;         Сообщение.Вложения.Добавить(ПолучитьДвоичныеДанные(ФайлВФорматеXLS),"" + ЭлементМассива.Подпись + ".xlsx");
В этот момент в папке user\app\temp создается папка tmp___.tmp с этим вложением в виде набора файлов. Весит эта папка до 50 мегабайт. Писем очень много, папочек очень много, место на диске С быстро заканчивается. Они удаляются когда закрываешь 1с, но место заканчивается быстрее. Вопрос: как удалять эти папочки? Или хотя бы как получить путь к этим временным каталогам. Варианты: Чистить полностью Temp, закрывать 1с через 5 писем не подходят. Заранее спасибо за любую наводку =)
1 Мимохожий Однако
 
22.03.17
08:54
Добавить жесткий диск, удалять файлы после прочтения или отправки письма
2 Fedor-1971
 
22.03.17
09:12
(1) не так. Добавить жесткий диск (выделить раздел) и запихнуть на него temp. Идея в следующем забивается не критичный к работе системы диск/раздел, можешь ему периодически делать харакири
3 DrZombi
 
гуру
22.03.17
09:14
(0) Купить HDD
Заставить админа освоить КМД и чистить темпы :)
4 DrZombi
 
гуру
22.03.17
09:18
+ как вариант отправлять почту с сервера... и проблема места возложится не на клиентское ПК, а на сервер и админов :)
5 vde69
 
22.03.17
09:28
при большом количестве файлов в темповой директории (например 10 000) начинаются тормоза, по этому можно создавать каталок по номеру сессии клиента, тогда проблемы не будет (и чистить их будет удобнее)
6 hydro2588
 
22.03.17
09:29
(4) Все это происходит на одной машине.
Пытался выполнять Сообщение.Вложения.Очистить() и .Удалить() не помогает. Может есть какая-то процедура в 1с УдалитьВременныеКаталоги(), все перерыл не могу найти.
(2) Где в 1с прописывается, где создавать временные файлы? Т.е. по сути что вернут ПолучитьИмяВременногоФайла()? Может этот вариант и подойдет.
7 hydro2588
 
22.03.17
09:35
(5) Если бы я сам создавал временные я бы их сам и чистил. В данном случае это платформа делает, даже не конфа. В момент Сообщение.Вложение.Добавить() (в отладке это видел собственными глазами) и удаляет она сама, когда 1с закрываешь... но это поздно для меня. Ешё тут подумал может где-то есть ограничения на размер создаваемых временных каталогов? Как в скуле, типа больше этого размера базенку временную не расширять...
8 cons74
 
22.03.17
09:38
1) вместо
ПолучитьДвоичныеДанные(ФайлВФорматеXLS),"" + ЭлементМассива.Подпись + ".xlsx"
делаешь "ручное" создание файла с нужным именем в нужной папке
2) после отправки письма удаляешь указанный файл через УдалитьФайлы(файл)
9 1Снеговик
 
гуру
22.03.17
09:55
(0) Папка весит 50мб... закрывать после 5 писем... Автор, у тебя свободного места 250Мб?

Очень много - это сколько? Хоть какие-то конкретные цифры будут?
10 hydro2588
 
22.03.17
09:56
(8)
Сообщение = Новый ИнтернетПочтовоеСообщение;
//получаю имя сам, чтобы туда кинуть файл
ФайлВФорматеXLS = ПолучитьИмяВременногоФайла();
//запоминаю, чтобы потом удалить
мВременныеФайлы.Добавить(ФайлВФорматеXLS);
//сохраняю в файл результат
Вложение.Записать(ФайлВФорматеXLS, ТипФайлаТабличногоДокумента.XLSX);
//передаю вложение в письмо (в этот момент создается ещё 1 каталог в папке Temp, имя которого я не могу получить)
Сообщение.Вложения.Добавить(ФайлВФорматеXLS,"" + ЭлементМассива.Подпись + ".xlsx");
//чистим за собой
Для Каждого элВложение Из Сообщение.Вложения Цикл
   УдалитьФайлы(элВложение.ИмяФайла);
КонецЦикла;
11 hydro2588
 
22.03.17
09:59
(9) Конкретные цифры: писем не знаю сколько, не считал. 14 гигобайт забивается за 2 часа рассылки.
Железо это самый простой вариант, и он повиснет на плечах работодателя, если ничего не придумаю, то так и скажу - покупай новый винт.
12 DrZombi
 
гуру
22.03.17
10:01
(6) Напиши отправку почти из Обработки.
При закрытии (выход из функции и очистка переменной) обработки очищать файлы :)
13 DrZombi
 
гуру
22.03.17
10:02
(8) Не удалит, пока он не отключится от сервера Почты, файлы не будут удалены :)
14 DrZombi
 
гуру
22.03.17
10:03
(11) Может купить нового программиста?

Почта = Новый ИнтернетПочта;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
15 hydro2588
 
22.03.17
10:41
(14) Есть Почта.Отключиться()
Вы прежде чем писать вообще код не пытались запустить, чтобы понять про какие временные каталоги речь?
16 DrZombi
 
гуру
22.03.17
10:43
(15) В обработку запихни свою отправку
Да, странно выглядит. Но когда отправка завершается. И ваш код, покидает обработку. То тогда можно удалять все отправленные файлы :)
18 DrZombi
 
гуру
22.03.17
10:46
+ пример.

МассивФайловДляУдаления = Новый Массив;

ВашаОбработка = Обработки.ОтправкаПочты.Создать();
ВашаОбработка.ОтправитьВсемВсе(МассивФайловДляУдаления);

//Затем удаливсе файлы по "МассивФайловДляУдаления"
19 DrZombi
 
гуру
22.03.17
10:47
(15) >>> чтобы понять про какие временные каталоги речь?

Всем на этом форуме, побок, какие временные файлы, куда и как.
У некоторых вообще на борту только Линукс :)
20 DenisVich
 
22.03.17
10:48
В параметр /ClearCache не пробовали?
21 DrZombi
 
гуру
22.03.17
10:49
(20) к кэшу данное творение от 1С не относится.
1С при отправки файлов, захватывает их и держит.
Покуда не закроется :)
22 hydro2588
 
22.03.17
11:09
(19) Ну тогда они проходят мимо и все =) логично
(20) Этот параметр отрабатывает при запуске, а мне надо во время работы удалять вновь созданные временные каталоги. Тем более при закрытии программы он их и так удаляет.
23 kossmatiy
 
22.03.17
11:26
Перкопределить переменные среды на более емкий диск уже предлагали?
24 Demasiado
 
22.03.17
11:31
Если позволяет оперативка сделать RAM диск, темпы писать на него. После перезагрузки все чистится автоматом
25 hydro2588
 
22.03.17
11:37
(23) Нашел вот статью, как это сделать. Да, это наверное самый нормальный вариант. Спасибо