5500 lines
443 KiB
Plaintext
5500 lines
443 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2019, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#Область ПрограммныйИнтерфейс
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Добавление, изменение и получение контактной информации.
|
||
|
||
// Возвращает таблицу, содержащую контактную информацию нескольких объектов.
|
||
//
|
||
// Параметры:
|
||
// СсылкиИлиОбъекты - Массив - владельцы контактной информации.
|
||
// ТипыКонтактнойИнформации - Массив, ПеречислениеСсылка.ТипыКонтактнойИнформации - Если указаны, то будет получена
|
||
// контактная информация только этих типов.
|
||
// ВидыКонтактнойИнформации - Массив, СправочникСсылка.ВидыКонтактнойИнформации - Если указаны, то будет возвращена
|
||
// контактная информация только этих видов контактной информации.
|
||
// Дата - Дата - необязательный, дата с которой действует запись контактной информации,
|
||
// используется при хранении истории изменения контактной информации.
|
||
// Если владелец хранит историю изменений, то при несоответствии параметра
|
||
// дате будет вызвано исключение.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ТаблицаЗначений - таблица с контактной информацией объектов содержащая колонки:
|
||
// * СсылкиИлиОбъекты - Ссылка - Владелец контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации.
|
||
// * Значение - Строка - контактная информация во внутреннем формате JSON.
|
||
// * Представление - Строка - Представление контактной информации.
|
||
// * Дата - Дата - Дата, с которой действует запись контактной информации.
|
||
// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части
|
||
// * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для
|
||
// обратной совместимости.
|
||
//
|
||
Функция КонтактнаяИнформацияОбъектов(СсылкиИлиОбъекты, Знач ТипыКонтактнойИнформации = Неопределено, Знач ВидыКонтактнойИнформации = Неопределено, Дата = Неопределено) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
|
||
|
||
Если ТипЗнч(ТипыКонтактнойИнформации) = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда
|
||
ТипыКонтактнойИнформации = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипыКонтактнойИнформации);
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(ВидыКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
|
||
ВидыКонтактнойИнформации = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВидыКонтактнойИнформации);
|
||
КонецЕсли;
|
||
|
||
СоздатьВТКонтактнаяИнформация(Запрос.МенеджерВременныхТаблиц, СсылкиИлиОбъекты, ТипыКонтактнойИнформации, ВидыКонтактнойИнформации, Дата);
|
||
|
||
Если ТипЗнч(Дата) = Тип("Дата") Тогда
|
||
ДействуетС = "КонтактнаяИнформация.ДействуетС";
|
||
Иначе
|
||
ДействуетС = "ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)";
|
||
КонецЕсли;
|
||
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| КонтактнаяИнформация.Объект КАК Объект,
|
||
| КонтактнаяИнформация.Вид КАК Вид,
|
||
| КонтактнаяИнформация.Тип КАК Тип,
|
||
| КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
|
||
| КонтактнаяИнформация.Значение КАК Значение,
|
||
| КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтрокиТабличнойЧасти,
|
||
| " + ДействуетС +" КАК Дата,
|
||
| КонтактнаяИнформация.Представление КАК Представление
|
||
|ИЗ
|
||
| ВТКонтактнаяИнформация КАК КонтактнаяИнформация";
|
||
|
||
Результат = Запрос.Выполнить().Выгрузить();
|
||
Для каждого СтрокаКонтактнойИнформации Из Результат Цикл
|
||
Если ПустаяСтрока(СтрокаКонтактнойИнформации.Значение)
|
||
И ЗначениеЗаполнено(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда
|
||
СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает таблицу, содержащую контактную информацию объекта.
|
||
// Поведение, при котором возвращалось представление контактной информации, теперь считается устаревшим
|
||
// и сохранено для обратной совместимости. Для получения представления контактной информации рекомендуется
|
||
// использовать функцию ПредставлениеКонтактнойИнформацииОбъекта.
|
||
//
|
||
// Параметры:
|
||
// СсылкаИлиОбъект - ЛюбаяСсылка, Объект - Ссылка или объект-владелец контактной информации (организация,
|
||
// контрагент, партнер и т.д.).
|
||
// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Необязательный, отбор по виду контактной информации.
|
||
// Дата - Дата - дата с которой действует запись контактной информации.
|
||
// Если объект-владелец допускает хранение истории изменения контактной информации,
|
||
// признаком которого является наличие колонки ДействуетС в табличной части КонтактнаяИнформация,
|
||
// то необходимо обязательно передавать дату, в противном случае будет вызвано исключение.
|
||
// ТолькоПредставление - Булево - Если Истина, то возвращает только представление, иначе таблицу значений.
|
||
// Для получения представления рекомендуется использовать функцию ПредставлениеКонтактнойИнформацииОбъекта.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ТаблицаЗначений - таблица с контактной информацией объекта содержащая колонки:
|
||
// * СсылкиИлиОбъекты - Ссылка - Владелец контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации.
|
||
// * Значение - Строка - контактная информация во внутреннем формате JSON.
|
||
// * Представление - Строка - Представление контактной информации.
|
||
// * Дата - Дата - дата, с которой действует запись контактной информации.
|
||
// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части
|
||
// * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для
|
||
// обратной совместимости.
|
||
//
|
||
Функция КонтактнаяИнформацияОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации = Неопределено, Дата = Неопределено, ТолькоПредставление = Истина) Экспорт
|
||
|
||
ТипОбъекта = ТипЗнч(СсылкаИлиОбъект);
|
||
Если НЕ ОбщегоНазначения.ЭтоСсылка(ТипОбъекта) Тогда
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
|
||
Результат = НоваяКонтактнаяИнформация();
|
||
Если МетаданныеОбъекта <> Неопределено
|
||
И МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда
|
||
|
||
Для каждого СтрокаКонтактнойИнформации Из СсылкаИлиОбъект.КонтактнаяИнформация Цикл
|
||
Если ВидКонтактнойИнформации = Неопределено
|
||
ИЛИ СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации Тогда
|
||
НоваяСтрока = Результат.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнойИнформации);
|
||
Если ПустаяСтрока(НоваяСтрока.Значение)
|
||
И ЗначениеЗаполнено(НоваяСтрока.ЗначенияПолей) Тогда
|
||
НоваяСтрока.Значение = КонтактнаяИнформацияВJSON(НоваяСтрока.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип);
|
||
КонецЕсли;
|
||
НоваяСтрока.Объект = СсылкаИлиОбъект;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ТолькоПредставление Тогда
|
||
Если Результат.Количество() > 0 Тогда
|
||
Возврат Результат[0].Представление;
|
||
КонецЕсли;
|
||
Возврат "";
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ТолькоПредставление Тогда
|
||
// Оставлено для обратной совместимости.
|
||
МассивОбъектов = Новый Массив;
|
||
МассивОбъектов.Добавить(СсылкаИлиОбъект.Ссылка);
|
||
|
||
Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации) Тогда
|
||
Возврат "";
|
||
КонецЕсли;
|
||
|
||
КонтактнаяИнформацияОбъекта = КонтактнаяИнформацияОбъектов(МассивОбъектов,, ВидКонтактнойИнформации, Дата);
|
||
|
||
Если КонтактнаяИнформацияОбъекта.Количество() > 0 Тогда
|
||
Возврат КонтактнаяИнформацияОбъекта[0].Представление;
|
||
КонецЕсли;
|
||
|
||
Возврат "";
|
||
Иначе
|
||
СсылкиИлиОбъекты = Новый Массив;
|
||
СсылкиИлиОбъекты.Добавить(СсылкаИлиОбъект);
|
||
|
||
Если ТипЗнч(ВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
|
||
ВидыКонтактнойИнформации = Новый Массив;
|
||
ВидыКонтактнойИнформации.Добавить(ВидКонтактнойИнформации);
|
||
ТипыКонтактнойИнформации = Новый Массив;
|
||
ТипыКонтактнойИнформации.Добавить(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидКонтактнойИнформации, "Тип"));
|
||
Иначе
|
||
ВидыКонтактнойИнформации = Неопределено;
|
||
КонецЕсли;
|
||
|
||
Возврат КонтактнаяИнформацияОбъектов(СсылкиИлиОбъекты, ТипыКонтактнойИнформации, ВидыКонтактнойИнформации, Дата);
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает представление контактной информации объекта.
|
||
//
|
||
// Параметры:
|
||
// СсылкаИлиОбъект - Произвольный - Владелец контактной информации.
|
||
// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации.
|
||
// Разделитель - Строка - Разделитель, который добавляется в представление между записями контактной информации.
|
||
// По умолчанию это запятая с последующим пробелом, для исключения
|
||
// пробела необходимо использовать признак БезПробелов у параметра ДополнительныеПараметры.
|
||
// Дата - Дата - дата, с которой действует запись контактной информации. Если контактная информация
|
||
// хранит историю изменения, то передача даты обязательна.
|
||
// ДополнительныеПараметры - Структура - Необязательные параметры для формирования представления контактной информации.
|
||
// * ТолькоПервая - Булево - Если Истина, то будет возвращено представление только основной(первой) записи
|
||
// контактной информации. По умолчанию - Ложь;
|
||
// * БезПробелов - Булево - Если Истина, то после разделителя не будет автоматически добавляться пробел.
|
||
// По умолчанию - Ложь;
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Сформированное представление контактной информации.
|
||
//
|
||
Функция ПредставлениеКонтактнойИнформацииОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации, Разделитель = ",", Дата = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
|
||
|
||
ТолькоПервая = Ложь;
|
||
БезПробелов = Ложь;
|
||
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
|
||
Если ДополнительныеПараметры.Свойство("ТолькоПервая") Тогда
|
||
ТолькоПервая = ДополнительныеПараметры.ТолькоПервая;
|
||
КонецЕсли;
|
||
Если ДополнительныеПараметры.Свойство("БезПробелов") Тогда
|
||
БезПробелов = ДополнительныеПараметры.БезПробелов;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
РазделительВПредставлении = ?(БезПробелов, Разделитель, Разделитель + " ");
|
||
|
||
ПервыйПроход = Истина;
|
||
КонтактнаяИнформация = КонтактнаяИнформацияОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации, Дата, Ложь);
|
||
|
||
Если ТипЗнч(КонтактнаяИнформация) = Тип("ТаблицаЗначений") Тогда
|
||
|
||
Для каждого ЗаписьКонтактнойИнформации Из КонтактнаяИнформация Цикл
|
||
Если ПервыйПроход Тогда
|
||
Представление = ЗаписьКонтактнойИнформации.Представление;
|
||
Если ТолькоПервая Тогда
|
||
Возврат Представление;
|
||
КонецЕсли;
|
||
ПервыйПроход = Ложь;
|
||
Иначе
|
||
Представление = Представление + РазделительВПредставлении + ЗаписьКонтактнойИнформации.Представление;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Иначе
|
||
|
||
Представление = КонтактнаяИнформация;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат Представление;
|
||
|
||
КонецФункции
|
||
|
||
// Формирует новую таблицу контактной информации.
|
||
//
|
||
// Параметры:
|
||
// КолонкаОбъект - Булево - Если Истина, то таблица будет содержать колонку "Объект".
|
||
// Это нужно, если в таблице необходимо хранить контактной информацию для нескольких объектов.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ТаблицаЗначений - с колонками:
|
||
// * Объект - ЛюбаяСсылка - владелец контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации.
|
||
// * Значение - Строка - JSON, соответствующий структуре контактной информации.
|
||
// * ЗначенияПолей - Строка - XML, соответствующий XDTO пакету КонтактнаяИнформация или Адрес.
|
||
// * Представление - Строка - представление контактной информации.
|
||
// * Дата - Дата - дата, с которой действует запись контактной информации.
|
||
// * ИдентификаторСтрокиТабличнойЧасти - Число - идентификатор строки этой табличной части
|
||
//
|
||
Функция НоваяКонтактнаяИнформация(КолонкаОбъект = Истина) Экспорт
|
||
|
||
КонтактнаяИнформация = Новый ТаблицаЗначений;
|
||
ОписаниеТиповСтрока1500 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(1500));
|
||
|
||
Если КолонкаОбъект Тогда
|
||
КонтактнаяИнформация.Колонки.Добавить("Объект");
|
||
КонецЕсли;
|
||
|
||
КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока1500);
|
||
КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка"));
|
||
КонтактнаяИнформация.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка"));
|
||
КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"));
|
||
КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации"));
|
||
КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
|
||
КонтактнаяИнформация.Колонки.Добавить("ИдентификаторСтрокиТабличнойЧасти", Новый ОписаниеТипов("Число"));
|
||
|
||
Возврат КонтактнаяИнформация;
|
||
|
||
КонецФункции
|
||
|
||
// Добавляет контактную информацию к объекту по представлению или JSON.
|
||
//
|
||
// Параметры:
|
||
// СсылкаИлиОбъект - Произвольный - ссылка или объект владельца содержащего контактную информацию.
|
||
// Для ссылки после добавления контактной информации владелец будет записан.
|
||
// Если передан объект, то контактная информация будет добавлена без записи.
|
||
// Для сохранения изменений объект необходимо будет записать отдельно.
|
||
// ЗначениеИлиПредставление - Строка - представление, JSON или XML соответствующее XDTO-пакету КонтактнаяИнформация
|
||
// или Адрес.
|
||
// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Вид добавляемой контактной информации.
|
||
// Дата - Дата - дата, с которой будет действовать запись контактной информации.
|
||
// Требуется для контактной информации, у которой хранится история изменений.
|
||
// Если значение не указано, то принимается текущая дата сеанса.
|
||
// Замещать - Булево - если Истина(по умолчанию), то будет заменена вся контактная информация по
|
||
// переданному виду контактной информации.
|
||
// Если Ложь, то запись будет добавлена. Если вид контактной информации не разрешает
|
||
// ввод нескольких значений, а контактная информация объекта уже содержит запись,
|
||
// то запись не будет добавлена.
|
||
//
|
||
Процедура ДобавитьКонтактнуюИнформацию(СсылкаИлиОбъект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата = Неопределено, Замещать = Истина) Экспорт
|
||
|
||
Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(СсылкаИлиОбъект)) Тогда
|
||
Объект = СсылкаИлиОбъект.ПолучитьОбъект();
|
||
Записывать = Истина;
|
||
Иначе
|
||
Объект = СсылкаИлиОбъект;
|
||
Записывать = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонтактнаяИнформация = Объект.КонтактнаяИнформация;
|
||
ЭтоКонтактнаяИнформацияВXML = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеИлиПредставление);
|
||
ЭтоКонтактнаяИнформацияВJSON = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначениеИлиПредставление);
|
||
ЭтоКонтактнаяИнформацияВСтруктуреJSON = ТипЗнч(ЗначениеИлиПредставление) = Тип("Структура");
|
||
СвойстваВидаКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "Тип, ХранитьИсториюИзменений");
|
||
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
|
||
Если МетаданныеОбъекта = Неопределено
|
||
Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда
|
||
ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");;
|
||
КонецЕсли;
|
||
|
||
Если ЭтоКонтактнаяИнформацияВСтруктуреJSON Тогда
|
||
|
||
ОбъектКонтактнойИнформации = ЗначениеИлиПредставление;
|
||
Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ЗначениеИлиПредставление);
|
||
ЗначенияПолей = КонтактнаяИнформацияВXML(Значение);
|
||
Представление = ОбъектКонтактнойИнформации.Value;
|
||
|
||
Иначе
|
||
|
||
Если ЭтоКонтактнаяИнформацияВXML Тогда
|
||
|
||
ЗначенияПолей = ЗначениеИлиПредставление;
|
||
Значение = КонтактнаяИнформацияВJSON(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип);
|
||
ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип);
|
||
Представление = ОбъектКонтактнойИнформации.Value;
|
||
|
||
ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда
|
||
|
||
Значение = ЗначениеИлиПредставление;
|
||
ЗначенияПолей = КонтактнаяИнформацияВXML(Значение,, СвойстваВидаКонтактнойИнформации.Тип);
|
||
ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип);
|
||
Представление = ПредставлениеКонтактнойИнформации(ЗначениеИлиПредставление, ВидКонтактнойИнформации);
|
||
|
||
Иначе
|
||
ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип);
|
||
Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКонтактнойИнформации);
|
||
ЗначенияПолей = КонтактнаяИнформацияВXML(Значение);
|
||
Представление = ЗначениеИлиПредставление;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Замещать Тогда
|
||
НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(ВидКонтактнойИнформации, Дата, КонтактнаяИнформация);
|
||
Для Каждого СтрокаТабличнойЧасти Из НайденныеСтроки Цикл
|
||
КонтактнаяИнформация.Удалить(СтрокаТабличнойЧасти);
|
||
КонецЦикла;
|
||
СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить();
|
||
Иначе
|
||
Если ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) Тогда
|
||
Если ЭтоКонтактнаяИнформацияВXML Тогда
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "ЗначенияПолей");
|
||
ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Значение");
|
||
Иначе
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Представление");
|
||
КонецЕсли;
|
||
Если СтрокаКонтактнойИнформации <> Неопределено Тогда
|
||
Возврат; // Допускается только одно значение этого вида контактной информации.
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить();
|
||
КонецЕсли;
|
||
|
||
СтрокаКонтактнойИнформации.Значение = Значение;
|
||
СтрокаКонтактнойИнформации.Представление = Представление;
|
||
СтрокаКонтактнойИнформации.ЗначенияПолей = ЗначенияПолей;
|
||
СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации;
|
||
СтрокаКонтактнойИнформации.Тип = СвойстваВидаКонтактнойИнформации.Тип ;
|
||
Если СвойстваВидаКонтактнойИнформации.ХранитьИсториюИзменений И ЗначениеЗаполнено(Дата) Тогда
|
||
СтрокаКонтактнойИнформации.ДействуетС = Дата;
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СвойстваВидаКонтактнойИнформации.Тип);
|
||
|
||
Если Записывать Тогда
|
||
Объект.Записать();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Добавляет или изменяет контактную информацию для нескольких владельцев контактной информации.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - ТаблицаЗначений - Таблица содержащая контактную информацию
|
||
// Описание колонок см. функцию НоваяКонтактнаяИнформация.
|
||
// Важно! Если в колонке Объект указана ссылка, то после добавления
|
||
// контактной информации владелец будет записан.
|
||
// В случае, если колонка Объект содержит объект владельца контактной информации,
|
||
// то для сохранения изменений объекты необходимо будет записать отдельно.
|
||
// Замещать - Булево - Если Истина(по умолчанию), то будет заменена вся
|
||
// вся контактная информация по переданном виду контактной информации.
|
||
// Если Ложь, то запись будет добавлена. Если вид контактной информации не разрешает
|
||
// ввод нескольких значений, а контактная информация объекта уже содержит запись,
|
||
// то запись не будет добавлена.
|
||
//
|
||
Процедура УстановитьКонтактнуюИнформациюОбъектов(КонтактнаяИнформация, Замещать = Истина) Экспорт
|
||
|
||
Если КонтактнаяИнформация.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ВладельцыКонтактнойИнформации = Новый Соответствие;
|
||
Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл
|
||
ПараметрыКонтактнойИнформации = ВладельцыКонтактнойИнформации[СтрокаКонтактнойИнформации.Объект];
|
||
Если ПараметрыКонтактнойИнформации = Неопределено Тогда
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаКонтактнойИнформации.Объект));
|
||
Если МетаданныеОбъекта = Неопределено
|
||
Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда
|
||
ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");;
|
||
КонецЕсли;
|
||
|
||
ПараметрыКонтактнойИнформации = Новый Структура;
|
||
ЭтоСсылка = ОбщегоНазначения.ЗначениеСсылочногоТипа(СтрокаКонтактнойИнформации.Объект);
|
||
ПараметрыКонтактнойИнформации.Вставить("ЭтоСсылка", ЭтоСсылка);
|
||
ПараметрыКонтактнойИнформации.Вставить("Периодическая", МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено);
|
||
|
||
ВладельцыКонтактнойИнформации.Вставить(СтрокаКонтактнойИнформации.Объект, ПараметрыКонтактнойИнформации);
|
||
КонецЕсли;
|
||
|
||
ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации);
|
||
|
||
КонецЦикла;
|
||
|
||
Для каждого ВладелецКонтактнойИнформации Из ВладельцыКонтактнойИнформации Цикл
|
||
Отбор = Новый Структура("Объект", ВладелецКонтактнойИнформации.Ключ);
|
||
СтрокиКонтактнойИнформацииОбъекта = КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
|
||
Если ВладелецКонтактнойИнформации.Значение["ЭтоСсылка"] Тогда
|
||
Объект = ВладелецКонтактнойИнформации.Ключ.ПолучитьОбъект();
|
||
Иначе
|
||
Объект = ВладелецКонтактнойИнформации.Ключ;
|
||
КонецЕсли;
|
||
|
||
Если Замещать Тогда
|
||
Объект.КонтактнаяИнформация.Очистить();
|
||
КонецЕсли;
|
||
|
||
Для каждого СтрокаКонтактнойИнформацииОбъекта Из СтрокиКонтактнойИнформацииОбъекта Цикл
|
||
|
||
ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений;
|
||
|
||
Если Замещать Тогда
|
||
|
||
Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить();
|
||
|
||
Иначе
|
||
|
||
Отбор = Новый Структура();
|
||
Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид);
|
||
|
||
Если ХранитьИсториюИзменений Тогда
|
||
Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда
|
||
Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
Иначе
|
||
Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
КонецЕсли;
|
||
|
||
Если НЕ ХранитьИсториюИзменений
|
||
И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата)
|
||
ИЛИ НайденныеСтроки.Количество() > 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить();
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации);
|
||
КонецЦикла;
|
||
|
||
Если ВладелецКонтактнойИнформации.Значение["ЭтоСсылка"] Тогда
|
||
Объект.Записать();
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Добавляет или изменяет контактную информацию у владельца контактной информации.
|
||
//
|
||
// Параметры:
|
||
// СсылкаИлиОбъект - Произвольный - ссылка или объект владелец контактной информации.
|
||
// Для ссылки после добавления контактной информации владелец будет записан.
|
||
// Если передан объект, то контактная информация будет добавлена без записи.
|
||
// Для сохранения изменений объект необходимо будет записать отдельно.
|
||
// КонтактнаяИнформация - ТаблицаЗначений - таблица, содержащая контактную информацию
|
||
// Описание колонок см. функцию НоваяКонтактнаяИнформация.
|
||
// Важно! Если передана пустая таблица значений и указан режим замещения, то
|
||
// произойдет очистка всей контактной информации владельца контактной информации.
|
||
// Замещать - Булево - Если Истина(по умолчанию), то будет заменена
|
||
// вся контактная информация по переданном виду контактной информации.
|
||
// Если Ложь, то запись будет добавлена. Если вид контактной информации
|
||
// не разрешает ввод нескольких значений, а контактная информация объекта
|
||
// уже содержит запись, то запись не будет добавлена.
|
||
//
|
||
Процедура УстановитьКонтактнуюИнформациюОбъекта(СсылкаИлиОбъект, Знач КонтактнаяИнформация, Замещать = Истина) Экспорт
|
||
|
||
ЭтоСсылка = ОбщегоНазначения.ЗначениеСсылочногоТипа(СсылкаИлиОбъект);
|
||
Объект =?(ЭтоСсылка, СсылкаИлиОбъект.ПолучитьОбъект(), СсылкаИлиОбъект);
|
||
|
||
Если ТипЗнч(СсылкаИлиОбъект) <> Тип("ДанныеФормыСтруктура") Тогда
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект));
|
||
Иначе
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект.Ссылка));
|
||
КонецЕсли;
|
||
|
||
Если МетаданныеОбъекта = Неопределено
|
||
Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда
|
||
ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");;
|
||
КонецЕсли;
|
||
|
||
// Очистка контактной информации пустой таблицей.
|
||
Если КонтактнаяИнформация.Количество() = 0 Тогда
|
||
Если Замещать Тогда
|
||
Объект.КонтактнаяИнформация.Очистить();
|
||
Если ЭтоСсылка Тогда
|
||
Объект.Записать();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Периодическая = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено;
|
||
БезИдентификатораТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено;
|
||
|
||
Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл
|
||
ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации);
|
||
КонецЦикла;
|
||
|
||
Если Замещать Тогда
|
||
|
||
Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл
|
||
|
||
ДатаОтбора = ?(Периодическая, СтрокаКонтактнойИнформацииОбъекта.Дата, Неопределено);
|
||
НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(СтрокаКонтактнойИнформацииОбъекта.Вид, ДатаОтбора, Объект.КонтактнаяИнформация);
|
||
|
||
Для каждого Строка Из НайденныеСтроки Цикл
|
||
Объект.КонтактнаяИнформация.Удалить(Строка);
|
||
КонецЦикла;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл
|
||
|
||
ХранитьИсториюИзменений = Периодическая И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений;
|
||
|
||
Если Замещать Тогда
|
||
|
||
ИдентификаторСтрокиТабличнойЧасти = ?(БезИдентификатораТабличнойЧасти, Неопределено, СтрокаКонтактнойИнформацииОбъекта.ИдентификаторСтрокиТабличнойЧасти);
|
||
Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ИдентификаторСтрокиТабличнойЧасти) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить();
|
||
|
||
Иначе
|
||
|
||
Отбор = Новый Структура();
|
||
Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид);
|
||
|
||
Если ХранитьИсториюИзменений Тогда
|
||
Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда
|
||
Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
Иначе
|
||
Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
КонецЕсли;
|
||
|
||
Если НЕ ХранитьИсториюИзменений
|
||
И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата)
|
||
ИЛИ НайденныеСтроки.Количество() > 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить();
|
||
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации);
|
||
|
||
КонецЦикла;
|
||
|
||
Если ЭтоСсылка Тогда
|
||
Объект.Записать();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Работа с контактной информацией из других подсистем.
|
||
|
||
// Преобразует входящие форматы контактной информации во внутренний формат JSON.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - строка в формате XML. Структура XML-документа соответствует XDTO-пакету КонтактнаяИнформация
|
||
// или Адрес (для адресов содержащих поля с национальной спецификой).
|
||
// Если передана строка во внутреннем формате JSON, то возвращаемое значение будет
|
||
// полностью совпадать с ней.
|
||
// - Структура - см. УправлениеКонтактнойИнформациейКлиентСервер.СтруктураКонтактнойИнформацииПоТипу.
|
||
// см. РаботаСАдресами.ПоляАдреса (для адресов содержащих поля с национальной спецификой),
|
||
// см. РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу
|
||
// (для других типов контактной информации содержащих поля с национальной спецификой).
|
||
// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации -
|
||
// используется для определения типа контактной информации, если его невозможно определить из
|
||
// переданной контактной информации в параметре КонтактнаяИнформация.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - контактная информация во внутреннем формате JSON.
|
||
// Поля и их описание см. УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации.
|
||
// Дополнительные поля для конфигурации с поддержкой национальной специфики см. РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации
|
||
//
|
||
Функция КонтактнаяИнформацияВJSON(Знач КонтактнаяИнформация, Знач ОжидаемыйВид = Неопределено) Экспорт
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
Возврат КонтактнаяИнформация;
|
||
КонецЕсли;
|
||
|
||
КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ОжидаемыйВид,, Ложь);
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям);
|
||
|
||
КонецФункции
|
||
|
||
// Преобразует все входящие форматы контактной информации в XML.
|
||
//
|
||
// Параметры:
|
||
// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - описание полей контактной информации.
|
||
// XML должен соответствовать XDTO-пакету КонтактнаяИнформация или Адрес.
|
||
// Структура, Соответствие, СписокЗначений должен содержать поля в соответствии со структурой
|
||
// XDTO пакетов КонтактнаяИнформация или Адрес(для конфигурации с поддержкой специфики РФ).
|
||
// Представление - Строка - Представление контактной информации. Используется, если невозможно определить
|
||
// представление из параметра ЗначенияПолей (например, отсутствует поле Представление).
|
||
// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации -
|
||
// Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес.
|
||
//
|
||
Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт
|
||
|
||
Результат = УправлениеКонтактнойИнформациейСлужебный.ПривестиКонтактнуюИнформациюXML(Новый Структура(
|
||
"ЗначенияПолей, Представление, ВидКонтактнойИнформации",
|
||
ЗначенияПолей, Представление, ОжидаемыйВид));
|
||
Возврат Результат.ДанныеXML;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает тип контактной информации.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - контактная информация в виде XML, соответствующего структуре XDTO-пакетов
|
||
// КонтактнаяИнформация и Адрес.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ПеречислениеСсылка.ТипыКонтактнойИнформации - соответствующий тип.
|
||
//
|
||
Функция ТипКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(КонтактнаяИнформация);
|
||
Если ТипЗнч(КонтактнаяИнформацияСтруктурой) = Тип("Структура") И КонтактнаяИнформацияСтруктурой.Свойство("type") Тогда
|
||
Возврат Перечисления.ТипыКонтактнойИнформации[КонтактнаяИнформацияСтруктурой.type];
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.ТипКонтактнойИнформации(КонтактнаяИнформация);
|
||
КонецФункции
|
||
|
||
// Преобразует представление контактной информации во внутренний формат JSON.
|
||
//
|
||
// Для адресов, введенных в свободной форме, корректное преобразование не гарантируется.
|
||
//
|
||
// Параметры:
|
||
// Представление - Строка - Строковое представление контактной информации, выводимое пользователю.
|
||
// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации,
|
||
// Структура - Вид или тип контактной информации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Контактная информация в виде JSON.
|
||
//
|
||
Функция КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид) Экспорт
|
||
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(
|
||
УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид));
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает представление контактной информации (адреса, телефона, электронной почты и т.п.).
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - строка JSON или XML контактной информации соответствующая XDTO пакетам
|
||
// КонтактнаяИнформация или Адрес
|
||
// - ОбъектXDTO - XDTO-объект КонтактнаяИнформация или Адрес.
|
||
// - Структура - контактная информация с разбивкой по полям полученная функциями
|
||
// СведенияОбАдресе или СведенияОТелефоне.
|
||
// ВидКонтактнойИнформации - Структура - дополнительные параметры, влияющие на формирование представления адреса:
|
||
// * ВключатьСтрануВПредставление - Булево - в представление будет включена страна адреса;
|
||
// * ФорматАдреса - Строка - варианты: "ФИАС" или "КЛАДР".
|
||
// Если указано "КЛАДР", то в представление адреса
|
||
// не включаются значения уровней округ и внутригородской район.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - представление контактной информации.
|
||
//
|
||
Функция ПредставлениеКонтактнойИнформации(Знач КонтактнаяИнформация, Знач ВидКонтактнойИнформации = Неопределено) Экспорт
|
||
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(КонтактнаяИнформация, ВидКонтактнойИнформации);
|
||
|
||
КонецФункции
|
||
|
||
// Вычисляет, что адрес был введен в свободной форме.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации, соответствующая XDTO-пакетам
|
||
// КонтактнаяИнформация или Адрес.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - новое значение.
|
||
//
|
||
Функция АдресВведенВСвободнойФорме(Знач КонтактнаяИнформация) Экспорт
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияJSON = КонтактнаяИнформацияВJSON(КонтактнаяИнформация);
|
||
КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформацияJSON, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
КонецЕсли;
|
||
|
||
Возврат УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(КонтактнаяИнформация.AddressType);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает комментарий контактной информации.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - Строка JSON или XML или объект XDTO, соответствующие XDTO-пакетам
|
||
// КонтактнаяИнформация или Адрес.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - комментарий контактной информации или пустая строка,
|
||
// если значение параметра не является контактной информацией.
|
||
//
|
||
Функция КомментарийКонтактнойИнформации(КонтактнаяИнформация) Экспорт
|
||
|
||
Если ПустаяСтрока(КонтактнаяИнформация) Тогда
|
||
Возврат "";
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация);
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(КонтактнаяИнформация);
|
||
Иначе
|
||
КонтактнаяИнформацияВXML = КонтактнаяИнформацияВXML(КонтактнаяИнформация);
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформацияВXML);
|
||
КонецЕсли;
|
||
|
||
Если КонтактнаяИнформацияСтруктурой.Свойство("Comment") Тогда
|
||
Возврат КонтактнаяИнформацияСтруктурой.Comment;
|
||
КонецЕсли;
|
||
|
||
Возврат "";
|
||
|
||
КонецФункции
|
||
|
||
// Устанавливает новый комментарий для контактной информации.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка, ОбъектXDTO - строка JSON или XML контактной информации, соответствующая XDTO
|
||
// пакетам КонтактнаяИнформация или Адрес.
|
||
// Комментарий - Строка - новое значение комментария.
|
||
//
|
||
Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт
|
||
|
||
ЭтоСтрока = ТипЗнч(КонтактнаяИнформация) = Тип("Строка");
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(КонтактнаяИнформация);
|
||
|
||
Если ТипЗнч(КонтактнаяИнформацияСтруктурой) = Тип("Структура") И КонтактнаяИнформацияСтруктурой.Свойство("comment") Тогда
|
||
КонтактнаяИнформацияСтруктурой.comment = Комментарий;
|
||
КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияСтруктурой);
|
||
КонецЕсли;
|
||
|
||
Возврат;
|
||
|
||
ИначеЕсли ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
|
||
// Предыдущий формат значений полей, комментарий отсутствует.
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОбъектXDTO = ?(ЭтоСтрока, УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация), КонтактнаяИнформация);
|
||
ОбъектXDTO.Комментарий = Комментарий;
|
||
Если ЭтоСтрока Тогда
|
||
КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектXDTO);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает информацию о стране адреса.
|
||
// Если переданная строка не содержит информации об адресе, то будет вызвано исключение.
|
||
// Если передана пустая строка, то возвращается пустая структура.
|
||
// Если страна не найдена в справочнике, но найдена в классификаторе ОКСМ, то поле Ссылка результата не будет заполнено.
|
||
// Если страна не найдена ни в адресе, ни в классификаторе ОКСМ, то будет заполнено только поле Наименование.
|
||
//
|
||
// Параметры:
|
||
// Адрес - Структура, Строка - адрес в формате JSON или строка XML соответствующая XDTO-пакетам КонтактнаяИнформация
|
||
// или Адрес.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - описание страны адреса. Содержит поля:
|
||
// * Ссылка - СправочникСсылка.СтраныМира, Неопределено - Ссылка на элемент справочника страны мира.
|
||
// * Наименование - Строка - Наименование страны.
|
||
// * Код - Строка - Код страны.
|
||
// * НаименованиеПолное - Строка - Полное наименование страны.
|
||
// * КодАльфа2 - Строка - Двузначный буквенный код страны Альфа-2.
|
||
// * КодАльфа3 - Строка - Трехзначный буквенный код страны Альфа-3.
|
||
//
|
||
Функция СтранаАдресаКонтактнойИнформации(Знач Адрес) Экспорт
|
||
|
||
Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3");
|
||
|
||
Если ТипЗнч(Адрес) = Тип("Строка") Тогда
|
||
|
||
Если ПустаяСтрока(Адрес) Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда
|
||
Адрес = КонтактнаяИнформацияВJSON(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
КонецЕсли;
|
||
|
||
Адрес = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
|
||
ИначеЕсли ТипЗнч(Адрес) <> Тип("Структура") Тогда
|
||
|
||
ВызватьИсключение НСтр("ru = 'Невозможно определить страну, ожидается адрес.'");
|
||
|
||
КонецЕсли;
|
||
|
||
Результат.Наименование = СокрЛП(Адрес.Country);
|
||
ДанныеСтраны = ДанныеСтраныМира(, Результат.Наименование);
|
||
Возврат ?(ДанныеСтраны = Неопределено, Результат, ДанныеСтраны);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает домен сетевого адреса для веб-ссылки или адреса электронной почты.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Домен адреса.
|
||
//
|
||
Функция ДоменАдресаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт
|
||
|
||
Если ПустаяСтрока(КонтактнаяИнформация) Тогда
|
||
Возврат "";
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация);
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(КонтактнаяИнформация);
|
||
КонецЕсли;
|
||
|
||
Если КонтактнаяИнформацияСтруктурой.Свойство("Type") И КонтактнаяИнформацияСтруктурой.Свойство("Value") Тогда
|
||
|
||
ДоменАдреса = СокрЛП(КонтактнаяИнформацияСтруктурой.Value);
|
||
Если ТипКонтактнойИнформацииПоНаименованию(КонтактнаяИнформацияСтруктурой.Type) = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
|
||
|
||
Позиция = СтрНайти(ДоменАдреса, "://");
|
||
Если Позиция > 0 Тогда
|
||
ДоменАдреса = Сред(ДоменАдреса, Позиция + 3);
|
||
КонецЕсли;
|
||
Позиция = СтрНайти(ДоменАдреса, "/");
|
||
Возврат ?(Позиция = 0, ДоменАдреса, Лев(ДоменАдреса, Позиция - 1));
|
||
|
||
ИначеЕсли ТипКонтактнойИнформацииПоНаименованию(КонтактнаяИнформацияСтруктурой.Type) = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
|
||
Позиция = СтрНайти(ДоменАдреса, "@");
|
||
Возврат ?(Позиция = 0, ДоменАдреса, Сред(ДоменАдреса, Позиция + 1));
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ВызватьИсключение НСтр("ru = 'Невозможно определить домен, ожидается электронная почта или веб-ссылка.'");
|
||
КонецФункции
|
||
|
||
// Возвращает сведения о телефоне или факсе.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - Телефон во внутреннем формате JSON или в XML, соответствующем XDTO-пакету контактная
|
||
// информация.
|
||
// - Неопределено - Конструктор, возвращает список незаполненных полей телефона.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - сведения о телефоне:
|
||
// * Представление - Строка - представление телефона.
|
||
// * КодСтраны - Строка - Код страны. Например, +7.
|
||
// * КодГорода - Строка - Код города. Например, 495.
|
||
// * НомерТелефона - Строка - Номер телефона.
|
||
// * Добавочный - Строка - Добавочный номер телефона.
|
||
// * Комментарий - Строка - Комментарий к номеру телефона.
|
||
//
|
||
Функция СведенияОТелефоне(КонтактнаяИнформация = Неопределено) Экспорт
|
||
|
||
Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона();
|
||
Если КонтактнаяИнформация = Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
ТелефонПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон);
|
||
|
||
Результат.Представление = Строка(ТелефонПоПолям.Value);
|
||
Результат.КодСтраны = Строка(ТелефонПоПолям.CountryCode);
|
||
Результат.КодГорода = Строка(ТелефонПоПолям.AreaCode);
|
||
Результат.НомерТелефона = Строка(ТелефонПоПолям.Number);
|
||
Результат.Добавочный = Строка(ТелефонПоПолям.ExtNumber);
|
||
Результат.Комментарий = Строка(ТелефонПоПолям.Comment);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает строку с номером телефона без кода и дополнительного номера.
|
||
//
|
||
// Параметры:
|
||
// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Номер телефона.
|
||
//
|
||
Функция НомерТелефонаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт
|
||
|
||
Если ПустаяСтрока(КонтактнаяИнформация) Тогда
|
||
Возврат "";
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация);
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
|
||
КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон);
|
||
КонецЕсли;
|
||
|
||
Если КонтактнаяИнформацияСтруктурой.Свойство("Number") Тогда
|
||
|
||
Возврат СокрЛП(КонтактнаяИнформацияСтруктурой.Number);
|
||
|
||
КонецЕсли;
|
||
|
||
ВызватьИсключение НСтр("ru = 'Невозможно определить номер, ожидается телефона или факс.'");
|
||
|
||
КонецФункции
|
||
|
||
// Сравнивает два экземпляра контактной информации.
|
||
//
|
||
// Параметры:
|
||
// Данные1 - ОбъектXTDO - Объект с контактной информацией.
|
||
// - Строка - Контактная информация в формате XML.
|
||
// - Структура - Описание контактной информацию. Ожидаются поля:
|
||
// * ЗначенияПолей - Строка, Структура, СписокЗначений, Соответствие - поля контактной информации.
|
||
// * Представление - Строка - Представление. Используется в случае, если не удалось вычислить
|
||
// представление из ЗначенияПолей (отсутствие в них поля Представление).
|
||
// * Комментарий - Строка - комментарий. Используется в том случае, если не удалось вычислить комментарий
|
||
// из ЗначенияПолей.
|
||
// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации,
|
||
// ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура -
|
||
// используется в том случае, если не удалось вычислить тип из ЗначенияПолей.
|
||
// Данные2 - ОбъектXTDO, Строка, Структура - аналогично Данные1.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ТаблицаЗначений: - таблица отличающихся полей со следующими колонками:
|
||
// * Путь - Строка - XPath, идентифицирующий отличающееся значение. Значение "ТипКонтактнойИнформации"
|
||
// означает, что переданные экземпляры контактной информации различаются типом.
|
||
// * Описание - Строка - описание отличающегося реквизита в терминах предметной области.
|
||
// * Значение1 - Строка - значение, соответствующая объекту, переданному в параметре Данные1.
|
||
// * Значение2 - Строка - значение, соответствующая объекту, переданному в параметре Данные2.
|
||
//
|
||
Функция РазличияКонтактнойИнформации(Знач Данные1, Знач Данные2) Экспорт
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.РазличияКонтактнойИнформации(Данные1, Данные2);
|
||
КонецФункции
|
||
|
||
// Создает временную таблицу с контактной информацией нескольких объектов.
|
||
//
|
||
// Параметры:
|
||
// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - В менеджере создается временная таблица
|
||
// ВТКонтактнаяИнформация с полями:
|
||
// * Объект - Ссылка - владелец контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на вид контактной информации.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации.
|
||
// * ЗначенияПолей - Строка - XML соответствующий XDTO пакету КонтактнаяИнформация или Адрес.
|
||
// * Представление - Строка - Представление контактной информации.
|
||
// МассивОбъектов - Массив - Владельцы контактной информации.
|
||
// ТипыКонтактнойИнформации - Массив - Если указаны, то временная таблица будет содержать только контактную
|
||
// информацию этих типов.
|
||
// ВидыКонтактнойИнформации - Массив - Если указаны, то временная таблица будет содержать только контактную
|
||
// информацию этих видов.
|
||
// Дата - Дата - Дата, с которой действует запись контактной информации, используется при
|
||
// хранении истории изменения контактной информации. Если владелец хранит историю
|
||
// изменений, то при несоответствии параметра дате будет вызвано исключение.
|
||
//
|
||
Процедура СоздатьВТКонтактнаяИнформация(МенеджерВременныхТаблиц, МассивОбъектов, ТипыКонтактнойИнформации = Неопределено, ВидыКонтактнойИнформации = Неопределено, Дата = Неопределено) Экспорт
|
||
|
||
Если ТипЗнч(МассивОбъектов) <> Тип("Массив") ИЛИ МассивОбъектов.Количество() = 0 Тогда
|
||
ВызватьИсключение НСтр("ru = 'Неверное значение для массива владельцев контактной информации.'");
|
||
КонецЕсли;
|
||
|
||
ОбъектыСГруппировкойПоТипам = Новый Соответствие;
|
||
Для каждого Ссылка Из МассивОбъектов Цикл
|
||
ТипОбъекта = ТипЗнч(Ссылка);
|
||
НайденныйОбъект = ОбъектыСГруппировкойПоТипам.Получить(ТипОбъекта);
|
||
Если НайденныйОбъект = Неопределено Тогда
|
||
НаборСсылок = Новый Массив;
|
||
НаборСсылок.Добавить(Ссылка);
|
||
ОбъектыСГруппировкойПоТипам.Вставить(ТипОбъекта, НаборСсылок);
|
||
Иначе
|
||
НайденныйОбъект.Добавить(Ссылка);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Запрос = Новый Запрос();
|
||
ТекстЗапросаПодготовкаДанных = "";
|
||
СтрокаРАЗРЕШЕННЫЕ = " РАЗРЕШЕННЫЕ ";
|
||
СтрокаВременнойТаблицы = "ПОМЕСТИТЬ ВТКонтактнаяИнформация";
|
||
|
||
Для каждого ОбъектСКонтактнойИнформацией Из ОбъектыСГруппировкойПоТипам Цикл
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ОбъектСКонтактнойИнформацией.Ключ);
|
||
Если МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда
|
||
ВызватьИсключение МетаданныеОбъекта.Имя + " " + НСтр("ru = 'не содержит контактную информацию.'");
|
||
КонецЕсли;
|
||
ИмяТаблицы = МетаданныеОбъекта.Имя;
|
||
Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда
|
||
ТекстЗапросаПодготовкаДанных = ТекстЗапросаПодготовкаДанных + "ВЫБРАТЬ РАЗРЕШЕННЫЕ
|
||
| КонтактнаяИнформация.Ссылка КАК Объект,
|
||
| КонтактнаяИнформация.Вид КАК Вид,
|
||
| МАКСИМУМ(КонтактнаяИнформация.ДействуетС) КАК ДействуетС
|
||
|ПОМЕСТИТЬ СрезКонтактнойИнформации" + ИмяТаблицы + "
|
||
|ИЗ
|
||
| " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация
|
||
|ГДЕ
|
||
| КонтактнаяИнформация.Ссылка В (&МассивОбъектов" + ИмяТаблицы + ")
|
||
| И КонтактнаяИнформация.ДействуетС <= &ДействуетС
|
||
| И КонтактнаяИнформация.Вид <> ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка)
|
||
| И КонтактнаяИнформация.Тип <> ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.ПустаяСсылка)
|
||
|
|
||
|СГРУППИРОВАТЬ ПО
|
||
| КонтактнаяИнформация.Вид, КонтактнаяИнформация.Ссылка
|
||
|;"
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ТекстЗапроса = "";
|
||
Для каждого ОбъектСКонтактнойИнформацией Из ОбъектыСГруппировкойПоТипам Цикл
|
||
ТекстЗапроса = ТекстЗапроса + ?(НЕ ПустаяСтрока(ТекстЗапроса), Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС, "");
|
||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ОбъектСКонтактнойИнформацией.Ключ);
|
||
ИмяТаблицы = МетаданныеОбъекта.Имя;
|
||
|
||
ЕстьИдентификаторСтрокиТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено;
|
||
ТекстЗапросаИдентификаторСтрокиТабличнойЧасти = "";
|
||
Если ЕстьИдентификаторСтрокиТабличнойЧасти Тогда
|
||
ТекстЗапросаИдентификаторСтрокиТабличнойЧасти = "КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтрокиТабличнойЧасти";
|
||
Иначе
|
||
ТекстЗапросаИдентификаторСтрокиТабличнойЧасти = "0 КАК ИдентификаторСтрокиТабличнойЧасти";
|
||
КонецЕсли;
|
||
|
||
Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда
|
||
Если ТипЗнч(Дата) <> Тип("Дата") Тогда
|
||
ВызватьИсключение НСтр("ru = 'Для получения контактной информации, хранящей историю изменений,
|
||
|требуется указывать дату, с которой действует запись контактной информации.'");
|
||
КонецЕсли;
|
||
|
||
УсловияОтбора = ?(ВидыКонтактнойИнформации = Неопределено, "", " КонтактнаяИнформация.Вид В (&ВидыКонтактнойИнформации)");
|
||
Если ПустаяСтрока(УсловияОтбора) Тогда
|
||
УсловиеИ = "";
|
||
Иначе
|
||
УсловиеИ = " И ";
|
||
КонецЕсли;
|
||
УсловияОтбора = УсловияОтбора + ?(ТипыКонтактнойИнформации = Неопределено, "", УсловиеИ + " КонтактнаяИнформация.Тип В (&ТипыКонтактнойИнформации)");
|
||
Если НЕ ПустаяСтрока(УсловияОтбора) Тогда
|
||
УсловияОтбора = " ГДЕ " + УсловияОтбора;
|
||
КонецЕсли;
|
||
|
||
ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ " + СтрокаРАЗРЕШЕННЫЕ + "
|
||
| КонтактнаяИнформация.Ссылка КАК Объект,
|
||
| КонтактнаяИнформация.Вид КАК Вид,
|
||
| КонтактнаяИнформация.Тип КАК Тип,
|
||
| КонтактнаяИнформация.ДействуетС КАК ДействуетС,
|
||
| КонтактнаяИнформация.Представление КАК Представление,
|
||
| КонтактнаяИнформация.Значение,
|
||
| КонтактнаяИнформация.ЗначенияПолей,
|
||
| " + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти + "
|
||
| " + СтрокаВременнойТаблицы + "
|
||
|ИЗ
|
||
| СрезКонтактнойИнформации" + ИмяТаблицы + " КАК СрезКонтактнойИнформации
|
||
| ЛЕВОЕ СОЕДИНЕНИЕ " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация
|
||
| ПО СрезКонтактнойИнформации.Вид = КонтактнаяИнформация.Вид
|
||
| И СрезКонтактнойИнформации.ДействуетС = КонтактнаяИнформация.ДействуетС
|
||
| И СрезКонтактнойИнформации.Объект = КонтактнаяИнформация.Ссылка " + УсловияОтбора;
|
||
Иначе
|
||
ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ " + СтрокаРАЗРЕШЕННЫЕ + "
|
||
| КонтактнаяИнформация.Ссылка КАК Объект,
|
||
| КонтактнаяИнформация.Вид КАК Вид,
|
||
| КонтактнаяИнформация.Тип КАК Тип,
|
||
| ДАТАВРЕМЯ(1,1,1) КАК ДействуетС,
|
||
| КонтактнаяИнформация.Представление КАК Представление,
|
||
| КонтактнаяИнформация.Значение,
|
||
| КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
|
||
| " + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти + "
|
||
| " + СтрокаВременнойТаблицы + "
|
||
|ИЗ
|
||
| " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация
|
||
|ГДЕ
|
||
| КонтактнаяИнформация.Вид <> ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка)
|
||
| И КонтактнаяИнформация.Тип <> ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.ПустаяСсылка)
|
||
| И КонтактнаяИнформация.Ссылка В (&МассивОбъектов" + ИмяТаблицы + ")
|
||
| " + ?(ТипыКонтактнойИнформации = Неопределено, "", "И КонтактнаяИнформация.Тип В (&ТипыКонтактнойИнформации)") + "
|
||
| " + ?(ВидыКонтактнойИнформации = Неопределено, "", "И КонтактнаяИнформация.Вид В (&ВидыКонтактнойИнформации)") + "
|
||
|";
|
||
КонецЕсли;
|
||
СтрокаРАЗРЕШЕННЫЕ ="";
|
||
СтрокаВременнойТаблицы = "";
|
||
|
||
Запрос.УстановитьПараметр("МассивОбъектов" + ИмяТаблицы, ОбъектСКонтактнойИнформацией.Значение);
|
||
КонецЦикла;
|
||
|
||
Запрос.Текст = ТекстЗапросаПодготовкаДанных + ТекстЗапроса;
|
||
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
|
||
|
||
Запрос.УстановитьПараметр("ДействуетС", Дата);
|
||
Запрос.УстановитьПараметр("ТипыКонтактнойИнформации", ТипыКонтактнойИнформации);
|
||
Запрос.УстановитьПараметр("ВидыКонтактнойИнформации", ВидыКонтактнойИнформации);
|
||
Запрос.Выполнить();
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Страны мира
|
||
|
||
// Возвращает данные о стране по справочнику стран мира или классификатору ОКСМ.
|
||
//
|
||
// Параметры:
|
||
// КодСтраны - Строка, Число - Код страны по классификатору ОКСМ. Если не указано, то поиск по коду не производится.
|
||
// Наименование - Строка - Наименование страны. Если не указано, то поиск по наименованию не производится.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - описание страны. Содержит поля:
|
||
// * Ссылка - СправочникСсылка.СтраныМира, Неопределено - Соответствующий элемент справочника Страны мира.
|
||
// * Наименование - Строка - Наименование страны.
|
||
// * Код - Строка - Код страны.
|
||
// * НаименованиеПолное - Строка - Полное наименование страны.
|
||
// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2.
|
||
// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3.
|
||
// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС.
|
||
// Неопределено - страна не найдена ни в адресе, ни в классификаторе ОКСМ.
|
||
//
|
||
Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт
|
||
Результат = Неопределено;
|
||
|
||
Если КодСтраны = Неопределено И Наименование = Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
НормализованныйКод = КодСтраныМира(КодСтраны);
|
||
Если КодСтраны = Неопределено Тогда
|
||
УсловиеПоиска = "ИСТИНА";
|
||
ФильтрКлассификатора = Новый Структура;
|
||
Иначе
|
||
УсловиеПоиска = "Код=" + КонтрольКавычекВСтроке(НормализованныйКод);
|
||
ФильтрКлассификатора = Новый Структура("Код", НормализованныйКод);
|
||
КонецЕсли;
|
||
|
||
Если Наименование<>Неопределено Тогда
|
||
УсловиеПоиска = УсловиеПоиска + " И Наименование=" + КонтрольКавычекВСтроке(Наименование);
|
||
ФильтрКлассификатора.Вставить("Наименование", Наименование);
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС");
|
||
|
||
Запрос = Новый Запрос("
|
||
|ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС
|
||
|ИЗ
|
||
| Справочник.СтраныМира
|
||
|ГДЕ
|
||
| " + УсловиеПоиска + "
|
||
|УПОРЯДОЧИТЬ ПО
|
||
| Наименование
|
||
|");
|
||
|
||
Выборка = Запрос.Выполнить().Выбрать();
|
||
|
||
Если Выборка.Следующий() Тогда
|
||
ЗаполнитьЗначенияСвойств(Результат, Выборка);
|
||
Иначе
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
ДанныеКлассификатора = МодульРаботаСАдресами.ТаблицаКлассификатора();
|
||
СтрокиДанных = ДанныеКлассификатора.НайтиСтроки(ФильтрКлассификатора);
|
||
Если СтрокиДанных.Количество() = 0 Тогда
|
||
Возврат Неопределено;
|
||
Иначе
|
||
ЗаполнитьЗначенияСвойств(Результат, СтрокиДанных[0]);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает данные страны по коду.
|
||
//
|
||
// Параметры:
|
||
// Код - Строка, Число - код ОКСМ страны.
|
||
// ТипКода - Строка - варианты: КодСтраны (по умолчанию), Альфа2, Альфа3.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - описание страны. Содержит поля:
|
||
// * Наименование - Строка - Наименование страны.
|
||
// * Код - Строка - Код страны.
|
||
// * НаименованиеПолное - Строка - Полное наименование страны.
|
||
// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2.
|
||
// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3.
|
||
// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС.
|
||
// Неопределено - страна не найдена ни в адресе, ни в классификаторе ОКСМ.
|
||
//
|
||
Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, Знач ТипКода = "КодСтраны") Экспорт
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
ДанныеКлассификатора = МодульРаботаСАдресами.ТаблицаКлассификатора();
|
||
|
||
Если СтрСравнить(ТипКода, "Альфа2") = 0 Тогда
|
||
СтрокаДанных = ДанныеКлассификатора.Найти(ВРег(Код), "КодАльфа2");
|
||
ИначеЕсли СтрСравнить(ТипКода, "Альфа3") = 0 Тогда
|
||
СтрокаДанных = ДанныеКлассификатора.Найти(ВРег(Код), "КодАльфа3");
|
||
Иначе
|
||
СтрокаДанных = ДанныеКлассификатора.Найти(КодСтраныМира(Код), "Код");
|
||
КонецЕсли;
|
||
|
||
Если СтрокаДанных = Неопределено Тогда
|
||
Результат = Неопределено;
|
||
Иначе
|
||
Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС");
|
||
ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных);
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает данные о стране по наименованию страны.
|
||
//
|
||
// Параметры:
|
||
// Наименование - Строка - Наименование страны.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Описание страны. Содержит поля:
|
||
// * Наименование - Строка - Наименование страны.
|
||
// * Код - Строка - Код страны.
|
||
// * НаименованиеПолное - Строка - Полное наименование страны.
|
||
// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2.
|
||
// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3.
|
||
// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС.
|
||
// Неопределено - Страна не найдена в классификаторе.
|
||
//
|
||
Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
ДанныеКлассификатора = МодульРаботаСАдресами.ТаблицаКлассификатора();
|
||
|
||
СтрокаДанных = ДанныеКлассификатора.Найти(Наименование, "Наименование");
|
||
Если СтрокаДанных=Неопределено Тогда
|
||
Результат = Неопределено;
|
||
Иначе
|
||
Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС");
|
||
ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных);
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает ссылку на элемент справочника страны мира по коду или наименованию.
|
||
// Если элемент справочника СтраныМиры не найден, то он будет создан на основании данных заполнения.
|
||
//
|
||
// Параметры:
|
||
// КодИлиНаименование - Строка - код страны, код Альфа2, код Альфа3 или наименование страны.
|
||
// ДанныеЗаполнения - Структура - Необязательный. Данные для заполнения в случае создания нового элемента.
|
||
// Ключи структуры соответствуют реквизитам справочника СтраныМира.
|
||
//
|
||
// Возвращаемое значение:
|
||
// СправочникСсылка.СтраныМира - Ссылка на элемент справочника СтраныМиры.
|
||
// Если найдено несколько значений, то будет возвращено первое.
|
||
// Если ничего не найдено, данные заполнения не указаны, то возвращается пустая ссылка.
|
||
//
|
||
Функция СтранаМираПоКодуИлиНаименованию(КодИлиНаименование, ДанныеЗаполнения = Неопределено) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| СтраныМира.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Справочник.СтраныМира КАК СтраныМира
|
||
|ГДЕ
|
||
| (СтраныМира.Код = &КодИлиНаименование
|
||
| ИЛИ СтраныМира.КодАльфа2 = &КодИлиНаименование
|
||
| ИЛИ СтраныМира.КодАльфа3 = &КодИлиНаименование
|
||
| ИЛИ СтраныМира.Наименование = &КодИлиНаименование
|
||
| ИЛИ СтраныМира.НаименованиеПолное = &КодИлиНаименование)";
|
||
|
||
Запрос.УстановитьПараметр("КодИлиНаименование", КодИлиНаименование);
|
||
РезультатЗапроса = Запрос.Выполнить().Выбрать();
|
||
|
||
Если РезультатЗапроса.Следующий() Тогда
|
||
Возврат РезультатЗапроса.Ссылка;
|
||
КонецЕсли;
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда
|
||
Возврат Справочники.СтраныМира.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
ДанныеКлассификатора = МодульРаботаСАдресами.ТаблицаКлассификатора();
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = "ВЫБРАТЬ
|
||
| ТаблицаКлассификатор.Код,
|
||
| ТаблицаКлассификатор.КодАльфа2,
|
||
| ТаблицаКлассификатор.КодАльфа3,
|
||
| ТаблицаКлассификатор.Наименование,
|
||
| ТаблицаКлассификатор.НаименованиеПолное,
|
||
| ТаблицаКлассификатор.УчастникЕАЭС,
|
||
| ТаблицаКлассификатор.Неактуальный
|
||
|ПОМЕСТИТЬ ТаблицаКлассификатор
|
||
|ИЗ
|
||
| &ТаблицаКлассификатор КАК ТаблицаКлассификатор
|
||
|;
|
||
|
|
||
|////////////////////////////////////////////////////////////////////////////////
|
||
|ВЫБРАТЬ
|
||
| СтранаМира.Код,
|
||
| СтранаМира.КодАльфа2,
|
||
| СтранаМира.КодАльфа3,
|
||
| СтранаМира.Наименование,
|
||
| СтранаМира.НаименованиеПолное,
|
||
| СтранаМира.УчастникЕАЭС,
|
||
| СтранаМира.Неактуальный
|
||
|ИЗ
|
||
| ТаблицаКлассификатор КАК СтранаМира
|
||
|ГДЕ
|
||
| (СтранаМира.Код = &КодИлиНаименование
|
||
| ИЛИ СтранаМира.КодАльфа2 = &КодИлиНаименование
|
||
| ИЛИ СтранаМира.КодАльфа3 = &КодИлиНаименование
|
||
| ИЛИ СтранаМира.Наименование = &КодИлиНаименование
|
||
| ИЛИ СтранаМира.НаименованиеПолное = &КодИлиНаименование)";
|
||
|
||
Запрос.УстановитьПараметр("ТаблицаКлассификатор", ДанныеКлассификатора);
|
||
Запрос.УстановитьПараметр("КодИлиНаименование", КодИлиНаименование);
|
||
РезультатЗапроса = Запрос.Выполнить().Выбрать();
|
||
|
||
Если РезультатЗапроса.Следующий() Тогда
|
||
ДанныеЗаполнения = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(РезультатЗапроса);
|
||
КонецЕсли;
|
||
|
||
Если ДанныеЗаполнения = Неопределено
|
||
ИЛИ НЕ ДанныеЗаполнения.Свойство("Наименование")
|
||
ИЛИ ПустаяСтрока(ДанныеЗаполнения.Наименование) Тогда
|
||
Возврат Справочники.СтраныМира.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент();
|
||
ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеЗаполнения);
|
||
ОбъектСтраны.Записать();
|
||
|
||
Возврат ОбъектСтраны.Ссылка;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает список стран Евразийского экономического союза (ЕАЭС).
|
||
//
|
||
// Возвращаемое значение:
|
||
// - ТаблицаЗначений - Список стран Евразийского экономического союза (ЕАЭС).
|
||
// * Ссылка - СправочникСсылка.СтраныМира - Ссылка на элемент справочника страны.
|
||
// * Наименование - Строка - Наименование страны.
|
||
// * Код - Строка - Код страны.
|
||
// * НаименованиеПолное - Строка - Полное наименование страны.
|
||
// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2.
|
||
// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3.
|
||
Функция СтраныУчастникиЕАЭС() Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| СтраныМира.Ссылка КАК Ссылка,
|
||
| СтраныМира.Наименование КАК Наименование,
|
||
| СтраныМира.Код КАК Код,
|
||
| СтраныМира.НаименованиеПолное КАК НаименованиеПолное,
|
||
| СтраныМира.КодАльфа2 КАК КодАльфа2,
|
||
| СтраныМира.КодАльфа3 КАК КодАльфа3
|
||
|ИЗ
|
||
| Справочник.СтраныМира КАК СтраныМира
|
||
|ГДЕ
|
||
| СтраныМира.УчастникЕАЭС = ИСТИНА";
|
||
|
||
СтраныЕАЭС = Запрос.Выполнить().Выгрузить();
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда
|
||
Возврат СтраныЕАЭС;
|
||
КонецЕсли;
|
||
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
ДанныеКлассификатора = МодульРаботаСАдресами.ТаблицаКлассификатора();
|
||
|
||
Для каждого Страна Из ДанныеКлассификатора Цикл
|
||
Если Страна.УчастникЕАЭС Тогда
|
||
Отбор = Новый Структура();
|
||
Отбор.Вставить("Наименование", Страна.Наименование);
|
||
Отбор.Вставить("Код", Страна.Код);
|
||
Отбор.Вставить("НаименованиеПолное", Страна.НаименованиеПолное);
|
||
Отбор.Вставить("КодАльфа2", Страна.КодАльфа2);
|
||
Отбор.Вставить("КодАльфа3", Страна.КодАльфа3);
|
||
НайденныеСтроки = СтраныЕАЭС.НайтиСтроки(Отбор);
|
||
Если НайденныеСтроки.Количество() = 0 Тогда
|
||
НоваяСтрока = СтраныЕАЭС.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрока, Отбор);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Возврат СтраныЕАЭС;
|
||
|
||
КонецФункции
|
||
|
||
// Определяет, является ли страна участником Евразийского экономического союза (ЕАЭС).
|
||
//
|
||
// Параметры:
|
||
// Страна - Строка, СправочникСсылка.СтраныМира - код страны, код Альфа2, код Альфа3,
|
||
// наименование страны или ссылка на элемент справочника Страны мира.
|
||
// Возвращаемое значение:
|
||
// Булево - если Истина, то страна является государством-участником ЕАЭС.
|
||
Функция ЭтоСтранаУчастникЕАЭС(Страна) Экспорт
|
||
|
||
Если ТипЗнч(Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| СтраныМира.УчастникЕАЭС КАК УчастникЕАЭС
|
||
|ИЗ
|
||
| Справочник.СтраныМира КАК СтраныМира
|
||
|ГДЕ
|
||
| СтраныМира.Ссылка = &Ссылка";
|
||
|
||
Запрос.УстановитьПараметр("Ссылка", Страна);
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
Если НЕ РезультатЗапроса.Пустой() Тогда
|
||
СтрокаРезультата = РезультатЗапроса.Выбрать();
|
||
Если СтрокаРезультата.Следующий() Тогда
|
||
Возврат (СтрокаРезультата.УчастникЕАЭС = ИСТИНА);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
НайденнаяСтрана = СтранаМираПоКодуИлиНаименованию(Страна);
|
||
Если ЗначениеЗаполнено(НайденнаяСтрана) Тогда
|
||
Возврат НайденнаяСтрана.УчастникЕАЭС;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат Ложь;
|
||
|
||
КонецФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Обработчики событий формы и модуля объекта вызываемые при внедрении подсистемы.
|
||
|
||
// Обработчик для события формы ПриСозданииНаСервере.
|
||
// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - Произвольный - Объект-владелец контактной информации. Если это ссылка, то контактная информация
|
||
// будет получена из объекта по ссылке, иначе из таблицы КонтактнаяИнформация объекта.
|
||
// ДополнительныеПараметры - Структура - Описание настроек контактной информации - см. ПараметрыКонтактнойИнформации.
|
||
// Предыдущее название параметра ИмяЭлементаДляРазмещения. Устарел, следует
|
||
// использовать ДополнительныеПараметры. Группа, куда будут размещены элементы
|
||
// контактной информации.
|
||
// УдалитьПоложениеЗаголовкаКИ - ПоложениеЗаголовкаЭлементаФормы - Устарел, следует использовать ДополнительныеПараметры.
|
||
// Может принимать значения:
|
||
// ПоложениеЗаголовкаЭлементаФормы.Верх или
|
||
// ПоложениеЗаголовкаЭлементаФормы.Лево (по умолчанию).
|
||
// УдалитьИсключаемыеВиды - Массив - Устарел,следует использовать ДополнительныеПараметры.
|
||
// УдалитьОтложеннаяИнициализация - Массив - Устарел,следует использовать ДополнительныеПараметры.
|
||
//
|
||
Процедура ПриСозданииНаСервере(Форма, Объект, ДополнительныеПараметры = Неопределено, УдалитьПоложениеЗаголовкаКИ = "",
|
||
Знач УдалитьИсключаемыеВиды = Неопределено, УдалитьОтложеннаяИнициализация = Ложь) Экспорт
|
||
|
||
ТипПомещения = Неопределено;
|
||
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
|
||
|
||
ДополнительныеПараметры.Свойство("ТипПомещения", ТипПомещения);
|
||
ОтложеннаяИнициализация = ?(ДополнительныеПараметры.Свойство("ОтложеннаяИнициализация"), ДополнительныеПараметры.ОтложеннаяИнициализация, Ложь);
|
||
ПоложениеЗаголовкаКИ = ?(ДополнительныеПараметры.Свойство("ПоложениеЗаголовкаКИ"), ДополнительныеПараметры.ПоложениеЗаголовкаКИ, "");
|
||
ИсключаемыеВиды = ?(ДополнительныеПараметры.Свойство("ИсключаемыеВиды"), ДополнительныеПараметры.ИсключаемыеВиды, Неопределено);
|
||
СкрываемыеВиды = ?(ДополнительныеПараметры.Свойство("СкрываемыеВиды"), ДополнительныеПараметры.СкрываемыеВиды, Неопределено);
|
||
ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры.Свойство("ИмяЭлементаДляРазмещения"), ДополнительныеПараметры.ИмяЭлементаДляРазмещения, "ГруппаКонтактнаяИнформация");
|
||
ОбработкаНавигационнойСсылки = ?(ДополнительныеПараметры.Свойство("ОбработкаНавигационнойСсылки"), ДополнительныеПараметры.ОбработкаНавигационнойСсылки, Ложь);
|
||
Иначе
|
||
ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры = Неопределено, "ГруппаКонтактнаяИнформация", ДополнительныеПараметры);
|
||
ОтложеннаяИнициализация = УдалитьОтложеннаяИнициализация;
|
||
ИсключаемыеВиды = УдалитьИсключаемыеВиды;
|
||
СкрываемыеВиды = Неопределено;
|
||
ПоложениеЗаголовкаКИ = УдалитьПоложениеЗаголовкаКИ;
|
||
ОбработкаНавигационнойСсылки = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если ИсключаемыеВиды = Неопределено Тогда
|
||
ИсключаемыеВиды = Новый Массив;
|
||
КонецЕсли;
|
||
|
||
Если СкрываемыеВиды = Неопределено Тогда
|
||
СкрываемыеВиды = Новый Массив;
|
||
КонецЕсли;
|
||
|
||
ДобавляемыеРеквизиты = Новый Массив;
|
||
ПроверитьНаличиеРеквизитовКонтактнойИнформации(Форма, ДобавляемыеРеквизиты);
|
||
|
||
// Кэширование часто используемых значений
|
||
СсылкаНаОбъект = Объект.Ссылка;
|
||
МетаданныеОбъекта = СсылкаНаОбъект.Метаданные();
|
||
ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя();
|
||
ИмяОбъекта = МетаданныеОбъекта.Имя;
|
||
|
||
ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных);
|
||
ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКонтактнойИнформации, "Используется");
|
||
Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда
|
||
|
||
ПараметрыВыводаКонтактнойИнформации = Новый Структура();
|
||
ПараметрыВыводаКонтактнойИнформации.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения);
|
||
ПараметрыВыводаКонтактнойИнформации.Вставить("ПоложениеЗаголовкаКИ", ПоложениеЗаголовкаКИ);
|
||
ПараметрыВыводаКонтактнойИнформации.Вставить("ОтложеннаяИнициализация", ОтложеннаяИнициализация);
|
||
ПараметрыВыводаКонтактнойИнформации.Вставить("ИсключаемыеВиды", ИсключаемыеВиды);
|
||
ПараметрыВыводаКонтактнойИнформации.Вставить("СкрываемыеВиды", СкрываемыеВиды);
|
||
ПараметрыВыводаКонтактнойИнформации.Вставить("СсылкаНаОбъект", СсылкаНаОбъект);
|
||
|
||
СкрытьКонтактнуюИнформацию(Форма, ДобавляемыеРеквизиты, ПараметрыВыводаКонтактнойИнформации);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
РеквизитыОбъекта = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты;
|
||
ЕстьКолонкаДействуетС = (РеквизитыОбъекта.Найти("ДействуетС") <> Неопределено);
|
||
ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти = (РеквизитыОбъекта.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено);
|
||
|
||
Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда
|
||
ТекстЗапроса = "ВЫБРАТЬ
|
||
| КонтактнаяИнформация.Представление КАК Представление,
|
||
| КонтактнаяИнформация.НомерСтроки КАК НомерСтроки,
|
||
| КонтактнаяИнформация.Вид КАК Вид,
|
||
| ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений,
|
||
| КонтактнаяИнформация.ЗначенияПолей,
|
||
| КонтактнаяИнформация.Значение,
|
||
| """" КАК ДействуетС,
|
||
| 0 КАК ИдентификаторСтрокиТабличнойЧасти,
|
||
| ЛОЖЬ КАК ЭтоИсторическаяКонтактнаяИнформация
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
| ЛЕВОЕ СОЕДИНЕНИЕ " + ПолноеИмяОбъектаМетаданных + ".КонтактнаяИнформация КАК КонтактнаяИнформация
|
||
| ПО (КонтактнаяИнформация.Вид = ВидыКонтактнойИнформации.Ссылка)
|
||
|ГДЕ
|
||
| КонтактнаяИнформация.Ссылка = &Ссылка УПОРЯДОЧИТЬ ПО Вид, ДействуетС";
|
||
|
||
Если ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти Тогда
|
||
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "0 КАК ИдентификаторСтрокиТабличнойЧасти",
|
||
"ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0) КАК ИдентификаторСтрокиТабличнойЧасти");
|
||
КонецЕсли;
|
||
|
||
Если ЕстьКолонкаДействуетС Тогда
|
||
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, """"" КАК ДействуетС", "КонтактнаяИнформация.ДействуетС КАК ДействуетС");
|
||
КонецЕсли;
|
||
Запрос = Новый Запрос(ТекстЗапроса);
|
||
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
|
||
КонтактнаяИнформация = Запрос.Выполнить().Выгрузить();
|
||
Иначе
|
||
КонтактнаяИнформация = Объект.КонтактнаяИнформация.Выгрузить();
|
||
|
||
Если ЕстьКолонкаДействуетС Тогда
|
||
ТипБулево = Новый ОписаниеТипов("Булево");
|
||
КонтактнаяИнформация.Колонки.Добавить("ХранитьИсториюИзменений", ТипБулево);
|
||
КонтактнаяИнформация.Колонки.Добавить("ЭтоИсторическаяКонтактнаяИнформация", ТипБулево);
|
||
КонтактнаяИнформация.Сортировать("Вид, ДействуетС");
|
||
Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл
|
||
СтрокаКонтактнойИнформации.ХранитьИсториюИзменений = СтрокаКонтактнойИнформации.Вид.ХранитьИсториюИзменений;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЕстьКолонкаДействуетС Тогда
|
||
ПредыдущийВид = Неопределено;
|
||
Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл
|
||
Если СтрокаКонтактнойИнформации.ХранитьИсториюИзменений
|
||
И (ПредыдущийВид = Неопределено ИЛИ ПредыдущийВид <> СтрокаКонтактнойИнформации.Вид) Тогда
|
||
Отбор = Новый Структура("Вид", СтрокаКонтактнойИнформации.Вид);
|
||
НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
ПоследняяДата = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 1).ДействуетС;
|
||
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
|
||
Если НайденнаяСтрока.ДействуетС < ПоследняяДата Тогда
|
||
НайденнаяСтрока.ЭтоИсторическаяКонтактнаяИнформация = Истина;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ПредыдущийВид = СтрокаКонтактнойИнформации.Вид;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ТекстЗапросаИсторическаяИнформация = " КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация КАК ЭтоИсторическаяКонтактнаяИнформация,
|
||
| КонтактнаяИнформация.ДействуетС КАК ДействуетС,";
|
||
Иначе
|
||
ТекстЗапросаИсторическаяИнформация = "ЛОЖЬ КАК ЭтоИсторическаяКонтактнаяИнформация,0 КАК ДействуетС, ";
|
||
КонецЕсли;
|
||
|
||
ТекстЗапроса = " ВЫБРАТЬ
|
||
| КонтактнаяИнформация.Представление КАК Представление,
|
||
| КонтактнаяИнформация.Значение КАК Значение,
|
||
| КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
|
||
| КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, " + ТекстЗапросаИсторическаяИнформация + "
|
||
| КонтактнаяИнформация.Вид КАК Вид,
|
||
| 0 КАК ИдентификаторСтрокиТабличнойЧасти
|
||
|ПОМЕСТИТЬ
|
||
| КонтактнаяИнформация
|
||
|ИЗ
|
||
| &ТаблицаКонтактнойИнформации КАК КонтактнаяИнформация
|
||
|ИНДЕКСИРОВАТЬ ПО
|
||
| Вид
|
||
|;////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.Ссылка КАК Вид,
|
||
|ВЫБОР
|
||
| КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """"
|
||
| ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида
|
||
| ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных
|
||
|КОНЕЦ КАК ИмяПредопределенногоВида,
|
||
| ВидыКонтактнойИнформации.Тип КАК Тип,
|
||
| ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение,
|
||
| ВидыКонтактнойИнформации.ВидПоляДругое КАК ВидПоляДругое,
|
||
| ВЫБОР
|
||
| КОГДА &ЭтоОсновнойЯзык
|
||
| ТОГДА ВидыКонтактнойИнформации.Наименование
|
||
| ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, ВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150))
|
||
| КОНЕЦ КАК Наименование,
|
||
| ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений,
|
||
| ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге,
|
||
| ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти,
|
||
| ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания,
|
||
| ВидыКонтактнойИнформации.МеждународныйФорматАдреса КАК МеждународныйФорматАдреса,
|
||
| ЕСТЬNULL(КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация, ЛОЖЬ) КАК ЭтоИсторическаяКонтактнаяИнформация,
|
||
| ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление,
|
||
| ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей,
|
||
| ЕСТЬNULL(КонтактнаяИнформация.Значение, """") КАК Значение,
|
||
| ЕСТЬNULL(КонтактнаяИнформация.ДействуетС, 0) КАК ДействуетС,
|
||
| ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки,
|
||
| 0 КАК ИдентификаторСтрокиТабличнойЧасти,
|
||
| ВЫРАЗИТЬ("""" КАК СТРОКА(200)) КАК ИмяРеквизита,
|
||
| ВидыКонтактнойИнформации.ПометкаУдаления КАК ПометкаУдаления,
|
||
| ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ЛЕВОЕ СОЕДИНЕНИЕ
|
||
| КонтактнаяИнформация КАК КонтактнаяИнформация
|
||
|ПО
|
||
| ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид
|
||
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации.Представления КАК ВидыКонтактнойИнформацииПредставления
|
||
|ПО ВидыКонтактнойИнформацииПредставления.Ссылка = ВидыКонтактнойИнформации.Ссылка
|
||
| И ВидыКонтактнойИнформацииПредставления.КодЯзыка = &КодЯзыка
|
||
|ГДЕ
|
||
| ВидыКонтактнойИнформации.Используется
|
||
| И ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА)
|
||
| И (
|
||
| ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
|
||
| ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ)
|
||
| И ВидыКонтактнойИнформации.Ссылка НЕ В (&СкрываемыеВиды)
|
||
|УПОРЯДОЧИТЬ ПО
|
||
| ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ
|
||
|";
|
||
|
||
Если ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти Тогда
|
||
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "0 КАК ИдентификаторСтрокиТабличнойЧасти",
|
||
"ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0) КАК ИдентификаторСтрокиТабличнойЧасти");
|
||
КонецЕсли;
|
||
|
||
Запрос = Новый Запрос(ТекстЗапроса);
|
||
Запрос.УстановитьПараметр("ТаблицаКонтактнойИнформации", КонтактнаяИнформация);
|
||
Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКонтактнойИнформации);
|
||
Запрос.УстановитьПараметр("Владелец", СсылкаНаОбъект);
|
||
Запрос.УстановитьПараметр("СкрываемыеВиды", СкрываемыеВиды);
|
||
Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
|
||
Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
КонтактнаяИнформация = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией).Строки;
|
||
УстановитьПривилегированныйРежим(Ложь);
|
||
|
||
КонвертацияКонтактнойИнформацииВJSON(КонтактнаяИнформация);
|
||
|
||
КонтактнаяИнформация.Сортировать("РеквизитДопУпорядочивания, НомерСтроки");
|
||
СоздатьРеквизитыКонтактнойИнформации(Форма, ДобавляемыеРеквизиты, ИмяОбъекта, ИсключаемыеВиды, КонтактнаяИнформация, ОтложеннаяИнициализация, ОбработкаНавигационнойСсылки);
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ,
|
||
ОтложеннаяИнициализация, ИсключаемыеВиды, СкрываемыеВиды);
|
||
ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект;
|
||
ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения = ТипПомещения;
|
||
ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки = ОбработкаНавигационнойСсылки;
|
||
|
||
// Кеш значений всех видов контактной информации у данного объекта.
|
||
ДанныеВидовКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации(
|
||
КонтактнаяИнформация.ВыгрузитьКолонку("Вид"));
|
||
|
||
Отбор = Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
КоличествоАдресов = КонтактнаяИнформация.НайтиСтроки(Отбор).Количество();
|
||
|
||
// Создадим элементы на форме и заполним значения реквизитов.
|
||
СозданныеЭлементы = ОбщегоНазначения.СкопироватьРекурсивно(ИсключаемыеВиды);
|
||
ПредыдущийВид = Неопределено;
|
||
|
||
Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл
|
||
|
||
Если СтрокаКИ.ЭтоРеквизитТабличнойЧасти Тогда
|
||
СоздатьЭлементыТабличнойЧасти(Форма, ИмяОбъекта, ИмяЭлементаДляРазмещения, СтрокаКИ, ДанныеВидовКонтактнойИнформации);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Если СтрокаКИ.ПометкаУдаления И ПустаяСтрока(СтрокаКИ.ЗначенияПолей) И ПустаяСтрока(СтрокаКИ.Значение) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид);
|
||
СтатическийЭлемент = ИндексЭлемента <> Неопределено;
|
||
ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид);
|
||
|
||
Если ОтложеннаяИнициализация Тогда
|
||
|
||
ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ,,
|
||
СтатическийЭлемент, ИмяЭлементаДляРазмещения);
|
||
Если СтатическийЭлемент Тогда
|
||
СозданныеЭлементы.Удалить(ИндексЭлемента);
|
||
КонецЕсли;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ,,
|
||
НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация, ИмяЭлементаДляРазмещения);
|
||
|
||
Если СтатическийЭлемент Тогда
|
||
СозданныеЭлементы.Удалить(ИндексЭлемента);
|
||
Иначе
|
||
|
||
СледующаяСтрока = ?(СозданныеЭлементы.Количество() = 0, Неопределено,
|
||
ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ));
|
||
|
||
Если НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация Тогда
|
||
ДобавитьСтрокуКонтактнойИнформации(Форма, СтрокаКИ, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация Тогда
|
||
ПредыдущийВид = СтрокаКИ.Вид;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
ОбновитьКонтекстноеМеню(Форма, ИмяЭлементаДляРазмещения);
|
||
|
||
Если Не ОтложеннаяИнициализация
|
||
И Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].СписокДобавляемыхЭлементов.Количество() > 0 Тогда
|
||
ДобавитьКнопкуДополнительногоПоляКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения);
|
||
Иначе
|
||
ДобавитьПояснениеПоСбросуНастроекФормы(Форма, ИмяЭлементаДляРазмещения, ОтложеннаяИнициализация);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обработчик для события формы ПриЧтенииНаСервере.
|
||
// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - Произвольный - Объект-владелец контактной информации.
|
||
// ИмяЭлементаДляРазмещения - Строка - группа, куда будут размещены элементы контактной информации.
|
||
//
|
||
Процедура ПриЧтенииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") Экспорт
|
||
|
||
СписокРеквизитовФормы = Форма.ПолучитьРеквизиты();
|
||
|
||
ПервыйЗапуск = Истина;
|
||
Для Каждого Реквизит Из СписокРеквизитовФормы Цикл
|
||
Если Реквизит.Имя = "ПараметрыКонтактнойИнформации" И ТипЗнч(Форма.ПараметрыКонтактнойИнформации) = Тип("Структура") Тогда
|
||
ПервыйЗапуск = Ложь;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ПервыйЗапуск Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Параметры = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
|
||
СсылкаНаОбъект = Объект.Ссылка;
|
||
МетаданныеОбъекта = СсылкаНаОбъект.Метаданные();
|
||
ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя();
|
||
ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "");
|
||
ГруппаВидовКИ = ВидКонтактнойИнформацииПоИмени(ИмяГруппыВидовКИ);
|
||
ИмяЭлементаДляРазмещения = Параметры.ГруппаДляРазмещения;
|
||
|
||
ПоложениеЗаголовкаКИ = ?(ЗначениеЗаполнено(Параметры.ПоложениеЗаголовка), ПредопределенноеЗначение(Параметры.ПоложениеЗаголовка), ПоложениеЗаголовкаЭлементаФормы.Лево);
|
||
ВыполненаОтложеннаяИнициализация = Параметры.ВыполненаОтложеннаяИнициализация;
|
||
ОтложеннаяИнициализация = Параметры.ОтложеннаяИнициализация И Не ВыполненаОтложеннаяИнициализация;
|
||
|
||
ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется");
|
||
Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда
|
||
МассивУдаляемыхРеквизитов = Параметры.ДобавленныеРеквизиты;
|
||
Иначе
|
||
УдалитьКомандыИЭлементыФормы(Форма, ИмяЭлементаДляРазмещения);
|
||
|
||
МассивУдаляемыхРеквизитов = Новый Массив;
|
||
ИмяОбъекта = Объект.Ссылка.Метаданные().Имя;
|
||
|
||
СтатическиеРеквизиты = ОбщегоНазначения.СкопироватьРекурсивно(Параметры.ИсключаемыеВиды);
|
||
ИменаТабличныхЧастейПоВидамКИ = Неопределено;
|
||
|
||
Отбор = Новый Структура("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения);
|
||
КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Для Каждого РеквизитФормы Из КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
|
||
|
||
Если РеквизитФормы.ЭтоРеквизитТабличнойЧасти Тогда
|
||
|
||
Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда
|
||
Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина);
|
||
ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор, "Вид");
|
||
ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта);
|
||
КонецЕсли;
|
||
|
||
ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[РеквизитФормы.Вид];
|
||
МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита);
|
||
МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита + "Значение");
|
||
|
||
ИначеЕсли НЕ РеквизитФормы.Свойство("ЭтоИсторическаяКонтактнаяИнформация")
|
||
ИЛИ НЕ РеквизитФормы.ЭтоИсторическаяКонтактнаяИнформация Тогда
|
||
|
||
Индекс = СтатическиеРеквизиты.Найти(РеквизитФормы.Вид);
|
||
|
||
Если Индекс = Неопределено Тогда // Реквизит создается динамически.
|
||
Если Не ОтложеннаяИнициализация И ЗначениеЗаполнено(РеквизитФормы.ИмяРеквизита) Тогда
|
||
МассивУдаляемыхРеквизитов.Добавить(РеквизитФормы.ИмяРеквизита);
|
||
КонецЕсли;
|
||
Иначе
|
||
СтатическиеРеквизиты.Удалить(Индекс);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Для Каждого РеквизитФормы Из КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
|
||
Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(РеквизитФормы);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Форма.ИзменитьРеквизиты(, МассивУдаляемыхРеквизитов);
|
||
|
||
ДополнительныеПараметры = ПараметрыКонтактнойИнформации();
|
||
ДополнительныеПараметры.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения;
|
||
ДополнительныеПараметры.ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаКИ;
|
||
ДополнительныеПараметры.ИсключаемыеВиды = Параметры.ИсключаемыеВиды;
|
||
ДополнительныеПараметры.СкрываемыеВиды = Параметры.СкрываемыеВиды;
|
||
ДополнительныеПараметры.ОтложеннаяИнициализация = ОтложеннаяИнициализация;
|
||
ПриСозданииНаСервере(Форма, Объект, ДополнительныеПараметры);
|
||
|
||
Параметры = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
Параметры.ВыполненаОтложеннаяИнициализация = ВыполненаОтложеннаяИнициализация;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обработчик для события формы ПослеЗаписиНаСервере.
|
||
// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - Произвольный - Объект-владелец контактной информации.
|
||
//
|
||
Процедура ПослеЗаписиНаСервере(Форма, Объект) Экспорт
|
||
|
||
ИмяОбъекта = Объект.Ссылка.Метаданные().Имя;
|
||
|
||
// Только для контактной информации в составе табличной части.
|
||
Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина);
|
||
СтрокиТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор);
|
||
ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(СтрокиТабличнойЧасти, ИмяОбъекта);
|
||
|
||
Для Каждого СтрокаТаблицы Из СтрокиТабличнойЧасти Цикл
|
||
ВидИнформации = СтрокаТаблицы.Вид;
|
||
ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита;
|
||
ТабличнаяЧастьФормы = Форма.Объект[ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]];
|
||
|
||
Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл
|
||
|
||
Отбор = Новый Структура;
|
||
Отбор.Вставить("Вид", ВидИнформации);
|
||
Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧастиФормы.ИдентификаторСтрокиТабличнойЧасти);
|
||
НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
|
||
Если НайденныеСтроки.Количество() = 1 Тогда
|
||
|
||
СтрокаКИ = НайденныеСтроки[0];
|
||
СтрокаТабличнойЧастиФормы[ИмяРеквизита] = СтрокаКИ.Представление;
|
||
СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"] = СтрокаКИ.Значение;
|
||
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обработчик для события формы ОбработкаПроверкиЗаполненияНаСервере.
|
||
// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - Произвольный - Объект-владелец контактной информации.
|
||
// Отказ - Булево - Если Истина, то во время проверки были обнаружены ошибки.
|
||
//
|
||
Процедура ОбработкаПроверкиЗаполненияНаСервере(Форма, Объект, Отказ) Экспорт
|
||
|
||
ИмяОбъекта = Объект.Ссылка.Метаданные().Имя;
|
||
УровеньОшибок = 0;
|
||
ПредыдущийВид = Неопределено;
|
||
|
||
ИменаТабличныхЧастейПоВидамКИ = Неопределено;
|
||
|
||
Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
|
||
|
||
ВидИнформации = СтрокаТаблицы.Вид;
|
||
ТипИнформации = СтрокаТаблицы.Тип;
|
||
Комментарий = СтрокаТаблицы.Комментарий;
|
||
ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита;
|
||
СвойствоВидаИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидИнформации, "ОбязательноеЗаполнение, РедактированиеТолькоВДиалоге");
|
||
ОбязательноеЗаполнение = СвойствоВидаИнформации.ОбязательноеЗаполнение;
|
||
|
||
Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда
|
||
|
||
Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда
|
||
Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина);
|
||
ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор , "Вид");
|
||
ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта);
|
||
КонецЕсли;
|
||
|
||
ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации];
|
||
ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти];
|
||
|
||
Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл
|
||
|
||
Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита];
|
||
Поле = "Объект." + ИмяТабличнойЧасти + "[" + (СтрокаТабличнойЧастиФормы.НомерСтроки - 1) + "]." + ИмяРеквизита;
|
||
|
||
Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда
|
||
|
||
ОбщегоНазначения.СообщитьПользователю(
|
||
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле);
|
||
ТекущийУровеньОшибок = 2;
|
||
|
||
Иначе
|
||
|
||
Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"];
|
||
|
||
ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, ВидИнформации,
|
||
ТипИнформации, ИмяРеквизита, , Поле);
|
||
|
||
СтрокаТабличнойЧастиФормы[ИмяРеквизита] = Представление;
|
||
СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"] = Значение;
|
||
|
||
КонецЕсли;
|
||
|
||
УровеньОшибок = ?(ТекущийУровеньОшибок > УровеньОшибок, ТекущийУровеньОшибок, УровеньОшибок);
|
||
|
||
КонецЦикла;
|
||
|
||
Иначе
|
||
|
||
ЭлементФормы = Форма.Элементы.Найти(ИмяРеквизита);
|
||
Если ЭлементФормы = Неопределено Или ВидИнформации.ПометкаУдаления Тогда
|
||
Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация.
|
||
КонецЕсли;
|
||
|
||
Если (СвойствоВидаИнформации.РедактированиеТолькоВДиалоге
|
||
Или ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница)
|
||
И Не УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияЗаполнена(Строка(Форма[ИмяРеквизита])) Тогда
|
||
Представление = "";
|
||
Иначе
|
||
Представление = Форма[ИмяРеквизита];
|
||
КонецЕсли;
|
||
|
||
Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление)
|
||
И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда
|
||
// И нет других строк с данными для видов КИ с множественными значениями.
|
||
|
||
ОбщегоНазначения.СообщитьПользователю(
|
||
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита);
|
||
ТекущийУровеньОшибок = 2;
|
||
|
||
Иначе
|
||
|
||
ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.Значение,
|
||
ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий);
|
||
|
||
КонецЕсли;
|
||
|
||
УровеньОшибок = ?(ТекущийУровеньОшибок > УровеньОшибок, ТекущийУровеньОшибок, УровеньОшибок);
|
||
|
||
КонецЕсли;
|
||
|
||
ПредыдущийВид = ВидИнформации;
|
||
|
||
КонецЦикла;
|
||
|
||
Если УровеньОшибок <> 0 Тогда
|
||
Отказ = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обработчик для события формы ПередЗаписьюНаСервере.
|
||
// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы.
|
||
//
|
||
// Параметры:
|
||
// Форма - УправляемаяФорма - Форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - СправочникОбъект, ДокументСсылка - Объект-владелец контактной информации.
|
||
// ДанныеФормыСтруктура - Объект, содержащий табличную часть с контактной информацией. Поддерживает работу
|
||
// со скрываемыми видами контактной информации только для уже существующих объектов,
|
||
// из-за невозможности установить ссылку для нового объекта.
|
||
// Отказ - Булево - Если Истина, то объект не был записан, т.к. во время записи возникли ошибки.
|
||
//
|
||
Процедура ПередЗаписьюНаСервере(Форма, Объект, Отказ = Ложь) Экспорт
|
||
|
||
КонтактнаяИнформация = КонтактнаяИнформацияИзРеквизитовФормы(Форма, Объект);
|
||
|
||
ЭтоПараметрыОсновногоОбъекта = Истина;
|
||
ПараметрыКонтактнойИнформации = Неопределено;
|
||
СкрываемыеВиды = Новый Массив;
|
||
|
||
ОпределитьПараметрыКонтактнойИнформацииПоВладельцу(Форма, Объект, ПараметрыКонтактнойИнформации, ЭтоПараметрыОсновногоОбъекта, СкрываемыеВиды);
|
||
|
||
Если Объект.Ссылка.Пустая() И ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда
|
||
|
||
Если ЭтоПараметрыОсновногоОбъекта Тогда
|
||
|
||
НоваяСсылка = Объект.ПолучитьСсылкуНового();
|
||
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка);
|
||
Если НоваяСсылка = МенеджерОбъекта.ПустаяСсылка() Тогда
|
||
Объект.УстановитьСсылкуНового(МенеджерОбъекта.ПолучитьСсылку());
|
||
КонецЕсли;
|
||
ПараметрыКонтактнойИнформации.Владелец = Объект.ПолучитьСсылкуНового();
|
||
|
||
Иначе
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если СкрываемыеВиды.Количество() = 0 Тогда
|
||
Объект.КонтактнаяИнформация.Очистить();
|
||
Иначе
|
||
|
||
Индекс = Объект.КонтактнаяИнформация.Количество() -1;
|
||
Пока Индекс >= 0 Цикл
|
||
СтрокаТаблицы = Объект.КонтактнаяИнформация.Получить(Индекс);
|
||
Если СкрываемыеВиды.Найти(СтрокаТаблицы.Вид) = Неопределено Тогда
|
||
Объект.КонтактнаяИнформация.Удалить(СтрокаТаблицы);
|
||
КонецЕсли;
|
||
Индекс = Индекс - 1;
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
УстановитьКонтактнуюИнформациюОбъекта(Объект, КонтактнаяИнформация);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Добавляет (удаляет) поле ввода или комментарий на форму, обновляя данные.
|
||
// Вызывается из модуля формы объекта-владельца контактной информации.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - Произвольный - Объект-владелец контактной информации.
|
||
// Результат - Произвольный - Необязательный служебный реквизит, полученный из предыдущего обработчика события.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Неопределено - значение не используется, обратная совместимость.
|
||
//
|
||
Функция ОбновитьКонтактнуюИнформацию(Форма, Объект, Результат = Неопределено) Экспорт
|
||
|
||
Если Результат = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
Если Результат.Свойство("ЭтоДобавлениеКомментария") Тогда
|
||
ИзменитьКомментарий(Форма, Результат.ИмяРеквизита, Результат.ИмяЭлементаДляРазмещения);
|
||
ИначеЕсли Результат.Свойство("ДобавляемыйВид") Тогда
|
||
ДобавитьСтрокуКонтактнойИнформации(Форма, Результат, Результат.ИмяЭлементаДляРазмещения);
|
||
ИначеЕсли Результат.Свойство("ПоменятьМестамиЭлементы") Тогда
|
||
|
||
Отбор = Новый Структура("ИмяРеквизита", Результат.ПервыйЭлемент);
|
||
ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
|
||
ПервыйЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0];
|
||
Отбор = Новый Структура("ИмяРеквизита", Результат.ВторойЭлемент);
|
||
ВторойЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0];
|
||
|
||
СписокПереносимыхСвойств = "Комментарий,Представление,Значение";
|
||
ВременныйБуфер = Новый Структура(СписокПереносимыхСвойств);
|
||
|
||
ЗаполнитьЗначенияСвойств(ВременныйБуфер, ПервыйЭлемент);
|
||
ЗаполнитьЗначенияСвойств(ПервыйЭлемент, ВторойЭлемент, СписокПереносимыхСвойств);
|
||
ЗаполнитьЗначенияСвойств(ВторойЭлемент, ВременныйБуфер);
|
||
|
||
Форма[Результат.ПервыйЭлемент] = ПервыйЭлемент.Представление;
|
||
Форма[Результат.ВторойЭлемент] = ВторойЭлемент.Представление;
|
||
|
||
Форма.Элементы[Результат.ПервыйЭлемент].РасширеннаяПодсказка.Заголовок = ПервыйЭлемент.Комментарий;
|
||
Форма.Элементы[Результат.ВторойЭлемент].РасширеннаяПодсказка.Заголовок = ВторойЭлемент.Комментарий;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Результат.Свойство("ОбновитьКонтекстноеМеню") Тогда
|
||
Если Результат.Свойство("ИмяЭлементаДляРазмещения") Тогда
|
||
ОбновитьКонтекстноеМеню(Форма, Результат.ИмяЭлементаДляРазмещения);
|
||
|
||
Если Результат.Свойство("ИмяРеквизита") Тогда
|
||
ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
|
||
Отбор = Новый Структура("ИмяРеквизита", Результат.ИмяРеквизита);
|
||
НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0];
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(НайденнаяСтрока.Значение) Тогда
|
||
КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(НайденнаяСтрока.Значение);
|
||
КонтактнаяИнформацияПоПолям.Comment = ?(Результат.Свойство("Комментарий"), Результат.Комментарий, "");
|
||
НайденнаяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
Для каждого ИмяЭлементаРазмещения Из Форма.ПараметрыКонтактнойИнформации Цикл
|
||
ОбновитьКонтекстноеМеню(Форма, ИмяЭлементаРазмещения.Ключ);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
// Обработчик подписки события "ОбработкаЗаполнения".
|
||
//
|
||
// Параметры:
|
||
// Источник - Произвольный - объект, содержащий контактную информацию.
|
||
// ДанныеЗаполнения - Структура - данные с контактной информацией для заполнения объекта.
|
||
// ТекстЗаполнения - Строка - не используется.
|
||
// СтандартнаяОбработка - Булево - не используется.
|
||
//
|
||
Процедура ОбработкаЗаполненияКонтактнойИнформации(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
|
||
|
||
ОбработкаЗаполненияКонтактнойИнформацииОбъекта(Источник, ДанныеЗаполнения);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обработчик подписки события "ПередЗаписью" для обновления контактной информации для списков.
|
||
//
|
||
// Параметры:
|
||
// Объект - Произвольный - Объект, содержащий контактную информацию.
|
||
// Отказ - Булево - Не используется, обратная совместимость.
|
||
//
|
||
Процедура ОбработкаОбновленияКонтактнойИнформации(Объект, Отказ) Экспорт
|
||
|
||
Если Объект.ОбменДанными.Загрузка Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОбновитьКонтактнуюИнформациюДляСписков(Объект);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обработчик подписки события "ОбработкаЗаполнения" для документов.
|
||
//
|
||
// Параметры:
|
||
// Источник - Произвольный - Объект, содержащий контактную информацию.
|
||
// ДанныеЗаполнения - Структура - Данные с контактной информацией для заполнения объекта.
|
||
// ТекстЗаполнения - Строка, Неопределено - Данные заполнения реквизита Наименование.
|
||
// СтандартнаяОбработка - Булево - Не используется.
|
||
//
|
||
Процедура ОбработкаЗаполненияКонтактнойИнформацииДокумента(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
|
||
|
||
ОбработкаЗаполненияКонтактнойИнформацииОбъекта(Источник, ДанныеЗаполнения);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Выполняет отложенную инициализацию реквизитов и элементов контактной информации.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации.
|
||
// Объект - Произвольный - объект-владелец контактной информации.
|
||
// ИмяЭлементаДляРазмещения - Строка - имя группы, где размещена контактная информация.
|
||
//
|
||
Процедура ВыполнитьОтложеннуюИнициализацию(Форма, Объект, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") Экспорт
|
||
|
||
КонтактнаяИнформацияЗаглушка = Форма.Элементы.Найти("КонтактнаяИнформацияЗаглушка"); // временный элемент
|
||
Если КонтактнаяИнформацияЗаглушка <> Неопределено Тогда
|
||
Форма.Элементы.Удалить(КонтактнаяИнформацияЗаглушка);
|
||
КонецЕсли;
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
|
||
КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(, "Вид, Представление, Значение, Комментарий");
|
||
Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Очистить();
|
||
|
||
ПоложениеЗаголовкаКИ = ?(ЗначениеЗаполнено(ПараметрыКонтактнойИнформации.ПоложениеЗаголовка), ПредопределенноеЗначение(ПараметрыКонтактнойИнформации.ПоложениеЗаголовка), ПоложениеЗаголовкаЭлементаФормы.Лево);
|
||
ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, ПараметрыКонтактнойИнформации.ИсключаемыеВиды);
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
|
||
Для Каждого ВидКонтактнойИнформации Из ПараметрыКонтактнойИнформации.ИсключаемыеВиды Цикл
|
||
|
||
Отбор = Новый Структура("Вид", ВидКонтактнойИнформации);
|
||
МассивСтрок = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
|
||
Если МассивСтрок.Количество() > 0 Тогда
|
||
СохраненноеЗначение = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор)[0];
|
||
ТекущееЗначение = МассивСтрок[0];
|
||
ЗаполнитьЗначенияСвойств(ТекущееЗначение, СохраненноеЗначение);
|
||
Форма[ТекущееЗначение.ИмяРеквизита] = СохраненноеЗначение.Представление;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если Форма.Элементы.Найти("ПустаяДекорацияКонтактнаяИнформация") <> Неопределено Тогда
|
||
Форма.Элементы.ПустаяДекорацияКонтактнаяИнформация.Видимость = Ложь;
|
||
КонецЕсли;
|
||
|
||
ПараметрыКонтактнойИнформации.ВыполненаОтложеннаяИнициализация = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Вспомогательные функции и конструкторы.
|
||
|
||
// Возвращает ссылку на вид контактной информации.
|
||
// Если по виден не был найден по имени, то выполняется поиск по именам предопределенных элементов.
|
||
//
|
||
// Параметры:
|
||
// Имя - Строка - Уникальное имя вида контактной информации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на элемент справочника виды контактной информации.
|
||
//
|
||
Функция ВидКонтактнойИнформацииПоИмени(Имя) Экспорт
|
||
|
||
Вид = Неопределено;
|
||
Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда
|
||
Виды = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ВидыКонтактнойИнформацииПоИмени();
|
||
Вид = Виды.Получить(Имя);
|
||
Иначе
|
||
Виды = ПредопределенныеВидыКонтактнойИнформации(Имя);
|
||
Если Виды.Количество() > 0 Тогда
|
||
Вид = Виды[0].Ссылка;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Вид <> Неопределено Тогда
|
||
Возврат Вид;
|
||
КонецЕсли;
|
||
|
||
Возврат Справочники.ВидыКонтактнойИнформации[Имя];
|
||
|
||
КонецФункции
|
||
|
||
// Описание параметров контактной информации, используемых в обработчике ПриСозданииНаСервере.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - параметры контактной информации.
|
||
// * Индекс - Строка - индекс адреса.
|
||
// * Страна - Строка - страна адреса.
|
||
// * ТипПомещения - Строка - наименование типа помещения, который будет установлен
|
||
// в форме ввода нового адреса. По умолчанию, "Квартира".
|
||
// * ИмяЭлементаДляРазмещения - Строка - группа, куда будут размещены элементы контактной информации.
|
||
// * ИсключаемыеВиды - Массив - виды контактной информации, которые при отложенной инициализации будут созданы на форме,
|
||
// только после вызова процедуры УправлениеКонтактнойИнформацией.ВыполнитьОтложеннуюИнициализацию.
|
||
// * СкрываемыеВиды - Массив - виды контактной информации, которые не требуется отображать на форме.
|
||
// * ОтложеннаяИнициализация - Булево - если Истина, то создание полей контактной информации на форме будет отложено.
|
||
// * ПоложениеЗаголовкаКИ - ПоложениеЗаголовкаЭлементаФормы - может принимать значения:
|
||
// ПоложениеЗаголовкаЭлементаФормы.Верх или
|
||
// ПоложениеЗаголовкаЭлементаФормы.Лево (по умолчанию).
|
||
//
|
||
Функция ПараметрыКонтактнойИнформации() Экспорт
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("ТипПомещения", "Квартира");
|
||
Результат.Вставить("Индекс", Неопределено);
|
||
Результат.Вставить("Страна", Неопределено);
|
||
Результат.Вставить("ОтложеннаяИнициализация", Ложь);
|
||
Результат.Вставить("ПоложениеЗаголовкаКИ", "");
|
||
Результат.Вставить("ИсключаемыеВиды", Неопределено);
|
||
Результат.Вставить("СкрываемыеВиды", Неопределено);
|
||
Результат.Вставить("ИмяЭлементаДляРазмещения", "ГруппаКонтактнаяИнформация");
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Проверка и сведения об адресе
|
||
|
||
// Проверяет контактную информацию.
|
||
//
|
||
// Параметры:
|
||
// Представление - Строка - Представление контактной информации. Используется, если невозможно определить
|
||
// представление из параметра ЗначенияПолей (отсутствие поля Представление).
|
||
// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - Описание полей контактной информации.
|
||
// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Используется для определения типа, если его невозможно
|
||
// определить по параметру ЗначенияПолей.
|
||
// ТипИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации.
|
||
// ИмяРеквизита - Строка - Имя реквизита на форме.
|
||
// Комментарий - Строка - Текст комментария.
|
||
// ПутьКРеквизиту - Строка - Путь к реквизиту.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - уровень ошибок, 0 - ошибки отсутствуют.
|
||
//
|
||
Функция ПроверитьКонтактнуюИнформацию(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации,
|
||
ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") Экспорт
|
||
|
||
ТекстСериализации = ?(ПустаяСтрока(ЗначенияПолей), Представление, ЗначенияПолей);
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ТекстСериализации) Тогда
|
||
ОбъектКИ = КонтактнаяИнформацияВJSON(ТекстСериализации);
|
||
Иначе
|
||
ОбъектКИ = ЗначенияПолей;
|
||
КонецЕсли;
|
||
|
||
// Проверка
|
||
Если ТипИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(ОбъектКИ, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ, ВидИнформации, ИмяРеквизита);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияВебСтраницы(ОбъектКИ, ВидИнформации, ИмяРеквизита);
|
||
Иначе
|
||
// Другое (прочее) не проверяем.
|
||
УровеньОшибок = 0;
|
||
КонецЕсли;
|
||
|
||
Возврат УровеньОшибок;
|
||
|
||
КонецФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Обновление информационной базы.
|
||
|
||
// Устанавливает свойства группы контактной информации.
|
||
//
|
||
// Параметры:
|
||
// Параметры - Структура - содержит структуру с полями:
|
||
// * Код - Строка - Код вида контактной информации для идентификации элемента.
|
||
// * Наименование - Строка - Наименование вида контактной информации.
|
||
// * Используется - Булево -Признак использования вида контактной информации. Значение по умолчанию Истина.
|
||
// Возвращаемое значение:
|
||
// СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу.
|
||
//
|
||
Функция УстановитьСвойстваГруппыВидаКонтактнойИнформации(Параметры) Экспорт
|
||
|
||
Объект = ОбъектВидаКонтактнойИнформации(Параметры.Имя, Истина);
|
||
|
||
Объект.ИмяПредопределенногоВида = Параметры.Имя;
|
||
Объект.Родитель = Параметры.Группа;
|
||
Объект.Используется = Параметры.Используется;
|
||
|
||
Если ПустаяСтрока(Параметры.Наименование) Тогда
|
||
|
||
Наименования = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.НаименованияВидовКонтактнойИнформации();
|
||
Для каждого Язык Из Метаданные.Языки Цикл
|
||
Представление = Наименования[Язык.КодЯзыка][СокрЛП(Объект.ИмяПредопределенногоВида)];
|
||
Если ЗначениеЗаполнено(Представление) Тогда
|
||
Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда
|
||
Объект.Наименование = Представление;
|
||
Иначе
|
||
НоваяСтрока = Объект.Представления.Добавить();
|
||
НоваяСтрока.КодЯзыка = Язык.КодЯзыка;
|
||
НоваяСтрока.Наименование = Представление;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Иначе
|
||
Объект.Наименование = Параметры.Наименование;
|
||
КонецЕсли;
|
||
|
||
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект);
|
||
|
||
Возврат Объект.Ссылка;
|
||
|
||
КонецФункции
|
||
|
||
// Устанавливает свойства вида контактной информации.
|
||
// Примечание. При использовании параметра Порядок следует внимательно следить за уникальностью назначаемого значения.
|
||
// Если после выполнения обновления значения порядка окажутся неуникальными в пределах группы, то настройка порядка
|
||
// пользователем будет невозможна.
|
||
// В общем случае рекомендуется не использовать этот параметр (порядок не изменится), либо заполнять его значением
|
||
// 0 (порядок будет назначен автоматически в подсистеме "Настройка порядка элементов" при выполнении процедуры).
|
||
// Для размещения видов КИ в определенной последовательности относительно друг друга без явного размещения в начале
|
||
// списка достаточно вызывать данную процедуру в нужной последовательности для каждого вида КИ с указанием порядка 0.
|
||
// Если добавляется предопределенный вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок в явном виде.
|
||
//
|
||
// Параметры:
|
||
// Параметры - Структура - содержит структуру с полями:
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или
|
||
// идентификатор предопределенного элемента.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его
|
||
// идентификатор.
|
||
// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в
|
||
// списке относительно других элементов:
|
||
// Неопределено - не переназначать;
|
||
// 0 - назначить автоматически;
|
||
// Число > 0 - назначить указанный порядок.
|
||
// * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ
|
||
// редактирования только в диалоге, Ложь - иначе.
|
||
// * РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге,
|
||
// Ложь - иначе.
|
||
// * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное
|
||
// заполнение поля, Ложь - иначе.
|
||
// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных
|
||
// полей ввода для данного вида.
|
||
// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования
|
||
// пользователем свойства вида контактной
|
||
// информации.
|
||
// * ХранитьИсториюИзменений - Булево - Признак хранения истории изменений вида
|
||
// контактной информации.
|
||
// Значение по умолчанию Ложь.
|
||
// * Используется - Булево - Признак использования вида контактной информации.
|
||
// Значение по умолчанию Истина.
|
||
// * ВидПоляДругое - Строка - Внешний вид поля типа "Другое". Возможные значения:
|
||
// МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое.
|
||
// Значение по умолчанию - ОднострочноеШирокое.
|
||
// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации.
|
||
// Для типа Адрес - Структура, содержащая поля:
|
||
// * ТолькоНациональныйАдрес - Булево - Истина, если возможен ввод только российских адресов.
|
||
// * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать
|
||
// некорректные адреса.
|
||
// * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются.
|
||
// Для запрета пользователю записывать некорректные адреса
|
||
// следует использовать параметр ПроверятьКорректность.
|
||
// * СкрыватьНеактуальныеАдреса - Булево - Истина, если не требуется показывать неактуальные адреса при
|
||
// вводе (только если ТолькоНациональныйАдрес = Истина).
|
||
// * ВключатьСтрануВПредставление - Булево - Истина, если требуется включать наименование страны в
|
||
// представление адреса.
|
||
// Для типа АдресЭлектроннойПочты - Структура, содержащая поля:
|
||
// * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать
|
||
// некорректный адрес электронной почты.
|
||
// * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются.
|
||
// Для запрета пользователю записывать некорректные адреса
|
||
// следует использовать параметр ПроверятьКорректность.
|
||
// Для остальных типов или для задания настроек по умолчанию используется Неопределено.
|
||
//
|
||
Процедура УстановитьСвойстваВидаКонтактнойИнформации(Параметры) Экспорт
|
||
|
||
Если Не ЗначениеЗаполнено(Параметры.Вид) Тогда
|
||
Объект = ОбъектВидаКонтактнойИнформации(Параметры.Имя);
|
||
ИначеЕсли ТипЗнч(Параметры.Вид) = Тип("Строка") Тогда
|
||
Объект = ОбъектВидаКонтактнойИнформации(Параметры.Вид);
|
||
Иначе
|
||
Объект = Параметры.Вид.ПолучитьОбъект();
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьЗначенияСвойств(Объект, Параметры, "Тип, МожноИзменятьСпособРедактирования,
|
||
|РедактированиеТолькоВДиалоге, ОбязательноеЗаполнение, РазрешитьВводНесколькихЗначений,
|
||
|ЗапретитьРедактированиеПользователем, Используется, ХранитьИсториюИзменений ,МеждународныйФорматАдреса");
|
||
|
||
Если ПустаяСтрока(Параметры.Наименование) Тогда
|
||
|
||
Наименования = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.НаименованияВидовКонтактнойИнформации();
|
||
Для каждого Язык Из Метаданные.Языки Цикл
|
||
Представление = Наименования[Язык.КодЯзыка][СокрЛП(Объект.ИмяПредопределенногоВида)];
|
||
Если ЗначениеЗаполнено(Представление) Тогда
|
||
Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда
|
||
Объект.Наименование = Представление;
|
||
Иначе
|
||
НоваяСтрока = Объект.Представления.Добавить();
|
||
НоваяСтрока.КодЯзыка = Язык.КодЯзыка;
|
||
НоваяСтрока.Наименование = Представление;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Иначе
|
||
Объект.Наименование = Параметры.Наименование;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Параметры.Имя) Тогда
|
||
Объект.ИмяПредопределенногоВида = Параметры.Имя;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Объект.ИмяПредопределенногоВида) Тогда
|
||
Объект.ИмяПредопределенногоВида = Объект.ИмяПредопределенныхДанных;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Объект.Родитель) Тогда
|
||
Объект.Родитель = Параметры.Группа;
|
||
КонецЕсли;
|
||
Объект.ИмяГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ИмяПредопределенногоВида");
|
||
|
||
Если Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
|
||
Объект.ВидПоляДругое = Параметры.ВидПоляДругое;
|
||
КонецЕсли;
|
||
|
||
НастройкиПроверки = Параметры.НастройкиПроверки;
|
||
ПроверятьНастройки = ТипЗнч(НастройкиПроверки) = Тип("Структура");
|
||
|
||
Если ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
ЗаполнитьЗначенияСвойств(Объект, НастройкиПроверки);
|
||
ИначеЕсли ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки);
|
||
ИначеЕсли ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
Объект.ТелефонCДобавочнымНомером = НастройкиПроверки.ТелефонCДобавочнымНомером;
|
||
Иначе
|
||
УстановитьЗначенияРеквизитовПроверки(Объект);
|
||
КонецЕсли;
|
||
|
||
Результат = УправлениеКонтактнойИнформациейСлужебный.ПроверитьПараметрыВидаКонтактнойИнформации(Объект);
|
||
|
||
Если Результат.ЕстьОшибки Тогда
|
||
ВызватьИсключение Результат.ТекстОшибки;
|
||
КонецЕсли;
|
||
|
||
Если Параметры.Порядок <> Неопределено Тогда
|
||
Объект.РеквизитДопУпорядочивания = Параметры.Порядок;
|
||
КонецЕсли;
|
||
|
||
ЗначениеИспользуетсяУГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "Используется");
|
||
|
||
Если ЗначениеИспользуетсяУГруппы = Ложь И Объект.Используется Тогда
|
||
|
||
НачатьТранзакцию();
|
||
Попытка
|
||
|
||
Блокировка = Новый БлокировкаДанных;
|
||
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВидыКонтактнойИнформации");
|
||
ЭлементБлокировки.УстановитьЗначение("Ссылка", Объект.Родитель.Ссылка);
|
||
Блокировка.Заблокировать();
|
||
|
||
Родитель = Объект.Родитель.ПолучитьОбъект();
|
||
Родитель.Используется = Истина;
|
||
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Родитель);
|
||
|
||
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект);
|
||
ЗафиксироватьТранзакцию();
|
||
Исключение
|
||
ОтменитьТранзакцию();
|
||
ВызватьИсключение;
|
||
КонецПопытки;
|
||
|
||
Иначе
|
||
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает структуру параметров группы вида контактной информации.
|
||
//
|
||
// Параметры:
|
||
// ГруппаКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации- группа контактной информации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - содержит структуру с полями:
|
||
// * Имя - Строка - Уникальное имя вида контактной информации.
|
||
// * Наименование - Строка - Наименование вида контактной информации.
|
||
// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника.
|
||
// * Используется - Булево - Признак использования вида контактной информации. Значение по умолчанию Истина.
|
||
//
|
||
Функция ПараметрыГруппыВидаКонтактнойИнформации(ГруппаКонтактнойИнформации = Неопределено) Экспорт
|
||
|
||
Результат = ОписаниеОбщихПараметровВидаКонтактнойИнформации();
|
||
|
||
Если ТипЗнч(ГруппаКонтактнойИнформации ) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
|
||
Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ГруппаКонтактнойИнформации, "ИмяПредопределенногоВида, ИмяПредопределенныхДанных, Родитель, Наименование, Используется");
|
||
Результат.Имя = ?(ЗначениеЗаполнено(Значения.ИмяПредопределенногоВида), Значения.ИмяПредопределенногоВида, Значения.ИмяПредопределенныхДанных);
|
||
Результат.Группа = Значения.Родитель;
|
||
Результат.Наименование = Значения.Наименование;
|
||
Результат.Используется = Значения.Используется;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает структуру параметров вида контактной информации для определенного типа.
|
||
//
|
||
// Параметры:
|
||
// ТипИлиВидКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, Строка - тип контактной информации,
|
||
// - СправочникСсылка.ВидыКонтактнойИнформации- вид контактной информации для
|
||
// заполнения свойства НастройкиПроверки.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - содержит структуру с полями:
|
||
// * Имя - Строка - Уникальное имя вида контактной информации.
|
||
// * Наименование - Строка - Наименование вида контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или
|
||
// идентификатор предопределенного элемента.
|
||
// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его идентификатор.
|
||
// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в списке относительно других элементов:
|
||
// Неопределено - не переназначать;
|
||
// 0 - назначить автоматически;
|
||
// Число > 0 - назначить указанный порядок.
|
||
// Примечание. При использовании параметра Порядок следует внимательно следить
|
||
// за уникальностью назначаемого значения. Если после выполнения обновления
|
||
// значения порядка окажутся неуникальными в пределах группы, то настройка
|
||
// порядка пользователем будет невозможна. В общем случае рекомендуется не
|
||
// использовать этот параметр (порядок не изменится), либо заполнять его
|
||
// значением 0 (порядок будет назначен автоматически в подсистеме "Настройка
|
||
// порядка элементов" при выполнении процедуры). Для размещения видов КИ в
|
||
// определенной последовательности относительно друг друга без явного
|
||
// размещения в начале списка достаточно вызывать данную процедуру в нужной
|
||
// последовательности для каждого вида КИ с указанием порядка 0. Если
|
||
// добавляется предопределенный вид КИ к уже существующим в ИБ, не
|
||
// рекомендуется назначать порядок в явном виде.
|
||
// * МожноИзменятьСпособРедактирования - Булево -Признак возможности изменения свойств вида контактной информации пользователем.
|
||
// Если Ложь, то в форме вида контактной информации свойства доступны только для просмотра.
|
||
// Значение по умолчанию - Ложь.
|
||
// * РедактированиеТолькоВДиалоге - Булево - Если Истина, то форме выводится гиперссылка с представлением контактной информации
|
||
// по нажатию на которую, открывается форма соответствующего типа КИ.
|
||
// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс, ВебСтраница.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации.
|
||
// Хранение истории допускается, если признак РедактированиеТолькоВДиалоге равен Истина.
|
||
// Свойство применимо если табличная часть КонтактнаяИнформация содержит реквизит ДействуетС.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ОбязательноеЗаполнение - Булево - Если Истина, то требуется обязательный ввод значения в поле
|
||
// контактной информации. Значение по умолчанию - Ложь.
|
||
// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности ввода нескольких значений для данного вида.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования пользователем
|
||
// вида контактной информации. Значение по умолчанию - Ложь.
|
||
// * Используется - Булево - Если Ложь, то вид контактной информации недоступен для использования пользователем.
|
||
// Такой вид не выводится в формах и списке видов контактной информации.
|
||
// Значение по умолчанию - Истина.
|
||
// * МеждународныйФорматАдреса - Булево - Признак международного формата адреса.
|
||
// Если Истина, то ввода всех адресов только в международном формате.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ВидПоляДругое - Строка - Определяет внешний вид поля с типом Другое на форме.
|
||
// Варианты: МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое.
|
||
// Свойство применимо только для контактной информации с типом: Другое.
|
||
// Для вида КИ с типом Другое значение по умолчанию - "ОднострочноеШирокое", иначе пустая строка.
|
||
// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации.
|
||
// Состав полей зависит от типа контактной информации.
|
||
// Для типа Адрес - Структура, содержащая поля:
|
||
// * ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных адресов.
|
||
// Изменение страны у адреса не допускается.
|
||
// * ПроверятьКорректность - Булево - если Истина, то для национальных адресов доступен ввод только адресов с разбивкой
|
||
// по полям проходящих проверку по ФИАС. Допускается ввод адресов других стран
|
||
// в свободной форме, если свойство ТолькоНациональныйАдрес = Ложь.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ВключатьСтрануВПредставление - Булево - если Истина, то Наименование страны всегда добавляется в представление адреса,
|
||
// даже когда другие поля адреса пустые.
|
||
// Значение по умолчанию - Ложь
|
||
// * УказыватьОКТМО - Булево - признак возможности ручного ввода кода ОКМТО в форме ввода адреса.
|
||
// Для типа АдресЭлектроннойПочты - Структура, содержащая поля:
|
||
// * ПроверятьКорректность - Булево - если Истина, то запрещается пользователю ввод
|
||
// некорректный адрес электронной почты.
|
||
// Значение по умолчанию - Ложь.
|
||
// Для типа Телефон - Структура, содержащая поля:
|
||
// * ТелефонCДобавочнымНомером - Булево - если Истина, то в форме ввода телефона доступен ввод добавочного номера.
|
||
// Значение по умолчанию - Истина.
|
||
// Для остальных типов по умолчанию - Неопределено.
|
||
//
|
||
Функция ПараметрыВидаКонтактнойИнформации(ТипИлиВидКонтактнойИнформации = Неопределено) Экспорт
|
||
|
||
Если ТипЗнч(ТипИлиВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
|
||
|
||
ПараметрыВида = ПараметрыИзВидаКонтактнойИнформации(ТипИлиВидКонтактнойИнформации);
|
||
|
||
Иначе
|
||
|
||
Если ТипЗнч(ТипИлиВидКонтактнойИнформации) = Тип("Строка") Тогда
|
||
УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации[ТипИлиВидКонтактнойИнформации];
|
||
Иначе
|
||
УстанавливаемыйТип = ТипИлиВидКонтактнойИнформации;
|
||
КонецЕсли;
|
||
|
||
ПараметрыВида = ОписаниеПараметровКонтактнойИнформации(УстанавливаемыйТип);
|
||
КонецЕсли;
|
||
|
||
Возврат ПараметрыВида;
|
||
|
||
КонецФункции
|
||
|
||
// Записывает контактную информацию из XML в поля табличной части Контактная информация объекта.
|
||
//
|
||
// Параметры:
|
||
// Объект - ЛюбаяСсылка - ссылка на объект конфигурации, содержащий табличную часть контактная информация.
|
||
// Значение - Строка - контактная информация в внутреннем формате JSON.
|
||
// ВидИнформации - Справочник.ВидыКонтактнойИнформация - ссылка на вид контактной информации.
|
||
// ТипИнформации - Перечисление.ТипыКонтактнойИнформация - тип контактной информации.
|
||
// ИдентификаторСтроки - Число - идентификатор строки табличной части.
|
||
// Дата - Дата - Дата, с которой действует запись контактной информации,
|
||
// используется при хранении истории изменения контактной информации.
|
||
Процедура ЗаписатьКонтактнуюИнформацию(Объект, Знач Значение, ВидИнформации, ТипИнформации, ИдентификаторСтроки = 0, Дата = Неопределено) Экспорт
|
||
|
||
Если ПустаяСтрока(Значение) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда
|
||
ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(Значение, ТипИнформации);
|
||
Иначе
|
||
ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, ТипИнформации);
|
||
КонецЕсли;
|
||
|
||
Если Не УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияЗаполнена(ОбъектКИ) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НоваяСтрока = Объект.КонтактнаяИнформация.Добавить();
|
||
НоваяСтрока.Представление = ОбъектКИ.Value;
|
||
НоваяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКИ);
|
||
НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ОбъектКИ, ТипИнформации);
|
||
НоваяСтрока.Вид = ВидИнформации;
|
||
НоваяСтрока.Тип = ТипИнформации;
|
||
Если ЗначениеЗаполнено(Дата) Тогда
|
||
НоваяСтрока.ДействуетС = Дата;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ИдентификаторСтроки) Тогда
|
||
НоваяСтрока.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки;
|
||
КонецЕсли;
|
||
|
||
// Заполнение дополнительных реквизитов ТЧ.
|
||
ЗаполнитьТехническиеПоляКонтактнойИнформации(НоваяСтрока, ОбъектКИ, ТипИнформации);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обновляет представление контактной информации в служебном поле ВидДляСписка,
|
||
// используемое для вывода ее в динамических списках и отчетах.
|
||
//
|
||
// Параметры:
|
||
// Объект - ОбъектСсылка - ссылка на объект конфигурации, содержащий табличную часть контактная информация.
|
||
//
|
||
Процедура ОбновитьКонтактнуюИнформациюДляСписков(Объект = Неопределено) Экспорт
|
||
|
||
Если Объект = Неопределено Тогда
|
||
УправлениеКонтактнойИнформациейСлужебный.ОбновитьКонтактнуюИнформациюДляСписков();
|
||
Иначе
|
||
Если Объект.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда
|
||
УправлениеКонтактнойИнформациейСлужебный.ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Выполняет отложенное обновление контактной информации для списков.
|
||
//
|
||
// Параметры:
|
||
// Параметры - Структура - параметры обработчика обновления.
|
||
// РазмерПорции - Число - необязательный параметр, размер порции обрабатываемых данных за один запуск.
|
||
//
|
||
Процедура ОбновитьКонтактнуюИнформациюДляСписковОтложенно(Параметры, РазмерПорции = 1000) Экспорт
|
||
|
||
ОбъектыСВидомДляСписка = Неопределено;
|
||
Параметры.Свойство("ОбъектыСВидомДляСписка", ОбъектыСВидомДляСписка);
|
||
|
||
Если Параметры.ПрогрессВыполнения.ВсегоОбъектов = 0 Тогда
|
||
// расчет количества
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.Ссылка,
|
||
|ВЫБОР
|
||
| КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """"
|
||
| ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида
|
||
| ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных
|
||
|КОНЕЦ КАК ИмяПредопределенногоВида
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ГДЕ
|
||
| ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА";
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||
ОбъектыСВидомДляСписка = Новый Массив;
|
||
ТекстЗапроса = "";
|
||
Разделитель = "";
|
||
|
||
ШаблонЗапроса = "ВЫБРАТЬ
|
||
| КОЛИЧЕСТВО(ТаблицаСКонтактнойИнформацией.Ссылка) КАК Количество,
|
||
| ТИПЗНАЧЕНИЯ(ТаблицаСКонтактнойИнформацией.Ссылка) КАК Ссылка
|
||
|ИЗ
|
||
| %1.%2 КАК ТаблицаСКонтактнойИнформацией
|
||
| СГРУППИРОВАТЬ ПО
|
||
| ТИПЗНАЧЕНИЯ(ТаблицаСКонтактнойИнформацией.Ссылка)";
|
||
|
||
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||
Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Справочник") Тогда
|
||
ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, СтрДлина("Справочник") + 1);
|
||
|
||
Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда
|
||
КонтактнаяИнформация = Метаданные.Справочники[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация;
|
||
Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда
|
||
ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Справочник", ИмяОбъекта);
|
||
Разделитель = " ОБЪЕДИНИТЬ ВСЕ ";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Документ") Тогда
|
||
ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, СтрДлина("Документ") + 1);
|
||
|
||
Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда
|
||
КонтактнаяИнформация = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация;
|
||
Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда
|
||
ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Документ", ИмяОбъекта);
|
||
Разделитель = " ОБЪЕДИНИТЬ ВСЕ ";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ПустаяСтрока(ТекстЗапроса) Тогда
|
||
Параметры.ОбработкаЗавершена = Ложь;
|
||
Возврат;
|
||
КонецЕсли;
|
||
Запрос = Новый Запрос(ТекстЗапроса);
|
||
РезультатЗапроса = Запрос.Выполнить().Выбрать();
|
||
Количество = 0;
|
||
ОбъектыСВидомДляСписка = Новый Массив;
|
||
Пока РезультатЗапроса.Следующий() Цикл
|
||
Количество = Количество + РезультатЗапроса.Количество;
|
||
ОбъектыСВидомДляСписка.Добавить(РезультатЗапроса.Ссылка);
|
||
КонецЦикла;
|
||
Параметры.ПрогрессВыполнения.ВсегоОбъектов = Количество;
|
||
Параметры.Вставить("ОбъектыСВидомДляСписка", ОбъектыСВидомДляСписка);
|
||
КонецЕсли;
|
||
|
||
Если ОбъектыСВидомДляСписка = Неопределено ИЛИ ОбъектыСВидомДляСписка.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ПолноеИмяОбъектаСВидомДляСписка = Метаданные.НайтиПоТипу(ОбъектыСВидомДляСписка.Получить(0)).ПолноеИмя();
|
||
ТекстЗапроса = " ВЫБРАТЬ ПЕРВЫЕ " + Формат(РазмерПорции, "ЧГ=0") + "
|
||
| КонтактнаяИнформация.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| " + ПолноеИмяОбъектаСВидомДляСписка + ".КонтактнаяИнформация КАК КонтактнаяИнформация
|
||
|
|
||
|СГРУППИРОВАТЬ ПО
|
||
| КонтактнаяИнформация.Ссылка
|
||
|
|
||
|ИМЕЮЩИЕ
|
||
| СУММА(ВЫБОР
|
||
| КОГДА КонтактнаяИнформация.ВидДляСписка = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка)
|
||
| ТОГДА 0
|
||
| ИНАЧЕ 1
|
||
| КОНЕЦ) = 0";
|
||
|
||
Запрос = Новый Запрос(ТекстЗапроса);
|
||
РезультатЗапроса = Запрос.Выполнить().Выбрать();
|
||
Количество = РезультатЗапроса.Количество();
|
||
Если Количество > 0 Тогда
|
||
Пока РезультатЗапроса.Следующий() Цикл
|
||
Объект = РезультатЗапроса.Ссылка.ПолучитьОбъект();
|
||
ОбновитьКонтактнуюИнформациюДляСписков(Объект);
|
||
ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект);
|
||
КонецЦикла;
|
||
Если Количество < 1000 Тогда
|
||
ОбъектыСВидомДляСписка.Удалить(0);
|
||
КонецЕсли;
|
||
Параметры.ПрогрессВыполнения.ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов + Количество;
|
||
Иначе
|
||
ОбъектыСВидомДляСписка.Удалить(0);
|
||
КонецЕсли;
|
||
|
||
Если ОбъектыСВидомДляСписка.Количество() > 0 Тогда
|
||
Параметры.ОбработкаЗавершена = Ложь;
|
||
КонецЕсли;
|
||
|
||
Параметры.Вставить("ОбъектыСВидомДляСписка", ОбъектыСВидомДляСписка);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Удаляет информацию о соответствии элемента справочника виде контактной информации предопределенному значению,
|
||
// которое помечено как удаленное. Для однократного вызова в обработчиках обновления по отказу от предопределенных
|
||
// элементов справочника ВидыКонтактнойИнформации.
|
||
//
|
||
Процедура СнятьПризнакПредопределенныйДляВидовКонтактнойИнформации() Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.Ссылка КАК ВидКИ,
|
||
| ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
|
||
| ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных, """") КАК Группа,
|
||
| ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК ИмяПредопределенногоВида,
|
||
| ВидыКонтактнойИнформации.Предопределенный КАК Предопределенный
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации";
|
||
|
||
ВидыКонтактнойИнформации = Запрос.Выполнить().Выгрузить();
|
||
ВидыКонтактнойИнформации.Индексы.Добавить("ИмяПредопределенногоВида");
|
||
|
||
Для каждого Вид Из ВидыКонтактнойИнформации Цикл
|
||
|
||
Если Не Вид.Предопределенный Или Не СтрНачинаетсяС(НРег(Вид.ИмяПредопределенныхДанных), "удалить") Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ИмяПредопределенногоВида = Сред(Вид.ИмяПредопределенныхДанных, СтрДлина("удалить") + 1);
|
||
Если ВидыКонтактнойИнформации.Найти(ИмяПредопределенногоВида, "ИмяПредопределенногоВида") <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ОбъектВидКИ = Вид.ВидКИ.ПолучитьОбъект();
|
||
Если Не ОбъектВидКИ.ЭтоГруппа Тогда
|
||
ОбъектВидКИ.ИмяГруппы = Сред(Вид.Группа, СтрДлина("удалить") + 1);
|
||
КонецЕсли;
|
||
|
||
ОбъектВидКИ.ИмяПредопределенногоВида = ИмяПредопределенногоВида;
|
||
ОбъектВидКИ.ИмяПредопределенныхДанных = "";
|
||
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОбъектВидКИ);
|
||
|
||
КонецЦикла;
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
#Область УстаревшиеПроцедурыИФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Обратная совместимость.
|
||
|
||
// Устарела. Следует использовать УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению.
|
||
// Преобразует представление контактной информации в XML строку соответствующую структуре
|
||
// XDTO пакетам КонтактнаяИнформация и Адрес.
|
||
// Для адресов, введенных в свободной форме, корректное преобразование не гарантируется.
|
||
//
|
||
// Параметры:
|
||
// Представление - Строка - Строковое представление контактной информации, выводимое пользователю.
|
||
// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации,
|
||
// Структура - Вид или тип контактной информации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес.
|
||
//
|
||
Функция КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид) Экспорт
|
||
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(
|
||
УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид));
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Устанавливает доступность элементов контактной информации на форме.
|
||
//
|
||
// Параметры:
|
||
// Форма - ФормаКлиентскогоПриложения - передаваемая форма.
|
||
// Элементы - Соответствие - Список видов контактной информации, для которых устанавливается доступ.
|
||
// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета.
|
||
// ** Значение - Булево - Если ЛОЖЬ, то элемент доступен только для просмотра.
|
||
//
|
||
Процедура УстановитьДоступностьЭлементовКонтактнойИнформации(Форма, Элементы, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") Экспорт
|
||
Для каждого Элемент Из Элементы Цикл
|
||
|
||
Отбор = Новый Структура("Вид", Элемент.Ключ);
|
||
НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Если НайденныеСтроки <> Неопределено Тогда
|
||
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
|
||
ЭлементКИ = Форма.Элементы[НайденнаяСтрока.ИмяРеквизита];
|
||
ЭлементКИ.ТолькоПросмотр = НЕ Элемент.Значение;
|
||
КонецЦикла;
|
||
// Если у элемента только просмотр, то удаляем возможность добавления этого элемента на форму.
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
Если НЕ Элемент.Значение Тогда
|
||
Для каждого ЭлементКонтекстногоМеню Из ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов Цикл
|
||
Если ЭлементКонтекстногоМеню.Значение.Ссылка = Элемент.Ключ Тогда
|
||
ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Удалить(ЭлементКонтекстногоМеню);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если Форма.Элементы.Найти("КонтактнаяИнформацияДобавитьПолеВвода") <> Неопределено Тогда
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
Если ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Количество() = 0 Тогда
|
||
// Делаем кнопку Добавить недоступной, т.к. контекстное меню пустое.
|
||
Форма.Элементы.КонтактнаяИнформацияДобавитьПолеВвода.Доступность = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Дополняет список колонки для загрузки данных колонками контактной информации.
|
||
//
|
||
// Параметры:
|
||
// МетаданныеСправочника - ОбъектМетаданных - Метаданные справочника.
|
||
// ИнформацияПоКолонкам - ТаблицаЗначение - колонки макета.
|
||
//
|
||
Процедура КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам) Экспорт
|
||
|
||
Если МетаданныеСправочника.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Позиция = ИнформацияПоКолонкам.Количество() + 1;
|
||
|
||
ВидыКонтактнойИнформации = ВидыКонтактнойИнформацияОбъекта(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка());
|
||
|
||
Для каждого ВидКонтактнойИнформации Из ВидыКонтактнойИнформации Цикл
|
||
ИмяКолонки = "КонтактнаяИнформация_" + СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(ВидКонтактнойИнформации.Наименование);
|
||
Если ИнформацияПоКолонкам.Найти(ИмяКолонки, "ИмяКолонки") = Неопределено Тогда
|
||
СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить();
|
||
СтрокаИнфоПроКолонки.ИмяКолонки = ИмяКолонки;
|
||
СтрокаИнфоПроКолонки.ПредставлениеКолонки = ВидКонтактнойИнформации.Представление;
|
||
СтрокаИнфоПроКолонки.ТипКолонки = Новый ОписаниеТипов("Строка");
|
||
СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = Ложь;
|
||
СтрокаИнфоПроКолонки.Позиция = Позиция;
|
||
СтрокаИнфоПроКолонки.Группа = НСтр("ru = 'Контактная информация'");
|
||
СтрокаИнфоПроКолонки.Видимость = Истина;
|
||
СтрокаИнфоПроКолонки.Ширина = 30;
|
||
Позиция = Позиция + 1;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Виды контактной информация объекта.
|
||
//
|
||
// Параметры:
|
||
// ВладелецКонтактнойИнформации - Ссылка на владельца контактной информации.
|
||
// Объект владельца контактной информации.
|
||
// ДанныеФормыСтруктура (по типу объекта владельца свойств).
|
||
// Возвращаемое значение:
|
||
// ТаблицаЗначений - виды контактной информации.
|
||
//
|
||
Функция ВидыКонтактнойИнформацияОбъекта(ВладелецКонтактнойИнформации) Экспорт
|
||
|
||
Если ТипЗнч(ВладелецКонтактнойИнформации) = Тип("ДанныеФормыСтруктура") Тогда
|
||
ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка)
|
||
|
||
ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ВладелецКонтактнойИнформации)) Тогда
|
||
ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации);
|
||
Иначе
|
||
ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка)
|
||
КонецЕсли;
|
||
|
||
МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипСсылки);
|
||
ПолноеИмяОбъектаМетаданных = МетаданныеСправочника.ПолноеИмя();
|
||
ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "");
|
||
ГруппаВидовКИ = Неопределено;
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = "ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.Ссылка КАК Ссылка,
|
||
|ВЫБОР
|
||
| КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """"
|
||
| ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида
|
||
| ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных
|
||
|КОНЕЦ КАК ИмяПредопределенногоВида
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ГДЕ
|
||
| ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА
|
||
| И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ
|
||
| И ВидыКонтактнойИнформации.Используется = ИСТИНА";
|
||
|
||
РезультатЗапроса = Запрос.Выполнить().Выбрать();
|
||
Пока РезультатЗапроса.Следующий() Цикл
|
||
Если СтрСравнить(РезультатЗапроса.ИмяПредопределенногоВида, ИмяГруппыВидовКИ) = 0 Тогда
|
||
ГруппаВидовКИ = РезультатЗапроса.Ссылка;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если НЕ ЗначениеЗаполнено(ГруппаВидовКИ) Тогда
|
||
Возврат Новый ТаблицаЗначений;
|
||
КонецЕсли;
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.Ссылка,
|
||
| ВидыКонтактнойИнформации.Представление,
|
||
| ВидыКонтактнойИнформации.Наименование,
|
||
| ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений,
|
||
| ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания,
|
||
| ВидыКонтактнойИнформации.Тип
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ГДЕ
|
||
| ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
|
||
| И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ
|
||
| И ВидыКонтактнойИнформации.Используется = ИСТИНА
|
||
|
|
||
|УПОРЯДОЧИТЬ ПО
|
||
| РеквизитДопУпорядочивания";
|
||
|
||
Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ);
|
||
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
|
||
Возврат РезультатЗапроса;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает тип контактной информации.
|
||
//
|
||
// Параметры:
|
||
// Наименование - Строка - Тип контактной информация в виде строки.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ПеречислениеСсылка.ТипыКонтактнойИнформации - соответствующий тип.
|
||
//
|
||
Функция ТипКонтактнойИнформацииПоНаименованию(Знач Наименование) Экспорт
|
||
Возврат Перечисления.ТипыКонтактнойИнформации[Наименование];
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Инициализация элементов на форме объект-владельца контактной информации.
|
||
|
||
Процедура ОпределитьПараметрыКонтактнойИнформацииПоВладельцу(Форма, Объект, ПараметрыКонтактнойИнформации, ЭтоПараметрыОсновногоОбъекта, СкрываемыеВиды)
|
||
|
||
СкрываемыеВиды = Новый Массив;
|
||
Для каждого ПараметрКонтактнойИнформации Из Форма.ПараметрыКонтактнойИнформации Цикл
|
||
|
||
Если ПараметрКонтактнойИнформации.Значение.Владелец = Объект.Ссылка
|
||
Или Форма.ПараметрыКонтактнойИнформации.Количество() = 1 Тогда
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрКонтактнойИнформации.Значение;
|
||
СкрываемыеВиды = ПараметрыКонтактнойИнформации.СкрываемыеВиды;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЭтоПараметрыОсновногоОбъекта = Ложь;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура СоздатьРеквизитыКонтактнойИнформации(Знач Форма, Знач ДобавляемыеРеквизиты, Знач ИмяОбъекта, Знач ИсключаемыеВиды,
|
||
Знач КонтактнаяИнформация, Знач ОтложеннаяИнициализация, Знач ОбработкаНавигационнойСсылки)
|
||
|
||
Строка1500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1500));
|
||
ФорматированнаяСтрока = Новый ОписаниеТипов("ФорматированнаяСтрока");
|
||
|
||
СозданныеРеквизиты = ОбщегоНазначения.СкопироватьРекурсивно(ИсключаемыеВиды);
|
||
ПредыдущийВид = Неопределено;
|
||
ПорядковыйНомер = 1;
|
||
|
||
Для Каждого ОбъектКонтактнойИнформации Из КонтактнаяИнформация Цикл
|
||
|
||
Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда
|
||
|
||
ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенногоВида;
|
||
Позиция = СтрНайти(ИмяВидаКИ, ИмяОбъекта);
|
||
ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Позиция + СтрДлина(ИмяОбъекта));
|
||
|
||
ПредыдущийВид = Неопределено;
|
||
ИмяРеквизита = "";
|
||
|
||
ОбъектКонтактнойИнформации.Строки.Сортировать("РеквизитДопУпорядочивания");
|
||
|
||
Для Каждого СтрокаКИ Из ОбъектКонтактнойИнформации.Строки Цикл
|
||
|
||
ТекущийВид = СтрокаКИ.Вид;
|
||
Если ТекущийВид <> ПредыдущийВид Тогда
|
||
|
||
ИмяРеквизита = "КонтактнаяИнформацияПоле" + ИмяТабличнойЧасти + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x")
|
||
+ ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ);
|
||
ПутьРеквизитов = "Объект." + ИмяТабличнойЧасти;
|
||
|
||
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Строка1500, ПутьРеквизитов, СтрокаКИ.Наименование, Истина));
|
||
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита + "Значение", Новый ОписаниеТипов("Строка"), ПутьРеквизитов,, Истина));
|
||
ПредыдущийВид = ТекущийВид;
|
||
|
||
КонецЕсли;
|
||
|
||
СтрокаКИ.ИмяРеквизита = ИмяРеквизита;
|
||
|
||
КонецЦикла;
|
||
|
||
Иначе
|
||
|
||
Если ОбъектКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда
|
||
СкорректироватьКонтактнуюИнформацию(Форма, ОбъектКонтактнойИнформации);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ТекущийВид = ОбъектКонтактнойИнформации.Вид;
|
||
|
||
Если ТекущийВид <> ПредыдущийВид Тогда
|
||
ПредыдущийВид = ТекущийВид;
|
||
ПорядковыйНомер = 1;
|
||
Иначе
|
||
ПорядковыйНомер = ПорядковыйНомер + 1;
|
||
КонецЕсли;
|
||
|
||
Индекс = СозданныеРеквизиты.Найти(ТекущийВид);
|
||
Если Индекс = Неопределено Тогда
|
||
ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x")
|
||
+ ПорядковыйНомер;
|
||
Если Не ОтложеннаяИнициализация Тогда
|
||
|
||
ТипРеквизита = Строка1500;
|
||
Если ОбъектКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки Тогда
|
||
ТипРеквизита = ФорматированнаяСтрока;
|
||
КонецЕсли;
|
||
|
||
ДобавляемыеРеквизиты.Добавить(
|
||
Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, ТипРеквизита,, ОбъектКонтактнойИнформации.Наименование, Истина));
|
||
КонецЕсли;
|
||
Иначе
|
||
ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенногоВида;
|
||
СозданныеРеквизиты.Удалить(Индекс);
|
||
КонецЕсли;
|
||
|
||
СкорректироватьКонтактнуюИнформацию(Форма, ОбъектКонтактнойИнформации);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
// Добавим новые реквизиты
|
||
Если ДобавляемыеРеквизиты.Количество() > 0 Тогда
|
||
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура СкрытьКонтактнуюИнформацию(Знач Форма, Знач ДобавляемыеРеквизиты, ПараметрыВывода)
|
||
|
||
Если ДобавляемыеРеквизиты.Количество() > 0 Тогда
|
||
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
|
||
КонецЕсли;
|
||
ДобавленныеРеквизиты = Новый Массив;
|
||
Для Каждого ДобавляемыйРеквизит Из ДобавляемыеРеквизиты Цикл
|
||
Если ПустаяСтрока(ДобавляемыйРеквизит.Путь) Тогда
|
||
ДобавленныеРеквизиты.Добавить(ДобавляемыйРеквизит.Имя);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ПараметрыВывода.ИмяЭлементаДляРазмещения,
|
||
ПараметрыВывода.ПоложениеЗаголовкаКИ, ПараметрыВывода.ОтложеннаяИнициализация,
|
||
ПараметрыВывода.ИсключаемыеВиды, ПараметрыВывода.СкрываемыеВиды);
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеРеквизиты = ДобавленныеРеквизиты;
|
||
ПараметрыКонтактнойИнформации.Владелец = ПараметрыВывода.СсылкаНаОбъект;
|
||
|
||
Если Не ПустаяСтрока(ПараметрыВывода.ИмяЭлементаДляРазмещения) Тогда
|
||
Форма.Элементы[ПараметрыВывода.ИмяЭлементаДляРазмещения].Видимость = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ДобавитьКнопкуДополнительногоПоляКонтактнойИнформации(Знач Форма, Знач ИмяЭлементаДляРазмещения)
|
||
|
||
Описание = НСтр("ru = 'Добавить дополнительное поле контактной информации'");
|
||
ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения, Форма, Описание, ИмяЭлементаДляРазмещения);
|
||
ГруппаКоманды.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
|
||
|
||
ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения;
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Подсказка = Описание;
|
||
Команда.Отображение = ОтображениеКнопки.КартинкаИТекст;
|
||
Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка;
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
|
||
Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды);
|
||
Кнопка.Доступность = НЕ Форма.Элементы[ИмяЭлементаДляРазмещения].ТолькоПросмотр;
|
||
Кнопка.Заголовок = НСтр("ru = 'Добавить'");
|
||
Команда.ИзменяетСохраняемыеДанные = Истина;
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 2, Ложь);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ДобавитьПояснениеПоСбросуНастроекФормы(Знач Форма, Знач ИмяЭлементаДляРазмещения, Знач ОтложеннаяИнициализация)
|
||
|
||
ГруппаДляРазмещения = Форма.Элементы[ИмяЭлементаДляРазмещения];
|
||
// Если отложенная инициализация и на странице нет элементов, то платформа скрывает страницу,
|
||
// поэтому надо создавать временный элемент, который при переходе на страницу удаляется.
|
||
Если ОтложеннаяИнициализация
|
||
И ГруппаДляРазмещения.Вид = ВидГруппыФормы.Страница
|
||
И Форма.Элементы.Найти("КонтактнаяИнформацияЗаглушка") = Неопределено Тогда
|
||
|
||
ГруппаСтраниц = ГруппаДляРазмещения.Родитель;
|
||
ЗаголовокСтраницы = ?(ЗначениеЗаполнено(ГруппаДляРазмещения.Заголовок), ГруппаДляРазмещения.Заголовок, ГруппаДляРазмещения.Имя);
|
||
ЗаголовокГруппыСтраниц = ?(ЗначениеЗаполнено(ГруппаСтраниц.Заголовок), ГруппаСтраниц.Заголовок, ГруппаСтраниц.Имя);
|
||
|
||
ПредупреждениеОРазмещении = НСтр("ru = 'Для отображения контактной информации необходимо разместить группу ""%1"" не первым элементом (после любой другой группы) в группе ""%2"" (меню Еще - Изменить форму).'");
|
||
ПредупреждениеОРазмещении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредупреждениеОРазмещении,
|
||
ЗаголовокСтраницы, ЗаголовокГруппыСтраниц);
|
||
ТекстПодсказки = НСтр("ru = 'Также можно установить стандартные настройки формы:
|
||
| • в меню Еще выбрать пункт Изменить форму...;
|
||
| • в открывшейся форме ""Настройка формы"" в меню Еще выбрать пункт ""Установить стандартные настройки"".'");
|
||
|
||
Декорация = Форма.Элементы.Добавить("КонтактнаяИнформацияЗаглушка", Тип("ДекорацияФормы"), ГруппаДляРазмещения);
|
||
Декорация.Заголовок = ПредупреждениеОРазмещении;
|
||
Декорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
|
||
Декорация.Подсказка = ТекстПодсказки;
|
||
Декорация.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст;
|
||
Декорация.АвтоМаксимальнаяВысота = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ЗаголовокСлева(Знач ПоложениеЗаголовкаКИ = Неопределено)
|
||
|
||
Если ЗначениеЗаполнено(ПоложениеЗаголовкаКИ) Тогда
|
||
ПоложениеЗаголовкаКИ = ПредопределенноеЗначение(ПоложениеЗаголовкаКИ);
|
||
Иначе
|
||
ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Лево;
|
||
КонецЕсли;
|
||
|
||
Возврат (ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Лево);
|
||
|
||
КонецФункции
|
||
|
||
Процедура ИзменитьКомментарий(Форма, ИмяРеквизита, ИмяЭлементаДляРазмещения)
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
Если ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.НайтиПоЗначению(ИмяРеквизита) = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
|
||
|
||
Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита);
|
||
НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0];
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(НайденнаяСтрока.Значение) Тогда
|
||
КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(НайденнаяСтрока.Значение);
|
||
КонтактнаяИнформацияПоПолям.Comment = НайденнаяСтрока.Комментарий;
|
||
НайденнаяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям);
|
||
КонецЕсли;
|
||
|
||
ПолеВвода = Форма.Элементы.Найти(ИмяРеквизита);
|
||
ПолеВвода.РасширеннаяПодсказка.Заголовок = НайденнаяСтрока.Комментарий;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ДобавитьСтрокуКонтактнойИнформации(Форма, Результат, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ = Ложь, КоличествоАдресов = Неопределено, СледующаяСтрока = Неопределено)
|
||
|
||
ДобавлениеНовогоЗначения = ТипЗнч(Результат) = Тип("Структура");
|
||
|
||
Если ДобавлениеНовогоЗначения Тогда
|
||
Результат.Свойство("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения);
|
||
|
||
ДобавляемыйВид = Результат.ДобавляемыйВид;
|
||
Если ТипЗнч(ДобавляемыйВид)= Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
|
||
ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, РедактированиеТолькоВДиалоге, ВидПоляДругое");
|
||
Иначе
|
||
ИнформацияОВидеКИ = ДобавляемыйВид;
|
||
ДобавляемыйВид = ДобавляемыйВид.Ссылка;
|
||
КонецЕсли;
|
||
Иначе
|
||
ИнформацияОВидеКИ = Результат;
|
||
ДобавляемыйВид = Результат.Вид;
|
||
КонецЕсли;
|
||
|
||
ТаблицаКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
|
||
ОтборПоВиду = Новый Структура("Вид, ЭтоИсторическаяКонтактнаяИнформация", ДобавляемыйВид, Ложь);
|
||
|
||
Если ДобавлениеНовогоЗначения Тогда
|
||
|
||
НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду);
|
||
|
||
КоличествоСтрокВида = НайденныеСтроки.Количество();
|
||
Если КоличествоСтрокВида > 0 Тогда
|
||
ПоследняяСтрока = НайденныеСтроки.Получить(КоличествоСтрокВида - 1);
|
||
ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Индекс(ПоследняяСтрока) + 1;
|
||
Иначе
|
||
ИндексДобавляемойСтроки = 0;
|
||
КонецЕсли;
|
||
|
||
ЭтоПоследняяСтрока = Ложь;
|
||
Если ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Количество() Тогда
|
||
ЭтоПоследняяСтрока = Истина;
|
||
КонецЕсли;
|
||
|
||
НоваяСтрока = ТаблицаКонтактнойИнформации.Вставить(ИндексДобавляемойСтроки);
|
||
ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3",
|
||
"КонтактнаяИнформацияПоле",
|
||
СтрЗаменить(ДобавляемыйВид.УникальныйИдентификатор(), "-", "x"),
|
||
КоличествоСтрокВида + 1);
|
||
НоваяСтрока.ИмяРеквизита = ИмяРеквизита;
|
||
НоваяСтрока.Вид = ДобавляемыйВид;
|
||
НоваяСтрока.Тип = ИнформацияОВидеКИ.Тип;
|
||
НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения;
|
||
НоваяСтрока.ЭтоРеквизитТабличнойЧасти = Ложь;
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки;
|
||
|
||
Если ОбработкаНавигационнойСсылки = Истина Тогда
|
||
ОписаниеТипаРеквизита = Новый ОписаниеТипов("ФорматированнаяСтрока");
|
||
Иначе
|
||
ОписаниеТипаРеквизита = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500));
|
||
КонецЕсли;
|
||
|
||
МассивДобавляемыхРеквизитов = Новый Массив;
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипаРеквизита,, ИнформацияОВидеКИ.Наименование, Истина));
|
||
Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
|
||
|
||
ЕстьКомментарий = Ложь;
|
||
ОбязательноеЗаполнение = Ложь;
|
||
Иначе
|
||
ЭтоПоследняяСтрока = СледующаяСтрока = Неопределено;
|
||
ИмяРеквизита = ИнформацияОВидеКИ.ИмяРеквизита;
|
||
ЕстьКомментарий = ЗначениеЗаполнено(ИнформацияОВидеКИ.Комментарий);
|
||
ОбязательноеЗаполнение = ИнформацияОВидеКИ.ОбязательноеЗаполнение;
|
||
КонецЕсли;
|
||
|
||
// Отрисовка на форме
|
||
ГруппаСтроки = Группа("Группа" + ИмяРеквизита, Форма, ДобавляемыйВид.Наименование, ИмяЭлементаДляРазмещения);
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
ГруппаСтроки.ОтображатьЗаголовок = Истина;
|
||
КонецЕсли;
|
||
|
||
Родитель = Родитель(Форма, ИмяЭлементаДляРазмещения);
|
||
Если Не ЭтоПоследняяСтрока Тогда
|
||
Если СледующаяСтрока = Неопределено Тогда
|
||
ИмяСледующейГруппы = "Группа" + ПоследняяСтрока.ИмяРеквизита;
|
||
Если Форма.Элементы.Найти(ИмяСледующейГруппы) <> Неопределено Тогда
|
||
ИндексСледующейГруппы = Родитель.ПодчиненныеЭлементы.Индекс(Форма.Элементы[ИмяСледующейГруппы]) + 1;
|
||
СледующаяГруппа = Родитель.ПодчиненныеЭлементы.Получить(ИндексСледующейГруппы);
|
||
КонецЕсли;
|
||
Иначе
|
||
ИмяГруппы = "Группа" + СледующаяСтрока.ИмяРеквизита;
|
||
Если Форма.Элементы.Найти(ИмяГруппы) <> Неопределено Тогда
|
||
СледующаяГруппа = Форма.Элементы[ИмяГруппы];
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Форма.Элементы.Переместить(ГруппаСтроки, Родитель, СледующаяГруппа);
|
||
ИначеЕсли ДобавлениеНовогоЗначения Тогда
|
||
СледующаяГруппа = Форма.Элементы[Результат.ИмяКоманды].Родитель;
|
||
Форма.Элементы.Переместить(ГруппаСтроки, Родитель, СледующаяГруппа);
|
||
КонецЕсли;
|
||
|
||
// Обработка ситуации, когда на форме выводится одновременно множественная динамическая и статическая контактная информация.
|
||
ИмяСледующейГруппыТекущегоВида = "Группа" + ИмяРеквизита;
|
||
Если Форма.Элементы.Найти(ИмяСледующейГруппыТекущегоВида) <> Неопределено Тогда
|
||
|
||
Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита);
|
||
НайденныеСтрокиТекущегоВида = ТаблицаКонтактнойИнформации.НайтиСтроки(Отбор);
|
||
Если НайденныеСтрокиТекущегоВида.Количество() > 0 Тогда
|
||
ТекущийВид = НайденныеСтрокиТекущегоВида[0].Вид;
|
||
КонецЕсли;
|
||
|
||
ИндексПредыдущейГруппыВида = Родитель.ПодчиненныеЭлементы.Индекс(Форма.Элементы[ИмяСледующейГруппыТекущегоВида]) - 1;
|
||
Если ИндексПредыдущейГруппыВида >= 0 Тогда
|
||
ПредыдущаяГруппаВида = Родитель.ПодчиненныеЭлементы.Получить(ИндексПредыдущейГруппыВида);
|
||
|
||
Если ПредыдущаяГруппаВида <> Неопределено Тогда
|
||
|
||
Отбор = Новый Структура("ИмяРеквизита", СтрЗаменить(ПредыдущаяГруппаВида.Имя, "Группа", ""));
|
||
НайденныеСтрокиПредыдущегоВида = ТаблицаКонтактнойИнформации.НайтиСтроки(Отбор);
|
||
Если НайденныеСтрокиПредыдущегоВида.Количество() > 0 Тогда
|
||
ПредыдущийВид = НайденныеСтрокиПредыдущегоВида[0].Вид;
|
||
КонецЕсли;
|
||
|
||
Если ТекущийВид <> ПредыдущийВид Тогда
|
||
ЭтоНовыйВидКИ = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
ЭтоНовыйВидКИ = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ПолеВвода = СоздатьПолеВвода(Форма, ГруппаСтроки, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, ОбязательноеЗаполнение);
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
|
||
КонецЕсли;
|
||
|
||
Если ЕстьКомментарий Тогда
|
||
ПолеВвода.РасширеннаяПодсказка.Заголовок = ИнформацияОВидеКИ.Комментарий;
|
||
ПолеВвода.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь;
|
||
ПолеВвода.РасширеннаяПодсказка.МаксимальнаяШирина = ПолеВвода.Ширина;
|
||
ПолеВвода.РасширеннаяПодсказка.Ширина = ПолеВвода.Ширина;
|
||
КонецЕсли;
|
||
|
||
Если КоличествоАдресов = Неопределено Тогда
|
||
ОтборПоТипу = Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
КоличествоАдресов = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоТипу).Количество();
|
||
КонецЕсли;
|
||
|
||
СоздатьДействие(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаСтроки, КоличествоАдресов, ЕстьКомментарий, ИмяЭлементаДляРазмещения);
|
||
|
||
Если Не ЭтоНовыйВидКИ Тогда
|
||
Если ТаблицаКонтактнойИнформации.Количество() > 1 И ТаблицаКонтактнойИнформации[0].Свойство("ЭтоИсторическаяКонтактнаяИнформация") Тогда
|
||
ПунктКонтекстногоМенюПеремещения(ПолеВвода, Форма, 1, ИмяЭлементаДляРазмещения);
|
||
НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду);
|
||
Если НайденныеСтроки.Количество() > 1 Тогда
|
||
ПредыдущаяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 2);
|
||
ПунктКонтекстногоМенюПеремещения(Форма.Элементы[ПредыдущаяСтрока.ИмяРеквизита], Форма, - 1, ИмяЭлементаДляРазмещения);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ДобавлениеНовогоЗначения Тогда
|
||
Форма.ТекущийЭлемент = Форма.Элементы[ИмяРеквизита];
|
||
Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
|
||
И ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
|
||
Результат.Вставить("ЭлементФормыАдреса", ИмяРеквизита);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция СоздатьПолеВвода(Форма, Родитель, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения,ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь)
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки;
|
||
|
||
ЗаголовокСлева = ЗаголовокСлева(ПараметрыКонтактнойИнформации.ПоложениеЗаголовка);
|
||
Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Родитель);
|
||
Элемент.ПутьКДанным = ИмяРеквизита;
|
||
|
||
Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге И ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
|
||
Элемент.Гиперссылка = Истина;
|
||
Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
|
||
Если ПустаяСтрока(Форма[ИмяРеквизита]) Тогда
|
||
Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки();
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки Тогда
|
||
|
||
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
|
||
Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки");
|
||
|
||
Если ТипЗнч(ИнформацияОВидеКИ) <> Тип("Структура") И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ИнформацияОВидеКИ.Значение) Тогда
|
||
КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ИнформацияОВидеКИ.Значение, Перечисления.ТипыКонтактнойИнформации.ВебСтраница);
|
||
АдресСайта = КонтактнаяИнформация.value;
|
||
Представление = ?(КонтактнаяИнформация.Свойство("name") И ЗначениеЗаполнено(КонтактнаяИнформация.name), КонтактнаяИнформация.name, ИнформацияОВидеКИ.Представление);
|
||
Иначе
|
||
АдресСайта = "";
|
||
Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки();
|
||
КонецЕсли;
|
||
|
||
Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(Представление, АдресСайта);
|
||
|
||
Иначе
|
||
|
||
Элемент.Вид = ВидПоляФормы.ПолеВвода;
|
||
Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка");
|
||
|
||
Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
Элемент.УстановитьДействие("Автоподбор", "Подключаемый_КонтактнаяИнформацияАвтоподбор");
|
||
Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_КонтактнаяИнформацияОбработкаВыбора");
|
||
|
||
КонецЕсли;
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
Элемент.МногострочныйРежим = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Элемент.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу;
|
||
Элемент.РастягиватьПоГоризонтали = Ложь;
|
||
Элемент.РастягиватьПоВертикали = Ложь;
|
||
|
||
Элемент.ВысотаЗаголовка = ?(ОбщегоНазначения.ЭтоМобильныйКлиент(), 1, 2);
|
||
|
||
Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
Элемент.Ширина = 70;
|
||
ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
|
||
Если ИнформацияОВидеКИ.ВидПоляДругое = "МногострочноеШирокое" Тогда
|
||
Элемент.Высота = 3;
|
||
Элемент.Ширина = 70;
|
||
Элемент.МногострочныйРежим = Истина;
|
||
ИначеЕсли ИнформацияОВидеКИ.ВидПоляДругое = "ОднострочноеШирокое" Тогда
|
||
Элемент.Высота = 1;
|
||
Элемент.Ширина = 70;
|
||
Элемент.МногострочныйРежим = Ложь;
|
||
Иначе // ОднострочноеУзкое
|
||
Элемент.Высота = 1;
|
||
Элемент.Ширина = 35;
|
||
Элемент.МногострочныйРежим = Ложь;
|
||
КонецЕсли;
|
||
Иначе
|
||
Элемент.Ширина = 35;
|
||
КонецЕсли;
|
||
|
||
Если Не ЭтоНовыйВидКИ Тогда
|
||
Элемент.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Право;
|
||
Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ЦветФонаФормы;
|
||
КонецЕсли;
|
||
|
||
Элемент.ПоложениеЗаголовка = ?(ЗаголовокСлева, ПоложениеЗаголовкаЭлементаФормы.Лево, ПоложениеЗаголовкаЭлементаФормы.Верх);
|
||
Если ЗаголовокСлева Тогда
|
||
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;
|
||
Иначе
|
||
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
|
||
КонецЕсли;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяРеквизита, 2, Ложь);
|
||
|
||
// Устанавливаем свойства поля ввода.
|
||
Если ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
|
||
// Ввод комментария через контекстное меню.
|
||
ИмяКоманды = "КонтекстноеМеню" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
|
||
Кнопка.Заголовок = НСтр("ru = 'Ввести комментарий'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Подсказка = НСтр("ru = 'Ввести комментарий'");
|
||
Команда.Картинка = БиблиотекаКартинок.Комментарий;
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Команда.ИзменяетСохраняемыеДанные = Истина;
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
КонецЕсли;
|
||
|
||
Если ИнформацияОВидеКИ.ХранитьИсториюИзменений И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
|
||
// Вывод истории контактной информации через контекстное меню.
|
||
ИмяКоманды = "КонтекстноеМенюИстория" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
|
||
Кнопка.Заголовок = НСтр("ru = 'История изменений...'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Картинка = БиблиотекаКартинок.ИсторияИзменений;
|
||
Команда.Подсказка = НСтр("ru = 'Показывает историю изменения контактной информации'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Команда.ИзменяетСохраняемыеДанные = Ложь;
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
КонецЕсли;
|
||
|
||
Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
ГруппаРазделительКарты = Форма.Элементы.Добавить("ПодменюРазделительКонтекстКарты" + ИмяРеквизита, Тип("ГруппаФормы"), Элемент.КонтекстноеМеню);
|
||
ГруппаРазделительКарты.Вид = ВидГруппыФормы.ГруппаКнопок;
|
||
|
||
ИмяКоманды = "КонтекстноеМенюКартаЯндекс" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаРазделительКарты);
|
||
Кнопка.Заголовок = НСтр("ru = 'Адрес на Яндекс.Картах'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Картинка = БиблиотекаКартинок.ЯндексКарты;
|
||
Команда.Подсказка = НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
|
||
ИмяКоманды = "КонтекстноеМенюКартаGoogle" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаРазделительКарты);
|
||
Кнопка.Заголовок = НСтр("ru = 'Адрес на Google Maps'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Картинка = БиблиотекаКартинок.GoogleMaps;
|
||
Команда.Подсказка = НСтр("ru = 'Показывает адрес на карте Google Maps'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
|
||
ГруппКнопокРазделитель = Форма.Элементы.Добавить("ПодменюРазделительКарты" + ИмяРеквизита, Тип("ГруппаФормы"), Элемент.КонтекстноеМеню);
|
||
ГруппКнопокРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
|
||
|
||
Если Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
|
||
// Заполнить
|
||
ГруппаПодменюАдреса = Форма.Элементы.Добавить("КонтекстноеПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппКнопокРазделитель);
|
||
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
|
||
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
|
||
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ОбязательноеЗаполнение И ЭтоНовыйВидКИ И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
|
||
Элемент.АвтоОтметкаНезаполненного = Истина;
|
||
КонецЕсли;
|
||
|
||
// Редактирование в диалоге
|
||
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип)
|
||
И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
|
||
|
||
Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления;
|
||
Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
|
||
Элемент.РедактированиеТекста = Ложь;
|
||
Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет;
|
||
КонецЕсли;
|
||
Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора");
|
||
|
||
КонецЕсли;
|
||
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
|
||
|
||
Если ИнформацияОВидеКИ.ПометкаУдаления Тогда
|
||
|
||
Элемент.ШрифтЗаголовка = Новый Шрифт(,,,,, Истина);
|
||
Если Не ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
|
||
Элемент.КнопкаОчистки = Истина;
|
||
Элемент.РедактированиеТекста = Ложь;
|
||
Иначе
|
||
Элемент.ТолькоПросмотр = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат Элемент;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ПунктКонтекстногоМенюПеремещения(ПредыдущийЭлемент, Форма, Направление, ИмяЭлементаДляРазмещения)
|
||
|
||
Если Направление > 0 Тогда
|
||
ИмяКоманды = "КонтекстноеМенюВверх" + ПредыдущийЭлемент.Имя;
|
||
Иначе
|
||
ИмяКоманды = "КонтекстноеМенюВниз" + ПредыдущийЭлемент.Имя;
|
||
КонецЕсли;
|
||
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ПредыдущийЭлемент.КонтекстноеМеню);
|
||
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Если Направление > 0 Тогда
|
||
ТекстКоманды = НСтр("ru = 'Переместить вверх'");
|
||
Кнопка.Картинка = БиблиотекаКартинок.ПереместитьВверх;
|
||
Иначе
|
||
ТекстКоманды = НСтр("ru = 'Переместить вниз'");
|
||
Кнопка.Картинка = БиблиотекаКартинок.ПереместитьВниз;
|
||
КонецЕсли;
|
||
Кнопка.Заголовок = ТекстКоманды;
|
||
Команда.Подсказка = ТекстКоманды;
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
Команда.ИзменяетСохраняемыеДанные = Истина;
|
||
Кнопка.Доступность = Истина;
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Убирает разделители в номере телефона.
|
||
//
|
||
// Параметры:
|
||
// НомерТелефона - Строка - номер телефона или факса.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - номер телефона или факса без разделителей.
|
||
//
|
||
Функция УбратьРазделителиВНомерТелефона(Знач НомерТелефона)
|
||
|
||
Поз = СтрНайти(НомерТелефона, ",");
|
||
Если Поз <> 0 Тогда
|
||
НомерТелефона = Лев(НомерТелефона, Поз-1);
|
||
КонецЕсли;
|
||
|
||
НомерТелефона = СтрЗаменить(НомерТелефона, "-", "");
|
||
НомерТелефона = СтрЗаменить(НомерТелефона, " ", "");
|
||
НомерТелефона = СтрЗаменить(НомерТелефона, "+", "");
|
||
|
||
Возврат НомерТелефона;
|
||
|
||
КонецФункции
|
||
|
||
Функция Группа(ИмяГруппы, Форма, Заголовок, ИмяЭлементаДляРазмещения)
|
||
|
||
Группа = Форма.Элементы.Найти(ИмяГруппы);
|
||
|
||
Если Группа = Неопределено Тогда
|
||
Родитель = Родитель(Форма, ИмяЭлементаДляРазмещения);
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
Родитель.ШрифтЗаголовка = Новый Шрифт(,, Истина);
|
||
КонецЕсли;
|
||
Группа = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Родитель);
|
||
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
|
||
Группа.Заголовок = Заголовок;
|
||
Группа.ОтображатьЗаголовок = Ложь;
|
||
Группа.РазрешитьИзменениеСостава = Ложь;
|
||
Группа.Отображение = ОтображениеОбычнойГруппы.Нет;
|
||
Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяГруппы, 5);
|
||
КонецЕсли;
|
||
|
||
Возврат Группа;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ПроверитьНаличиеРеквизитовКонтактнойИнформации(Форма, МассивДобавляемыхРеквизитов)
|
||
|
||
СписокРеквизитовФормы = Форма.ПолучитьРеквизиты();
|
||
|
||
СоздатьПараметрыКонтактнойИнформации = Истина;
|
||
СоздатьТаблицуКонтактнойИнформации = Истина;
|
||
Для Каждого Реквизит Из СписокРеквизитовФормы Цикл
|
||
Если Реквизит.Имя = "ПараметрыКонтактнойИнформации" Тогда
|
||
СоздатьПараметрыКонтактнойИнформации = Ложь;
|
||
ИначеЕсли Реквизит.Имя = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов" Тогда
|
||
СоздатьТаблицуКонтактнойИнформации = Ложь;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500));
|
||
ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов";
|
||
|
||
Если СоздатьТаблицуКонтактнойИнформации Тогда
|
||
|
||
// Создадим таблицу значений
|
||
ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов";
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений")));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяРеквизита", Строка500, ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов("Строка"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Представление", Строка500, ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Комментарий", Новый ОписаниеТипов("Строка"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоРеквизитТабличнойЧасти", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоИсторическаяКонтактнаяИнформация", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяЭлементаДляРазмещения", Строка500, ИмяОписания));
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("МеждународныйФорматАдреса", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
Иначе
|
||
РеквизитыТаблицы = Форма.ПолучитьРеквизиты("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов");
|
||
РеквизитыДляСоздания = Новый Соответствие;
|
||
РеквизитыДляСоздания.Вставить("ИмяЭлементаДляРазмещения", Истина);
|
||
РеквизитыДляСоздания.Вставить("ХранитьИсториюИзменений", Истина);
|
||
РеквизитыДляСоздания.Вставить("ДействуетС", Истина);
|
||
РеквизитыДляСоздания.Вставить("ЭтоИсторическаяКонтактнаяИнформация", Истина);
|
||
РеквизитыДляСоздания.Вставить("Значение", Истина);
|
||
РеквизитыДляСоздания.Вставить("МеждународныйФорматАдреса", Истина);
|
||
|
||
Для Каждого Реквизит Из РеквизитыТаблицы Цикл
|
||
Если РеквизитыДляСоздания[Реквизит.Имя] <> Неопределено Тогда
|
||
РеквизитыДляСоздания[Реквизит.Имя] = Ложь;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если РеквизитыДляСоздания["Значение"] Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов("Строка"), ИмяОписания));
|
||
КонецЕсли;
|
||
|
||
Если РеквизитыДляСоздания["МеждународныйФорматАдреса"] Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("МеждународныйФорматАдреса", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
КонецЕсли;
|
||
|
||
Если РеквизитыДляСоздания["ИмяЭлементаДляРазмещения"] Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяЭлементаДляРазмещения", Строка500, ИмяОписания));
|
||
КонецЕсли;
|
||
|
||
Если РеквизитыДляСоздания["ХранитьИсториюИзменений"] Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
КонецЕсли;
|
||
|
||
Если РеквизитыДляСоздания["ДействуетС"] Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания));
|
||
КонецЕсли;
|
||
|
||
Если РеквизитыДляСоздания["ЭтоИсторическаяКонтактнаяИнформация"] Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоИсторическаяКонтактнаяИнформация", Новый ОписаниеТипов("Булево"), ИмяОписания));
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если СоздатьПараметрыКонтактнойИнформации Тогда
|
||
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ПараметрыКонтактнойИнформации", Новый ОписаниеТипов()));
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки = Неопределено)
|
||
|
||
Объект.ПроверятьКорректность = ?(НастройкиПроверки = Неопределено, Ложь, НастройкиПроверки.ПроверятьКорректность);
|
||
|
||
Объект.ТолькоНациональныйАдрес = Ложь;
|
||
Объект.ВключатьСтрануВПредставление = Ложь;
|
||
Объект.СкрыватьНеактуальныеАдреса = Ложь;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ДобавитьРеквизитВОписание(Форма, СтрокаКонтактнойИнформации, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ,
|
||
ЭтоРеквизитТабличнойЧасти = Ложь, ЗаполнятьЗначениеРеквизита = Истина, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация")
|
||
|
||
НоваяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить();
|
||
НоваяСтрока.ИмяРеквизита = СтрокаКонтактнойИнформации.ИмяРеквизита;
|
||
НоваяСтрока.Вид = СтрокаКонтактнойИнформации.Вид;
|
||
НоваяСтрока.Тип = СтрокаКонтактнойИнформации.Тип;
|
||
НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения;
|
||
НоваяСтрока.ЭтоРеквизитТабличнойЧасти = ЭтоРеквизитТабличнойЧасти;
|
||
|
||
Если НоваяСтрока.Свойство("ЭтоИсторическаяКонтактнаяИнформация") Тогда
|
||
НоваяСтрока.ЭтоИсторическаяКонтактнаяИнформация = СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация;
|
||
КонецЕсли;
|
||
|
||
Если НоваяСтрока.Свойство("ДействуетС") Тогда
|
||
НоваяСтрока.ДействуетС = СтрокаКонтактнойИнформации.ДействуетС;
|
||
КонецЕсли;
|
||
|
||
Если НоваяСтрока.Свойство("ХранитьИсториюИзменений") Тогда
|
||
НоваяСтрока.ХранитьИсториюИзменений = СтрокаКонтактнойИнформации.ХранитьИсториюИзменений;
|
||
КонецЕсли;
|
||
|
||
Если НоваяСтрока.Свойство("МеждународныйФорматАдреса") Тогда
|
||
НоваяСтрока.МеждународныйФорматАдреса = СтрокаКонтактнойИнформации.МеждународныйФорматАдреса;
|
||
КонецЕсли;
|
||
|
||
НоваяСтрока.Значение = СтрокаКонтактнойИнформации.Значение;
|
||
НоваяСтрока.Представление = СтрокаКонтактнойИнформации.Представление;
|
||
НоваяСтрока.Комментарий = СтрокаКонтактнойИнформации.Комментарий;
|
||
|
||
Если ЗаполнятьЗначениеРеквизита И Не ЭтоРеквизитТабличнойЧасти Тогда
|
||
Если СтрокаКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
|
||
И СтрокаКонтактнойИнформации.РедактированиеТолькоВДиалоге
|
||
И ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) Тогда
|
||
Форма[СтрокаКонтактнойИнформации.ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки();
|
||
Иначе
|
||
Форма[СтрокаКонтактнойИнформации.ИмяРеквизита] = СтрокаКонтактнойИнформации.Представление;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ДанныеВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид];
|
||
ДанныеВидаКонтактнойИнформации.Вставить("Ссылка", СтрокаКонтактнойИнформации.Вид);
|
||
|
||
Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти И Не ДанныеВидаКонтактнойИнформации.ПометкаУдаления Тогда
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Вид.Наименование);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура УдалитьКомандыИЭлементыФормы(Форма, ИмяЭлементаДляРазмещения)
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ДобавленныеЭлементы = ПараметрыКонтактнойИнформации.ДобавленныеЭлементы;
|
||
ДобавленныеЭлементы.СортироватьПоПредставлению();
|
||
|
||
Для Каждого УдаляемыйЭлемент Из ДобавленныеЭлементы Цикл
|
||
|
||
Если УдаляемыйЭлемент.Пометка Тогда
|
||
Форма.Команды.Удалить(Форма.Команды[УдаляемыйЭлемент.Значение]);
|
||
Иначе
|
||
Форма.Элементы.Удалить(Форма.Элементы[УдаляемыйЭлемент.Значение]);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает доступно ли редактирование в диалоге по типу контактной информации.
|
||
//
|
||
// Параметры:
|
||
// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - доступно или нет редактирование в диалоге.
|
||
//
|
||
Функция ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип)
|
||
|
||
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
Возврат Истина;
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
Возврат Истина;
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
|
||
Возврат Истина;
|
||
Иначе
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаполнитьТаблицуВидовКИ(ТаблицаВидов, ВетвьДерева)
|
||
|
||
Для каждого СтрокаВида Из ВетвьДерева.Строки Цикл
|
||
|
||
Группа = ТаблицаВидов.Добавить();
|
||
Группа.Имя = СтрокаВида.Имя;
|
||
Группа.Наименование = СтрокаВида.Наименование;
|
||
Если СтрокаВида.Родитель <> Неопределено Тогда
|
||
Группа.Группа = ВетвьДерева.Наименование;
|
||
Группа.ИмяГруппы = ВетвьДерева.Имя;
|
||
КонецЕсли;
|
||
|
||
Если СтрокаВида.Строки.Количество() > 0 Тогда
|
||
ЗаполнитьТаблицуВидовКИ(ТаблицаВидов, СтрокаВида);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает имена табличных частей документа по виду контактной информации.
|
||
//
|
||
// Параметры:
|
||
// ТаблицаВидовКонтактнойИнформации - ТаблицаЗначений - Список видов контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации.
|
||
// ИмяОбъекта - Строка - полное имя объекта метаданного.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие - имена табличных части или пустая строка, если табличной части нет.
|
||
//
|
||
Функция ИменаТабличныхЧастейПоВидамКИ(ТаблицаВидовКонтактнойИнформации, ИмяОбъекта)
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = "ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.Вид КАК ВидКИ
|
||
|ПОМЕСТИТЬ ВидыКИ
|
||
|ИЗ
|
||
| &ТаблицаВидовКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|;
|
||
|
|
||
|////////////////////////////////////////////////////////////////////////////////
|
||
|ВЫБРАТЬ
|
||
| ВЫБОР
|
||
| КОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида <> """"
|
||
| ТОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида
|
||
| ИНАЧЕ ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных
|
||
| КОНЕЦ КАК ИмяТабличнойЧасти,
|
||
| ВидыКИ.ВидКИ КАК ВидКонтактнойИнформации
|
||
|ИЗ
|
||
| ВидыКИ КАК ВидыКИ
|
||
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
| ПО ВидыКИ.ВидКИ = ВидыКонтактнойИнформации.Ссылка";
|
||
|
||
Запрос.УстановитьПараметр("ТаблицаВидовКонтактнойИнформации", ТаблицаВидовКонтактнойИнформации);
|
||
РезультатЗапроса = Запрос.Выполнить().Выбрать();
|
||
|
||
Результат = Новый Соответствие;
|
||
Пока РезультатЗапроса.Следующий() Цикл
|
||
|
||
Если ЗначениеЗаполнено(РезультатЗапроса.ИмяТабличнойЧасти) Тогда
|
||
ИмяТабличнойЧасти = Сред(РезультатЗапроса.ИмяТабличнойЧасти, СтрНайти(РезультатЗапроса.ИмяТабличнойЧасти, ИмяОбъекта) + СтрДлина(ИмяОбъекта));
|
||
Иначе
|
||
ИмяТабличнойЧасти = "";
|
||
КонецЕсли;
|
||
|
||
Результат.Вставить(РезультатЗапроса.ВидКонтактнойИнформации, ИмяТабличнойЧасти);
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Проверяет на наличие в форме заполненных строк КИ того же вида (за исключением текущей).
|
||
//
|
||
Функция ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Знач Форма, Знач ПроверяемаяСтрока, Знач ВидКонтактнойИнформации)
|
||
|
||
ВсеСтрокиЭтогоВида = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(
|
||
Новый Структура("Вид", ВидКонтактнойИнформации));
|
||
|
||
Для Каждого СтрокаВида Из ВсеСтрокиЭтогоВида Цикл
|
||
|
||
Если СтрокаВида <> ПроверяемаяСтрока Тогда
|
||
Представление = Форма[СтрокаВида.ИмяРеквизита];
|
||
Если Не ПустаяСтрока(Представление) Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Ложь;
|
||
КонецФункции
|
||
|
||
Процедура ВывестиСообщениеПользователю(ТекстСообщения, ИмяРеквизита, ПолеРеквизита)
|
||
|
||
ИмяРеквизита = ?(ПустаяСтрока(ПолеРеквизита), ИмяРеквизита, "");
|
||
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, ПолеРеквизита, ИмяРеквизита);
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Заполнение дополнительных реквизитов табличной части "Контактная информация".
|
||
|
||
Процедура КонвертацияКонтактнойИнформацииВJSON(КонтактнаяИнформация)
|
||
|
||
// Конвертация
|
||
Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл
|
||
Если ПустаяСтрока(СтрокаКИ.Значение) Тогда
|
||
Если ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда
|
||
|
||
КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(СтрокаКИ.ЗначенияПолей,
|
||
СтрокаКИ.Тип, СтрокаКИ.Представление, Ложь);
|
||
СтрокаКИ.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям);
|
||
|
||
ИначеЕсли ЗначениеЗаполнено(СтрокаКИ.Представление) Тогда
|
||
|
||
СтрокаКИ.Значение = КонтактнаяИнформацияПоПредставлению(СтрокаКИ.Представление, СтрокаКИ.Тип);
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура СоздатьЭлементыТабличнойЧасти(Знач Форма, Знач ИмяОбъекта, ИмяЭлементаДляРазмещения,
|
||
Знач СтрокаКонтактнойИнформации, Знач ДанныеВидовКонтактнойИнформации)
|
||
|
||
ВидыКонтактнойИнформацииТЧ = Новый Массив;
|
||
Для Каждого СтрокаТабличнойЧасти Из СтрокаКонтактнойИнформации.Строки Цикл
|
||
ВидыКонтактнойИнформацииТЧ.Добавить(СтрокаТабличнойЧасти.Вид);
|
||
КонецЦикла;
|
||
ДанныеВидовКонтактнойИнформацииТЧ = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации(
|
||
ВидыКонтактнойИнформацииТЧ);
|
||
|
||
ИмяВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид].ИмяПредопределенногоВида;
|
||
Если ПустаяСтрока(ИмяВидаКонтактнойИнформации) Тогда
|
||
ИмяВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид].ИмяПредопределенныхДанных;
|
||
КонецЕсли;
|
||
Позиция = СтрНайти(ИмяВидаКонтактнойИнформации, ИмяОбъекта);
|
||
ИмяТабличнойЧасти = Сред(ИмяВидаКонтактнойИнформации, Позиция + СтрДлина(ИмяОбъекта));
|
||
ПредыдущийВидТЧ = Неопределено;
|
||
|
||
Для Каждого СтрокаТабличнойЧасти Из СтрокаКонтактнойИнформации.Строки Цикл
|
||
|
||
ВидКонтактнойИнформацииТЧ = СтрокаТабличнойЧасти.Вид;
|
||
Если ВидКонтактнойИнформацииТЧ <> ПредыдущийВидТЧ Тогда
|
||
|
||
ГруппаТабличнойЧасти = Форма.Элементы[ИмяТабличнойЧасти + "ГруппаКонтактнаяИнформация"];
|
||
|
||
Элемент = Форма.Элементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита, Тип("ПолеФормы"), ГруппаТабличнойЧасти);
|
||
Элемент.Вид = ВидПоляФормы.ПолеВвода;
|
||
Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита;
|
||
|
||
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда
|
||
Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления;;
|
||
Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда
|
||
Элемент.РедактированиеТекста = Ложь;
|
||
КонецЕсли;
|
||
|
||
Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора");
|
||
КонецЕсли;
|
||
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
|
||
|
||
Если СтрокаТабличнойЧасти.ПометкаУдаления Тогда
|
||
Элемент.Шрифт = Новый Шрифт(,,,,, Истина);
|
||
Элемент.РедактированиеТекста = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если ВидКонтактнойИнформацииТЧ.ОбязательноеЗаполнение Тогда
|
||
Элемент.АвтоОтметкаНезаполненного = Не СтрокаТабличнойЧасти.ПометкаУдаления;
|
||
КонецЕсли;
|
||
|
||
Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита,
|
||
2, Ложь);
|
||
|
||
ДобавитьРеквизитВОписание(Форма, СтрокаТабличнойЧасти, ДанныеВидовКонтактнойИнформацииТЧ, Ложь, Истина,, ИмяЭлементаДляРазмещения);
|
||
ПредыдущийВидТЧ = ВидКонтактнойИнформацииТЧ;
|
||
|
||
КонецЕсли;
|
||
|
||
Отбор = Новый Структура;
|
||
Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти);
|
||
|
||
СтрокиТаблицы = Форма.Объект[ИмяТабличнойЧасти].НайтиСтроки(Отбор);
|
||
|
||
Если СтрокиТаблицы.Количество() = 1 Тогда
|
||
СтрокаТаблицы = СтрокиТаблицы[0];
|
||
СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита] = СтрокаТабличнойЧасти.Представление;
|
||
СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита + "Значение"] = СтрокаТабличнойЧасти.Значение;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, Объект, ТипКонтактнойИнформации)
|
||
|
||
// Заполнение дополнительных реквизитов ТЧ.
|
||
Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаКонтактнойИнформации, Объект);
|
||
|
||
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКонтактнойИнформации, Объект);
|
||
|
||
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект);
|
||
|
||
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
|
||
ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект);
|
||
|
||
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
|
||
ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаКонтактнойИнформации, Объект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса.
|
||
//
|
||
// Параметры:
|
||
// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация".
|
||
// Источник - ОбъектXDTO - контактная информация.
|
||
//
|
||
Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаТабличнойЧасти, Адрес)
|
||
|
||
// Умолчания
|
||
СтрокаТабличнойЧасти.Страна = "";
|
||
СтрокаТабличнойЧасти.Регион = "";
|
||
СтрокаТабличнойЧасти.Город = "";
|
||
|
||
Если Адрес.Свойство("Country") Тогда
|
||
СтрокаТабличнойЧасти.Страна = Адрес.Country;
|
||
|
||
Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда
|
||
Обработки["РасширенныйВводКонтактнойИнформации"].ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Адрес, СтрокаТабличнойЧасти);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса электронной почты.
|
||
//
|
||
// Параметры:
|
||
// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация".
|
||
// Источник - ОбъектXDTO - контактная информация.
|
||
//
|
||
Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаТабличнойЧасти, Источник)
|
||
|
||
Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СтрокаТабличнойЧасти.Представление, Ложь);
|
||
|
||
Если Результат.Количество() > 0 Тогда
|
||
СтрокаТабличнойЧасти.АдресЭП = Результат[0].Адрес;
|
||
|
||
Поз = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@");
|
||
Если Поз <> 0 Тогда
|
||
СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз+1);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса.
|
||
//
|
||
// Параметры:
|
||
// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация".
|
||
// Источник - ОбъектXDTO - контактная информация.
|
||
//
|
||
Процедура ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаТабличнойЧасти, Телефон)
|
||
|
||
Если НЕ ЗначениеЗаполнено(Телефон) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Умолчания
|
||
СтрокаТабличнойЧасти.НомерТелефонаБезКодов = "";
|
||
СтрокаТабличнойЧасти.НомерТелефона = "";
|
||
|
||
КодСтраны = Телефон.CountryCode;
|
||
КодГорода = Телефон.AreaCode;
|
||
НомерТелефона = Телефон.Number;
|
||
|
||
Если СтрНачинаетсяС(КодСтраны, "+") Тогда
|
||
КодСтраны = Сред(КодСтраны, 2);
|
||
КонецЕсли;
|
||
|
||
Поз = СтрНайти(НомерТелефона, ",");
|
||
Если Поз <> 0 Тогда
|
||
НомерТелефона = Лев(НомерТелефона, Поз-1);
|
||
КонецЕсли;
|
||
|
||
Поз = СтрНайти(НомерТелефона, Символы.ПС);
|
||
Если Поз <> 0 Тогда
|
||
НомерТелефона = Лев(НомерТелефона, Поз-1);
|
||
КонецЕсли;
|
||
|
||
СтрокаТабличнойЧасти.НомерТелефонаБезКодов = УбратьРазделителиВНомерТелефона(НомерТелефона);
|
||
СтрокаТабличнойЧасти.НомерТелефона = УбратьРазделителиВНомерТелефона(Строка(КодСтраны) + КодГорода + НомерТелефона);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса.
|
||
//
|
||
// Параметры:
|
||
// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация".
|
||
// Источник - Структура, ОбъектXDTO - контактная информация.
|
||
//
|
||
Процедура ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаТабличнойЧасти, Источник)
|
||
|
||
// Умолчания
|
||
СтрокаТабличнойЧасти.ДоменноеИмяСервера = "";
|
||
АдресСтраницы = "";
|
||
|
||
Если ТипЗнч(Источник) = Тип("Структура") Тогда
|
||
|
||
Если Источник.Свойство("value") Тогда
|
||
АдресСтрокой = Источник.value;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
АдресСтраницы = Источник.Состав;
|
||
ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен();
|
||
Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда
|
||
АдресСтрокой = АдресСтраницы.Значение;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
// Удалим протокол
|
||
Позиция = СтрНайти(АдресСтрокой, "://");
|
||
АдресСервера = ?(Позиция = 0, АдресСтрокой, Сред(АдресСтрокой, Позиция + 3));
|
||
|
||
СтрокаТабличнойЧасти.ДоменноеИмяСервера = АдресСервера;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Проверяет контактную информацию электронной почты и сообщает об ошибках.
|
||
//
|
||
// Параметры:
|
||
// АдресЭП - Структура, Строка - контактная информацией.
|
||
// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки.
|
||
// ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие.
|
||
//
|
||
Функция ОшибкиЗаполненияЭлектроннойПочты(АдресЭП, ВидИнформации, Знач ИмяРеквизита = "", ПолеРеквизита = "")
|
||
|
||
Если Не ВидИнформации.ПроверятьКорректность Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(АдресЭП) Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
СтрокаОшибки = "";
|
||
ЭлектроннаяПочта = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(АдресЭП, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
|
||
|
||
Попытка
|
||
Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлектроннаяПочта.Value);
|
||
Если Результат.Количество() > 1 Тогда
|
||
|
||
СтрокаОшибки = НСтр("ru = 'Допускается ввод только одного адреса электронной почты'");
|
||
|
||
КонецЕсли;
|
||
Исключение
|
||
СтрокаОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
КонецПопытки;
|
||
|
||
Если Не ПустаяСтрока(СтрокаОшибки) Тогда
|
||
ВывестиСообщениеПользователю(СтрокаОшибки, ИмяРеквизита, ПолеРеквизита);
|
||
УровеньОшибки = ?(ВидИнформации.ПроверятьКорректность, 2, 1);
|
||
Иначе
|
||
УровеньОшибки = 0;
|
||
КонецЕсли;
|
||
|
||
Возврат УровеньОшибки;
|
||
|
||
КонецФункции
|
||
|
||
// Проверяет контактную информацию.
|
||
//
|
||
Функция ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, ВидИнформации, ТипИнформации,
|
||
ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "")
|
||
|
||
Если ПустаяСтрока(Значение) Тогда
|
||
|
||
Если ПустаяСтрока(Представление) Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
РедактированиеТолькоВДиалоге = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидИнформации, "РедактированиеТолькоВДиалоге");
|
||
Если РедактированиеТолькоВДиалоге И СтрСравнить(Представление, УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()) = 0 Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(Представление, ВидИнформации);
|
||
Значение = ?(ТипЗнч(КонтактнаяИнформация) = Тип("Структура"), УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация), "");
|
||
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда
|
||
|
||
Значение = КонтактнаяИнформацияВJSON(Значение, ВидИнформации);
|
||
|
||
КонецЕсли;
|
||
|
||
// Проверка
|
||
Если ТипИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияАдреса(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита);
|
||
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
|
||
УровеньОшибок = ОшибкиЗаполненияВебСтраницы(Значение, ВидИнформации, ИмяРеквизита);
|
||
Иначе
|
||
// Другое (прочее) не проверяем.
|
||
УровеньОшибок = 0;
|
||
КонецЕсли;
|
||
|
||
Возврат УровеньОшибок;
|
||
|
||
КонецФункции
|
||
|
||
// Получение и коррекция контактной информации
|
||
Процедура СкорректироватьКонтактнуюИнформацию(Форма, СтрокаКИ)
|
||
|
||
РезультатПреобразования = Новый Структура;
|
||
|
||
Если ПустаяСтрока(СтрокаКИ.Значение) Тогда
|
||
|
||
Если ПустаяСтрока(СтрокаКИ.Представление) И ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда
|
||
СтрокаКИ.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид);
|
||
КонецЕсли;
|
||
|
||
Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление);
|
||
СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, "");
|
||
|
||
Если РезультатПреобразования.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если РезультатПреобразования.СведенияИсправлены Тогда
|
||
СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат);
|
||
КонецЕсли;
|
||
|
||
Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда
|
||
ОбщегоНазначения.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита);
|
||
КонецЕсли;
|
||
|
||
Форма.Модифицированность = Истина;
|
||
|
||
Иначе
|
||
|
||
СтрокаКИ.Комментарий = КомментарийКонтактнойИнформации(СтрокаКИ.Значение);
|
||
|
||
Если ПустаяСтрока(СтрокаКИ.Представление) Тогда
|
||
СтрокаКИ.Представление = ПредставлениеКонтактнойИнформации(СтрокаКИ.Значение);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Проверяет контактную информацию адреса и сообщает об ошибках. Возвращает флаг наличия ошибок.
|
||
//
|
||
// Параметры:
|
||
// Источник - ОбъектXDTO - контактная информацией.
|
||
// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки.
|
||
// ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие.
|
||
//
|
||
Функция ОшибкиЗаполненияАдреса(Источник, ВидИнформации, ИмяРеквизита = "", ПолеРеквизита = "")
|
||
|
||
Если Не ВидИнформации.ПроверятьКорректность Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
ЕстьОшибки = Ложь;
|
||
|
||
Если НЕ УправлениеКонтактнойИнформациейСлужебный.ЭтоНациональныйАдрес(Источник) Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда
|
||
СписокОшибок = Обработки["РасширенныйВводКонтактнойИнформации"].ОшибкиЗаполненияАдресаXDTO(Источник, ВидИнформации);
|
||
Для Каждого Элемент Из СписокОшибок Цикл
|
||
ВывестиСообщениеПользователю(Элемент.Представление, ИмяРеквизита, ПолеРеквизита);
|
||
ЕстьОшибки = Истина;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Если ЕстьОшибки И ВидИнформации.ПроверятьКорректность Тогда
|
||
Возврат 2;
|
||
ИначеЕсли ЕстьОшибки Тогда
|
||
Возврат 1;
|
||
КонецЕсли;
|
||
|
||
Возврат 0;
|
||
КонецФункции
|
||
|
||
// Проверяет контактную информацию телефона и сообщает об ошибках. Возвращает флаг наличия ошибок.
|
||
//
|
||
// Параметры:
|
||
// Источник - ОбъектXDTO - контактная информацией.
|
||
// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки.
|
||
// ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие.
|
||
//
|
||
Функция ОшибкиЗаполненияТелефона(Источник, ВидИнформации, ИмяРеквизита = "")
|
||
Возврат 0;
|
||
КонецФункции
|
||
|
||
// Проверяет контактную информацию веб страницы и сообщает об ошибках. Возвращает флаг наличия ошибок.
|
||
//
|
||
// Параметры:
|
||
// Источник - ОбъектXDTO - контактная информацией.
|
||
// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки.
|
||
// ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие.
|
||
//
|
||
Функция ОшибкиЗаполненияВебСтраницы(Источник, ВидИнформации, ИмяРеквизита = "")
|
||
Возврат 0;
|
||
КонецФункции
|
||
|
||
Процедура ОбработкаЗаполненияКонтактнойИнформацииОбъекта(Объект, Знач ДанныеЗаполнения)
|
||
|
||
Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Наименование, если есть в объекте-приемнике.
|
||
Наименование = Неопределено;
|
||
Если ДанныеЗаполнения.Свойство("Наименование", Наименование)
|
||
И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "Наименование") Тогда
|
||
Объект.Наименование = Наименование;
|
||
КонецЕсли;
|
||
|
||
// Таблица контактной информации, заполняется только если КИ не находится в другой ТЧ.
|
||
КонтактнаяИнформация = Неопределено;
|
||
Если ДанныеЗаполнения.Свойство("КонтактнаяИнформация", КонтактнаяИнформация)
|
||
И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "КонтактнаяИнформация") Тогда
|
||
|
||
Если ТипЗнч(КонтактнаяИнформация) = Тип("ТаблицаЗначений") Тогда
|
||
КолонкиТаблицы = КонтактнаяИнформация.Колонки;
|
||
Иначе
|
||
КолонкиТаблицы = КонтактнаяИнформация.ВыгрузитьКолонки().Колонки;
|
||
КонецЕсли;
|
||
|
||
Если КолонкиТаблицы.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено Тогда
|
||
|
||
Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл
|
||
НоваяСтрокаКИ = Объект.КонтактнаяИнформация.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрокаКИ, СтрокаКИ, , "ЗначенияПолей");
|
||
НоваяСтрокаКИ.ЗначенияПолей = КонтактнаяИнформацияВXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Представление, СтрокаКИ.Вид);
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция Родитель(Форма, ИмяЭлементаДляРазмещения)
|
||
|
||
Возврат ?(ПустаяСтрока(ИмяЭлементаДляРазмещения), Форма, Форма.Элементы[ИмяЭлементаДляРазмещения])
|
||
|
||
КонецФункции
|
||
|
||
Функция ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, ОтложеннаяИнициализация, ИсключаемыеВиды, СкрываемыеВиды)
|
||
|
||
Если ТипЗнч(Форма.ПараметрыКонтактнойИнформации) <> Тип("Структура") Тогда
|
||
Форма.ПараметрыКонтактнойИнформации = Новый Структура;
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда
|
||
МодульОтправкаSMS = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS");
|
||
МожноОтправлятьSMS = МодульОтправкаSMS.ДоступнаОтправкаSMS();
|
||
Иначе
|
||
МожноОтправлятьSMS = Ложь;
|
||
КонецЕсли;
|
||
|
||
ПараметрыКонтактнойИнформации = Новый Структура;
|
||
ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения);
|
||
ПараметрыКонтактнойИнформации.Вставить("ПоложениеЗаголовка", ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ));
|
||
ПараметрыКонтактнойИнформации.Вставить("ДобавленныеРеквизиты", Новый СписокЗначений);
|
||
ПараметрыКонтактнойИнформации.Вставить("ОтложеннаяИнициализация", ОтложеннаяИнициализация);
|
||
ПараметрыКонтактнойИнформации.Вставить("ИсключаемыеВиды", ИсключаемыеВиды);
|
||
ПараметрыКонтактнойИнформации.Вставить("ВыполненаОтложеннаяИнициализация", Ложь);
|
||
ПараметрыКонтактнойИнформации.Вставить("ДобавленныеЭлементы", Новый СписокЗначений);
|
||
ПараметрыКонтактнойИнформации.Вставить("СписокДобавляемыхЭлементов", Новый СписокЗначений);
|
||
ПараметрыКонтактнойИнформации.Вставить("МожноОтправлятьSMS", МожноОтправлятьSMS);
|
||
ПараметрыКонтактнойИнформации.Вставить("Владелец", Неопределено);
|
||
ПараметрыКонтактнойИнформации.Вставить("ОбработкаНавигационнойСсылки", Ложь);
|
||
ПараметрыКонтактнойИнформации.Вставить("СкрываемыеВиды", СкрываемыеВиды);
|
||
|
||
ПараметрыАдреса = Новый Структура("ТипПомещения, Страна, Индекс", "Квартира");
|
||
ПараметрыКонтактнойИнформации.Вставить("ПараметрыАдреса", ПараметрыАдреса);
|
||
|
||
Форма.ПараметрыКонтактнойИнформации.Вставить(ИмяЭлементаДляРазмещения, ПараметрыКонтактнойИнформации);
|
||
Возврат Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения];
|
||
|
||
КонецФункции
|
||
|
||
Функция ГруппаВидовКонтактнойИнформацииОбъекта(Знач ПолноеИмяОбъектаМетаданных)
|
||
|
||
Возврат ВидКонтактнойИнформацииПоИмени(СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""));
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает виды контактной информации по имени.
|
||
// Если имя не указано, то возвращается полный список программно предопределенных видов.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ТаблицаЗначений - Виды контактной информации.
|
||
// * Имя - Строка - Имя вида контактной информации.
|
||
// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на элемент справочника виды контактной информации.
|
||
//
|
||
Функция ПредопределенныеВидыКонтактнойИнформации(Имя = "") Экспорт
|
||
|
||
ТекстЗапроса = "ВЫБРАТЬ
|
||
| ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК Имя,
|
||
| ВидыКонтактнойИнформации.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ГДЕ
|
||
| &Отбор";
|
||
|
||
Запрос = Новый Запрос();
|
||
Если ЗначениеЗаполнено(Имя) Тогда
|
||
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отбор", "ВидыКонтактнойИнформации.ИмяПредопределенногоВида = &Имя");
|
||
Запрос.УстановитьПараметр("Имя", Имя);
|
||
Иначе
|
||
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отбор", "ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """"");
|
||
КонецЕсли;
|
||
|
||
Запрос.Текст = ТекстЗапроса;
|
||
Возврат Запрос.Выполнить().Выгрузить();
|
||
|
||
КонецФункции
|
||
|
||
// Определяет значение положения заголовка. Для поддержки локализованных конфигураций.
|
||
//
|
||
// Параметры:
|
||
// ПоложениеЗаголовкаКИ - Строка - положения заголовка в текстовом представление на языке локализации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - положения заголовка.
|
||
//
|
||
Функция ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ)
|
||
|
||
Если ПоложениеЗаголовкаЭлементаФормы.Лево = ПоложениеЗаголовкаКИ Тогда
|
||
Возврат "ПоложениеЗаголовкаЭлементаФормы.Лево";
|
||
ИначеЕсли ПоложениеЗаголовкаЭлементаФормы.Верх = ПоложениеЗаголовкаКИ Тогда
|
||
Возврат "ПоложениеЗаголовкаЭлементаФормы.Верх";
|
||
ИначеЕсли ПоложениеЗаголовкаЭлементаФормы.Низ = ПоложениеЗаголовкаКИ Тогда
|
||
Возврат "ПоложениеЗаголовкаЭлементаФормы.Низ";
|
||
ИначеЕсли ПоложениеЗаголовкаЭлементаФормы.Право = ПоложениеЗаголовкаКИ Тогда
|
||
Возврат "ПоложениеЗаголовкаЭлементаФормы.Право";
|
||
ИначеЕсли ПоложениеЗаголовкаЭлементаФормы.Нет = ПоложениеЗаголовкаКИ Тогда
|
||
Возврат "ПоложениеЗаголовкаЭлементаФормы.Нет";
|
||
ИначеЕсли ПоложениеЗаголовкаЭлементаФормы.Авто = ПоложениеЗаголовкаКИ Тогда
|
||
Возврат "ПоложениеЗаголовкаЭлементаФормы.Авто";
|
||
КонецЕсли;
|
||
|
||
Возврат "";
|
||
|
||
КонецФункции
|
||
|
||
Процедура СоздатьДействие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация")
|
||
|
||
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
|
||
ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки;
|
||
|
||
Тип = ВидКонтактнойИнформации.Тип;
|
||
СоздаватьДействиеДляТипа = Новый Соответствие();
|
||
Если Не ОбработкаНавигационнойСсылки Тогда
|
||
СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.ВебСтраница, Истина);
|
||
КонецЕсли;
|
||
|
||
СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, Истина);
|
||
СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Телефон, Истина);
|
||
СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Адрес, ?(КоличествоАдресов > 1, Истина, Ложь));
|
||
СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Skype, Истина);
|
||
|
||
Если Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
|
||
МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями");
|
||
Если НЕ МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда
|
||
СоздаватьДействиеДляТипа[Тип] = Ложь;
|
||
КонецЕсли;
|
||
Иначе
|
||
СоздаватьДействиеДляТипа[Тип] = Ложь;
|
||
КонецЕсли;
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда
|
||
СоздаватьДействиеДляТипа[Тип] = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если СоздаватьДействиеДляТипа[Тип] = Истина Тогда
|
||
|
||
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
ГруппаПодменюВерхнийУровень = Форма.Элементы.Добавить("КоманднаяПанель" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаДействий);
|
||
ГруппаПодменюВерхнийУровень.Вид = ВидГруппыФормы.КоманднаяПанель;
|
||
|
||
ГруппаПодменю = Форма.Элементы.Добавить("Подменю" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаПодменюВерхнийУровень);
|
||
ГруппаПодменю.Заголовок = НСтр("ru='Контактная информация'");
|
||
ГруппаПодменю.Вид = ВидГруппыФормы.Подменю;
|
||
ГруппаПодменю.Картинка = БиблиотекаКартинок.МенюДополнительныеФункции;
|
||
ГруппаПодменю.Отображение = ОтображениеКнопки.Картинка;
|
||
ГруппаПодменю.РастягиватьПоГоризонтали = Ложь;
|
||
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
ГруппаДействий.ОтображатьЗаголовок = Истина;
|
||
|
||
ГруппаПодменюВерхнийУровень.РастягиватьПоГоризонтали = Ложь;
|
||
ГруппаПодменюВерхнийУровень.Ширина = 5;
|
||
ГруппаПодменюВерхнийУровень.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;
|
||
ГруппаПодменюВерхнийУровень.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеЭлемента.Центр;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
ГруппаПодменю = ГруппаДействий;
|
||
|
||
// Есть действие
|
||
ИмяКоманды = "Команда" + ИмяРеквизита;
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
Команда.Отображение = ОтображениеКнопки.Картинка;
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
|
||
Элемент = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаПодменю);
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
Элемент.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеЭлемента.Центр;
|
||
Элемент.Ширина = 5;
|
||
КонецЕсли;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 2);
|
||
Элемент.ИмяКоманды = ИмяКоманды;
|
||
КонецЕсли;
|
||
|
||
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
|
||
Если Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
|
||
// Ввод комментария через контекстное меню.
|
||
ИмяКоманды = "КонтекстноеМенюПодменю" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаПодменю);
|
||
Кнопка.Заголовок = НСтр("ru = 'Ввести комментарий'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Подсказка = НСтр("ru = 'Ввести комментарий'");
|
||
Команда.Картинка = БиблиотекаКартинок.Комментарий;
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Команда.ИзменяетСохраняемыеДанные = Истина;
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
КонецЕсли;
|
||
|
||
// История изменений
|
||
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений И Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
|
||
|
||
ИмяКоманды = "КонтекстноеМенюПодменюИстория" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаПодменю);
|
||
Кнопка.Заголовок = НСтр("ru = 'История изменений...'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Картинка = БиблиотекаКартинок.ИсторияИзменений;
|
||
Команда.Подсказка = НСтр("ru = 'Показывает историю изменения контактной информации'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Команда.ИзменяетСохраняемыеДанные = Ложь;
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
КонецЕсли;
|
||
|
||
// Устанавливаем свойства поля ввода.
|
||
ГруппаРазделитель = Форма.Элементы.Добавить("ПодменюРазделительАдрес" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаПодменю);
|
||
ГруппаРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
|
||
|
||
ИмяКоманды = "КартаЯндексМеню" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаРазделитель);
|
||
Кнопка.Заголовок = НСтр("ru = 'Адрес на Яндекс.Картах'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Картинка = БиблиотекаКартинок.ЯндексКарты;
|
||
Команда.Подсказка = НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
|
||
ИмяКоманды = "КартаGoogleМеню" + ИмяРеквизита;
|
||
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаРазделитель);
|
||
Кнопка.Заголовок = НСтр("ru = 'Адрес на Google Maps'");
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Картинка = БиблиотекаКартинок.GoogleMaps;
|
||
Команда.Подсказка = НСтр("ru = 'Показывает адрес на карте Google Maps'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
|
||
Если Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
|
||
|
||
ГруппаРазделитель = Форма.Элементы.Добавить("ПодменюРазделитель" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель);
|
||
ГруппаРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
|
||
|
||
ГруппаПодменюАдреса = Форма.Элементы.Добавить("ПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель);
|
||
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
|
||
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
|
||
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
|
||
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
|
||
Элемент.Заголовок = НСтр("ru = 'Написать письмо'");
|
||
Команда.Подсказка = НСтр("ru = 'Написать письмо'");
|
||
Команда.Картинка = БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо;
|
||
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
|
||
|
||
Элемент.Заголовок = НСтр("ru = 'Перейти'");
|
||
Команда.Подсказка = НСтр("ru = 'Перейти по ссылке'");
|
||
Команда.Картинка = БиблиотекаКартинок.КонтактнаяИнформацияПерейтиПоСсылке;
|
||
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
Если Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].МожноОтправлятьSMS Тогда
|
||
Элемент.Заголовок = НСтр("ru = 'Позвонить или отправить SMS'");
|
||
Команда.Подсказка = НСтр("ru = 'Позвонить или отправить SMS'");
|
||
Команда.Картинка = БиблиотекаКартинок.ПозвонитьИлиОтправитьSMS;
|
||
Иначе
|
||
Элемент.Заголовок = НСтр("ru = 'Позвонить'");
|
||
Команда.Подсказка = НСтр("ru = 'Позвонить по телефону'");
|
||
Команда.Картинка = БиблиотекаКартинок.Позвонить;
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда
|
||
Элемент.Заголовок = НСтр("ru = 'Skype'");
|
||
Команда.Подсказка = НСтр("ru = 'Skype'");
|
||
Команда.Картинка = БиблиотекаКартинок.Skype;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПараметрыКонтактнойИнформацииФормы(ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения)
|
||
|
||
Если НЕ ЗначениеЗаполнено(ИмяЭлементаДляРазмещения) ИЛИ НЕ ПараметрыКонтактнойИнформации.Свойство(ИмяЭлементаДляРазмещения) Тогда
|
||
Для каждого ПерваяЗапись Из ПараметрыКонтактнойИнформации Цикл
|
||
Возврат ПерваяЗапись.Значение;
|
||
КонецЦикла;
|
||
Возврат ПараметрыКонтактнойИнформации;
|
||
КонецЕсли;
|
||
|
||
Возврат ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения];
|
||
|
||
КонецФункции
|
||
|
||
Функция ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ)
|
||
|
||
Позиция = КонтактнаяИнформация.Индекс(СтрокаКИ) + 1;
|
||
Пока Позиция < КонтактнаяИнформация.Количество() Цикл
|
||
СледующаяСтрока = КонтактнаяИнформация.Получить(Позиция);
|
||
Если СледующаяСтрока = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Если Форма.Элементы.Найти(СледующаяСтрока.ИмяРеквизита) <> Неопределено Тогда
|
||
Возврат СледующаяСтрока;
|
||
КонецЕсли;
|
||
Позиция = Позиция + 1;
|
||
КонецЦикла;
|
||
|
||
Возврат Неопределено;
|
||
КонецФункции
|
||
|
||
Функция НайтиСтрокиКонтактнойИнформации(ВидКонтактнойИнформации, Дата, КонтактнаяИнформация)
|
||
|
||
Отбор = Новый Структура("Вид", ВидКонтактнойИнформации);
|
||
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда
|
||
Отбор.Вставить("ДействуетС", Дата);
|
||
КонецЕсли;
|
||
НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
Возврат НайденныеСтроки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата, ИдентификаторСтрокиТабличнойЧасти = Неопределено)
|
||
|
||
Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
Отбор = Новый Структура("Вид", ВидКонтактнойИнформации);
|
||
|
||
Если ИдентификаторСтрокиТабличнойЧасти <> Неопределено Тогда
|
||
Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", ИдентификаторСтрокиТабличнойЧасти);
|
||
КонецЕсли;
|
||
|
||
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда
|
||
Отбор.Вставить("ДействуетС", Дата);
|
||
КонецЕсли;
|
||
|
||
НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор);
|
||
Возврат НайденныеСтроки.Количество() > 0;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, Периодическая, СтрокаКонтактнойИнформации)
|
||
|
||
ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта);
|
||
Если Периодическая Тогда
|
||
СтрокаКонтактнойИнформации.ДействуетС = СтрокаКонтактнойИнформацииОбъекта.Дата;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Значение) Тогда
|
||
ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформацииОбъекта.Тип);
|
||
ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта.Тип);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации)
|
||
|
||
Если ПустаяСтрока(СтрокаКонтактнойИнформации.Тип) Тогда
|
||
СтрокаКонтактнойИнформации.Тип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(
|
||
СтрокаКонтактнойИнформации.Вид);
|
||
КонецЕсли;
|
||
|
||
// ЗначенияПолей может отсутствовать в строке контактной информации
|
||
СведенияПолей = Новый Структура("ЗначенияПолей", Неопределено);
|
||
ЗаполнитьЗначенияСвойств(СведенияПолей, СтрокаКонтактнойИнформации);
|
||
ЕстьЗначенияПолей = (СведенияПолей.ЗначенияПолей <> Неопределено);
|
||
|
||
ПустоеПредставление = ПустаяСтрока(СтрокаКонтактнойИнформации.Представление);
|
||
ПустоеЗначение = ПустаяСтрока(СтрокаКонтактнойИнформации.Значение);
|
||
ПустыеЗначенияПолей = ?(ЕстьЗначенияПолей, ПустаяСтрока(СведенияПолей.ЗначенияПолей), Истина);
|
||
|
||
ВсеПоляПустые = ПустоеПредставление И ПустоеЗначение И ПустыеЗначенияПолей;
|
||
ВсеПоляЗаполнены = Не ПустоеПредставление И Не ПустоеЗначение И НЕ ПустыеЗначенияПолей;
|
||
|
||
Если ВсеПоляПустые Или ВсеПоляЗаполнены Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ПустоеПредставление Тогда
|
||
|
||
ФорматКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаКонтактнойИнформации.Вид,
|
||
"Тип, ВключатьСтрануВПредставление, ПроверятьПоФИАС");
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
МодульРаботаСАдресами.ОпределитьФорматКонтактнойИнформации(ФорматКонтактнойИнформации);
|
||
КонецЕсли;
|
||
|
||
ИсточникЗначений = ?(ПустыеЗначенияПолей, СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.ЗначенияПолей);
|
||
|
||
СтрокаКонтактнойИнформации.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(
|
||
ИсточникЗначений, ФорматКонтактнойИнформации);
|
||
|
||
КонецЕсли;
|
||
|
||
Если ПустоеЗначение Тогда
|
||
|
||
Если Не ПустоеПредставление И ПустыеЗначенияПолей Тогда
|
||
|
||
АдресПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(
|
||
СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Тип);
|
||
СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(АдресПоПолям);
|
||
|
||
Если ЕстьЗначенияПолей Тогда
|
||
СтрокаКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(
|
||
СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.Тип);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Не ПустыеЗначенияПолей Тогда
|
||
|
||
СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.ЗначенияПолей,
|
||
СтрокаКонтактнойИнформации.Тип);
|
||
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ПустыеЗначенияПолей И ЕстьЗначенияПолей Тогда
|
||
|
||
СтрокаКонтактнойИнформации.ЗначенияПолей = КонтактнаяИнформацияВXML(СтрокаКонтактнойИнформации.Значение,
|
||
СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Вид);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Приводит код страны к единому виду - строка длиной три символа.
|
||
//
|
||
Функция КодСтраныМира(Знач КодСтраны)
|
||
|
||
Если ТипЗнч(КодСтраны)=Тип("Число") Тогда
|
||
Возврат Формат(КодСтраны, "ЧЦ=3; ЧН=; ЧВН=; ЧГ=");
|
||
КонецЕсли;
|
||
|
||
Возврат Прав("000" + КодСтраны, 3);
|
||
КонецФункции
|
||
|
||
// Возвращает строку в кавычках.
|
||
//
|
||
Функция КонтрольКавычекВСтроке(Знач Строка)
|
||
Возврат """" + СтрЗаменить(Строка, """", """""") + """";
|
||
КонецФункции
|
||
|
||
Процедура ОбновитьКонтекстноеМеню(Форма, ИмяЭлементаДляРазмещения)
|
||
|
||
ПараметрыКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения];
|
||
ВсеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
|
||
НайденныеСтроки = ВсеСтроки.НайтиСтроки(
|
||
Новый Структура("Тип, ЭтоРеквизитТабличнойЧасти", Перечисления.ТипыКонтактнойИнформации.Адрес, Ложь));
|
||
|
||
ОбщееКоличествоКоманд = 0;
|
||
Для Каждого СтрокаКИ Из ВсеСтроки Цикл
|
||
|
||
Если ОбщееКоличествоКоманд > 50 Тогда // Ограничение для большого количества адресов на форме
|
||
Прервать;
|
||
КонецЕсли;
|
||
|
||
Если СтрокаКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ПодменюКопироватьАдреса = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита);
|
||
КонтекстноеПодменюКопироватьАдреса = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита);
|
||
Если ПодменюКопироватьАдреса <> Неопределено И КонтекстноеПодменюКопироватьАдреса = Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
КоличествоКомандВПодменю = 0;
|
||
СписокАдресовВПодменю = Новый Соответствие();
|
||
СписокАдресовВПодменю.Вставить(ВРег(СтрокаКИ.Представление), Истина);
|
||
|
||
Для Каждого Адрес Из НайденныеСтроки Цикл
|
||
|
||
Если КоличествоКомандВПодменю > 7 Тогда // Ограничение для большого количества адресов на форме
|
||
Прервать;
|
||
КонецЕсли;
|
||
|
||
Если Адрес.ЭтоИсторическаяКонтактнаяИнформация Или Адрес.ИмяРеквизита = СтрокаКИ.ИмяРеквизита Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита;
|
||
Команда = Форма.Команды.Найти(ИмяКоманды);
|
||
Если Команда = Неопределено Тогда
|
||
Команда = Форма.Команды.Добавить(ИмяКоманды);
|
||
Команда.Подсказка = НСтр("ru = 'Скопировать адрес'");
|
||
Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду";
|
||
Команда.ИзменяетСохраняемыеДанные = Истина;
|
||
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
|
||
КоличествоКомандВПодменю = КоличествоКомандВПодменю + 1;
|
||
КонецЕсли;
|
||
|
||
ПредставлениеАдреса = ?(СтрокаКИ.МеждународныйФорматАдреса,
|
||
СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление);
|
||
|
||
Если СписокАдресовВПодменю[ВРег(Адрес.Представление)] <> Неопределено Тогда
|
||
ПредставлениеАдреса = "";
|
||
Иначе
|
||
СписокАдресовВПодменю.Вставить(ВРег(Адрес.Представление), Истина);
|
||
КонецЕсли;
|
||
|
||
Если ПодменюКопироватьАдреса <> Неопределено Тогда
|
||
ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды,
|
||
ПредставлениеАдреса, ПараметрыКонтактнойИнформации, ПодменюКопироватьАдреса);
|
||
КонецЕсли;
|
||
|
||
Если КонтекстноеПодменюКопироватьАдреса <> Неопределено Тогда
|
||
ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды,
|
||
ПредставлениеАдреса, ПараметрыКонтактнойИнформации, КонтекстноеПодменюКопироватьАдреса);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, ЗаголовокЭлемента, ПараметрыКонтактнойИнформации, Подменю)
|
||
|
||
ИмяЭлемента = Подменю.Имя + "_" + ИмяКоманды;
|
||
Кнопка = Форма.Элементы.Найти(ИмяЭлемента);
|
||
Если Кнопка = Неопределено Тогда
|
||
Кнопка = Форма.Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), Подменю);
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяЭлемента, 1);
|
||
КонецЕсли;
|
||
Кнопка.Заголовок = ЗаголовокЭлемента;
|
||
Кнопка.Видимость = ЗначениеЗаполнено(ЗаголовокЭлемента);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ОписаниеНовойКонтактнойИнформации(Знач Тип) Экспорт
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда
|
||
МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер");
|
||
Возврат МодульРаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип);
|
||
КонецЕсли;
|
||
|
||
Возврат УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип);
|
||
|
||
КонецФункции
|
||
|
||
// Получение глубокого свойства объекта.
|
||
//
|
||
Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) Экспорт
|
||
|
||
// Переносов строки в XPath не ожидаем.
|
||
СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/");
|
||
|
||
ЧислоСвойств = СтрЧислоСтрок(СтрокаСвойств);
|
||
Если ЧислоСвойств = 1 Тогда
|
||
Результат = ОбъектXTDO.Получить(СтрокаСвойств);
|
||
Если ТипЗнч(Результат) = Тип("ОбъектXDTO") Тогда
|
||
Возврат Результат.Значение;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
Результат = ?(ЧислоСвойств = 0, Неопределено, ОбъектXTDO);
|
||
Для Индекс = 1 По ЧислоСвойств Цикл
|
||
Результат = Результат.Получить(СтрПолучитьСтроку(СтрокаСвойств, Индекс));
|
||
Если Результат = Неопределено Тогда
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Функция КонтактнаяИнформацияИзРеквизитовФормы(Форма, Объект)
|
||
|
||
КонтактнаяИнформация = НоваяКонтактнаяИнформация(Ложь);
|
||
|
||
МетаданныеОбъекта = Объект.Ссылка.Метаданные();
|
||
ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя;
|
||
ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя();
|
||
ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных);
|
||
ИменаТабличныхЧастейПоВидамКИ = Неопределено;
|
||
|
||
Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
|
||
|
||
ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита;
|
||
|
||
Элемент = Форма.Элементы.Найти(ИмяРеквизита);
|
||
Если Элемент <> Неопределено Тогда
|
||
Если Элемент.Вид = ВидПоляФормы.ПолеНадписи И Элемент.Гиперссылка Тогда
|
||
Если ПустаяСтрока(СтрокаТаблицы.Представление)
|
||
ИЛИ СтрокаТаблицы.Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ВосстановитьПустыеЗначениеПредставление(СтрокаТаблицы);
|
||
|
||
Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда
|
||
|
||
Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда
|
||
Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина);
|
||
ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор, "Вид");
|
||
ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъектаМетаданных);
|
||
КонецЕсли;
|
||
|
||
ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[СтрокаТаблицы.Вид];
|
||
ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти];
|
||
Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл
|
||
|
||
ИдентификаторСтроки = СтрокаТабличнойЧастиФормы.ПолучитьИдентификатор();
|
||
СтрокаТабличнойЧастиФормы.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки;
|
||
|
||
СтрокаТабличнойЧасти = Объект[ИмяТабличнойЧасти][СтрокаТабличнойЧастиФормы.НомерСтроки - 1];
|
||
СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки;
|
||
|
||
Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"];
|
||
|
||
ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Значение, ИдентификаторСтроки);
|
||
|
||
КонецЦикла;
|
||
|
||
Иначе
|
||
|
||
Если СтрокаТаблицы.Вид.Родитель <> ГруппаВидовКонтактнойИнформации Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, СтрокаТаблицы.Значение);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат КонтактнаяИнформация;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Знач Значение, Знач ИдентификаторСтроки = Неопределено)
|
||
|
||
Если ПустаяСтрока(Значение) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда
|
||
ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(Значение, СтрокаТаблицы.Тип);
|
||
Иначе
|
||
ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, СтрокаТаблицы.Тип);
|
||
КонецЕсли;
|
||
|
||
Если Не УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияЗаполнена(ОбъектКИ) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить();
|
||
|
||
ДействуетС = ?(СтрокаТаблицы.Свойство("ДействуетС"), СтрокаТаблицы.ДействуетС, Неопределено);
|
||
ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, СтрокаТаблицы, "Вид,Тип");
|
||
|
||
СтрокаКонтактнойИнформации.Представление = ОбъектКИ.Value;
|
||
СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКИ);
|
||
СтрокаКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ОбъектКИ, СтрокаТаблицы.Тип);
|
||
|
||
Если ЗначениеЗаполнено(ДействуетС) Тогда
|
||
СтрокаКонтактнойИнформации.Дата = ДействуетС;
|
||
КонецЕсли;
|
||
|
||
СтрокаКонтактнойИнформации.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Виды контактной информации
|
||
|
||
Функция ПараметрыИзВидаКонтактнойИнформации(Знач ВидКонтактнойИнформации)
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| ВидыКонтактнойИнформации.Ссылка КАК Ссылка,
|
||
| ВидыКонтактнойИнформации.Родитель КАК Родитель,
|
||
| ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоГруппа,
|
||
| ВидыКонтактнойИнформации.Наименование КАК Наименование,
|
||
| ВидыКонтактнойИнформации.ТолькоНациональныйАдрес КАК ТолькоНациональныйАдрес,
|
||
| ВидыКонтактнойИнформации.ВидПоляДругое КАК ВидПоляДругое,
|
||
| ВидыКонтактнойИнформации.ВключатьСтрануВПредставление КАК ВключатьСтрануВПредставление,
|
||
| ВидыКонтактнойИнформации.ЗапретитьРедактированиеПользователем КАК ЗапретитьРедактированиеПользователем,
|
||
| ВидыКонтактнойИнформации.Используется КАК Используется,
|
||
| ВидыКонтактнойИнформации.МожноИзменятьСпособРедактирования КАК МожноИзменятьСпособРедактирования,
|
||
| ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение,
|
||
| ВидыКонтактнойИнформации.ПроверятьКорректность КАК ПроверятьКорректность,
|
||
| ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений КАК РазрешитьВводНесколькихЗначений,
|
||
| ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге,
|
||
| ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания,
|
||
| ВидыКонтактнойИнформации.СкрыватьНеактуальныеАдреса КАК СкрыватьНеактуальныеАдреса,
|
||
| ВидыКонтактнойИнформации.ТелефонCДобавочнымНомером КАК ТелефонCДобавочнымНомером,
|
||
| ВидыКонтактнойИнформации.Тип КАК Тип,
|
||
| ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений,
|
||
| ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК Имя,
|
||
| ВидыКонтактнойИнформации.МеждународныйФорматАдреса КАК МеждународныйФорматАдреса
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ГДЕ
|
||
| ВидыКонтактнойИнформации.Ссылка = &Ссылка";
|
||
|
||
Запрос.УстановитьПараметр("Ссылка", ВидКонтактнойИнформации);
|
||
|
||
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
|
||
|
||
Если РезультатЗапроса.Количество() = 0 Тогда
|
||
ШаблонТекстаОшибки = НСтр("ru='При получении свойств контактной информации был передан неверный вид контактной информации. %1'");
|
||
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки , Строка(ВидКонтактнойИнформации));
|
||
ВызватьИсключение ТекстОшибки;
|
||
КонецЕсли;
|
||
|
||
Тип = РезультатЗапроса[0].Тип;
|
||
|
||
ТекущиеПараметры = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(РезультатЗапроса[0]);
|
||
ПараметрыВида = ОписаниеПараметровКонтактнойИнформации(Тип);
|
||
ЗаполнитьЗначенияСвойств(ПараметрыВида,ТекущиеПараметры);
|
||
|
||
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
|
||
ЗаполнитьЗначенияСвойств(ПараметрыВида.НастройкиПроверки, ТекущиеПараметры, "ВключатьСтрануВПредставление,
|
||
|ПроверятьКорректность,СкрыватьНеактуальныеАдреса,ТолькоНациональныйАдрес");
|
||
|
||
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда
|
||
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
|
||
МодульРаботаСАдресами.ДополнитьНастройкиПроверкиАдреса(ПараметрыВида, ВидКонтактнойИнформации);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
ПараметрыВида.НастройкиПроверки.ПроверятьКорректность = ТекущиеПараметры.ПроверятьКорректность;
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
ПараметрыВида.НастройкиПроверки.ТелефонCДобавочнымНомером = ТекущиеПараметры.ТелефонCДобавочнымНомером;
|
||
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
|
||
ПараметрыВида.НастройкиПроверки.ВидПоляДругое = ТекущиеПараметры.ВидПоляДругое;
|
||
КонецЕсли;
|
||
|
||
ПараметрыВида.Вид = РезультатЗапроса[0].Ссылка;
|
||
|
||
Возврат ПараметрыВида;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбъектВидаКонтактнойИнформации(Имя, ЭтоГруппа = Ложь)
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| ВидыКонтактнойИнформации.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|
||
|ГДЕ
|
||
| ВидыКонтактнойИнформации.ИмяПредопределенногоВида = &Имя
|
||
| И ВидыКонтактнойИнформации.ЭтоГруппа = &ЭтоГруппа";
|
||
|
||
Запрос.УстановитьПараметр("Имя", Имя);
|
||
Запрос.УстановитьПараметр("ЭтоГруппа", ЭтоГруппа);
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
Если Не РезультатЗапроса.Пустой() Тогда
|
||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить();
|
||
Ссылка = ВыборкаДетальныеЗаписи[0].Ссылка;
|
||
Возврат Ссылка.ПолучитьОбъект();
|
||
КонецЕсли;
|
||
|
||
ИменаПредопределенных = Метаданные.Справочники.ВидыКонтактнойИнформации.ПолучитьИменаПредопределенных();
|
||
ИмяПредопределенного = ИменаПредопределенных.Найти(Имя);
|
||
|
||
Если ИмяПредопределенного <> Неопределено Тогда
|
||
Объект = Справочники.ВидыКонтактнойИнформации[Имя].ПолучитьОбъект();
|
||
Объект.ИмяПредопределенногоВида = Имя;
|
||
Возврат Объект;
|
||
КонецЕсли;
|
||
|
||
Если ЭтоГруппа Тогда
|
||
НовыйЭлемент = Справочники.ВидыКонтактнойИнформации.СоздатьГруппу();
|
||
Иначе
|
||
НовыйЭлемент = Справочники.ВидыКонтактнойИнформации.СоздатьЭлемент();
|
||
КонецЕсли;
|
||
|
||
НовыйЭлемент.ИмяПредопределенногоВида = Имя;
|
||
|
||
Возврат НовыйЭлемент;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает описание свойств контактной информации для переданного типа контактной информации.
|
||
// Полученная структура используется в обработчиках обновления при заполнении видов контактной информации
|
||
// или при формировании параметров открытии формы ввода адреса или телефона для метода используемые в ОткрытьФормуКонтактнойИнформации.
|
||
//
|
||
// Параметры:
|
||
// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - содержит структуру с полями:
|
||
// * Имя - Строка - Уникальное имя вида контактной информации.
|
||
// * Наименование - Строка - Наименование вида контактной информации.
|
||
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на вид контактной информации.
|
||
// Значение по умолчанию - Справочник.ВидыКонтактнойИнформации.ПустаяСсылка.
|
||
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации.
|
||
// * Группа - СправочникСсылка.ВидыКонтактнойИнформации, Неопределено - ссылка на группу(родителя) элемента справочника.
|
||
// Значение по умолчанию - Неопределено.
|
||
// * Используется - Булево - Если Ложь, то вид контактной информации недоступен для использования пользователем.
|
||
// Такой вид не выводится в формах и списке видов контактной информации.
|
||
// Значение по умолчанию - Истина.
|
||
// * МожноИзменятьСпособРедактирования - Булево - Признак возможности изменения свойств вида контактной информации пользователем.
|
||
// Если Ложь, то в форме вида контактной информации свойства доступны только для просмотра.
|
||
// Значение по умолчанию - Ложь.
|
||
// * РедактированиеТолькоВДиалоге - Булево - Если Истина, то форме выводится гиперссылка с представлением контактной информации
|
||
// по нажатию на которую, открывается форма соответствующего типа КИ.
|
||
// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс, ВебСтраница.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации.
|
||
// Хранение истории допускается, если признак РедактированиеТолькоВДиалоге равен Истина.
|
||
// Свойство применимо если табличная часть КонтактнаяИнформация содержит реквизит ДействуетС.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ОбязательноеЗаполнение - Булево - Если Истина, то требуется обязательный ввод значения в поле контактной информации. Значение по умолчанию - Ложь.
|
||
// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности ввода нескольких значений для данного вида. Значение по умолчанию - Ложь.
|
||
// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования пользователем вида контактной информации. Значение по умолчанию - Ложь.
|
||
// * МеждународныйФорматАдреса - Булево - Признак международного формата адреса.
|
||
// Если Истина, то ввода всех адресов только в международном формате.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ВидПоляДругое - Строка - Определяет внешний вид поля с типом Другое на форме. Варианты: МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое.
|
||
// Свойство применимо только для контактной информации с типом: Другое.
|
||
// Для вида КИ с типом Другое значение по умолчанию - "ОднострочноеШирокое", иначе пустая строка.
|
||
// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. Состав полей зависит от типа контактной информации.
|
||
// Для типа Адрес - Структура, содержащая поля:
|
||
// * ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных адресов. Изменение страны у адреса не допускается.
|
||
// * ПроверятьКорректность - Булево - если Истина, то для национальных адресов доступен ввод только адресов с разбивкой по полям проходящих проверку по ФИАС.
|
||
// Допускается ввод адресов других стран в свободной форме, если свойство ТолькоНациональныйАдрес = Ложь.
|
||
// Значение по умолчанию - Ложь.
|
||
// * ВключатьСтрануВПредставление - Булево - если Истина, то Наименование страны всегда добавляется в представление адреса, даже когда другие поля адреса пустые.
|
||
// Значение по умолчанию - Ложь
|
||
// * УказыватьОКТМО - Булево - признак возможности ручного ввода кода ОКМТО в форме ввода адреса.
|
||
// Для типа АдресЭлектроннойПочты - Структура, содержащая поля:
|
||
// * ПроверятьКорректность - Булево - если Истина, то запрещается пользователю ввод
|
||
// некорректный адрес электронной почты.
|
||
// Значение по умолчанию - Ложь.
|
||
// Для типа Телефон - Структура, содержащая поля:
|
||
// * ТелефонCДобавочнымНомером - Булево - если Истина, то в форме ввода телефона доступен ввод добавочного номера.
|
||
// Значение по умолчанию - Истина.
|
||
// Для остальных типов по умолчанию - Неопределено.
|
||
//
|
||
Функция ОписаниеПараметровКонтактнойИнформации(Знач ТипКонтактнойИнформации)
|
||
|
||
ПараметрыВида = ОписаниеОбщихПараметровВидаКонтактнойИнформации();
|
||
|
||
ПараметрыВида.Вставить("Вид", Справочники.ВидыКонтактнойИнформации.ПустаяСсылка());
|
||
ПараметрыВида.Вставить("Порядок", Неопределено);
|
||
ПараметрыВида.Вставить("Тип", ТипКонтактнойИнформации);
|
||
ПараметрыВида.Вставить("МожноИзменятьСпособРедактирования", Ложь);
|
||
ПараметрыВида.Вставить("РедактированиеТолькоВДиалоге", Ложь);
|
||
ПараметрыВида.Вставить("ОбязательноеЗаполнение", Ложь);
|
||
ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь);
|
||
ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь);
|
||
ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь);
|
||
ПараметрыВида.Вставить("МеждународныйФорматАдреса", Ложь);
|
||
|
||
ВидПоляДругое = ?(ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Другое,
|
||
"ОднострочноеШирокое", "");
|
||
|
||
ПараметрыВида.Вставить("ВидПоляДругое", ВидПоляДругое);
|
||
|
||
Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
НастройкиПроверки = Новый Структура;
|
||
НастройкиПроверки.Вставить("ТолькоНациональныйАдрес", Ложь);
|
||
НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь);
|
||
НастройкиПроверки.Вставить("ВключатьСтрануВПредставление", Ложь);
|
||
НастройкиПроверки.Вставить("УказыватьОКТМО", Ложь);
|
||
НастройкиПроверки.Вставить("СкрыватьНеактуальныеАдреса", Ложь); // устарело. Оставлено для обратной совместимости.
|
||
НастройкиПроверки.Вставить("ПроверятьПоФИАС", Истина); // устарело. Оставлено для обратной совместимости.
|
||
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
|
||
НастройкиПроверки = Новый Структура;
|
||
НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь);
|
||
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
|
||
НастройкиПроверки = Новый Структура;
|
||
НастройкиПроверки.Вставить("ТелефонCДобавочнымНомером", Истина);
|
||
Иначе
|
||
НастройкиПроверки = Неопределено;
|
||
КонецЕсли;
|
||
|
||
ПараметрыВида.Вставить("НастройкиПроверки", НастройкиПроверки);
|
||
Возврат ПараметрыВида;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОписаниеОбщихПараметровВидаКонтактнойИнформации()
|
||
|
||
ПараметрыВида = Новый Структура;
|
||
ПараметрыВида.Вставить("Имя", "");
|
||
ПараметрыВида.Вставить("Группа", Неопределено);
|
||
ПараметрыВида.Вставить("Наименование", "");
|
||
ПараметрыВида.Вставить("Используется", Истина);
|
||
|
||
Возврат ПараметрыВида;
|
||
|
||
КонецФункции
|
||
|
||
|
||
#КонецОбласти
|