gifts2017

Перенос присоединенных файлов во внешние тома

Опубликовал Peter Metelkin (iiceberg) в раздел Администрирование - Сервисные утилиты

Обработка по переносу хранимых файлов из  базы в тома (файлы на диск)

При начале учета не верно оценил интересы руководства  и пользователей в удобстве хранения файлов для объектов, таких как номенклатура, документы поступления и реализации, входящая эл.почта. При начале ведения учета настроил  хранения файлов в базе, а зря. И так получилось что за 3 месяца работы размер базы ООООчень сильно вырос. Принял решение перенести все файлы  в тома. Поискав на в сети ничего не нашел кроме обработки Перенос присоединенных файлов номенклатуры во внешние тома , но файлы номенклатуры  это только малая часть. Так что ее то я взял за основу и немного переработав сделал для себя обработку по переносу всех «присоединенных файлов» в тома.

 Возможности:

Выбор справочника присоединенных файлов .

Индикатор =)

 

 

!!!! Перед началом работы с обработкой необходимо настроить правила хранения файлов

После можно работать с обработкой.

 

После переноса файлов необходимо сжать информационную базу.

 

Обработка тестировалась на УТ 11 и документообороте.

 

Отдельное спасибо dima-1c 

 

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

Наименование Файл Версия Размер
ПеренестиПрисоединенныеФайлыНаДиск.epf 186
.epf 7,50Kb
26.02.13
186
.epf 7,50Kb Скачать
ПеренестиПрисоединенныеФайлыНаДиск_2.epf 258
.epf 7,71Kb
08.07.14
258
.epf 2 7,71Kb Скачать

См. также

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

Комментарии

1. Александр Капустин (kapustinag) 27.02.13 11:32
Правильное решение.
К сожалению, в УПП хранение файлов в томах на диске пока приделано только к "произвольному электронному документу" и т.п. То есть для УПП, если захочется сделать так же, без доработок основной конфигурации не обойтись.
2. Сергей Сергеев (Рамзес) 07.03.13 11:38
(1) Достаточно внести изменения в модуль формы «Форма списка файлов и изображений» справочника "Хранилище дополнительной информации".
3. Денис Мих (deniskot) 05.04.13 09:34
не работает на Документообороте КОРП 1,2,6,1
{Форма.Форма.Форма(59)}: Ошибка при вызове метода контекста (Выполнить)
Возврат Запрос.Выполнить().Выгрузить()[0][0];
по причине:
{(1, 71)}: Таблица не найдена "Справочник.000000001"
Выбрать Сумма(Количество) из (Выбрать Количество(*) как Количество Из <<?>>Справочник.000000001
4. Damon Li (damontut) 19.04.13 09:32
В документообороте есть штатная обработка.
5. Dmitry (dihlam) 09.05.13 13:27
Добрый день.

1С:Предприятие 8.2 (8.2.18.82)
Управление торговлей, редакция 11.1

Ошибка:
Метод объекта не обнаружен(ДобавитьНаДиск)
Nikovit; cupertino; dima_kystym; for_infostart; apvl; Lyubin.Evgeniy; ivansulla; +7 Ответить 1
6. Денис Кузнецов (kuza_87) 14.06.13 05:52
Спасибо тебе огромное! Классная обработка, к тому же универсальная. Я её маленько под себя ещё переделал, сделал отбор по периоду. А то у меня памяти не хватало чтобы хотя бы один справочник выгрузить
7. Алексей Хлыстов (cowboy121) 30.07.13 10:55
Добрый день!
Не очищается база после сжатия таблиц информационной базы. В чем может быть проблема?
8. Евгений Свистун (eugensn) 05.09.13 17:38
(2) Рамзес, Какие именно изменения в модуле формы позволят обойти данное ограничение УПП?
9. Сергей Сергеев (Рамзес) 06.09.13 10:21
Вносим изменения в три процедуры модуля формы:
Процедура КоманднаяПанельДополнительныхФайловОткрытьФайлы(Кнопка)
	
	// { Админ [14.04.2011 11:36:35]
	ВыделенныеСтроки = ЭлементыФормы.ДополнительныеФайлы.ВыделенныеСтроки;
	ОбъектФайла = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные;
	ТипОбъекта = ТипЗнч(ОбъектФайла.Ссылка.Объект);
	
	
	// для ОСТов нельзя рушить иерархию папок на сервере, поэтому для них путь прописан в имени файла
	// для остальных все файлы находятся в одной папке на сервере (не распределены по подпапкам)
	Если ТипОбъекта = Тип("СправочникСсылка.СерииНоменклатуры") Тогда
		ИмяКаталога = "F:\Сертификаты";
	ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.СпецификацииНоменклатуры") Тогда
		ИмяКаталога = "F:\папка обмена\Чертежи\Эскизы сварных кромок";
	ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.ОСТ") Тогда
		ИмяКаталога = "";
	КонецЕсли;
	
	Если ВыделенныеСтроки = Неопределено Тогда
		ОткрытьФайлДополнительнойИнформации(ИмяКаталога, ОбъектФайла.ИмяФайла);
	Иначе
		Если ВыделенныеСтроки.Количество() = 0 Тогда
			Возврат;
		КонецЕсли;

		Для каждого СсылкаФайл из ВыделенныеСтроки Цикл
			ОткрытьФайлДополнительнойИнформации(ИмяКаталога, ОбъектФайла.ИмяФайла);
		КонецЦикла;
	КонецЕсли; 
	
	Возврат;
	// } Админ [14.04.2011 11:36:35]
	
	РаботаСФайлами.ОткрытьФайлы(ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные, ЭлементыФормы.ДополнительныеФайлы.ВыделенныеСтроки, Ложь);

КонецПроцедуры
...Показать Скрыть


Процедура ДополнительныеФайлыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
	
	НовоеРасширениеФайла = РаботаСФайлами.ПолучитьРасширениеФайла(ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные.ИмяФайла);

	Если Не ОтменаРедактирования
	   И РаботаСФайлами.НельзяИзменятьРасширение(мТекущееРасширениеФайла, НовоеРасширениеФайла) Тогда

		Отказ = Истина;
		ЭлементыФормы.ДополнительныеФайлы.ТекущаяКолонка = ЭлементыФормы.ДополнительныеФайлы.Колонки.ИмяФайла;
		Возврат;

	КонецЕсли;

	Если Не ОтменаРедактирования
	   И НоваяСтрока
	   И ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные.Хранилище.Получить() = Неопределено Тогда
	   
		// { Админ [14.04.2011 11:36:35]
		// ничего не проверяем - позволяем не заполнять ячейку Хранилище - комментарим код от 1с:
		
		//Отказ = Истина;
		//Предупреждение("Необходимо выбрать файл.");
		//ЭлементыФормы.ДополнительныеФайлы.ТекущаяКолонка = ЭлементыФормы.ДополнительныеФайлы.Колонки.ИмяФайла;
		//Возврат;
		
		// } Админ [14.04.2011 11:36:35]
	
	КонецЕсли;

	ПередОкончаниемРедактирования(Элемент, НоваяСтрока, Перечисления.ВидыДополнительнойИнформацииОбъектов.Файл);

КонецПроцедуры
...Показать Скрыть


Процедура ДополнительныеФайлыИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)

	Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь);

	Если Не Диалог.Выбрать() Тогда
		Возврат;
	КонецЕсли;

	// { Админ [14.04.2011 11:36:35]
	Попытка
		ТекОбъект = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные;
		//ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), Новый СжатиеДанных);
		
		Если ТипЗнч(ОбязательныеОтборы.Объект) = Тип("СправочникСсылка.ОСТ") Тогда
			// для ОСТов нельзя рушить иерархию папок на сервере, поэтому для них путь прописываем в имени файла
			ТекОбъект.ИмяФайла = Диалог.ПолноеИмяФайла;
		Иначе
			// для остальных все файлы находятся в одной папке на сервере (не распределены по подпапкам)
			ТекОбъект.ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог) + 1);
		КонецЕсли;
		
	Исключение
		Сообщить("" + ОписаниеОшибки());
	КонецПопытки;
	Возврат; 
	// } Админ [14.04.2011 11:36:35]
	
	Попытка
		ТекОбъект = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные;
		ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), Новый СжатиеДанных);
		ТекОбъект.ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог) + 1);
	Исключение
		Сообщить("" + ОписаниеОшибки());
	КонецПопытки;
	
	Ответ = Вопрос("Удалить файл источник?",РежимДиалогаВопрос.ДаНетОтмена,,КодВозвратаДиалога.Нет,"Удаление файла");
	Если Ответ = КодВозвратаДиалога.Да Тогда
		УдалитьФайлы(Диалог.ПолноеИмяФайла);
	КонецЕсли;

КонецПроцедуры
...Показать Скрыть


и добавляем процедуру:
// { Админ [09.09.2011 11:28:42]
// Данная процедура скопирована из общего модуля РаботаСФайлами, но в отличие от нее открывает файл
// не Эксплорером, а приложением, ассоциированным с расширением файла. Причина в том, что при запуске
// Эксплорера пользователя выбрасывает на рабочий стол сервера.
//
// Открывает переданный файл на диске с учетом типа файлов. Файлы, с которыми 
// может работать 1С:Предприятие открываются в 1С:Предприятии. Остальные файлы
// пытаются открыться зарегистрированным для них в системе приложением.
//
// Параметры
//  ИмяКаталога  – Строка, содержащая путь к каталогу файла на диске.
//  ИмяФайла     – Строка, содержащая имя файла, без имени каталога.
//
Процедура ОткрытьФайлДополнительнойИнформации(ИмяКаталога, ИмяФайла)

	Если ИмяКаталога = "" Тогда 
		// это хранилище для справочника ОСТ, в имени файла прописан полный путь
		ЗапуститьПриложение(ИмяФайла);
		Возврат
	КонецЕсли;
	
	ПолноеИмяФайла = РаботаСФайлами.ПолучитьИмяФайла(ИмяКаталога, РаботаСФайлами.УдалитьЗапрещенныеСимволыИмени(ИмяФайла));
	РасширениеФайла = Врег(РаботаСФайлами.ПолучитьРасширениеФайла(ИмяФайла));

	Если РасширениеФайла = "MXL" Тогда

		ТабличныйДокумент = Новый ТабличныйДокумент;
		ТабличныйДокумент.Прочитать(ПолноеИмяФайла);
		ТабличныйДокумент.Показать(ИмяФайла, Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4));

	ИначеЕсли РасширениеФайла = "TXT" Тогда

		ТекстовыйДокумент = Новый ТекстовыйДокумент;
		ТекстовыйДокумент.Прочитать(ПолноеИмяФайла);
		ТекстовыйДокумент.Показать(ИмяФайла, Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4));

	Иначе

		ЗапуститьПриложение(ПолноеИмяФайла);

	КонецЕсли;

КонецПроцедуры // ОткрытьФайлДополнительнойИнформации()
...Показать Скрыть
ВРедная; vshish; sparklemal; Операция1Ы; iiceberg; +5 Ответить
10. Дмитрий Ярославцев (DimanYa) 27.01.14 13:10
Для бухгалтерии может подойди?

Или не пойдёт, но можно немного поменять в названиях процедур?

Структура хранения одинаковая по идее должна быть и в Ут 11 и в БП 3.0
11. Дмитрий Ярославцев (DimanYa) 27.01.14 13:28
Извиняюсь, нашёл типовую обработку
12. Алексей Шморнев (zayav) 25.03.14 16:56
как быть ?

Не удалось добавить файл: "0002.jpg". Обратитесь к администратору системы.

в журнале:
Не удалось добавить файл ни на один из томов. Список ошибок:

Ошибка при добавлении файла на том: img (\\server\g\1CImage\20140325\): {ОбщийМодуль.ФайловыеФункции.Модуль(289)}: Неверный тип данных для добавления на том
ВызватьИсключение(СтрокаИсключения);


1С:Предприятие 8.2 (8.2.14.540)
УТ 11.0 (11.0.7.8)
Прикрепленные файлы:
13. Арам Айрапетян (banco) 21.06.14 14:38
(5) dihlam,
вместо ФайловыеФункции.ДобавитьНаДиск
написать ФайловыеФункцииСлужебный.ДобавитьНаДиск
14. Александр МАН (1977) 09.07.14 11:32
Жалко, что версии 1с КА не будет томов.......
15. Евгений Янеев (yaneev) 05.05.15 17:03
на УТ11 (11.1.10.116) так подправил:

ФайловыеФункцииСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ТекущаяДата(), ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Расширение, , , Неопределено);
16. Дмитрий Кузнецов (dima_kystym) 11.05.15 17:37
1С:Предприятие 8.3 (8.3.6.1977)Управление торговлей, редакция 11.1 (11.1.10.138)
Ошибка:
Метод объекта не обнаружен(ДобавитьНаДиск)
в чем может быть ошибка
17. Дмитрий Кузнецов (dima_kystym) 12.05.15 10:40
"Метод объекта не обнаружен(ДобавитьНаДиск)" эту ошибку победил сейчас ошибка слишком много фактических параметров, может по дате можно отфильтровать присрединенные файлы?
18. Рустам Джамалудинов (Rustam18) 15.10.15 23:43
(17) dima_kystym, решение у №15 смотри.
19. Артём Рогов (ben_art) 21.12.15 15:29
Подскажите пожалуйста , как перенести файл из базы на внешний том , но при этом чтоб сохранилась ссылкав объекте на файл
20. Rio Frost (riofrost) 24.04.16 19:59
(15) yaneev, (17) dima_kystym,
чтобы работало на конфигурациях построенных на БСП 2.2.5 (это УТ 11.1 и УНФ 1.5 к примеру), надо заменить код
ФайловыеФункцииСлужебный.ДобавитьНаДиск(ДвоичныеДанные, ПрисоединенныйФайл.ПутьКФайлу, ПрисоединенныйФайл.Том, ТекущаяДата(), "",
											ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Расширение, ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Зашифрован);

на следующий:
	СведенияОФайле = ФайловыеФункцииСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ПрисоединенныйФайл.ДатаМодификацииУниверсальная, 
	ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Расширение, , ПрисоединенныйФайл.Зашифрован, 
	ПрисоединенныйФайл.ДатаМодификацииУниверсальная);
	ПрисоединенныйФайл.Том = СведенияОФайле.Том;
	ПрисоединенныйФайл.ПутьКФайлу = СведенияОФайле.ПутьКФайлу;
	ПрисоединенныйФайл.ФайлХранилище = Новый ХранилищеЗначения("");
	ПрисоединенныйФайл.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина);
...Показать Скрыть


То есть, обязательно надо обновить данные в справочнике присоединенных файлов.

Ну и еще, для правильной индикации счетчик файлов стоит внести в цикл:

	
//.....
        н = н + СтруктураПорции.РазмерПорции - СтруктураПорции.КоличествоОшибок;	
    КонецЦикла;
	
Индикатор  = н;
...Показать Скрыть
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа