Привести контактную информацию 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 (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)