КД 2.1: Перенос картинок из ХранилищаДополнительнойИнформации в СправочникПрикрепленныеФайлы

1. Nigelist 14.11.18 11:33 Сейчас в теме
Вроде кое как, с помощью форумчан сделал правила обмена для переноса справочника с картинками из обычного приложения в управляемое. Но, при загрузке получаю ошибку:
Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7386)}: Значение не является значением объектного типа (Отбор)

Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)
    Обработчик             =  ПослеЗагрузкиДанных (конвертация)
    ОписаниеОшибки         =  Значение не является значением объектного типа (Конвертация_ПослеЗагрузкиДанных)
    ПозицияМодуля          =  (1)
    КодСообщения           =  23


Вот код обработчика:
ЗагруженныеОбъектыПереноса = Параметры.ЗагруженныеОбъектыПереноса;
ЗагруженныеОбъектыПереноса.Сортировать("ИмяПКО");

Для Каждого СтрокаТаблицы Из ЗагруженныеОбъектыПереноса Цикл
	
	Если СтрокаТаблицы.Объект.ЭтоНовый() Тогда
		Продолжить;
	КонецЕсли;
	
	Объект = СтрокаТаблицы.Объект.Ссылка.ПолучитьОбъект();
	ПараметрыОбъекта = СтрокаТаблицы.Параметры;
	ИмяПКО = СтрокаТаблицы.ИмяПКО;
	
	ОбъектМодифицирован = Истина;
	
	Если Метаданные.Справочники.Содержит(Объект.МетаДанные()) Тогда
		Выполнить(Алгоритмы.ОбработкаСправочниковОтложенная);
	КонецЕсли;
	
	Если ОбъектМодифицирован Тогда
		Объект.ОбменДанными.Загрузка = Истина;
		Объект.Записать();
	КонецЕсли;
	
КонецЦикла;
Показать

Подскажите, где ошибка и критична ли она?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. maks_20 164 14.11.18 12:22 Сейчас в теме
текст алгоритма Алгоритмы.ОбработкаСправочниковОтложенная скиньте тоже сюда.
3. Nigelist 14.11.18 12:30 Сейчас в теме
(2) вот:
Если ИмяПКО = "ФайлыНоменклатуры" Тогда
	ПрисоединенныеФайлыСлужебный.ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, Объект.ФайлХранилище.Получить());
КонецЕсли;
4. maks_20 164 14.11.18 12:38 Сейчас в теме
(3) на первый вгляд проблем не вижу. попробуйте открыть файл с правилами через любой текстовый редактор и поищите в тексте вот это: Конвертация_ПослеЗагрузкиДанных. В том месте, где это встретится скорее всего и будет проблема. возможно такого алгоритма у вас просто нет, а вызов его где-то присутствует.
5. Nigelist 14.11.18 12:46 Сейчас в теме
(4)
Конвертация_ПослеЗагрузкиДанных

Нет такого текста в правилах.

Сами правила добавил во вложение.
Прикрепленные файлы:
РЮМ-РК.xml
6. echo77 1885 14.11.18 20:07 Сейчас в теме
(0) А что если закомментировать обработчик конвертации ПослеЗагрузки?
Из какой конфигурации в какую переносите?
7. Nigelist 15.11.18 03:27 Сейчас в теме
(6) а как потом записать картинки в новую базу?
8. echo77 1885 15.11.18 08:31 Сейчас в теме
(7) Я хотел уточнить действительно ли ошибка в обработчике конвертации ПослеЗагрузки.
9. Nigelist 15.11.18 10:57 Сейчас в теме
(8) Я так понял, что проблема в ПВД Штрихкоды. Там в обработчике ПередОбработкой такой код:
Запрос = Новый Запрос("
|ВЫБРАТЬ
|	Штрихкоды.Штрихкод КАК Штрихкод,
|	Штрихкоды.ТипШтрихкода КАК ТипШтрихкода,
|	Штрихкоды.Владелец КАК Номенклатура,
|	Штрихкоды.ЕдиницаИзмерения КАК Упаковка,
|	Штрихкоды.ХарактеристикаНоменклатуры КАК Характеристика
|ИЗ
|	РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
|	Штрихкоды.Владелец ССЫЛКА Справочник.Номенклатура
|	И ВЫРАЗИТЬ(Штрихкоды.Владелец КАК Справочник.Номенклатура).ВидНоменклатуры.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
|	   ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
|");

ВыборкаДанных = Запрос;
Показать

И видимо он не полный, хотя я искал вызов этого кода в других обработчиках/алгоритмах, но не нашел. Может плохо искал.
10. kassbar 158 14.12.18 23:23 Сейчас в теме
Здравствуйте, а какова концепция переноса картинок, если картинки и номенклатура хранятся отдельно друг от друга в источнике (картинка не является реквизитом товара), и у товара много картинок.
Допустим я переношу товары и их картинки в некую пустую базу.
Вот я написал правила для переноса товаров, а в какой момент к этим товарам нужно подгружать картинки ?

На стороне приемника (после загрузки товара ) я уже не могу обратиться к данным источника, чтобы получить запросом список картинок.

Если написать отдельное правило для справочника картинок и выгружать их следом за товарами, то нужно искать что-ли в
приемнике товар-владельца после загрузки каждой картинки ?
Но будет ли у этого товара ссылка на момент поиска, чтобы установить его в качестве владельца этой картинки ?
11. kassbar 158 15.12.18 01:44 Сейчас в теме
Сделал через запись товара после загрузки и затем через поиск этого товара после загрузки картинки. Не уверен что правильно, думаю что должен быть более простой способ.
12. olo_lo4 08.05.21 15:16 Сейчас в теме
(0) Спасибо большое вам за тему и за правила. немного пришлось их подправить, в целом все работает, правки ерундовые. Выгружал из УТ 10.2 в КА 2.4
13. olo_lo4 08.05.21 15:17 Сейчас в теме
если что - в правила после загрузки данных, что бы файл и подгрузился и сразу показывался у ном-ры добавлен вот такой код

ЗагруженныеОбъектыПереноса = Параметры.ЗагруженныеОбъектыПереноса;
ЗагруженныеОбъектыПереноса.Сортировать("ИмяПКО");

Для Каждого СтрокаТаблицы Из ЗагруженныеОбъектыПереноса Цикл

Если СтрокаТаблицы.Объект.ЭтоНовый() Тогда
Продолжить;
КонецЕсли;

Объект = СтрокаТаблицы.Объект.Ссылка.ПолучитьОбъект();
ПараметрыОбъекта = СтрокаТаблицы.Параметры;
ИмяПКО = СтрокаТаблицы.ИмяПКО;

ОбъектМодифицирован = Истина;

Если Метаданные.Справочники.Содержит(Объект.МетаДанные()) Тогда
Выполнить(Алгоритмы.ОбработкаСправочниковОтложенная);
КонецЕсли;

Если ОбъектМодифицирован Тогда
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();

Ном = Объект.ВладелецФайла.Ссылка.ПолучитьОбъект();
Ном.ФайлКартинки = Объект.Ссылка;
Ном.Записать();
КонецЕсли;

КонецЦикла;
14. Raideres 8 01.02.22 13:58 Сейчас в теме
(13)
ЗагруженныеОбъектыПереноса = Параметры.ЗагруженныеОбъектыПереноса;
ЗагруженныеОбъектыПереноса.Сортировать("ИмяПКО");

Для Каждого СтрокаТаблицы Из ЗагруженныеОбъектыПереноса Цикл

Если СтрокаТаблицы.Объект.ЭтоНовый() Тогда
Продолжить;
КонецЕсли;

Объект = СтрокаТаблицы.Объект.Ссылка.ПолучитьОбъект();
ПараметрыОбъекта = СтрокаТаблицы.Параметры;
ИмяПКО = СтрокаТаблицы.ИмяПКО;

ОбъектМодифицирован = Истина;

Если Метаданные.Справочники.Содержит(Объект.МетаДанные()) Тогда
Выполнить(Алгоритмы.ОбработкаСправочниковОтложенная);
КонецЕсли;

Если ОбъектМодифицирован Тогда
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();

Ном = Объект.ВладелецФайла.Ссылка.ПолучитьОбъект();
Ном.ФайлКартинки = Объект.Ссылка;
Ном.Записать();
КонецЕсли;

КонецЦикла;
Показать


а можете поделиться правилами

сейчас пытаюсь для рт сделать не выгружает картинку(
15. nomad_irk 76 01.02.22 15:21 Сейчас в теме
(14)Как-то так:
Прикрепленные файлы:
16. nomad_irk 76 01.02.22 15:21 Сейчас в теме
(14)
Прикрепленные файлы:
17. Raideres 8 01.02.22 21:47 Сейчас в теме
(16)
Запросы.ФайлыНоменклатуры.УстановитьПараметр("Номенклатура",Источник);
Выборка = Запросы.Файлыноменклатуры.Выполнить().Выбрать();

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

	ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла);
	
	ВыгрузитьПоПравилу(ДанныеРегистра,,,,"ДвоичныеДанныеФайлов");
КонецЦикла;
Показать


Подскажите в справочник НоменклатураПрисоединенныеФайлы запись сделал а вот в регистре в ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла); не заполняет Файл пишит неопределено

где я накосячил ткните носом
Прикрепленные файлы:
ПравилаОбменаДанными2.xml
18. Raideres 8 02.02.22 09:56 Сейчас в теме
(16) эту ошибку исправил неправильно указал правило а вот в номенклатуре файлкартинки не заполняется
https://prnt.sc/26n9ivb
исправил код вот так вот это правильно?
сейчас заполняет но не уверен что правильно
Запросы.ФайлыНоменклатуры.УстановитьПараметр("Номенклатура",Источник);
Выборка = Запросы.Файлыноменклатуры.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
		
	ДанныеРегистра = Новый Структура("ДвоичныеДанныеФайла");
	ЗаполнитьЗначенияСвойств(ДанныеРегистра,Выборка);
	ДанныеРегистра.Вставить("Активность",Истина);
	
	ДанныеПрисоединенногоФайла = Новый Структура ("Ссылка, Наименование, ВладелецФайла, Расширение, Размер, ПутькФайлу");
   	ЗаполнитьЗначенияСвойств(ДанныеПрисоединенногоФайла,Выборка);
	ДанныеПрисоединенногоФайла.Расширение = РаботаСФайлами.ПолучитьРасширениеФайла(Выборка.ИмяФайла);
	ДанныеПрисоединенногоФайла.Размер     = 0;	
	ДанныеПрисоединенногоФайла.ПутьКфайлу="";
	
	ВыгрузитьПоПравилу(ДанныеПрисоединенногоФайла, , , , "НоменклатураПрисоединенныеФайлы"); 
	
	ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла);
	
	ВыгрузитьПоПравилу(ДанныеРегистра, , , , "ДвоичныеДанныеФайлов"); 
	
	Значение = ДанныеПрисоединенногоФайла.Ссылка;  ///добавил вот так иначе не заполнял
КонецЦикла;  
  
Показать
Прикрепленные файлы:
ПравилаОбменаДанными2.xml
20. nomad_irk 76 02.02.22 10:46 Сейчас в теме
(18)Оно так изначально должно было быть, посмотрите скрин 2 в сообщении (15)
19. nomad_irk 76 02.02.22 10:45 Сейчас в теме
(17)Если ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла) - неопределено, то как тогда происходит запись в Справочник.НоменклатураПрисоединенныеФайлы?
21. Raideres 8 02.02.22 12:02 Сейчас в теме
(19)не хочет без этого или я где то не так сделал
Прикрепленные файлы:
ПравилаОбменаДанными2.xml
22. nomad_irk 76 02.02.22 12:14 Сейчас в теме
(21)
Значение = ДанныеПрисоединенногоФайла.Ссылка;  ///добавил вот так иначе не заполнял

Должно быть указано.
23. Raideres 8 04.02.22 10:19 Сейчас в теме
(22)не понял вас должно быть так написано как я написал или без этого должно было все работать
24. nomad_irk 76 04.02.22 10:33 Сейчас в теме
(23)Если вы внимательно посмотрите на второй скрин из моего сообщения (15), то из него понятно, что
Значение = ДанныеПрисоединенногоФайла;

должно быть, иначе - не работает.
25. Raideres 8 04.02.22 10:36 Сейчас в теме
(24)извините слепой действительно
немного модернизировал вот так мб что потом перекинуть картинку на том было можно иначе ругался на то что тип не двоичные данные а картинка

Запросы.ФайлыНоменклатуры.УстановитьПараметр("Номенклатура",Источник);
Выборка = Запросы.Файлыноменклатуры.Выполнить().Выбрать();

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

	///++++Регистр присоединенныеФайлы
	ДанныеРегистра = Новый Структура("ДвоичныеДанныеФайла,Активность,Файл");
	ДанныеРегистра.Вставить("ДвоичныеДанныеФайла", ДвДанные);//Выборка.ДвоичныеДанныеФайла);	
	ДанныеРегистра.Вставить("Активность", Истина);
	ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла);	
	ВыгрузитьПоПравилу(ДанныеРегистра, , , , "ДвоичныеДанныеФайлов"); 
	///----Регистр присоединенныеФайлы

	
	//ЗаполнитьЗначенияСвойств(ДанныеРегистра,Выборка);
    Значение = ДанныеПрисоединенногоФайла;  
КонецЦикла;
Показать
26. nomad_irk 76 04.02.22 10:39 Сейчас в теме
(25)да, хорошо. т.к. в хранилище значения действительно может быть и Картинка и ДвоичныеДанные.
В РТ, вроде бы, ТОЛЬКО двоичные данные могут быть.
27. Raideres 8 04.02.22 10:45 Сейчас в теме
28. nomad_irk 76 04.02.22 10:48 Сейчас в теме
29. Raideres 8 04.02.22 10:52 Сейчас в теме
(28) значит я вас правильно понял, я просто головой в конвертации и ищу в ней что за "РТ" такое)
30. RasBel 22.02.22 12:15 Сейчас в теме
Пытаюсь из УТ11.1 -> УТ11.4 сделать. Не выгружает картинку.
Справочники: Номенклатура, НоменклатураПрисоединенныеФайлы заполнил. РС ДвоичныеДанныеФайлов тоже.
В карточке товара написано, что файл есть, если зайти в файл - там тоже файл есть, но открыть картинку его не получается, ошибка. Уже голову сломал.
Не поделитесь опытом ?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот