Конвертация данных, выгрузка картинки в формате ХранилищеЗначения

1. bezplana 19.12.13 11:46 Сейчас в теме
Добрый день, есть две конфигурации: CRM 2.0 и Управление Торговлей 11.
В данный момент настроена выгрузка позиций номенклатуры из CRM В УТ через универсальный обмен XML. Теперь нужно сделать так, чтобы также выгружалось изображение номенклатуры. В правила добавил ПКО и правило выгрузки для справочника типа "НоменклатураПрисоединенныеФайлы". Как сделать так, чтобы выгружалось изображение ? В данный момент, в xml-файле, который формирует обработка универсального обмена, поле
<Свойство Имя="ФайлХранилище" Тип="ХранилищеЗначения">
<Пусто/>
</Свойство> пустое. В типовых конфигурациях, к сожалению, не нашел место, где это делается.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. asved.ru 36 19.12.13 11:50 Сейчас в теме
Есть еще справочник ВерсииФайлов или как-то так. Данные хранятся там.
3. bezplana 19.12.13 12:01 Сейчас в теме
(2) asved.ru, Файлы изображений хранятся в на диске. Соответственно, я пытаюсь получить их так:


			Если ТекущееПВД.ИмяОбъектаДляЗапроса <> Неопределено Тогда
						
						Построитель.Текст =
						"ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _
						|
						|
						|{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
						
					КонецЕсли;
					Отбор = Построитель.Отбор;
					Если Отбор.Найти("Справочник_НоменклатураПрисоединенныеФайлы") = Неопределено Тогда
						Отбор.Добавить("Справочник_НоменклатураПрисоединенныеФайлы");
					КонецЕсли;
					Запрос = Новый Запрос;
					Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
					|	НоменклатураПрисоединенныеФайлы.Ссылка КАК ФайлКартинки,
					|	НоменклатураПрисоединенныеФайлы.ДатаСоздания КАК ДатаСоздания
					|ИЗ
					|	Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
					|ГДЕ
					|	НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
					|
					|УПОРЯДОЧИТЬ ПО
					|	ДатаСоздания УБЫВ";
					
					Запрос.УстановитьПараметр("ВладелецФайла",Источник.Ссылка);
					Результат = Запрос.Выполнить().Выгрузить();
					Темп = Результат[0].ФайлКартинки.ПолучитьОбъект();
					Файл = Новый Картинка(Темп.Том.ПолныйПутьWindows+Темп.ПутьКФайлу);
					В = Новый ХранилищеЗначения(Файл,Новый  СжатиеДанных(9));
					Темп.ФайлХранилище = В;
					Отбор["Справочник_НоменклатураПрисоединенныеФайлы"].Использование = Истина;
					Отбор["Справочник_НоменклатураПрисоединенныеФайлы"].Значение = Темп.Ссылка;
					Отбор["Справочник_НоменклатураПрисоединенныеФайлы"].ВидСравнения = ВидСравнения.Равно;
					ДоступностьПостроителя = Истина;

Показать
4. MaCCapAkIII 04.03.19 04:28 Сейчас в теме
Присоединяюсь к вопросу. Есть две идентичные конфигурации УТ 11, выгружаю из одной в другую документы Поступление, вместо с товарами соответственно. Картинки не выгружаются, при попытке зайти в товар в базе приемнике - ошибка, что "присоединен файл", но в хранилище не найден. Использую Конвертацию 2.1. Какие ПВД надо создать кроме Поступления, чтобы грамотно выгрузить присоединенные файлы?
5. melenaspb 208 04.03.19 12:44 Сейчас в теме
Я переносила данные из 1С-Документооборота в другой Документооборот. Нужно было переносить еще и файлы. Файлы в ДО хранились в томах на диске, и сначала я хотела просто передавать ссылку на файл на диске, после загрузки в новой базе проверять есть ли такой файл и если нет, то загружать по ссылке. Но база приемник была в другом домене и из-за прав получить файл не получалось.
Тогда я решила переводить файлы в двоичные данные и записывать их в файл обмена, с картинками думаю можно также поступить.
Минус тут - сильно растет размер файла обмена.
Пример для Документооборта, но принцип думаю понятен.
Я в ПКО для СправочникСсылка.ВнутренниеДокументы создала параметр "ФайлыКПереносу", поставила флаг "Передавать данные в параметр"
В обработчике "Перед выгрузкой" для параметра "ФайлыКПереносу" написала
ПодчиненныеФайлы = РаботаСФайламиВызовСервера.ПолучитьВсеПодчиненныеФайлы(Источник, ЛОЖЬ,Истина);
ФайлыКПереносу = Новый ТаблицаЗначений;
ФайлыКПереносу.Колонки.Добавить("ИмяФайла");
ФайлыКПереносу.Колонки.Добавить("ДвоичныеДанные");

Если ПодчиненныеФайлы.Количество() > 0 тогда
	Для каждого Файл из  ПодчиненныеФайлы цикл
		НоваяСтрока = ФайлыКПереносу.Добавить();
	
		НоваяСтрока.ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(  Файл.ПолноеНаименование, Файл.ТекущаяВерсияРасширение);

		ДвоичныеДанные = Новый ДвоичныеДанные(НоваяСтрока.ПутьКФайлу);
		НоваяСтрока.ДвоичныеДанные =  ДвоичныеДанные;

	КонецЦикла;	
	
КонецЕсли;

Значение = ЗначениеВСтрокуВнутр(ФайлыКПереносу);
Показать


И в обработчике "После загрузки" в ПКО самого справочника получала файлы :
Если ПараметрыОбъекта <> Неопределено  тогда
	
	Если  ЗначениеЗаполнено(ПараметрыОбъекта["ФайлыКПереносу"]) тогда
		
		ФайлыКПереносу = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["ФайлыКПереносу"]);
	
		Если ФайлыКПереносу.Количество() > 0 Тогда
			
			Для каждого строкаФайл из ФайлыКПереносу Цикл
				
				ИмяФайлаИнфо = РаботаСоСтроками.РазложитьИмяФайла(строкаФайл.ИмяФайла);
				Если НЕ РаботаСФайламиВызовСервера.ЕстьФайлСТакимИменем(ИмяФайлаИнфо.Имя, Ссылка)  тогда
					
					ВремяИзмененияУниверсальное = РаботаСФайламиКлиентСервер.ПолучитьУниверсальноеВремя(ТекущаяДата());
					АдресВременногоХранилища = ПоместитьВоВременноеХранилище(строкаФайл.ДвоичныеДанные);//ПоместитьВоВременноеХранилище( Новый ХранилищеЗначения(строкаФайл.ДвоичныеДанные));
					// Создадим карточку Файла в БД
					СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией");
					СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилища;
					//СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилища;
					СведенияОФайле.ИмяБезРасширения = ИмяФайлаИнфо.Имя;
					СведенияОФайле.РасширениеБезТочки = ИмяФайлаИнфо.Расширение;
					//СведенияОФайле.Размер = Размер;
					СведенияОФайле.ВремяИзменения = ВремяИзмененияУниверсальное;
					СведенияОФайле.ВремяИзмененияУниверсальное = ВремяИзмененияУниверсальное;
					СведенияОФайле.ХранитьВерсии = ИСТИНА;
					СведенияОФайле.Автор = ?(Объект.Ответственный <> Справочники.Пользователи.ПустаяСсылка(), Объект.Ответственный,Пользователи.ТекущийПользователь());
					СсылкаНаФайл = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(Ссылка, СведенияОФайле);
				КонецЕсли;

				КонецЦикла;
			КонецЕсли;
			
	КонецЕсли;
КонецЕсли;

Показать
avbolshakov; ivanleb; user756416; user742886; schweigen; +5 Ответить
6. schweigen 19.10.21 09:34 Сейчас в теме
(5) и никто даже плюс не поставил, шо за люди
7. NightBreez 58 09.12.21 15:05 Сейчас в теме
(5) Воспользовавшись наработками, адаптировал для переноса из 1С:Документооборота в 1С:Управление холдингом

В обработчике "Перед выгрузкой" для параметра "ФайлыКПереносу":

ПодчиненныеФайлы = РаботаСФайламиВызовСервера.ПолучитьВсеПодчиненныеФайлы(Источник.Ссылка, Ложь, Истина);

ФайлыКПереносу = Новый ТаблицаЗначений;
ФайлыКПереносу.Колонки.Добавить("ИмяФайла");
ФайлыКПереносу.Колонки.Добавить("ДвоичныеДанные");

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

Значение = ЗначениеВСтрокуВнутр(ФайлыКПереносу);

Показать


И в обработчике "После загрузки" в ПКО самого справочника:


Если ЗначениеЗаполнено(ПараметрыОбъекта["ФайлыКПереносу"]) тогда
        
    ФайлыКПереносу = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["ФайлыКПереносу"]);
    
    Если ФайлыКПереносу.Количество() > 0 Тогда
            
         Для каждого СтрокаФайл из ФайлыКПереносу Цикл
                
            ИмяФайлаИнфо = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(СтрокаФайл.ИмяФайла);
			ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса());
			
			АдресВременногоХранилища = ПоместитьВоВременноеХранилище(СтрокаФайл.ДвоичныеДанные);
			СвязанныеФайлыВызовСервера.ДобавитьФайлИзВременногоХранилища(СсылкаДокумента, АдресВременногоХранилища, ИмяФайлаИнфо.Имя,
				ИмяФайлаИнфо.Расширение, 0, ТекущаяДатаСеанса(), ВремяИзмененияУниверсальное);   
			УдалитьИзВременногоХранилища(АдресВременногоХранилища);

		КонецЦикла;  
			          
	КонецЕсли;
	
КонецЕсли;

Показать
Оставьте свое сообщение

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