Размещение картинок после перехода из УТ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″

fixin

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

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

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

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