Путь к локальному кэшу файлов

В одной отраслевой конфигурации не открывался сохраненный в базе присоединенный файл Excel, потому что он и так имел длинное наименование, а еще и размещался в рабочем каталоге с длинным наименованием:

C:\Users\prg1\AppData\Roaming\1C\1cv8\3597e00c-adf8-490c-a00a-6f5d705e14c3\9a8d5a9f-ed25-46ad-b817-6c758f657e75\App\00000004wq

Поискал возможные решения, но все они однотипные и не решают проблему.

Поискал, где хранится и устанавливается путь для временного кэша файлов на стороне клиента.

В параметрах сеанса ПутьКЛокальномуКэшуФайлов устанавливается в процедуре ДобавитьНастройкиРаботыСФайлами модуля ФайловыеФункцииСлужебныйПовтИсп:

Путь к каталогу пользователя запрашивается в функции РабочийКаталогПользователя:

Путь устанавливается в модуле ФайловыеФункции в хранилище общих настроек под именем ЛокальныйКэшФайлов/ПутьКЛокальномуКэшуФайлов:

Эта процедура вызывается из другой процедуры этого же модуля:

В общем, мне надоело разбираться в хитросплетениях типового кода и я сделал простую заплатку в процедуру ДобавитьНастройкиРаботыСФайлами модуля ФайловыеФункцииСлужебныйПовтИсп:

	// ПутьКЛокальномуКэшуФайлов.
	ПутьКЛокальномуКэшуФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
		"ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов");
	// Не следует получать эту переменную непосредственно.
	// Нужно использовать функцию РабочийКаталогПользователя
	// модуля ФайловыеФункцииСлужебныйКлиент.
	ПерсональныеНастройки.Вставить("ПутьКЛокальномуКэшуФайлов", ПутьКЛокальномуКэшуФайлов);
	
	//Осипов 2022-03-03 +++
	Поз = Найти(ВРЕГ(ПутьКЛокальномуКэшуФайлов), ВРЕГ("\AppData"));
	Если Поз <> 0 Тогда
		РабочийКаталог = Лев(ПутьКЛокальномуКэшуФайлов, Поз);
		РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог) + "tmp1s\";
		ПерсональныеНастройки.Вставить("ПутьКЛокальномуКэшуФайлов", РабочийКаталог);
	КонецЕсли;
	//Осипов 2022-03-03 +++

UDP: добавил еще и сохранение в общие параметры, т.к. в некоторых случаях запрос идет непосредственно оттуда:

		ПерсональныеНастройки.Вставить("ПутьКЛокальномуКэшуФайлов", РабочийКаталог);
		ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", РабочийКаталог); //Еще и сюда вставляем

Это процедура на сервере, тут клиентская функция РабочийКаталогДанныхПользователя() недоступна, поэтому я меняю штатный путь на свой.

Сначала я ошибся и устанавливал путь как C:\Users\prg1\tmp1s. В итоге у меня создавались папки так:

Но потом я добавил в конце бэк-слеш и все заработало, как задумано:

В проводнике это выглядит забавно:

Объем: 1.5 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *