ПривестиКонтактнуюИнформациюXML (БСП)

Автор: 1С
ОбщийМодуль.УправлениеКонтактнойИнформациейСлужебный
БСП

Привести контактную информацию xml. Преобразует контактную информацию в вид XML.

// Преобразует контактную информацию в вид XML.
//
// Параметры:
//    Данные - Строка     - описание контактной информации XML или JSON.
//           - ОбъектXTDO - описание контактной информации.
//           - Структура  - описание контактной информации. Ожидаются поля:
//                 * ЗначенияПолей - Строка, Структура, СписокЗначений, Соответствие - поля контактной информации.
//                 * Представление - Строка - Представление. Используется в случае, если не удалось вычислить 
//                                            представление из ЗначенияПолей (отсутствие в них поля Представление).
//                 * Комментарий - Строка - комментарий. Используется в случае, если не удалось вычислить комментарий
//                                          из ЗначенияПолей.
//                 * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации,
//                                             ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура
//                                             Используется в случае, если не удалось вычислить тип из ЗначенияПолей.
//
// Возвращаемое значение:
//     Структура - содержит поля:
//        * ТипКонтактнойИнформации - Перечисление.ТипыКонтактнойИнформации
//        * ДанныеXML               - Строка - текст XML.
//
Функция ПривестиКонтактнуюИнформациюXML(Знач Данные) Экспорт
	
	XMLСтрока               = "";
	ЗначенияПолей           = "";
	Комментарий             = Неопределено;
	ТипКонтактнойИнформации = Неопределено;
	
	Если ТипЗнч(Данные) = Тип("ОбъектXDTO") Тогда
		XMLСтрока = КонтактнаяИнформацияXDTOВXML(Данные);
		ТипКонтактнойИнформации = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока));
	Иначе
		
		Если ТипЗнч(Данные) = Тип("Структура") Тогда
			ЗначенияПолей = ?(Данные.Свойство("ЗначенияПолей"), Данные.ЗначенияПолей, "");;
			Комментарий = ?(Данные.Свойство("Комментарий"), Данные.Комментарий, "");
			
			Если Данные.Свойство("ВидКонтактнойИнформации") И Данные.ВидКонтактнойИнформации <> Неопределено Тогда
				ТипКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(Данные.ВидКонтактнойИнформации);
			КонецЕсли;
			
		ИначеЕсли ТипЗнч(Данные) = Тип("Строка") Тогда
			ЗначенияПолей = Данные;
		КонецЕсли;
		
		Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда
			XMLСтрока = КонтактнаяИнформацияИзJSONВXML(ЗначенияПолей, ТипКонтактнойИнформации);
			ТипКонтактнойИнформации = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока));
		ИначеЕсли ЭтоСтрокаXML(ЗначенияПолей) Тогда
			XMLСтрока = ЗначенияПолей;
			ТипКонтактнойИнформации = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока));
		ИначеЕсли ТипЗнч(ЗначенияПолей) = Тип("Строка") И ТипКонтактнойИнформации = Неопределено Тогда
			
			// старый формат ключ-значение
			Если СтрНайти(ВРег(ЗначенияПолей), "РЕГИОН=") > 0 Тогда
				ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес;
			ИначеЕсли СтрНайти(ВРег(ЗначенияПолей), "НОМЕРТЕЛЕФОНА=") > 0 Тогда
				ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон;
			ИначеЕсли СтрНайти(ВРег(ЗначенияПолей), "НОМЕРФАКСА=") > 0 Тогда
				ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс;
			Иначе
				ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Другое;
			КонецЕсли;
			
		КонецЕсли;
	
	КонецЕсли;
	
	Если ЗначениеЗаполнено(XMLСтрока) Тогда
		
		Если Не ПустаяСтрока(Комментарий) Тогда
			УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(ЗначенияПолей, Комментарий);
		КонецЕсли;

		Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", XMLСтрока, ТипКонтактнойИнформации);
	КонецЕсли;
	
	// Разбираем по ЗначенияПолей, ВидКонтактнойИнформации, Представление.
	ТипЗначенийПолей = ТипЗнч(ЗначенияПолей);
	Если ТипЗначенийПолей = Тип("Строка") Тогда
		// Текст из пар ключ-значение
		СтрокаXMLСтруктуры = XSLT_СтрокаКлючЗначениеВСтруктуру(ЗначенияПолей)
		
	ИначеЕсли ТипЗначенийПолей = Тип("СписокЗначений") Тогда
		// Список значений
		СтрокаXMLСтруктуры = XSLT_СписокЗначенийВСтруктуру( ЗначениеВСтрокуXML(ЗначенияПолей) );
		
	ИначеЕсли ТипЗначенийПолей = Тип("Соответствие") Тогда
		// Соответствие
		СтрокаXMLСтруктуры = XSLT_СоответствиеВСтруктуру( ЗначениеВСтрокуXML(ЗначенияПолей) );
		
	ИначеЕсли ТипЗначенийПолей = Тип("ОбъектXDTO") Тогда
		// Ожидаем структуру
		Если ЗначенияПолей.Состав.Страна = Неопределено Тогда
			ЗначенияПолей.Состав.Страна = "";
		КонецЕсли;
		Если ЗначенияПолей.Состав.Состав = Неопределено Тогда
			ЗначенияПолей.Состав.Состав = "";
		КонецЕсли;
		
		СтрокаXMLСтруктуры = ЗначениеВСтрокуXML(ЗначенияПолей);
	Иначе
		// Ожидаем структуру
		СтрокаXMLСтруктуры = ЗначениеВСтрокуXML(ЗначенияПолей);
		
	КонецЕсли;
	
	Результат = Новый Структура("ТипКонтактнойИнформации, ДанныеXML", ТипКонтактнойИнформации);
	
	ВсеТипы = Перечисления.ТипыКонтактнойИнформации;
	Если ТипКонтактнойИнформации = ВсеТипы.Адрес Тогда
		Результат.ДанныеXML = XSLT_СтруктураВАдрес(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.АдресЭлектроннойПочты Тогда
		Результат.ДанныеXML = XSLT_СтруктураВАдресЭлектроннойПочты(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.ВебСтраница Тогда
		Результат.ДанныеXML = XSLT_СтруктураВВебСтраницу(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Телефон Тогда
		Результат.ДанныеXML = XSLT_СтруктураВТелефон(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Факс Тогда
		Результат.ДанныеXML = XSLT_СтруктураВФакс(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Другое Тогда
		Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Skype Тогда
		Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
		
	Иначе
		ВызватьИсключение НСтр("ru = 'Ошибка параметров преобразования, не определен тип контактной информации'");
		
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

КонтактнаяИнформацияИзJSONВXML (БСП)

УстановитьКонтактнуюИнформациюОбъекта (БСП)

JSONВКонтактнуюИнформациюПоПолям (БСП)

НоваяКонтактнаяИнформация (БСП)

КонтактнаяИнформацияВXML (БСП)

ТипКонтактнойИнформации (БСП)

КомментарийКонтактнойИнформации (БСП)

РазличияКонтактнойИнформации (БСП)

1С Менеджер конфигураций