Введение
Всем привет! Данный материал посвящен описанию базовых возможностей работы с контактной информацией в конфигурациях, содержащих "Библиотеку стандартных подсистем" (БСП). Данная статья будет полезна для разработчиков, программистов и всех тех, кто решился не придумывать свои "разработки - велосипеды" для работы с контактной информацией, а взять уже готовое. Статья призвана экономить ваше время и повысить эффективность разработки.
Итак, перехожу к разделу получения контактной информации объектов с помощью БСП:
Получение контактной информации объектов
Чтобы получить полную контактную информацию контрагента, организации, партнера можно воспользоваться функцией:
КонтактнаяИнформацияОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации = Неопределено, Дата = Неопределено, ТолькоПредставление = Истина) Экспорт
Пример использования:
&НаСервере
Процедура ПолучитьНаСервере(ВыбСсылка)
// Возвращаем таблицу значений (параметр ложь) с полной контактной информации объекта (контрагент, организация...)
КонтИнформация = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ВыбСсылка,"",ТекущаяДата(),Ложь);
КонецПроцедуры
В данном примере, получаем полную контактную информацию на текущую дату. При установленном параметре ложь, будет возвращаться ТаблицаЗначений со всей контактной информацией.
В следующем примере вернем фактический адрес контрагента строкой:
&НаСервере
Процедура ПолучитьНаСервере(ВыбСсылка)
// Возвращаем строку (параметр истина) с фактическим адресом объекта (контрагент, организация...)
КонтИнформация = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ВыбСсылка,Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента,ТекущаяДата(),Истина);
КонецПроцедуры
Так же существует схожая функция, производящая получение контактной информации для нескольких ссылок или объектов одновременно:
Функция КонтактнаяИнформацияОбъектов(СсылкиИлиОбъекты, Знач ТипыКонтактнойИнформации = Неопределено, Знач ВидыКонтактнойИнформации = Неопределено, Дата = Неопределено) Экспорт
В данной функции ТипыКонтактнойИнформации и ВидыКонтактнойИнформации - массивы, содержащие необходимые типы и виды контактной информации. Функция возвращает таблицу значений по "фильтру" входящих параметров.
Пример использования такой:
&НаСервере
Процедура ПолучитьНаСервере()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Справочники.Контрагенты.НайтиПоРеквизиту("ИНН","0461111101"));
МассивСсылок.Добавить(Справочники.Контрагенты.НайтиПоРеквизиту("ИНН","0012123456"));
МассивВидов = Новый Массив;
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
МассивТипов = Новый Массив;
МассивТипов.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес);
КонтИнформация = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(МассивСсылок,МассивТипов,МассивВидов,ТекущаяДата());
КонецПроцедуры
Вышеперечисленные функции можно использовать в связке с "индивидуальными" функциями конфигураций по получению информации об организации и контрагентах. Частично об "индивидуальных" функциях я изложил материал вот здесь.
Теперь, давайте посмотрим немного глубже в результаты вышеуказанных функций. Строка возвращаемой таблицы значений выглядит вот так:
Рис.1. Строка таблицы значений контактной информации.
Обратим внимание на колонку Значение - это строка в формате json, выглядит она вот так:
Рис.2. Формат json в колонке Значение.
Сейчас, я хочу преобразовать эту json-строку в структуру для дальнейшего использования. Сделаю это стандартными методами БСП, воспользуюсь функцией:
Функция СтрокуJSONВСтруктуру(Значение) Экспорт
Доработанный код будет выглядеть вот так:
&НаСервере
Процедура ПолучитьНаСервере()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Справочники.Контрагенты.НайтиПоРеквизиту("ИНН","0461111101"));
МассивСсылок.Добавить(Справочники.Контрагенты.НайтиПоРеквизиту("ИНН","0012123456"));
МассивВидов = Новый Массив;
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
МассивТипов = Новый Массив;
МассивТипов.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес);
КонтИнформация = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(МассивСсылок,МассивТипов,МассивВидов,ТекущаяДата());
//Передаем строку json
ААА = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(КонтИнформация[0].Значение);
КонецПроцедуры
Переменная ААА - содержит структуру по входящей строке json. Выглядит это вот так:
Рис.3. Преобразованная json в структуру.
Здесь, я ничего не придумываю, использую только типовые функции и процедуры БСП и получаю требуемую контактную информацию "по полям" в удобном виде.
Пожалуй, с базовыми вариантами получения контактной информации мы разобрались - можем смело применять. Теперь, перейдем к разделу преобразование контактной информации объектов в разные форматы.
Преобразование контактной информации объектов
В данном разделе рассмотрим несколько полезных функций, позволяющих стандартно конвертировать контактную информацию в разные форматы - xml, json.
Сначала рассмотрим функцию, которая позволяет получить контактную информацию в формате xml
Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт
В качестве входящего параметра ЗначенияПолей, я обычно передаю структуру по заполненным ключам. Представление я не заполняю, а в качестве ожидаемого вида - перечисление с типом контактной информации.
Рассмотрим пример работы с данной функцией, предварительно доработав предыдущий пример:
&НаСервере
Процедура ПолучитьНаСервере()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Справочники.Контрагенты.НайтиПоРеквизиту("ИНН","0461111101"));
МассивСсылок.Добавить(Справочники.Контрагенты.НайтиПоРеквизиту("ИНН","0012123456"));
МассивВидов = Новый Массив;
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
МассивТипов = Новый Массив;
МассивТипов.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес);
КонтИнформация = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(МассивСсылок,МассивТипов,МассивВидов,ТекущаяДата());
АдресСтруктура = Новый Структура;
АдресСтруктура.Вставить("Представление", КонтИнформация[0].Представление);
АдресСтруктура.Вставить("Город", "Москва");
АдресСтруктура.Вставить("Улица", "Арбатская пл");
//119019, Москва г, Москва, Арбатская пл, дом № 1, корпус 2
ККК = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(АдресСтруктура,КонтИнформация[0].Представление, Перечисления.ТипыКонтактнойИнформации.Адрес);
КонецПроцедуры
В качестве результата в переменную ККК возвращается XML-структура, согласно схемы пакетов КонтактнаяИнформация или Адрес.
Рис.4. Преобразованная структура в XML-строку.
Еще один пример с телефоном:
&НаСервере
Процедура ПолучитьНаСервере()
ТелефонСтруктура = Новый Структура;
ТелефонСтруктура.Вставить("Представление", "+7 (123) 456-78-90");
ТелефонСтруктура.Вставить("Комментарий", "тестовый номер");
ТелефонСтруктура.Вставить("КодСтраны", "7");
ТелефонСтруктура.Вставить("КодГорода", "123");
ТелефонСтруктура.Вставить("НомерТелефона", "456-78-90");
ТелефонXML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ТелефонСтруктура,"", Перечисления.ТипыКонтактнойИнформации.Телефон);
КонецПроцедуры
В переменную ТелефонXML возвращается XML строка вот такого содержания:
Рис.5. XML-строка с типом "Номер телефона".
Преобразование структуры "телефона" идет по такой типовой схеме:
Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки("
|<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""
| xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
| xmlns:tns=""http://v8.1c.ru/8.1/data/core""
| xmlns=""http://www.v8.1c.ru/ssl/contactinfo""
|>
|<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/>
| <xsl:template match=""/"">
|
| <xsl:element name=""КонтактнаяИнформация"">
|
| <xsl:attribute name=""Представление"">
| <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/>
| </xsl:attribute>
| <xsl:element name=""Комментарий"">
| <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/>
| </xsl:element>
| <xsl:element name=""Состав"">
| <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute>
|
| <xsl:attribute name=""КодСтраны"">
| <xsl:value-of select=""tns:Structure/tns:Property[@name='КодСтраны']/tns:Value/text()""/>
| </xsl:attribute>
| <xsl:attribute name=""КодГорода"">
| <xsl:value-of select=""tns:Structure/tns:Property[@name='КодГорода']/tns:Value/text()""/>
| </xsl:attribute>
| <xsl:attribute name=""Номер"">
| <xsl:value-of select=""tns:Structure/tns:Property[@name='НомерТелефона']/tns:Value/text()""/>
| </xsl:attribute>
| <xsl:attribute name=""Добавочный"">
| <xsl:value-of select=""tns:Structure/tns:Property[@name='Добавочный']/tns:Value/text()""/>
| </xsl:attribute>
|
| </xsl:element>
| </xsl:element>
|
| </xsl:template>
|</xsl:stylesheet>
|");
Теперь, преобразуем полученную строку XML в строку JSON, доработаем код процедуры:
&НаСервере
Процедура ПолучитьНаСервере()
ТелефонСтруктура = Новый Структура;
ТелефонСтруктура.Вставить("Представление", "+7 (123) 456-78-90");
ТелефонСтруктура.Вставить("Комментарий", "тестовый номер");
ТелефонСтруктура.Вставить("КодСтраны", "7");
ТелефонСтруктура.Вставить("КодГорода", "123");
ТелефонСтруктура.Вставить("НомерТелефона", "456-78-90");
ТелефонXML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ТелефонСтруктура,"", Перечисления.ТипыКонтактнойИнформации.Телефон);
ТелефонJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ТелефонXML);
КонецПроцедуры
Полученный ТелефонJSON такой:
Рис.6. JSON-строка с типом "Номер телефона".
Его так же можно преобразовать в структуру с помощью вышеуказанной функции
Функция СтрокуJSONВСтруктуру(Значение) Экспорт
Так, базовые вещи с преобразованием контактной информации я описал. Теперь, переходим к разделу записи контактной информации объектов.
Запись контактной информации объектов
В данном разделе я рассмотрю базовую процедуру добавления контактной информации по ссылке
Процедура ДобавитьКонтактнуюИнформацию(СсылкаИлиОбъект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата = Неопределено, Замещать = Истина) Экспорт
Доработаем наш пример:
&НаСервере
Процедура ПолучитьНаСервере(ВыбСсылка)
ТелефонСтруктура = Новый Структура;
ТелефонСтруктура.Вставить("Представление", "+7 (123) 456-78-95");
ТелефонСтруктура.Вставить("Комментарий", "тестовый номер 2");
ТелефонСтруктура.Вставить("КодСтраны", "7");
ТелефонСтруктура.Вставить("КодГорода", "123");
ТелефонСтруктура.Вставить("НомерТелефона", "456-78-95");
ТелефонXML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ТелефонСтруктура,"", Перечисления.ТипыКонтактнойИнформации.Телефон);
ТелефонJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ТелефонXML);
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(ВыбСсылка, ТелефонJSON, Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента, ТекущаяДата(), Ложь);
КонецПроцедуры
Данным кодом мы добавляем нужный нам телефон (Истина - замещает, Ложь - добавляет второй телефон). ТелефонJSON - ранее сформированная нами строка-json. Выглядит это вот так:
Рис.7. Результат добавления "Номера телефона" в карточку контрагента с помощью возможностей БСП.
В данном примере номер телефона "красиво разложен" по полям. Хорошо, переходим к заключению.
Заключение
В данной статье, я постарался обозначить основные правила и методы работы с контактной информацией в рамках библиотеки стандартных подсистем конфигурации. Я описал чтение, преобразование и запись контактной информации объектов.
Надеюсь, что данная информация будем вам полезна, применение данных стандартных методов позволит вам экономить ваше время на разработку ваших решений.
Примеры данной статьи я реализовывал на Платформе 1с 8.3.17.1549, конфигурации Розница 2.3.5 с включенной БСП 3.1.2.457.
Если вам интересен мой практический подход и информация, которую вы сможете реально использовать, если у вас есть желание, чтобы данный комплекс статей наполнялся практическими материалы для программистов - я не откажусь от поддержки как данной статьи, так и всего комплекса статей в целом.
Так же вы можете подписаться на мой телеграмм канал https://t.me/quazareline
Всем спасибо за прочтение, до новых встреч!
Предыдущие материалы
Так же, я прошу посмотреть мои предыдущие статьи, посвященные базовым возможностям типовых конфигураций:
Возможности работы со строками при помощи БСП, которые должен знать каждый программист