Вроде кое как, с помощью форумчан сделал правила обмена для переноса справочника с картинками из обычного приложения в управляемое. Но, при загрузке получаю ошибку:
Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7386)}: Значение не является значением объектного типа (Отбор)
Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)
Обработчик = ПослеЗагрузкиДанных (конвертация)
ОписаниеОшибки = Значение не является значением объектного типа (Конвертация_ПослеЗагрузкиДанных)
ПозицияМодуля = (1)
КодСообщения = 23
Вот код обработчика:
ЗагруженныеОбъектыПереноса = Параметры.ЗагруженныеОбъектыПереноса;
ЗагруженныеОбъектыПереноса.Сортировать("ИмяПКО");
Для Каждого СтрокаТаблицы Из ЗагруженныеОбъектыПереноса Цикл
Если СтрокаТаблицы.Объект.ЭтоНовый() Тогда
Продолжить;
КонецЕсли;
Объект = СтрокаТаблицы.Объект.Ссылка.ПолучитьОбъект();
ПараметрыОбъекта = СтрокаТаблицы.Параметры;
ИмяПКО = СтрокаТаблицы.ИмяПКО;
ОбъектМодифицирован = Истина;
Если Метаданные.Справочники.Содержит(Объект.МетаДанные()) Тогда
Выполнить(Алгоритмы.ОбработкаСправочниковОтложенная);
КонецЕсли;
Если ОбъектМодифицирован Тогда
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Если ИмяПКО = "ФайлыНоменклатуры" Тогда
ПрисоединенныеФайлыСлужебный.ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, Объект.ФайлХранилище.Получить());
КонецЕсли;
(3) на первый вгляд проблем не вижу. попробуйте открыть файл с правилами через любой текстовый редактор и поищите в тексте вот это: Конвертация_ПослеЗагрузкиДанных. В том месте, где это встретится скорее всего и будет проблема. возможно такого алгоритма у вас просто нет, а вызов его где-то присутствует.
(8) Я так понял, что проблема в ПВД Штрихкоды. Там в обработчике ПередОбработкой такой код:
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Штрихкоды.Штрихкод КАК Штрихкод,
| Штрихкоды.ТипШтрихкода КАК ТипШтрихкода,
| Штрихкоды.Владелец КАК Номенклатура,
| Штрихкоды.ЕдиницаИзмерения КАК Упаковка,
| Штрихкоды.ХарактеристикаНоменклатуры КАК Характеристика
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец ССЫЛКА Справочник.Номенклатура
| И ВЫРАЗИТЬ(Штрихкоды.Владелец КАК Справочник.Номенклатура).ВидНоменклатуры.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
|");
ВыборкаДанных = Запрос;
Показать
И видимо он не полный, хотя я искал вызов этого кода в других обработчиках/алгоритмах, но не нашел. Может плохо искал.
Здравствуйте, а какова концепция переноса картинок, если картинки и номенклатура хранятся отдельно друг от друга в источнике (картинка не является реквизитом товара), и у товара много картинок.
Допустим я переношу товары и их картинки в некую пустую базу.
Вот я написал правила для переноса товаров, а в какой момент к этим товарам нужно подгружать картинки ?
На стороне приемника (после загрузки товара ) я уже не могу обратиться к данным источника, чтобы получить запросом список картинок.
Если написать отдельное правило для справочника картинок и выгружать их следом за товарами, то нужно искать что-ли в
приемнике товар-владельца после загрузки каждой картинки ?
Но будет ли у этого товара ссылка на момент поиска, чтобы установить его в качестве владельца этой картинки ?
Сделал через запись товара после загрузки и затем через поиск этого товара после загрузки картинки. Не уверен что правильно, думаю что должен быть более простой способ.
Запросы.ФайлыНоменклатуры.УстановитьПараметр("Номенклатура",Источник);
Выборка = Запросы.Файлыноменклатуры.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеПрисоединенногоФайла = Новый Структура ("Ссылка, Наименование, ВладелецФайла, Расширение, Размер, ПутькФайлу");
ЗаполнитьЗначенияСвойств(ДанныеПрисоединенногоФайла,Выборка);
ДанныеПрисоединенногоФайла.Расширение = РаботаСФайлами.ПолучитьРасширениеФайла(Выборка.ИмяФайла);
ДанныеПрисоединенногоФайла.Размер = 0;
ДанныеПрисоединенногоФайла.ПутьКфайлу="";
ВыгрузитьПоПравилу(ДанныеПрисоединенногоФайла, , , , "НоменклатураПрисоединенныеФайлы");
ДанныеРегистра = Новый Структура ("ДвоичныеДанныеФайла");
ЗаполнитьЗначенияСвойств(ДанныеРегистра,Выборка);
ДанныеРегистра.Вставить("Активность",Истина);
ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла);
ВыгрузитьПоПравилу(ДанныеРегистра,,,,"ДвоичныеДанныеФайлов");
КонецЦикла;
Показать
Подскажите в справочник НоменклатураПрисоединенныеФайлы запись сделал а вот в регистре в ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла); не заполняет Файл пишит неопределено
(16) эту ошибку исправил неправильно указал правило а вот в номенклатуре файлкартинки не заполняется
https://prnt.sc/26n9ivb исправил код вот так вот это правильно?
сейчас заполняет но не уверен что правильно
Запросы.ФайлыНоменклатуры.УстановитьПараметр("Номенклатура",Источник);
Выборка = Запросы.Файлыноменклатуры.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеРегистра = Новый Структура("ДвоичныеДанныеФайла");
ЗаполнитьЗначенияСвойств(ДанныеРегистра,Выборка);
ДанныеРегистра.Вставить("Активность",Истина);
ДанныеПрисоединенногоФайла = Новый Структура ("Ссылка, Наименование, ВладелецФайла, Расширение, Размер, ПутькФайлу");
ЗаполнитьЗначенияСвойств(ДанныеПрисоединенногоФайла,Выборка);
ДанныеПрисоединенногоФайла.Расширение = РаботаСФайлами.ПолучитьРасширениеФайла(Выборка.ИмяФайла);
ДанныеПрисоединенногоФайла.Размер = 0;
ДанныеПрисоединенногоФайла.ПутьКфайлу="";
ВыгрузитьПоПравилу(ДанныеПрисоединенногоФайла, , , , "НоменклатураПрисоединенныеФайлы");
ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла);
ВыгрузитьПоПравилу(ДанныеРегистра, , , , "ДвоичныеДанныеФайлов");
Значение = ДанныеПрисоединенногоФайла.Ссылка; ///добавил вот так иначе не заполнял
КонецЦикла;
(17)Если ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла) - неопределено, то как тогда происходит запись в Справочник.НоменклатураПрисоединенныеФайлы?
(24)извините слепой действительно
немного модернизировал вот так мб что потом перекинуть картинку на том было можно иначе ругался на то что тип не двоичные данные а картинка
Запросы.ФайлыНоменклатуры.УстановитьПараметр("Номенклатура",Источник);
Выборка = Запросы.Файлыноменклатуры.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДХ = Выборка.ДвоичныеДанныеФайла.Получить();
Если ТипЗнч(ДХ) = Тип("Картинка") Тогда
Размер = ДХ.ПолучитьДвоичныеДанные().Размер();
ДвДанные = Новый ХранилищеЗначения(ДХ.ПолучитьДвоичныеДанные(), Новый СжатиеДанных(9));
КонецЕсли;;
ДанныеПрисоединенногоФайла = Новый Структура ("Ссылка, Наименование, ВладелецФайла, Расширение, Размер, ПутькФайлу,файл,ФайлХранилище,ИндексКартинки,Автор,ТипХраненияФайла,СтатусИзвлеченияТекста");
ЗаполнитьЗначенияСвойств(ДанныеПрисоединенногоФайла,Выборка);
ДанныеПрисоединенногоФайла.Расширение = РаботаСФайлами.ПолучитьРасширениеФайла(Выборка.ИмяФайла);
ДанныеПрисоединенногоФайла.ФайлХранилище = ДвДанные;
ДанныеПрисоединенногоФайла.ИндексКартинки ="42";
ДанныеПрисоединенногоФайла.Автор = "";
ДанныеПрисоединенногоФайла.Размер = Размер;
ДанныеПрисоединенногоФайла.ТипХраненияФайла ="ВИнформационнойБазе";
ДанныеПрисоединенногоФайла.ПутьКфайлу="";
ДанныеПрисоединенногоФайла.СтатусИзвлеченияТекста = "НеИзвлечен";
ВыгрузитьПоПравилу(ДанныеПрисоединенногоФайла, , , , "НоменклатураПрисоединенныеФайлы");
///++++Регистр присоединенныеФайлы
ДанныеРегистра = Новый Структура("ДвоичныеДанныеФайла,Активность,Файл");
ДанныеРегистра.Вставить("ДвоичныеДанныеФайла", ДвДанные);//Выборка.ДвоичныеДанныеФайла);
ДанныеРегистра.Вставить("Активность", Истина);
ДанныеРегистра.Вставить("Файл",ДанныеПрисоединенногоФайла);
ВыгрузитьПоПравилу(ДанныеРегистра, , , , "ДвоичныеДанныеФайлов");
///----Регистр присоединенныеФайлы
//ЗаполнитьЗначенияСвойств(ДанныеРегистра,Выборка);
Значение = ДанныеПрисоединенногоФайла;
КонецЦикла;
Пытаюсь из УТ11.1 -> УТ11.4 сделать. Не выгружает картинку.
Справочники: Номенклатура, НоменклатураПрисоединенныеФайлы заполнил. РС ДвоичныеДанныеФайлов тоже.
В карточке товара написано, что файл есть, если зайти в файл - там тоже файл есть, но открыть картинку его не получается, ошибка. Уже голову сломал.
Не поделитесь опытом ?