Размещение картинок после перехода из УТ10 в УТ11
Столкнулся с проблемой — после перехода из УТ10 на УТ11 картинка не отображается, пишет «ошибка отображения файла картинки«:
При попытке посмотреть картинку в файле выдает «Не удалось открыть файл который присоединен к: *** (Номенклатура) Данные файла недоступны, т.к. возможно файл был очищен как ненужный«:
К счастью, картинка сохраняется в реквизите ХранилищеФайлов справочника НоменклатураПрисоединенныеФайлы.
Написал обработку, которая переносит двоичные данные из этого реквизита в регистр сведений ХранилищеФайлов:
Важно! Реквизит ХранилищеДвоичныхДанных — это не двоичные данные, а справочник ХранилищеДвоичныхДанных!
Функцию СоздатьМенеджерЗаписи менедежера ХранилищеФайлов пришлось скопировать и поправить — она делала попытки удалить лишние записи в служебных регистрах, не могла и выдавала ошибку. Да еще и не перезаписывала данные регистра:
//Скопировано из РегистрыСведений.ХранилищеФайлов Процедура ЗаписатьДвоичныеДанные(Знач Файл, Знач ДвоичныеДанные) Экспорт Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); ЭтоПустыеДвоичныеДанные = (ДвоичныеДанные = Неопределено); Если ЭтоПустыеДвоичныеДанные Тогда ПустыеДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(""); Хеширование.Добавить(ПустыеДвоичныеДанные); Размер = ПустыеДвоичныеДанные.Размер(); Иначе Хеширование.Добавить(ДвоичныеДанные); Размер = ДвоичныеДанные.Размер(); КонецЕсли; Хеш = ПолучитьBase64СтрокуИзДвоичныхДанных(Хеширование.ХешСумма); НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ХранилищеДвоичныхДанных"); ЭлементБлокировки.УстановитьЗначение("Хеш", Хеш); Блокировка.Заблокировать(); //УдалитьДвоичныеДанные(Файл); //Осипов Запрос = Новый Запрос; Запрос.УстановитьПараметр("Хеш", Хеш); Запрос.УстановитьПараметр("Размер", Размер); Запрос.Текст = "ВЫБРАТЬ | ХранилищеДвоичныхДанных.Ссылка КАК Ссылка |ИЗ | Справочник.ХранилищеДвоичныхДанных КАК ХранилищеДвоичныхДанных |ГДЕ | ХранилищеДвоичныхДанных.Хеш = &Хеш | И ХранилищеДвоичныхДанных.Размер = &Размер"; Выборка = Запрос.Выполнить().Выбрать(); ХранилищеДвоичныхДанныхСсылка = Неопределено; Если Выборка.Следующий() Тогда ХранилищеДвоичныхДанныхСсылка = Выборка.Ссылка; Иначе ХранилищеДвоичныхДанныхОбъект = Справочники.ХранилищеДвоичныхДанных.СоздатьЭлемент(); ХранилищеДвоичныхДанныхОбъект.Размер = Размер; ХранилищеДвоичныхДанныхОбъект.Хеш = Хеш; ХранилищеДвоичныхДанныхОбъект.ДвоичныеДанные = ?(ЭтоПустыеДвоичныеДанные, Неопределено, Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9))); ХранилищеДвоичныхДанныхОбъект.Записать(); ХранилищеДвоичныхДанныхСсылка = ХранилищеДвоичныхДанныхОбъект.Ссылка; КонецЕсли; //Запись = СоздатьМенеджерЗаписи(); //Осипов Запись = РегистрыСведений.ХранилищеФайлов.СоздатьМенеджерЗаписи(); Запись.Файл = Файл; Запись.ХранилищеДвоичныхДанных = ХранилищеДвоичныхДанныхСсылка; //Запись.Записать(Ложь); Запись.Записать(Истина); //ОСипов - перезаписываем ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры
Опять 1С написала код «для себя», который невозможно повторно использовать. Увы…
Среда: УТ 10.3.66.3, УТ: 11.5.20.68 , 8.3.24.1761
Объем: 1 час
Правила переноса: УТ 10 — УТ 11.5.16 2024-02-28T18:59:58
Источник: ВерсияКонфигурации=»10.3.87.1″, СинонимКонфигурации=»Управление торговлей, редакция 10.3″
Приемник: ВерсияКонфигурации=»11.5.16.42″ СинонимКонфигурации=»Управление торговлей, редакция 11″
Свежие комментарии