gifts2017

Очистка кэша пользователя

Опубликовал Sergey A. (spaminfostart) в раздел Обработки - Универсальные обработки

Очистка кэша пользователя, обновление GUID базы.

На основе этой обработки.

Текст модуля

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	WSH = Новый COMobject("wscript.shell"); 
	ПрофильПользователя = WSH.ExpandEnvironmentStrings("%APPDATA%");//Возвращает используемое по умолчанию размещение данных приложений
	
	Каталог1CEStart = ПрофильПользователя + "\1C\1CEStart\";    
	КаталогСуществует = КаталогИлиФайлСуществует(Каталог1CEStart);    
	
	Если КаталогСуществует  = Ложь Тогда
		Сообщить("Не найден каталог инфрормационной базы. Очистка кэша невозможна.");
		Возврат;
	КонецЕсли;
	
	// Заменим GUID в списке баз на новый
	Файлibases = Каталог1CEStart + "ibases.v8i"; // путь к списку информационных баз пользователя
	Если КаталогИлиФайлСуществует(Файлibases) Тогда
		
		// найдём GUID текущей базы
		СписокБаз = Новый ТекстовыйДокумент;
		СписокБаз.Прочитать(Файлibases);
		
		ТекстФайла = СписокБаз.ПолучитьТекст();
		
		Позиция = Найти(ТекстФайла, СтрокаСоединенияИнформационнойБазы());
		Если Позиция = 0 Тогда
			Сообщить("Информационная база не найдена в ibases.v8i. Очистка кэша невозможна.");
			Возврат;
		Иначе    
			ТекстФайлаCut = Прав(ТекстФайла, СтрДлина(ТекстФайла) - Позиция + 1);
			Позиция = Найти(ТекстФайлаCut, "ID=");
			GUID = Сред(ТекстФайлаCut, Позиция + 3, 36);
			
			// Если надо обновить GUID
			Если ОбновитьGUID Тогда
				НовыйGUID = Новый УникальныйИдентификатор;
				
				// Если такой идентификатор уже есть - получим новый и снова проверим
				Пока Найти(ТекстФайла, НовыйGUID) > 0 Цикл
					НовыйGUID = Новый УникальныйИдентификатор;
				КонецЦикла;    
				
				Если Вопрос("Будет обновлён список баз.
					|Актуально только для баз из пользовательского списка баз!
					|Базы из общего списка баз не меняются!
					|Текущий GUID " + GUID + ".
					|Новый GUID " + НовыйGUID + ".
					|Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
					Возврат;
				КонецЕсли;    
				
				//Присвоим базе новый идентификатор
				ТекстФайлаНовый = СтрЗаменить(ТекстФайла, GUID, НовыйGUID);
				СписокБаз.УстановитьТекст(ТекстФайлаНовый);
				СписокБаз.Записать(Файлibases);
			КонецЕсли;
		КонецЕсли;
		
	Иначе
		Сообщить("Файл " + Файлibases + " не найден. Очистка кэша невозможна.");
		Возврат;
	КонецЕсли;
	
	// Создадим и запустим bat-файл, очищающий папку со старым кэшем
	// При этом, если обновляем GUID, то очистку делаем вне зависимости от ответа, чтобы не оставались ненужные папки
	Если Не ОбновитьGUID Тогда
		Если Вопрос("Будет очищена папка " + GUID + ". 
			|Программа будет завершена. Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
			Возврат;
		КонецЕсли;    
	КонецЕсли;    
	
	//КаталогGUID = ПрофильПользователя + "\1C\1Cv82\" + GUID + "\";
	КаталогGUID = ПрофильПользователя + "\1C\1Cv82\" + GUID;
	Если КаталогИлиФайлСуществует(КаталогGUID) Тогда
		
		ПутьКФайлуLck = КаталогGUID + "\1Cv8.lck";
		
		ТекстBatФайла = "@echo off
		|cls
		|cd \
		|Echo Ожидание снятия блокировки с файла 1Cv8.lck...
		|rem Файл работает следующим образом.
		|rem Сначала ждем 5х8=40 с., пока удалится файл 1Cv8.lck (удаляется при закрытии 1С), затем удаляем папку с кэшем.
		|rem Если файл не удаляется - завершаем работу программы.
		|set /a count=1
		|:flag
		|rem Если count > 8
		|if %count% gtr 8 goto end
		|if Not exist """ + ПутьКФайлуLck + """ goto go
		|ping -n 5 127.0.0.1 > NUL
		|call set /a count+=1
		|goto flag
		|:go
		//|rem Удаляем только файлы
		//|Del /F /Q """ + КаталогGUID + "\*.*""
		//|rem Удаляем только каталоги внутри
		//|for /d %%i in ("""+ КаталогGUID + "\*"") do rmDir /s /q ""%%i""
		|rem Удаляем основной каталог и всё, что в нём
		|Echo Удаление папки " + КаталогGUID + "...
		|rmDir """ + КаталогGUID + """ + /s /q
		|:end
		// Если надо после очистки запустить 1С, то убрать комментарий в следующих 2 строках и 2-х модулей в конце модуля, но при этом будет появлятся папка 00000000-0000-0000-0000-000000000000
		//|Echo Запускаем 1С
		//|start """" " + ПолучитьСтрокуЗапуска1С() + "
		|rem Удаляем этот файл
		|del %0
		|";
		
		БатФайл = Новый ТекстовыйДокумент;
		БатФайл.УстановитьТекст(ТекстBatФайла);
		БатФайл.Записать(КаталогВременныхФайлов() + "\ClearCache.bat", КодировкаТекста.OEM);
		ЗапуститьПриложение("""" + КаталогВременныхФайлов() + "\ClearCache.bat""");            
		ЗавершитьРаботуСистемы(Ложь);
		
	Иначе
		Сообщить("Каталог """ + КаталогGUID + """ не найден. Очистка кэша невозможна.");
		Возврат;
	КонецЕсли;    
	
КонецПроцедуры

// Проверяет существование каталога
// Параметры
//         Путь - путь к проверяемому каталогу
//
// Возвращаемое значение
//      Булево. Истина, если каталог существует, Ложь, если каталог не существует
//
Функция КаталогИлиФайлСуществует(Путь)
	
	КаталогНаДиске = Новый Файл(Путь);
	
	Если КаталогНаДиске.Существует() Тогда
		Возврат Истина;
	Иначе
		Возврат Ложь;
	КонецЕсли;    
	
КонецФункции

 

Скачать файлы

Наименование Файл Версия Размер
ОчисткаКэша 60
.epf 11,77Kb
27.09.13
60
.epf 11,77Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. al petrov (petrov_al) 27.09.13 17:23
Хоть и тема не новая но решение очень даже приличное.
2. kiv82 (AltF1) 30.09.13 10:38
Ключ запуска прописать для ярлыка.
При запуске пользователем ИБ - кэш будет чиститься.
3. Sergey A. (spaminfostart) 30.09.13 11:07
(2) kiv82, да, но он будет чиститься каждый раз, что может не понравится пользователю, настраивающему сложные отчёты.
4. andrey dyak (dyak84) 30.09.13 11:39
Автор подскажите а обстоит ситуация когда профиль 1С размещен не стандартно на диске D: Очистка кеша будет работать или нет. И еще такой вопрос как настройки имя последнего пользователя они тоже по идее будут стерті так ли ето.Зарание спасибо за ответ
5. Sergey A. (spaminfostart) 30.09.13 14:12
(4) dyak84, должно работать, т. к. читаем используемое по умолчанию размещение данных приложений - папка AppData. При очистке кэша конечно имя последнего пользователя тоже теряется.
6. Sergey A. (spaminfostart) 02.10.13 11:19
Готова другая обработка, предназначенная для встраивания в стороннюю конфигурацию. Актуально для закрытых конфигураций, в которых запрещён запуск внешних обработок.
Сделана на управляемых формах. Обошлось без батников, т. к. закрывать нужно не текущую конфигурацию (при попытке очистить кэш текущей - сообщит об ошибке совместного доступа).
Если надо - выложу.
Прикрепленные файлы:
7. Антон Рощин (wolfsoft) 02.10.13 13:20
Плюсанул, может пригодится.
8. Schulz Hesse (Schulz Hesse) 18.06.14 03:41
Пригодилось, благодарю!!!
9. Сонечка (esa35) 10.02.16 18:39
10. Смирнова Ирина (IrinaKostroma1) 08.06.16 14:51
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа