Конвертация данных, выгрузка картинки в формате ХранилищеЗначения
Добрый день, есть две конфигурации: CRM 2.0 и Управление Торговлей 11.
В данный момент настроена выгрузка позиций номенклатуры из CRM В УТ через универсальный обмен XML. Теперь нужно сделать так, чтобы также выгружалось изображение номенклатуры. В правила добавил ПКО и правило выгрузки для справочника типа "НоменклатураПрисоединенныеФайлы". Как сделать так, чтобы выгружалось изображение ? В данный момент, в xml-файле, который формирует обработка универсального обмена, поле
<Свойство Имя="ФайлХранилище" Тип="ХранилищеЗначения">
<Пусто/>
</Свойство> пустое. В типовых конфигурациях, к сожалению, не нашел место, где это делается.
В данный момент настроена выгрузка позиций номенклатуры из CRM В УТ через универсальный обмен XML. Теперь нужно сделать так, чтобы также выгружалось изображение номенклатуры. В правила добавил ПКО и правило выгрузки для справочника типа "НоменклатураПрисоединенныеФайлы". Как сделать так, чтобы выгружалось изображение ? В данный момент, в xml-файле, который формирует обработка универсального обмена, поле
<Свойство Имя="ФайлХранилище" Тип="ХранилищеЗначения">
<Пусто/>
</Свойство> пустое. В типовых конфигурациях, к сожалению, не нашел место, где это делается.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) asved.ru, Файлы изображений хранятся в на диске. Соответственно, я пытаюсь получить их так:
Если ТекущееПВД.ИмяОбъектаДляЗапроса <> Неопределено Тогда
Построитель.Текст =
"ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _
|
|
|{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
КонецЕсли;
Отбор = Построитель.Отбор;
Если Отбор.Найти("Справочник_НоменклатураПрисоединенныеФайлы") = Неопределено Тогда
Отбор.Добавить("Справочник_НоменклатураПрисоединенныеФайлы");
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| НоменклатураПрисоединенныеФайлы.Ссылка КАК ФайлКартинки,
| НоменклатураПрисоединенныеФайлы.ДатаСоздания КАК ДатаСоздания
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
|ГДЕ
| НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
|
|УПОРЯДОЧИТЬ ПО
| ДатаСоздания УБЫВ";
Запрос.УстановитьПараметр("ВладелецФайла",Источник.Ссылка);
Результат = Запрос.Выполнить().Выгрузить();
Темп = Результат[0].ФайлКартинки.ПолучитьОбъект();
Файл = Новый Картинка(Темп.Том.ПолныйПутьWindows+Темп.ПутьКФайлу);
В = Новый ХранилищеЗначения(Файл,Новый СжатиеДанных(9));
Темп.ФайлХранилище = В;
Отбор["Справочник_НоменклатураПрисоединенныеФайлы"].Использование = Истина;
Отбор["Справочник_НоменклатураПрисоединенныеФайлы"].Значение = Темп.Ссылка;
Отбор["Справочник_НоменклатураПрисоединенныеФайлы"].ВидСравнения = ВидСравнения.Равно;
ДоступностьПостроителя = Истина;
Показать
Присоединяюсь к вопросу. Есть две идентичные конфигурации УТ 11, выгружаю из одной в другую документы Поступление, вместо с товарами соответственно. Картинки не выгружаются, при попытке зайти в товар в базе приемнике - ошибка, что "присоединен файл", но в хранилище не найден. Использую Конвертацию 2.1. Какие ПВД надо создать кроме Поступления, чтобы грамотно выгрузить присоединенные файлы?
Я переносила данные из 1С-Документооборота в другой Документооборот. Нужно было переносить еще и файлы. Файлы в ДО хранились в томах на диске, и сначала я хотела просто передавать ссылку на файл на диске, после загрузки в новой базе проверять есть ли такой файл и если нет, то загружать по ссылке. Но база приемник была в другом домене и из-за прав получить файл не получалось.
Тогда я решила переводить файлы в двоичные данные и записывать их в файл обмена, с картинками думаю можно также поступить.
Минус тут - сильно растет размер файла обмена.
Пример для Документооборта, но принцип думаю понятен.
Я в ПКО для СправочникСсылка.ВнутренниеДокументы создала параметр "ФайлыКПереносу", поставила флаг "Передавать данные в параметр"
В обработчике "Перед выгрузкой" для параметра "ФайлыКПереносу" написала
И в обработчике "После загрузки" в ПКО самого справочника получала файлы :
Тогда я решила переводить файлы в двоичные данные и записывать их в файл обмена, с картинками думаю можно также поступить.
Минус тут - сильно растет размер файла обмена.
Пример для Документооборта, но принцип думаю понятен.
Я в ПКО для СправочникСсылка.ВнутренниеДокументы создала параметр "ФайлыКПереносу", поставила флаг "Передавать данные в параметр"
В обработчике "Перед выгрузкой" для параметра "ФайлыКПереносу" написала
ПодчиненныеФайлы = РаботаСФайламиВызовСервера.ПолучитьВсеПодчиненныеФайлы(Источник, ЛОЖЬ,Истина);
ФайлыКПереносу = Новый ТаблицаЗначений;
ФайлыКПереносу.Колонки.Добавить("ИмяФайла");
ФайлыКПереносу.Колонки.Добавить("ДвоичныеДанные");
Если ПодчиненныеФайлы.Количество() > 0 тогда
Для каждого Файл из ПодчиненныеФайлы цикл
НоваяСтрока = ФайлыКПереносу.Добавить();
НоваяСтрока.ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( Файл.ПолноеНаименование, Файл.ТекущаяВерсияРасширение);
ДвоичныеДанные = Новый ДвоичныеДанные(НоваяСтрока.ПутьКФайлу);
НоваяСтрока.ДвоичныеДанные = ДвоичныеДанные;
КонецЦикла;
КонецЕсли;
Значение = ЗначениеВСтрокуВнутр(ФайлыКПереносу);
ПоказатьИ в обработчике "После загрузки" в ПКО самого справочника получала файлы :
Если ПараметрыОбъекта <> Неопределено тогда
Если ЗначениеЗаполнено(ПараметрыОбъекта["ФайлыКПереносу"]) тогда
ФайлыКПереносу = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["ФайлыКПереносу"]);
Если ФайлыКПереносу.Количество() > 0 Тогда
Для каждого строкаФайл из ФайлыКПереносу Цикл
ИмяФайлаИнфо = РаботаСоСтроками.РазложитьИмяФайла(строкаФайл.ИмяФайла);
Если НЕ РаботаСФайламиВызовСервера.ЕстьФайлСТакимИменем(ИмяФайлаИнфо.Имя, Ссылка) тогда
ВремяИзмененияУниверсальное = РаботаСФайламиКлиентСервер.ПолучитьУниверсальноеВремя(ТекущаяДата());
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(строкаФайл.ДвоичныеДанные);//ПоместитьВоВременноеХранилище( Новый ХранилищеЗначения(строкаФайл.ДвоичныеДанные));
// Создадим карточку Файла в БД
СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией");
СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилища;
//СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилища;
СведенияОФайле.ИмяБезРасширения = ИмяФайлаИнфо.Имя;
СведенияОФайле.РасширениеБезТочки = ИмяФайлаИнфо.Расширение;
//СведенияОФайле.Размер = Размер;
СведенияОФайле.ВремяИзменения = ВремяИзмененияУниверсальное;
СведенияОФайле.ВремяИзмененияУниверсальное = ВремяИзмененияУниверсальное;
СведенияОФайле.ХранитьВерсии = ИСТИНА;
СведенияОФайле.Автор = ?(Объект.Ответственный <> Справочники.Пользователи.ПустаяСсылка(), Объект.Ответственный,Пользователи.ТекущийПользователь());
СсылкаНаФайл = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(Ссылка, СведенияОФайле);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Показать
(5) Воспользовавшись наработками, адаптировал для переноса из 1С:Документооборота в 1С:Управление холдингом
В обработчике "Перед выгрузкой" для параметра "ФайлыКПереносу":
И в обработчике "После загрузки" в ПКО самого справочника:
В обработчике "Перед выгрузкой" для параметра "ФайлыКПереносу":
ПодчиненныеФайлы = РаботаСФайламиВызовСервера.ПолучитьВсеПодчиненныеФайлы(Источник.Ссылка, Ложь, Истина);
ФайлыКПереносу = Новый ТаблицаЗначений;
ФайлыКПереносу.Колонки.Добавить("ИмяФайла");
ФайлыКПереносу.Колонки.Добавить("ДвоичныеДанные");
Если ПодчиненныеФайлы.Количество() > 0 тогда
Для Каждого Файл Из ПодчиненныеФайлы Цикл
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайла(Файл);
Если Не ДанныеФайла = Неопределено Тогда
ДвоичныеДанные = РаботаСФайламиВызовСервера.ПолучитьДвоичныеДанныеФайла(Файл);
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
НоваяСтрока = ФайлыКПереносу.Добавить();
НоваяСтрока.ИмяФайла = ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение;
НоваяСтрока.ДвоичныеДанные = ДвоичныеДанные;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Значение = ЗначениеВСтрокуВнутр(ФайлыКПереносу);
ПоказатьИ в обработчике "После загрузки" в ПКО самого справочника:
Если ЗначениеЗаполнено(ПараметрыОбъекта["ФайлыКПереносу"]) тогда
ФайлыКПереносу = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["ФайлыКПереносу"]);
Если ФайлыКПереносу.Количество() > 0 Тогда
Для каждого СтрокаФайл из ФайлыКПереносу Цикл
ИмяФайлаИнфо = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(СтрокаФайл.ИмяФайла);
ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса());
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(СтрокаФайл.ДвоичныеДанные);
СвязанныеФайлыВызовСервера.ДобавитьФайлИзВременногоХранилища(СсылкаДокумента, АдресВременногоХранилища, ИмяФайлаИнфо.Имя,
ИмяФайлаИнфо.Расширение, 0, ТекущаяДатаСеанса(), ВремяИзмененияУниверсальное);
УдалитьИзВременногоХранилища(АдресВременногоХранилища);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот