Необходимы некоторые манипуляции с базой:
- В перечислениях «ВидыДополнительнойИнформацииОбъектов» Добавить Значение Ссылка;
- В форме «ФормаСпискаФайловИИзображений» справочника «ХранилищеДополнительнойИнформации» добавить реквизит «Ссылки» с типом «СправочникСписок.ХранилищеДополнительнойИнформации»;
Добавляем новую страницу и выводим на нее реквизит «Ссылки» Рисунок № 2
И добавляем в модуль формы следующее:
Процедура СсылкиПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Элемент.ТекущиеДанные.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Ссылки;
КонецЕсли;
КонецПроцедуры
Процедура СсылкиИмяФайлаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
КонецПроцедуры
Процедура СсылкиИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь);
Если Не Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;
ТекОбъект = ЭлементыФормы.Ссылки.ТекущиеДанные;
// ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), Новый СжатиеДанных(9));
ТекОбъект.ИмяФайла = Диалог.ПолноеИмяФайла;
ПолучитьИмяФайлаМассив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Диалог.ПолноеИмяФайла,"\");
ПозицияИмяФайла = ПолучитьИмяФайлаМассив.Количество()-1;
ПолучитьИмяФайла = СокрЛП(ПолучитьИмяФайлаМассив[ПозицияИмяФайла]);
ИмяФайлаБезРасширения = Лев(ПолучитьИмяФайла,СтрДлина(ПолучитьИмяФайла)-4);
ТекОбъект.Наименование = ИмяФайлаБезРасширения;
КонецПроцедуры
Процедура СсылкиВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) СтандартнаяОбработка=Ложь;
//ЗапуститьПриложение(ЭлементыФормы.Ссылки.ТекущиеДанные.ИмяФайла);
КоманднаяПанельСсылокОткрыть("");
КонецПроцедуры
Процедура СсылкиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ВладелецФормы <> Неопределено Тогда
Оповестить("ОбновитьФорму", Новый Структура("ИмяЭлемента","ИзмененСписокСправочникаХранилищеДопИнформации"),мОбъектОтбора);
КонецЕсли;
КонецПроцедуры
Процедура СсылкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
КонецПроцедуры
Процедура СсылкиПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
ПередОкончаниемРедактирования(Элемент, НоваяСтрока, Перечисления.ВидыДополнительнойИнформацииОбъектов.Ссылки);
КонецПроцедуры
Процедура КоманднаяПанельСсылокОткрыть(Кнопка)
ИмяФайла = ЭлементыФормы.Ссылки.ТекущиеДанные.ИмяФайла;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
ЗапуститьПриложение(ИмяФайла);
ИначеЕсли Лев(ИмяФайла,2) = "L:" Тогда
НовоеИмя = "Имя Каталога" + Сред(ИмяФайла,3);
ВыбФайлНовый = Новый Файл(НовоеИмя);
Если ВыбФайлНовый.Существует() Тогда
ЗапуститьПриложение(НовоеИмя);
КонецЕсли;
ИначеЕсли Лев(ИмяФайла,2) = "Y:" Тогда
НовоеИмя = "Имя Каталога" + Сред(ИмяФайла,3);
ВыбФайлНовый = Новый Файл(НовоеИмя);
Если ВыбФайлНовый.Существует() Тогда
ЗапуститьПриложение(НовоеИмя);
КонецЕсли;
ИначеЕсли Лев(ИмяФайла,2) = "Z:" Тогда
НовоеИмя = "Имя Каталога" + Сред(ИмяФайла,3);
ВыбФайлНовый = Новый Файл(НовоеИмя);
Если ВыбФайлНовый.Существует() Тогда
ЗапуститьПриложение(НовоеИмя);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СсылкиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.ИмяФайла.ОтображатьКартинку = Истина;
ОформлениеСтроки.Ячейки.ИмяФайла.ИндексКартинки = РаботаСФайлами.ПолучитьИндексПиктограммыФайла(РаботаСФайлами.ПолучитьРасширениеФайла(ДанныеСтроки.Ссылка.ИмяФайла));
КонецПроцедуры
Процедура КоманднаяПанельДополнительныхФайловПоказывать(Кнопка)
Объект = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные.Ссылка.ПолучитьОбъект();
//Если НЕ Объект.ЭтоНовый() и Не (РольДоступна("ПолныеПрава") ИЛИ Ин_Общиймодуль.ПроверитьПраво("00063",глЗначениеПеременной("глТекущийПользователь"))) Тогда
// Возврат;
//КонецЕсли;
Если Объект.Наименование = "Показывать" Тогда
Объект.Наименование = "";
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Пометка = Ложь;
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Картинка = БиблиотекаКартинок.СнятаПометка;
ИначеЕсли ЗначениеЗаполнено(Объект.Наименование) Тогда
Режим = РежимДиалогаВопрос.ДаНет;
Текст = "Записать в наименование ""Показывать""?";
Ответ = Вопрос(Текст, Режим, 0);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Объект.Наименование = "Показывать";
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Пометка = Истина;
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Картинка = БиблиотекаКартинок.УстановленаПометка;
Иначе
Объект.Наименование = "Показывать";
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Пометка = Истина;
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Картинка = БиблиотекаКартинок.УстановленаПометка;
КонецЕсли;
Объект.Записать();
КонецПроцедуры
Процедура УстановитьКнопкуПоказывать(Элемент);
Если Элемент.ТекущиеДанные <> Неопределено Тогда
Если Элемент.ТекущиеДанные.Наименование = "Показывать" Тогда
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Пометка = Истина;
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Картинка = БиблиотекаКартинок.УстановленаПометка;
Иначе
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Пометка = Ложь;
ЭлементыФормы.КоманднаяПанельДополнительныхФайлов.Кнопки.Показывать.Картинка = БиблиотекаКартинок.СнятаПометка;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СсылкиПриАктивизацииСтроки(Элемент)
Если Элемент.ТекущиеДанные = Неопределено Тогда
Если ВладелецФормы <> Неопределено Тогда
Оповестить("ОбновитьФорму", Новый Структура("ИмяЭлемента","ИзмененСписокСправочникаХранилищеДопИнформации"),мОбъектОтбора);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СсылкиПослеУдаления(Элемент)
Если ВладелецФормы <> Неопределено Тогда
Оповестить("ОбновитьФорму", Новый Структура("ИмяЭлемента","ИзмененСписокСправочникаХранилищеДопИнформации"),мОбъектОтбора);
КонецЕсли;
КонецПроцедуры
Указываем путь к хранилищу и нажимаем выполнить. дожидаемся сообщения "Все ОК" и наслаждаемся облегченной базой, все файлы будут перенесены и заменены на ссылки.
Переносит все имеющееся файлы и изображения, хранящиеся в справочнике хранилище дополнительной информации в папку, указанную в строке, при этом если это документ с организацией, то в каталоге создастся папка с наименованием организации, а если это справочник или документ без организации, то папка с названием типа объекта (например, Номенклатура)
Для корректной работы всех пользователей в сети необходимо выбирать общий ресурс хранения файлов с корректными правами доступа.
Тестировалась на конфигурации Управление производственным предприятием, редакция 1.3 с версии 1.3.98.1 и старше.
Проверено на следующих конфигурациях и релизах:
- Управление производственным предприятием, редакция 1.3, релизы 1.3.97.2