5085 lines
339 KiB
Plaintext
5085 lines
339 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2025, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
// Форма параметризуется:
|
||
//
|
||
// Заголовок - Строка - заголовок формы.
|
||
// ЗначенияПолей - Строка - сериализованное значение контактной информации или пустая строка для
|
||
// ввода нового.
|
||
// Представление - Строка - представление адреса (используется только при работе со старыми данными).
|
||
// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - описание того, что мы
|
||
// редактируем.
|
||
// Комментарий - Строка - необязательный комментарий, для подстановки в поле "Комментарий".
|
||
//
|
||
// ВозвращатьСписокЗначений - Булево - необязательный флаг того, что возвращаемое значение поля.
|
||
// КонтактнаяИнформация будет иметь тип СписокЗначений (совместимость).
|
||
//
|
||
// Результат выбора:
|
||
// Структура - поля:
|
||
// * КонтактнаяИнформация - Строка - XML контактной информации.
|
||
// * Представление - Строка - Представление.
|
||
// * Комментарий - Строка - Комментарий.
|
||
// * ВведеноВСвободнойФорме - Булево - флаг ввода.
|
||
//
|
||
|
||
#Область ОписаниеПеременных
|
||
|
||
&НаКлиенте
|
||
Перем ПредставлениеАдресаКеш;
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийФормы
|
||
|
||
&НаСервере
|
||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||
|
||
Если Не Параметры.Свойство("ОткрытаПоСценарию") Тогда
|
||
ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'");
|
||
КонецЕсли;
|
||
|
||
// Настройки формы
|
||
СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора();
|
||
ЕстьЗагруженныйКлассификатор = СведенияОАдресномКлассификаторе.Получить("ИспользоватьЗагруженные");
|
||
ВебКлассификаторДоступен = СведенияОАдресномКлассификаторе.Получить("КлассификаторДоступен");
|
||
ИспользуетсяАдресныйКлассификатор = СведенияОАдресномКлассификаторе.Получить("ИспользуетсяАдресныйКлассификатор");
|
||
ВебСервисИспользуется = ВебКлассификаторДоступен;
|
||
|
||
Если Не ИспользуетсяАдресныйКлассификатор Тогда
|
||
ОтключитьВозможностьВыбораАдресныхСведенийИзКлассификатора();
|
||
КонецЕсли;
|
||
|
||
ЕстьПравоЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора();
|
||
|
||
Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений);
|
||
|
||
ОсновнаяСтрана = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана();
|
||
ВидКИ = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации);
|
||
ВидКонтактнойИнформации = ВидКИ;
|
||
ПриСозданииНаСервереХранитьИсториюИзменений();
|
||
|
||
Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКИ.Ссылка), Параметры.Заголовок);
|
||
|
||
СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса;
|
||
ТолькоНациональныйАдрес = ВидКонтактнойИнформации.ТолькоНациональныйАдрес;
|
||
ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип;
|
||
МеждународныйФорматАдреса = ВидКонтактнойИнформации.МеждународныйФорматАдреса;
|
||
|
||
Элементы.АдресВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ПроверятьКорректность;
|
||
Элементы.ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ПроверятьКорректность;
|
||
|
||
// Пытаемся заполнить из параметров.
|
||
ЗначенияПолей = ОпределитьЗначениеАдреса();
|
||
|
||
Если ПустаяСтрока(ЗначенияПолей) Тогда
|
||
НаселенныйПунктДетально = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); // Новый адрес
|
||
НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес();
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда
|
||
ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
НаселенныйПунктДетально = РаботаСАдресами.ПодготовитьАдресДляВвода(ДанныеАдреса);
|
||
Иначе
|
||
XDTOКонтактная = ИзвлечьСтарыйФорматАдреса(ЗначенияПолей, ТипКонтактнойИнформации);
|
||
ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(XDTOКонтактная, ТипКонтактнойИнформации);
|
||
НаселенныйПунктДетально = РаботаСАдресами.ПодготовитьАдресДляВвода(ДанныеАдреса);
|
||
КонецЕсли;
|
||
|
||
Если МеждународныйФорматАдреса И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес();
|
||
ИначеЕсли ЗначениеЗаполнено(Параметры.ТипАдреса) Тогда
|
||
УстановитьТипАдресаИзПараметра(Параметры.ТипАдреса);
|
||
КонецЕсли;
|
||
|
||
ЗаполнениеПолейАдресаДляРанееВведенныхАдресов();
|
||
ЗаполнитьПредопределенныеВариантыАдреса();
|
||
|
||
УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально);
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.Comment) Тогда
|
||
Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
|
||
Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий);
|
||
Иначе
|
||
Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
|
||
КонецЕсли;
|
||
|
||
Если ТолькоНациональныйАдрес Тогда
|
||
|
||
Элементы.Страна.Видимость = Ложь;
|
||
Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО;
|
||
|
||
Если Страна <> ОсновнаяСтрана Тогда
|
||
ОсновнаяСтранаНаименование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнаяСтрана, "Наименование");
|
||
// Считаем адрес российским
|
||
ТекстПредупрежденияПриОткрытии = НСтр("ru = 'Адрес введен некорректно: допускается ввод только национальных адресов.
|
||
|Значение поля ""Страна"" было изменено на %1, проверьте остальные поля.'");
|
||
ТекстПредупрежденияПриОткрытии = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупрежденияПриОткрытии, ОсновнаяСтранаНаименование);
|
||
ПолеПредупрежденияПриОткрытии = "Страна";
|
||
Модифицированность = Истина;
|
||
Элементы.Страна.Доступность = Ложь;
|
||
Элементы.Страна.Видимость = Истина;
|
||
КонецЕсли;
|
||
|
||
Если СтрНачинаетсяС(ВРег(НаселенныйПунктДетально.value), ВРег(НаселенныйПунктДетально.country) + ",") Тогда
|
||
ЧастиАдреса = СтрРазделить(НаселенныйПунктДетально.value, ",");
|
||
ЧастиАдреса.Удалить(0);
|
||
НаселенныйПунктДетально.value = СокрЛП(СтрСоединить(ЧастиАдреса, ","));
|
||
ПредставлениеАдреса = НаселенныйПунктДетально.value;
|
||
КонецЕсли;
|
||
|
||
Страна = ОсновнаяСтрана;
|
||
|
||
ИначеЕсли МеждународныйФорматАдреса Тогда
|
||
|
||
Элементы.ПроверитьЗаполнениеАдреса.Видимость = Ложь;
|
||
Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь;
|
||
Элементы.МуниципальноеДеление.Видимость = Ложь;
|
||
Элементы.АдминистративноТерриториальноеДеление.Видимость = Ложь;
|
||
Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь;
|
||
Элементы.ЗагрузитьКлассификатор.Видимость = Ложь;
|
||
Элементы.ГруппаИнформация.Видимость = Ложь;
|
||
Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь;
|
||
Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес;
|
||
|
||
КонецЕсли;
|
||
НаселенныйПунктДетально.Country = НаименованиеСтраны(Страна, МеждународныйФорматАдреса);
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
Элементы.ГруппаИнформационныеСообщения.Видимость = Ложь;
|
||
Элементы.НаселенныйПункт.МногострочныйРежим = Истина;
|
||
Элементы.ФормаКомандаПрименить.Отображение = ОтображениеКнопки.Картинка;
|
||
Элементы.ТипДома.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто;
|
||
Элементы.ТипСтроения.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто;
|
||
КонецЕсли;
|
||
|
||
ОпределитьОтображениеЭлементовИЦветов(Параметры.ТолькоПросмотр);
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
Если ЕстьПравоЗагружатьКлассификатор Тогда
|
||
ТексСообщения = СтроковыеФункции.ФорматированнаяСтрока(
|
||
НСтр("ru = 'Для автоподбора и проверки адресов загрузите адресные сведения. <a href=load>Загрузить</a>'"));
|
||
Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = ТексСообщения;
|
||
Иначе
|
||
Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru = 'Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'");
|
||
Элементы.ЗагрузитьКлассификатор.Видимость = Ложь;
|
||
КонецЕсли;
|
||
Иначе
|
||
Элементы.ЗагрузитьКлассификатор.Видимость = Ложь;
|
||
Элементы.СведенияОбАдресе.Видимость = Ложь;
|
||
КонецЕсли;
|
||
|
||
УстановитьКлючИспользованияФормы();
|
||
СформироватьМенюДобавленияСтроенийИПомещений();
|
||
|
||
СформироватьТекстНужнаПомощь();
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType)
|
||
И Не ЗначениеЗаполнено(НаселенныйПункт) Тогда
|
||
УстановитьЗначенияПолейПослеИзмененияПредставленияНаСервере(ПредставлениеАдреса, Неопределено);
|
||
КонецЕсли;
|
||
|
||
ИдентификаторНаселенногоПункта = ИдентификаторАдреса(НаселенныйПунктДетально, Ложь);
|
||
СодержитУлицы = РаботаСАдресами.АдресСодержитУлицы(ИдентификаторНаселенногоПункта, НаселенныйПунктДетально.AddressType);
|
||
Элементы.Улица.ПодсказкаВвода = УстановитьПодсказкуВводаДляУлиц(СодержитУлицы);
|
||
|
||
// СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда
|
||
|
||
МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль(
|
||
"ОбращенияВТехническуюПоддержкуСлужебный");
|
||
|
||
МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект);
|
||
|
||
Иначе
|
||
Элементы.ГруппаОбращенияВТехническуюПоддержку.Видимость = Ложь;
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку
|
||
|
||
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
|
||
Элементы.Переместить(Элементы.ФормаКомандаПрименить, Элементы.ПанельВнизу);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПриОткрытии(Отказ)
|
||
|
||
Если ЗначениеЗаполнено(ТекстПредупрежденияПриОткрытии) Тогда
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии);
|
||
КонецЕсли;
|
||
|
||
ОтобразитьПоляПоТипуАдреса();
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
ПоказатьПодсказкуПоТипАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ПодтвердитьИЗакрыть", ЭтотОбъект);
|
||
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ, ЗавершениеРаботы);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
|
||
|
||
Если ИмяСобытия = "АдресныйКлассификаторАктуализирован" ИЛИ ИмяСобытия = "ЗагруженАдресныйКлассификатор" Тогда
|
||
|
||
СообщениеОНеобходимостиЗагрузкиКлассификатора();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
|
||
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура")
|
||
И ВыбранноеЗначение.Свойство("КраткоеПредставлениеОшибки")
|
||
И ЗначениеЗаполнено(ВыбранноеЗначение.КраткоеПредставлениеОшибки) Тогда
|
||
ПоказатьПредупреждение(, ВыбранноеЗначение.КраткоеПредставлениеОшибки);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||
|
||
&НаКлиенте
|
||
Процедура СтранаПриИзменении(Элемент)
|
||
|
||
ОтобразитьЭлементыФормыВСоответствиеСоСтраной();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтранаОчистка(Элемент, СтандартнаяОбработка)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтранаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если Ожидание = 0 Тогда
|
||
// Формирование списка быстрого выбора.
|
||
Если ПустаяСтрока(Текст) Тогда
|
||
ДанныеВыбора = Новый СписокЗначений;
|
||
КонецЕсли;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтранаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
|
||
|
||
Если ПустаяСтрока(Текст) Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
|
||
#Если ВебКлиент Тогда
|
||
// Обход особенности платформы.
|
||
СтандартнаяОбработка = Ложь;
|
||
ДанныеВыбора = Новый СписокЗначений;
|
||
ДанныеВыбора.Добавить(Страна);
|
||
#КонецЕсли
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтранаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("Код") Тогда
|
||
НаселенныйПунктДетально.CountryCode = ВыбранноеЗначение.Код;
|
||
Иначе
|
||
НаселенныйПунктДетально.CountryCode = КодСтраны(ВыбранноеЗначение);
|
||
КонецЕсли;
|
||
|
||
УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИндексНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
ДанныеВыбора = Новый СписокЗначений;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если СтрДлина(Индекс) = 6 Тогда
|
||
ФормаВыбораУлицПоИндексу(Индекс);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИндексИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если СтрДлина(СокрЛП(Текст)) = 6 И СтрСравнить(Индекс, Текст) <> 0 И Страна = ОсновнаяСтрана Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
НаселенныйПунктДетально.ZipCode = Текст;
|
||
ФормаВыбораУлицПоИндексу(Текст);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИндексОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
|
||
|
||
НаселенныйПунктДетально.ZipCode = Текст;
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если СтрДлина(СокрЛП(Текст)) = 6 И СтрСравнить(Индекс, Текст) <> 0 И Страна = ОсновнаяСтрана Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
ФормаВыбораУлицПоИндексу(Текст);
|
||
Иначе
|
||
Индекс = Текст;
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИндексПриИзменении(Элемент)
|
||
НаселенныйПунктДетально.ZipCode = Индекс;
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОКТМОПриИзменении(Элемент)
|
||
НаселенныйПунктДетально.OKTMO = ОКТМО;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура КомментарийПриИзменении(Элемент)
|
||
|
||
НаселенныйПунктДетально.Comment = Комментарий;
|
||
ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТипДомаПриИзменении(Элемент)
|
||
|
||
Если СтрСравнить(ТипДома, РаботаСАдресамиКлиентСервер.НаименованиеЗемельногоУчастка()) <> 0 Тогда
|
||
НаселенныйПунктДетально.HouseType = ТипДома;
|
||
|
||
Элементы.ТипСтроения.Доступность = Истина;
|
||
Элементы.Строение.Доступность = Истина;
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.stead) Тогда
|
||
НаселенныйПунктДетально.HouseNumber = НаселенныйПунктДетально.stead;
|
||
НаселенныйПунктДетально.stead = "";
|
||
НаселенныйПунктДетально.steadId = "";
|
||
ОбновитьПредставлениеАдреса();
|
||
ИначеЕсли ЗначениеЗаполнено(НаселенныйПунктДетально.HouseNumber) Тогда
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
НаселенныйПунктДетально.HouseType = "";
|
||
Элементы.ТипСтроения.Доступность = Ложь;
|
||
Элементы.Строение.Доступность = Ложь;
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseNumber)
|
||
Или НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.stead = НаселенныйПунктДетально.HouseNumber;
|
||
НаселенныйПунктДетально.HouseNumber = "";
|
||
НаселенныйПунктДетально.HouseId = "";
|
||
Строение = "";
|
||
НаселенныйПунктДетально.buildings.Очистить();
|
||
ОбновитьПредставлениеАдреса();
|
||
ПодключитьОбработчикОжидания("ОтобразитьДополнительныеЗданияКлиент", 0.1, Истина);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДомПриИзменении(Элемент)
|
||
|
||
Если ЭтоЗемельныйУчасток(ТипДома) Тогда
|
||
НаселенныйПунктДетально.stead = Дом;
|
||
Иначе
|
||
НаселенныйПунктДетально.HouseNumber = Дом;
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.HouseType) Тогда
|
||
НаселенныйПунктДетально.HouseType = ТипДома;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
НайденныйИдентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
Если ЗначениеЗаполнено(НайденныйИдентификатор) Тогда
|
||
НайденныйИндекс = НайтиИндексУДома(НайденныйИдентификатор, Дом);
|
||
Если ЗначениеЗаполнено(НайденныйИндекс) Тогда
|
||
Индекс = НайденныйИндекс;
|
||
НаселенныйПунктДетально.ZipCode = Индекс;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
НаселенныйПунктДетально.apartmentId = "";
|
||
|
||
ЗаполнитьУровниДомовИЗемельныхУчастков();
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДомОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
НаселенныйПунктДетально.apartmentId = "";
|
||
|
||
ЗаполнитьПоляДомовСтроенийЗемельныхУчастков(ВыбранноеЗначение);
|
||
Элементы.Дом.ОбновитьТекстРедактирования();
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтроениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
НаселенныйПунктДетально.apartmentId = "";
|
||
ЗаполнитьПоляДомовСтроенийЗемельныхУчастков(ВыбранноеЗначение);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТипСтроенияПриИзменении(Элемент)
|
||
|
||
Если НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.buildings[0].Type = ТипСтроения;
|
||
КонецЕсли;
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтроениеПриИзменении(Элемент)
|
||
|
||
ЭтоНовый = Истина;
|
||
Для каждого Помещения Из НаселенныйПунктДетально.buildings Цикл
|
||
Если СтрСравнить(Помещения.Type, ТипСтроения) = 0 Тогда
|
||
Помещения.Type = ЭтотОбъект["ТипСтроения"];
|
||
Помещения.number = Строение;
|
||
ЭтоНовый = Ложь;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ЭтоНовый Тогда
|
||
ИнформацияОСтроении = ЗначениеСтроенияИлиПомещения(ТипСтроения, Строение);
|
||
НаселенныйПунктДетально.buildings.Вставить(0, ИнформацияОСтроении);
|
||
ИначеЕсли ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда
|
||
Для ИндексПозиции = 0 По НаселенныйПунктДетально.buildings.Количество() - 1 Цикл
|
||
СведенияОСтроении = НаселенныйПунктДетально.buildings[ИндексПозиции];
|
||
Если СтрСравнить(СведенияОСтроении.Type, ЭтотОбъект["ТипСтроения"]) =0 Тогда
|
||
НаселенныйПунктДетально.buildings.Удалить(ИндексПозиции);
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
НаселенныйПунктДетально.apartmentId = "";
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтроениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если ЗначениеЗаполнено(Текст) Тогда
|
||
|
||
Идентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
|
||
Если ЗначениеЗаполнено(Идентификатор) Тогда
|
||
ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Дом);
|
||
Если ДанныеВыбора.Количество() > 1 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТипСтроенияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
Отбор = Новый Структура("Значение", ВыбранноеЗначение);
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Отбор);
|
||
|
||
Если НайденныеСтроки.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если НайденныеСтроки[0].Видимость = Ложь Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТипПомещенияПриИзменении(Элемент)
|
||
|
||
Если Элемент.ВыделенныйТекст = НаименованиеПриДобавлениеПроизвольногоПомещения() Тогда
|
||
ЭтотОбъект[Элемент.Имя] = "";
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Помещение) Тогда
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.Apartments.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.Apartments[0].Type = ТипПомещения;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда
|
||
УдалитьПомещениеИзАдреса(ЭтотОбъект["ТипПомещения"]);
|
||
КонецЕсли;
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
ЗаполнитьИдентификаторПомещения();
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПомещениеПриИзменении(Элемент)
|
||
|
||
ОбновитьДополнительныеЗдания = Истина;
|
||
Если ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда
|
||
УдалитьПомещениеИзАдреса(ЭтотОбъект["ТипПомещения"]);
|
||
Иначе
|
||
ИнформацияОПомещении = ЗначениеСтроенияИлиПомещения(ТипПомещения, Помещение);
|
||
Если НаселенныйПунктДетально.Apartments.Количество() = 0 Тогда
|
||
НаселенныйПунктДетально.Apartments.Добавить(ИнформацияОПомещении);
|
||
ОбновитьДополнительныеЗдания = Ложь;
|
||
Иначе
|
||
Если СтрСравнить(НаселенныйПунктДетально.Apartments[0].type, ТипПомещения) = 0 Тогда
|
||
НаселенныйПунктДетально.Apartments[0] = ИнформацияОПомещении;
|
||
ОбновитьДополнительныеЗдания = Ложь;
|
||
Иначе
|
||
НаселенныйПунктДетально.Apartments.Вставить(0, ИнформацияОПомещении);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьИдентификаторПомещения();
|
||
ОбработкаИзмененияАдреса(ОбновитьДополнительныеЗдания);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТипПомещенияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
Отбор = Новый Структура("Значение", ВыбранноеЗначение);
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Отбор);
|
||
|
||
Если НайденныеСтроки.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если НайденныеСтроки[0].Видимость = Ложь Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура НаселенныйПунктПриИзменении(Элемент)
|
||
|
||
ИзменитьСведенияОНаселенномПункте();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура НаселенныйПунктОчистка(Элемент, СтандартнаяОбработка)
|
||
|
||
ОчиститьНаселенныйПункт();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура НаселенныйПунктНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
// Если пришли впрямую после редактирования, то сбрасываем адрес.
|
||
Если Элемент.ТекстРедактирования <> НаселенныйПункт Тогда
|
||
Модифицированность = Истина;
|
||
НаселенныйПункт = Элемент.ТекстРедактирования;
|
||
ИзменитьСведенияОНаселенномПункте();
|
||
ИдентификаторНаселенногоПункта = Неопределено;
|
||
КонецЕсли;
|
||
|
||
ПараметрыФормы = ПараметрыОткрытияФормыНаселенногоПункта();
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ПослеВводаСведенийНаселенногоПункта", ЭтотОбъект);
|
||
|
||
ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы,
|
||
Элемент,,,, Оповещение, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
&НаКлиенте
|
||
Процедура НаселенныйПунктОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
Если ВыбранноеЗначение = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Модифицированность = Истина;
|
||
|
||
Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ЕстьПравоЗагружатьКлассификатор И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора = Истина Тогда
|
||
// Предлагаем загрузить классификатор.
|
||
ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Данные для ""%1"" не загружены.'"),
|
||
ВыбранноеЗначение.Представление), ВыбранноеЗначение);
|
||
Иначе
|
||
УстановитьНаселенныйПунктПослеВыбора(ВыбранноеЗначение);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если МеждународныйФорматАдреса Или УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ДанныеВыбора = Новый СписокЗначений;
|
||
|
||
ТекстДляАвтоПодбора = СокрЛП(Текст);
|
||
Если СтрДлина(ТекстДляАвтоПодбора) < 3 Или Не РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда
|
||
// Нет вариантов, список пуст, стандартную обработку не надо трогать.
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Результат = СписокАвтоподбораНаселенногоПункта(ТекстДляАвтоПодбора, ТипАдреса);
|
||
Если Результат.Отказ Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ДанныеВыбора = Результат.Данные;
|
||
// Стандартную обработку отключаем, только если есть наши варианты.
|
||
Если ДанныеВыбора.Количество() > 0 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УлицаПриИзменении(Элемент)
|
||
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, "street", ЗначениеЗаполнено(Улица));
|
||
|
||
Если Не ЭтоРФАдрес() Или МеждународныйФорматАдреса Тогда
|
||
|
||
НаселенныйПунктДетально.Street = Улица;
|
||
ОбновитьПредставлениеАдреса();
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
ЧастиАдреса = СтрРазделить(Улица, " ");
|
||
Если ЧастиАдреса.Количество() > 1 Тогда
|
||
ТипОбъекта = ЧастиАдреса[0];
|
||
ЧастиАдреса.Удалить(0);
|
||
Иначе
|
||
ТипОбъекта = "";
|
||
КонецЕсли;
|
||
|
||
Наименование = СокрЛП(СтрСоединить(ЧастиАдреса, " "));
|
||
|
||
НаселенныйПунктДетально.Street = Наименование;
|
||
НаселенныйПунктДетально.StreetType = ТипОбъекта;
|
||
НаселенныйПунктДетально.StreetID = "";
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
УстановитьИдентификаторыАдреса(НаселенныйПунктДетально);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УлицаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
// Если пришли впрямую после редактирования, то сбрасываем.
|
||
Если Элемент.ТекстРедактирования <> Улица Тогда
|
||
Улица = Элемент.ТекстРедактирования;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторНаселенногоПункта = ИдентификаторАдреса(НаселенныйПунктДетально, Ложь);
|
||
|
||
ПараметрыФормы = Новый Структура;
|
||
ПараметрыФормы.Вставить("Родитель", ИдентификаторНаселенногоПункта);
|
||
ПараметрыФормы.Вставить("Уровень", РаботаСАдресамиКлиентСервер.СопоставлениеНаименованиеУровнюАдреса("STREET"));
|
||
ПараметрыФормы.Вставить("ТипАдреса", НаселенныйПунктДетально.AddressType);
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ПослеВыбораУлицы", ЭтотОбъект);
|
||
|
||
ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыФормы, ЭтотОбъект,
|
||
,,, Оповещение, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УлицаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
Если Страна <> ОсновнаяСтрана Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
Если ВыбранноеЗначение = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Модифицированность = Истина;
|
||
ТипЗначения = ТипЗнч(ВыбранноеЗначение);
|
||
|
||
Если ТипЗначения = Тип("УникальныйИдентификатор") Тогда
|
||
СведенияОбАдресе = Новый Структура("Идентификатор", ВыбранноеЗначение);
|
||
ИначеЕсли ТипЗначения = Тип("Структура") Тогда
|
||
СведенияОбАдресе = ВыбранноеЗначение;
|
||
КонецЕсли;
|
||
СведенияОбАдресе.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType));
|
||
СведенияОбАдресе.Вставить("Адрес", НаселенныйПунктДетально);
|
||
|
||
НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, СведенияОбАдресе, Истина);
|
||
ОбработкаИзмененияАдреса();
|
||
Элементы.Улица.ОбновитьТекстРедактирования();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УлицаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если Не АвтоподборДоступен Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ДанныеВыбора = Новый СписокЗначений;
|
||
|
||
ИдентификаторНаселенногоПункта = ИдентификаторАдреса(НаселенныйПунктДетально, Ложь);
|
||
Если СтрДлина(Текст) < 2 Или Не ЗначениеЗаполнено(ИдентификаторНаселенногоПункта)Тогда
|
||
// Нет вариантов, список пуст, стандартную обработку не надо трогать.
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Результат = ВариантыУлицПоТексту(Текст);
|
||
|
||
Если Результат.Отказ Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Результат.Данные.Количество() = 0 Тогда
|
||
АдаптацияИдентификатораНаселенногоПункта(ИдентификаторНаселенногоПункта);
|
||
Результат = ВариантыУлицПоТексту(Текст);
|
||
|
||
Если Результат.Отказ Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ДанныеВыбора = Результат.Данные;
|
||
|
||
// Стандартную обработку отключаем, только если есть наши варианты.
|
||
Если ДанныеВыбора.Количество() > 0 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УлицаОчистка(Элемент, СтандартнаяОбработка)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
НаселенныйПунктДетально.streetID = "";
|
||
НаселенныйПунктДетально.street = "";
|
||
НаселенныйПунктДетально.streetType = "";
|
||
Улица = "";
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредставлениеАдресаПриИзменении(Элемент)
|
||
|
||
ПредставлениеАдресаКеш = "";
|
||
НаселенныйПунктДетально.value = ПредставлениеАдреса;
|
||
ПодключитьОбработчикОжидания("УстановитьЗначенияПолейПослеИзмененияПредставления", 0.1, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Дом, помещения
|
||
|
||
&НаКлиенте
|
||
Процедура ДомАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если Не АвтоподборДоступен Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Текст) Тогда
|
||
Идентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
Если ЗначениеЗаполнено(Идентификатор) Тогда
|
||
|
||
Если СтрСравнить(ТипДома, РаботаСАдресамиКлиентСервер.НаименованиеЗемельногоУчастка()) <> 0 Тогда
|
||
ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Текст + "%");
|
||
Иначе
|
||
ДанныеВыбора = СписокАвтоподбораЗемельныхУчастков(Идентификатор, Текст + "%");
|
||
КонецЕсли;
|
||
|
||
Если ДанныеВыбора.Количество() > 0 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АдресНаДатуАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
Если СтрСравнить(Текст, НачалоУчета()) = 0 Или ПустаяСтрока(Текст) Тогда
|
||
Элементы.АдресНаДату.ФорматРедактирования = "";
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АдресНаДатуПриИзменении(Элемент)
|
||
|
||
Если Не ВводНовогоАдреса Тогда
|
||
|
||
Отбор = Новый Структура("Вид", ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Результат = ОпределитьДатуДействия(АдресНаДату, НайденныеСтроки);
|
||
|
||
Если Результат.ТекущаяСтрока <> Неопределено Тогда
|
||
Тип = Результат.ТекущаяСтрока.Тип;
|
||
АдресДействуетС = Результат.ДействуетС;
|
||
НаселенныйПунктДетально = АдресСИсторией(Результат.ТекущаяСтрока.Значение);
|
||
Иначе
|
||
Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес");
|
||
АдресДействуетС = АдресНаДату;
|
||
НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип);
|
||
КонецЕсли;
|
||
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
Если ЗначениеЗаполнено(Результат.ДействуетПо) Тогда
|
||
ТекстИсторическийАдрес = " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'действует по %1'"), Формат(Результат.ДействуетПо - 10, "ДЛФ=DD"));
|
||
Иначе
|
||
ТекстИсторическийАдрес = НСтр("ru = 'действует по настоящее время.'");
|
||
КонецЕсли;
|
||
Элементы.АдресНаДату.РасширеннаяПодсказка.Заголовок = ТекстИсторическийАдрес;
|
||
Иначе
|
||
АдресДействуетС = АдресНаДату;
|
||
КонецЕсли;
|
||
|
||
ТекстНачалаУчета = НачалоУчета();
|
||
Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + ТекстНачалаУчета + """'");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИнформацияОЗагрузкеАдресныеСведенийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
Если НавигационнаяСсылкаФорматированнойСтроки = "load"
|
||
И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ПослеАвторизоватьНаСайтеПоддержкиПользователей", ЭтотОбъект);
|
||
МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент");
|
||
МодульАдресныйКлассификаторКлиент.АвторизоватьНаСайтеПоддержкиПользователей(Оповещение, ЭтотОбъект);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДомНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
ПоказатьСписокДомовИлиЗемельныхУчастков(Ложь);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СтроениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
ПоказатьСписокДомовИлиЗемельныхУчастков(Истина);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПомещениеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
|
||
|
||
ПоказатьСписокПомещений();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПомещениеОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, ВыборДобавлением, СтандартнаяОбработка)
|
||
|
||
Если ВыбранноеЗначение = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
ЗаполнитьПоляПомещения(ВыбранноеЗначение);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПомещениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если Не АвтоподборДоступен Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Текст) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЭтоНациональныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)
|
||
Или РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.addressType);
|
||
|
||
Если Не ЭтоНациональныйАдрес Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторДома = ИдентификаторАдреса(НаселенныйПунктДетально, Истина, Истина);
|
||
|
||
Если ЗначениеЗаполнено(ИдентификаторДома) Тогда
|
||
|
||
ДанныеВыбора = СписокАвтоподбораПомещений(ИдентификаторДома, Текст + "%");
|
||
|
||
Если ДанныеВыбора.Количество() > 0 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
|
||
|
||
// СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
|
||
"ОбращенияВТехническуюПоддержкуСлужебныйКлиент");
|
||
|
||
Если НавигационнаяСсылка = "ВопросВПоддержку" Тогда
|
||
|
||
ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения();
|
||
ПараметрыОбращения.Тема = РаботаСАдресамиСлужебныйКлиент.ТемаОбращенияВПоддержку();
|
||
ПараметрыОбращения.ТехнологическаяИнформация = ИнформацияДляПоддержки(
|
||
ПредставлениеАдреса,
|
||
НаселенныйПунктДетально);
|
||
|
||
ОписаниеОшибок = Новый Массив;
|
||
ОшибкиЗаполнения = СписокОшибокЗаполнения(НаселенныйПунктДетально, ВидКонтактнойИнформации, Ложь, Ложь);
|
||
|
||
Для Каждого ОшибкаЗаполнения Из ОшибкиЗаполнения Цикл
|
||
ОписаниеОшибок.Добавить(ОшибкаЗаполнения.ТекстОшибки);
|
||
КонецЦикла;
|
||
|
||
ОписаниеОшибки = СтрСоединить(ОписаниеОшибок, "; ");
|
||
|
||
ПараметрыОбращения.Сообщение = РаботаСАдресамиСлужебныйКлиент.ТекстОбращенияВПоддержку(
|
||
ПредставлениеАдреса,
|
||
ОписаниеОшибки);
|
||
|
||
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку(
|
||
ЭтотОбъект,
|
||
ПараметрыОбращения);
|
||
|
||
ИначеЕсли НавигационнаяСсылка = "ИнформацияДляОтправкиВПоддержку" Тогда
|
||
|
||
ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения();
|
||
ПараметрыОбращения.ТехнологическаяИнформация = ИнформацияДляПоддержки(
|
||
ПредставлениеАдреса,
|
||
НаселенныйПунктДетально);
|
||
|
||
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку(
|
||
ЭтотОбъект,
|
||
ПараметрыОбращения);
|
||
|
||
Иначе
|
||
|
||
Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'");
|
||
ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СведенияОбАдресеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
|
||
|
||
Если НавигационнаяСсылка = "СведенияОбАдресе"
|
||
И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
ПараметрыОткрытия = Новый Структура();
|
||
ПараметрыОткрытия.Вставить("Адрес", ПредставлениеАдреса);
|
||
ПараметрыОткрытия.Вставить("СведенияОбАдресе", СведенияОбАдресе(НаселенныйПунктДетально));
|
||
|
||
МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент");
|
||
МодульАдресныйКлассификаторКлиент.ОткрытьСведенияОбАдресномКлассификаторе(ПараметрыОткрытия);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура РегионИностранногоАдресаПриИзменении(Элемент)
|
||
ЗаполнитьПолеИностранногоАдреса("area", РегионИностранногоАдреса);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура РайонИностранногоАдресаПриИзменении(Элемент)
|
||
ЗаполнитьПолеИностранногоАдреса("district", РайонИностранногоАдреса);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВнутригородскойРайонИностранногоАдресаПриИзменении(Элемент)
|
||
ЗаполнитьПолеИностранногоАдреса("locality", ВнутригородскойРайонИностранногоАдреса);
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиКомандФормы
|
||
|
||
&НаКлиенте
|
||
Процедура ПроверитьЗаполнениеАдреса(Команда)
|
||
|
||
Если РазрешитьВводАдресаВСвободнойФорме Тогда
|
||
ПоказатьПредупреждение(, НСтр("ru = 'Адрес не может быть проверен, так как он введен в свободной форме.'"));
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ПредупреждатьОбОтсутствииОшибок = Истина;
|
||
ТребуетсяОбновление = Ложь;
|
||
|
||
СписокОшибок = СписокОшибокЗаполнения(НаселенныйПунктДетально, ВидКонтактнойИнформации, ПредупреждатьОбОтсутствииОшибок, ТребуетсяОбновление);
|
||
СообщитьОбОшибкахЗаполнения(СписокОшибок, ПредупреждатьОбОтсутствииОшибок, ТребуетсяОбновление);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОчиститьАдрес(Команда)
|
||
|
||
ОчиститьАдресКлиент();
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПоПочтовомуИндексу(Команда)
|
||
|
||
Если ЕстьЗагруженныйКлассификатор И СтрДлина(Индекс) = 6 Тогда
|
||
ФормаВыбораУлицПоИндексу(Индекс);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗагрузитьКлассификатор(Команда)
|
||
|
||
ОткрытьФормуЗагрузкиКлассификатора();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВвестиАдресВСвободнойФорме(Команда)
|
||
|
||
ЭтоНациональныйАдрес = ЭтоНациональныйАдрес();
|
||
|
||
Если РазрешитьВводАдресаВСвободнойФорме Тогда
|
||
ВключаемыйТипАдреса = ?(УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType),
|
||
Неопределено, УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме());
|
||
ПереключитьНаСтруктурированныйВвод(ВключаемыйТипАдреса);
|
||
ИначеЕсли ЭтоНациональныйАдрес() Тогда
|
||
ТекстВопроса = НСтр("ru = 'Ввести адрес в свободной форме?
|
||
|Адреса, введенные в свободной форме, могут не пройти проверку по адресному классификатору.'");
|
||
Оповещение = Новый ОписаниеОповещения("ВвестиАдресВСвободнойФормеЗавершение", ЭтотОбъект);
|
||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru = 'Подтверждение'"));
|
||
Иначе
|
||
ПереключитьАдресВСвободнойФорму();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АвторизацияНаСайтеПоддержкиПользователей(Команда)
|
||
|
||
ОповещениеОЗакрытии = Новый ОписаниеОповещения("АвторизацияНаСайтеПоддержкиПользователейЗавершение", ЭтотОбъект);
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда
|
||
МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент");
|
||
МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(ОповещениеОЗакрытии, ЭтотОбъект);
|
||
КонецЕсли
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИсторияИзменений(Команда)
|
||
|
||
ДополнительныеПараметры = Новый Структура;
|
||
|
||
ОписаниеДополнительныхРеквизитов = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
|
||
|
||
СписокКонтактнойИнформации = ЗаполнитьСписокКонтактнойИнформации(ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка, ОписаниеДополнительныхРеквизитов);
|
||
|
||
ПараметрыФормы = Новый Структура("СписокКонтактнойИнформации", СписокКонтактнойИнформации);
|
||
ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка);
|
||
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
|
||
ПараметрыФормы.Вставить("ИзФормыВводаАдреса", Истина);
|
||
ПараметрыФормы.Вставить("ДействуетС", АдресНаДату);
|
||
|
||
ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыИстории", ЭтотОбъект, ДополнительныеПараметры);
|
||
ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ИсторияКонтактнойИнформации", ПараметрыФормы, ЭтотОбъект,,,, ОповещениеОЗакрытие);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АдресНаЯндексКарты(Команда)
|
||
УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(ПредставлениеАдреса, "Яндекс.Карты");
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АдресНаGoogleMaps(Команда)
|
||
УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(ПредставлениеАдреса, "GoogleMaps");
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АдресныйКлассификаторУстарел(Команда)
|
||
|
||
СообщениеОПроверкеАдреса = НСтр("ru = 'Адресные сведения, загруженные в приложение, устарели.
|
||
|Рекомендуется выполнить обновление адресного классификатор, чтобы проверка адреса выполнялась корректно.'");
|
||
Если ЕстьПравоЗагружатьКлассификатор Тогда
|
||
ВопросОбОбновлениеАдресногоКлассификатора(СообщениеОПроверкеАдреса);
|
||
Иначе
|
||
СообщениеОПроверкеАдреса = СообщениеОПроверкеАдреса + Символы.ПС
|
||
+ НСтр("ru = 'Для обновления адресного классификатора обратитесь к администратору.'");
|
||
ПоказатьПредупреждение(, СообщениеОПроверкеАдреса);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АдминистративноТерриториальноеДеление(Команда)
|
||
|
||
ПереключитьНаСтруктурированныйВвод(РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес());
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура МуниципальноеДеление(Команда)
|
||
|
||
ПереключитьНаСтруктурированныйВвод(РаботаСАдресамиКлиентСервер.МуниципальныйАдрес());
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДобавитьКомментарий(Команда)
|
||
Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
|
||
Элементы.ОсновныеСтраницы.ТекущаяСтраница = Элементы.СтраницаКомментарий;
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Команда - КомандаФормы
|
||
//
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ДобавитьСтроениеИлиПомещение(Команда)
|
||
|
||
ТипСтроенияИлиПомещения = СтрРазделить(Команда.Имя, "_")[1];
|
||
|
||
Отбор = Новый Структура("Ключ", ТипСтроенияИлиПомещения);
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Отбор);
|
||
Если НайденныеСтроки.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НайденныеСтроки[0].Видимость = Ложь;
|
||
|
||
Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-", "");
|
||
ИмяТекущего = ДобавитьПолеСтроенияИлиПомещения(Идентификатор, НайденныеСтроки[0].Тип,
|
||
НайденныеСтроки[0].Значение);
|
||
|
||
Если ИмяТекущего <> Неопределено Тогда
|
||
ТекущийЭлемент = Элементы[ИмяТекущего];
|
||
КонецЕсли;
|
||
|
||
Если НайденныеСтроки[0].Тип = "Помещение" Тогда
|
||
Значение = ?(НайденныеСтроки[0].Значение <> НСтр("ru = 'Другое'"), НайденныеСтроки[0].Значение, "");
|
||
ПомещенияАдреса = НаселенныйПунктДетально.Apartments; // Массив
|
||
ПомещенияАдреса.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[ИмяТекущего]));
|
||
Иначе
|
||
ЗданияАдреса = НаселенныйПунктДетально.buildings; // Массив
|
||
ЗданияАдреса.Добавить(ЗначениеСтроенияИлиПомещения(НайденныеСтроки[0].Значение, ЭтотОбъект[ИмяТекущего]));
|
||
КонецЕсли;
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
&НаКлиенте
|
||
Процедура СкопироватьАдресВБуферОбмена(Команда)
|
||
УправлениеКонтактнойИнформациейКлиент.ПоместитьТекстВБуфераОбмена(ПредставлениеАдреса);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура КомандаПрименить(Команда)
|
||
ПодтвердитьИЗакрыть();
|
||
КонецПроцедуры
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ИнформацияДляПоддержки(ПредставлениеАдреса, НаселенныйПунктДетально)
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
СведенияОбАдресе = СведенияОбАдресе(НаселенныйПунктДетально);
|
||
|
||
ИнформацияДляПоддержки = МодульАдресныйКлассификаторСлужебный.ИнформацияДляПоддержки(
|
||
ПредставлениеАдреса,
|
||
СведенияОбАдресе);
|
||
|
||
Иначе
|
||
ИнформацияДляПоддержки = СтандартныеПодсистемыСервер.ИнформацияДляПоддержки();
|
||
КонецЕсли;
|
||
|
||
Возврат ИнформацияДляПоддержки
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СведенияОбАдресе(НаселенныйПунктДетально)
|
||
|
||
АдресВJSON = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально);
|
||
ДополнительныеПараметры = Новый Структура;
|
||
ДополнительныеПараметры.Вставить("КодыАдреса", Истина);
|
||
|
||
Возврат РаботаСАдресами.СведенияОбАдресе(АдресВJSON, ДополнительныеПараметры);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция АдресСИсторией(ЗначенияПолей)
|
||
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
|
||
КонецФункции
|
||
|
||
// Параметры:
|
||
// Результат - Структура:
|
||
// * Индекс - Строка
|
||
// ДополнительныеПараметры - Произвольный
|
||
//
|
||
&НаКлиенте
|
||
Процедура ПослеВыбораАдресаПоИндексу(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат <> Неопределено Тогда
|
||
|
||
Если Результат.Отказ Тогда
|
||
Если Результат.Свойство("Индекс") И НЕ ПустаяСтрока(Результат.Индекс) Тогда
|
||
ОбновитьПредставлениеАдреса();
|
||
Возврат;
|
||
Иначе
|
||
Если НЕ ПодборПоИндексуДоступен Тогда
|
||
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс %1 не найден в адресном классификаторе'"),
|
||
Формат(Результат.Индекс, "ЧРГ=' '; ЧГ=0"));
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,, "Объект.Индекс");
|
||
Иначе
|
||
ПроверитьДоступностьКлассификатора();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОчиститьАдресКлиент();
|
||
Если ТипЗнч(Результат) = Тип("Структура") Тогда
|
||
ПолученныйАдрес = ОпределитьАдресПоИдентификатору(Результат);
|
||
ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ПолученныйАдрес);
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.ZipCode) Тогда
|
||
НаселенныйПунктДетально.ZipCode = Формат(Результат.Индекс,"ЧГ=0");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ОбработкаИзмененияАдреса();
|
||
УстановитьФлагиВМенюПоТипуАдреса();
|
||
|
||
ТекущийЭлемент = Элементы.Дом;
|
||
Иначе
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОтключитьВозможностьВыбораАдресныхСведенийИзКлассификатора()
|
||
|
||
Элементы.ГруппаИнформация.Видимость = Ложь;
|
||
Элементы.ПроверитьЗаполнениеАдреса.Видимость = Ложь;
|
||
Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь;
|
||
Элементы.ЗагрузитьКлассификатор.Видимость = Ложь;
|
||
Элементы.Улица.КнопкаВыбора = Ложь;
|
||
Элементы.Дом.КнопкаВыбора = Ложь;
|
||
Элементы.Строение.КнопкаВыбора = Ложь;
|
||
Элементы.Помещение.КнопкаВыбора = Ложь;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьУровниДомовИЗемельныхУчастков()
|
||
|
||
ЗаполненыДома = Ложь;
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.houseNumber)
|
||
Или НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
ЗаполненыДома = Истина;
|
||
КонецЕсли;
|
||
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, "house", ЗаполненыДома);
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, "stead", ЗначениеЗаполнено(НаселенныйПунктДетально.stead));
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьИдентификаторПомещения()
|
||
|
||
НаселенныйПунктДетально.ApartmentId = "";
|
||
ПодключитьОбработчикОжидания("ЗаполнитьИдентификаторПомещенияДляПервогоПомещения", 0.2, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьИдентификаторПомещенияДляПервогоПомещения()
|
||
|
||
ЭтоНациональныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)
|
||
Или РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.addressType);
|
||
|
||
Если Не ЭтоНациональныйАдрес Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.Apartments.Количество() > 1 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторДома = ИдентификаторАдреса(НаселенныйПунктДетально, Истина, Истина);
|
||
|
||
Если Не ЗначениеЗаполнено(ИдентификаторДома) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СписокПомещений = СписокАвтоподбораПомещений(ИдентификаторДома, Помещение);
|
||
|
||
Если СписокПомещений = Неопределено Или СписокПомещений.Количество() = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторПомещения = "";
|
||
Для Каждого СвойстваПомещения Из СписокПомещений Цикл
|
||
Если СвойстваПомещения.Значение.ТипПомещения = ТипПомещения Тогда
|
||
ИдентификаторПомещения = СвойстваПомещения.Значение.ИдентификаторПомещения;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
НаселенныйПунктДетально.ApartmentId = ИдентификаторПомещения;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Процедура ОбновитьСписокУровней(НаселенныйПунктДетально, ИмяУровня, ЕстьЗначение)
|
||
|
||
Если ИмяУровня <> "district" Тогда
|
||
ПозицияМуниципальныйУровень = НаселенныйПунктДетально.munLevels.Найти(ИмяУровня);
|
||
Иначе
|
||
ПозицияМуниципальныйУровень = -1;
|
||
КонецЕсли;
|
||
|
||
Если ИмяУровня <> "munDistrict" И ИмяУровня <> "settlement" Тогда
|
||
ПозицияАдминистративнойУровень = НаселенныйПунктДетально.admLevels.Найти(ИмяУровня);
|
||
Иначе
|
||
ПозицияАдминистративнойУровень = -1;
|
||
КонецЕсли;
|
||
|
||
Если ЕстьЗначение Тогда
|
||
Если ПозицияМуниципальныйУровень = Неопределено Тогда
|
||
НаселенныйПунктДетально.munLevels.Добавить(ИмяУровня);
|
||
КонецЕсли;
|
||
Если ПозицияАдминистративнойУровень = Неопределено Тогда
|
||
НаселенныйПунктДетально.admLevels.Добавить(ИмяУровня);
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ПозицияМуниципальныйУровень <> Неопределено И ПозицияМуниципальныйУровень >= 0 Тогда
|
||
НаселенныйПунктДетально.munLevels.Удалить(ПозицияМуниципальныйУровень);
|
||
КонецЕсли;
|
||
Если ПозицияАдминистративнойУровень <> Неопределено И ПозицияАдминистративнойУровень >= 0 Тогда
|
||
НаселенныйПунктДетально.admLevels.Удалить(ПозицияАдминистративнойУровень);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура УстановитьМуниципальныеСведения(НаселенныйПунктДетально)
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(НаселенныйПунктДетально);
|
||
|
||
ИдентификаторАдреса = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
Если ЗначениеЗаполнено(ИдентификаторАдреса) Тогда
|
||
|
||
СведенияОбАдресномОбъекта = МодульАдресныйКлассификаторСлужебный.СведенияОбАдресномОбъекта(ИдентификаторАдреса);
|
||
Результат = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(СведенияОбАдресномОбъекта);
|
||
|
||
Если Не Результат.Отказ Тогда
|
||
ДанныеИзКлассификатора = РаботаСАдресами.ПодготовитьАдресДляВвода(Результат.Данные);
|
||
|
||
ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ДанныеИзКлассификатора,
|
||
"munDistrict, munDistrictType,munDistrictId,settlement,settlementType,settlementId");
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ВариантыУлицПоТексту(Знач Текст)
|
||
|
||
ДополнительныеПараметры = Новый Структура;
|
||
ДополнительныеПараметры.Вставить("Идентификатор", ИдентификаторНаселенногоПункта);
|
||
ДополнительныеПараметры.Вставить("ТипАдреса", НаселенныйПунктДетально.AddressType);
|
||
ДополнительныеПараметры.Вставить("Уровень", 8);
|
||
|
||
Результат = СписокАвтоподбораУлицы(Текст, ДополнительныеПараметры);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ФормаВыбораУлицПоИндексу(Знач Текст)
|
||
|
||
Если Не ЭтоРФАдрес() Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Модифицированность = Истина;
|
||
Индекс = Текст;
|
||
|
||
Если АвтоподборДоступен Тогда
|
||
|
||
ПараметрыФормы = ПараметрыОткрытияФормаВыбораПоИндексу();
|
||
ПараметрыФормы.Индекс =СокрЛП(Текст);
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ПослеВыбораАдресаПоИндексу", ЭтотОбъект);
|
||
ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс,,,, Оповещение);
|
||
Иначе
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ЭтоРФАдрес()
|
||
|
||
Возврат РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)
|
||
Или РаботаСАдресамиКлиент.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.addressType);
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ВвестиАдресВСвободнойФормеЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
|
||
|
||
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ПереключитьАдресВСвободнойФорму();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПереключитьАдресВСвободнойФорму()
|
||
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Ложь;
|
||
|
||
Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
РазрешитьВводАдресаВСвободнойФорме = Истина;
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме();
|
||
Элементы.АдресВСвободнойФорме.Пометка = Истина;
|
||
ОбновитьПредставлениеАдреса();
|
||
ПоказатьАдресВСвободнойФорме();
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
РазрешитьВводАдресаВСвободнойФорме = Ложь;
|
||
ПереключитьОтображениеАдресВСвободнойФорме();
|
||
|
||
Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
ОтобразитьВыбранныйТипАдреса(НаселенныйПунктДетально.AddressType);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда
|
||
// Попытка восстановить адрес по полям из представления.
|
||
НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Комментарий, Истина);
|
||
ОтобразитьВыбранныйТипАдреса(НаселенныйПунктДетально.AddressType);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЧастиАдреса = СтрРазделить(ПредставлениеАдреса, ",");
|
||
Если СтрСравнить(Страна, ЧастиАдреса[0]) = 0 Тогда
|
||
ЧастиАдреса.Удалить(0);
|
||
КонецЕсли;
|
||
|
||
Если ЧастиАдреса.Количество() > 1 Тогда
|
||
ЧастьУлица = СокрЛП(ЧастиАдреса[ЧастиАдреса.Количество() - 1]);
|
||
ЧастиАдреса.Удалить(ЧастиАдреса.Количество() - 1);
|
||
Иначе
|
||
ЧастьУлица = "";
|
||
КонецЕсли;
|
||
|
||
ЧастьГород = СокрЛП(?(ЧастиАдреса.Количество() > 0, СтрСоединить(ЧастиАдреса, ","), ""));
|
||
|
||
Если СведенияОСтране.УчастникЕАЭС Тогда
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС();
|
||
НаселенныйПунктДетально.Area = ЧастьГород;
|
||
Иначе
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес();
|
||
НаселенныйПунктДетально.City = ЧастьГород;
|
||
КонецЕсли;
|
||
НаселенныйПунктДетально.Street = ЧастьУлица;
|
||
|
||
ОтобразитьВыбранныйТипАдреса(НаселенныйПунктДетально.AddressType);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОчиститьНаселенныйПункт()
|
||
|
||
ИдентификаторНаселенногоПункта = Неопределено;
|
||
|
||
УровниАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", Ложь);
|
||
Для каждого ИмяУровня Из УровниАдреса Цикл
|
||
Если НаселенныйПунктДетально.Свойство(ИмяУровня) Тогда
|
||
НаселенныйПунктДетально[ИмяУровня] = "";
|
||
НаселенныйПунктДетально[ИмяУровня + "Type"] = "";
|
||
НаселенныйПунктДетально[ИмяУровня + "Id"] = "";
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, ИмяУровня, Ложь);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
НаселенныйПунктДетально.areaValue = "";
|
||
|
||
ОчиститьИдентификаторыАдреса();
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОтобразитьЭлементыФормыВСоответствиеСоСтраной()
|
||
|
||
СведенияОСтране = СведенияОСтране(Страна);
|
||
Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
|
||
ТипАдресаИзАдреса = НаселенныйПунктДетально.AddressType;
|
||
ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально, СведенияОСтране, МеждународныйФорматАдреса);
|
||
ПеренестиЗначенияПолейАдресВПоляНовогоТипа(ТипАдресаИзАдреса);
|
||
ТипАдресаИзАдреса = НаселенныйПунктДетально.AddressType;
|
||
|
||
КонецЕсли;
|
||
|
||
УстановитьЗначенияНациональныхРеквизитовКонтактнойИнформации(НаселенныйПунктДетально);
|
||
|
||
ОтобразитьПоляПоТипуАдреса();
|
||
НужноОбновитьПреставление = ПривестиИндексКФорматуСтраны();
|
||
|
||
Если ЭтоНациональныйАдрес() Тогда
|
||
Восстановлен = ВосстановитьАдрес(ПредставлениеАдреса, НаселенныйПунктДетально, НаселенныйПунктДетально.AddressType);
|
||
Иначе
|
||
Восстановлен = Ложь;
|
||
КонецЕсли;
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ВосстановитьАдрес(ПредставлениеАдреса, НаселенныйПункт, ТипАдреса)
|
||
|
||
Результат = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
|
||
ВосстановленныйАдрес = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Результат, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
Если УправлениеКонтактнойИнформацией.АдресВведенВСвободнойФорме(ВосстановленныйАдрес) Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
ВосстановленныйАдрес.AddressType = ТипАдреса;
|
||
ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ВосстановленныйАдрес);
|
||
УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально);
|
||
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Процедура ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально, СведенияОСтране, МеждународныйФорматАдреса)
|
||
|
||
Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) И Не МеждународныйФорматАдреса Тогда
|
||
Если СтрСравнить(НаселенныйПунктДетально.AddressType, РаботаСАдресамиКлиентСервер.МуниципальныйАдрес()) <> 0 Тогда
|
||
НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес();
|
||
КонецЕсли;
|
||
ИначеЕсли СведенияОСтране.УчастникЕАЭС Тогда
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС();
|
||
Иначе
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПеренестиЗначенияПолейАдресВПоляНовогоТипа(ТипАдреса)
|
||
|
||
ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(ТипАдреса, Ложь);
|
||
СведенияАдреса = Новый Массив;
|
||
Для каждого ИмяУровня Из ИменаУровнейАдреса Цикл
|
||
Если НаселенныйПунктДетально.Свойство(ИмяУровня) И ЗначениеЗаполнено(НаселенныйПунктДетально[ИмяУровня]) Тогда
|
||
|
||
Сведения = ОписаниеСведенийАдреса();
|
||
Сведения.Наименование = НаселенныйПунктДетально[ИмяУровня];
|
||
Сведения.Сокращение = НаселенныйПунктДетально[ИмяУровня + "Type"];
|
||
Сведения.Представление = УправлениеКонтактнойИнформациейКлиентСервер.СоединитьНаименованиеИТипАдресногоОбъекта(
|
||
Сведения.Наименование, Сведения.Сокращение, СтрСравнить(ИмяУровня, "area") = 0);
|
||
|
||
СведенияАдреса.Добавить(Сведения);
|
||
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ИменаВсехУровней = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", Ложь);
|
||
Для каждого ИмяУровня Из ИменаВсехУровней Цикл
|
||
НаселенныйПунктДетально[ИмяУровня] = "";
|
||
НаселенныйПунктДетально[ИмяУровня + "Type"] = "";
|
||
НаселенныйПунктДетально[ИмяУровня + "Id"] = "";
|
||
КонецЦикла;
|
||
|
||
ИменаУровнейНовогоТипа = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь);
|
||
ИмяУровня = ИменаУровнейНовогоТипа.Получить(0);
|
||
Разделитель = ", ";
|
||
Для Счетчик = 0 По СведенияАдреса.Количество() - 1 Цикл
|
||
|
||
Если ИменаУровнейНовогоТипа.Количество() > Счетчик Тогда
|
||
ИмяУровня = ИменаУровнейНовогоТипа.Получить(Счетчик);
|
||
ЗначениеСведенияАдреса = СведенияАдреса.Получить(Счетчик); // см. ОписаниеСведенийАдреса
|
||
НаселенныйПунктДетально[ИмяУровня] = ЗначениеСведенияАдреса.Наименование;
|
||
НаселенныйПунктДетально[ИмяУровня + "Type"] = ЗначениеСведенияАдреса.Сокращение;
|
||
Иначе
|
||
НаселенныйПунктДетально[ИмяУровня] = НаселенныйПунктДетально[ИмяУровня] + Разделитель + СведенияАдреса.Получить(Счетчик).Представление;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если НаселенныйПунктДетально.Свойство("street") Тогда
|
||
Если ЭтоИностранныйАдрес(НаселенныйПунктДетально.AddressType) Тогда
|
||
НаселенныйПунктДетально["street"] = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(
|
||
НаселенныйПунктДетально, "street", "Type");
|
||
НаселенныйПунктДетально["StreetType"] = ""; // В иностранном адресе нет сокращений.
|
||
Иначе
|
||
Если Не ЗначениеЗаполнено(НаселенныйПунктДетально["streetType"]) Тогда
|
||
ЧастиАдресногоОбъекта = СтрРазделить(НаселенныйПунктДетально["street"], " ");
|
||
Если ЧастиАдресногоОбъекта.Количество() > 1 Тогда
|
||
НаселенныйПунктДетально["StreetType"] = ЧастиАдресногоОбъекта[ЧастиАдресногоОбъекта.ВГраница()];
|
||
ЧастиАдресногоОбъекта.Удалить(ЧастиАдресногоОбъекта.ВГраница());
|
||
НаселенныйПунктДетально["street"] = СтрСоединить(ЧастиАдресногоОбъекта, " ");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЭтоИностранныйАдрес(НаселенныйПунктДетально.AddressType) Тогда
|
||
|
||
Если НаселенныйПунктДетально.Свойство("buildings") Тогда
|
||
Если ТипЗнч(НаселенныйПунктДетально["buildings"]) = Тип("Массив") И НаселенныйПунктДетально["buildings"].Количество() > 0 Тогда
|
||
ПерваяЗапись = НаселенныйПунктДетально["buildings"].Получить(0);
|
||
НаселенныйПунктДетально["buildings"] = Новый Массив;
|
||
НаселенныйПунктДетально["buildings"].Добавить(ПерваяЗапись);
|
||
Иначе
|
||
НаселенныйПунктДетально["buildings"] = Новый Массив;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.Свойство("apartments") Тогда
|
||
Если ТипЗнч(НаселенныйПунктДетально["apartments"]) = Тип("Массив") И НаселенныйПунктДетально["apartments"].Количество() > 0 Тогда
|
||
ПерваяЗапись = НаселенныйПунктДетально["apartments"].Получить(0);
|
||
НаселенныйПунктДетально["apartments"] = Новый Массив;
|
||
НаселенныйПунктДетально["apartments"].Добавить(ПерваяЗапись);
|
||
Иначе
|
||
НаселенныйПунктДетально["apartments"] = Новый Массив;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Наименование - Строка
|
||
// * Сокращение - Строка
|
||
// * Представление - Строка
|
||
//
|
||
&НаКлиенте
|
||
Функция ОписаниеСведенийАдреса()
|
||
|
||
Сведения = Новый Структура;
|
||
Сведения.Вставить("Наименование", "");
|
||
Сведения.Вставить("Сокращение", "");
|
||
Сведения.Вставить("Представление", "");
|
||
|
||
Возврат Сведения;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура АдаптацияИдентификатораНаселенногоПункта(ИдентификаторНаселенногоПункта)
|
||
|
||
Если НаселенныйПунктДетально["munDistrictId"] = ИдентификаторНаселенногоПункта
|
||
Или НаселенныйПунктДетально["districtId"] = ИдентификаторНаселенногоПункта Тогда
|
||
ИдентификаторНаселенногоПункта = НаселенныйПунктДетально["areaId"];
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОтобразитьВыбранныйТипАдреса(ВыбранныйТипАдреса = Неопределено)
|
||
|
||
ПроверкаОбновленияПолейПослеИзмененияПредставления();
|
||
ПредставлениеАдресаКеш = Неопределено;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType)
|
||
И Элементы.АдресВСвободнойФорме.Пометка Тогда
|
||
|
||
Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда
|
||
// Попытка восстановить адрес по полям из представления.
|
||
НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Комментарий, Истина);
|
||
Иначе
|
||
|
||
УдалитьСтрануИзПредставления();
|
||
|
||
ИменаУровней = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", Истина);
|
||
Для каждого ИмяУровня Из ИменаУровней Цикл
|
||
НаселенныйПунктДетально[ИмяУровня] = "";
|
||
НаселенныйПунктДетально[ИмяУровня + "Type"] = "";
|
||
НаселенныйПунктДетально[ИмяУровня + "Id"] = "";
|
||
КонецЦикла;
|
||
|
||
НаселенныйПунктДетально["HouseNumber"] = "";
|
||
НаселенныйПунктДетально["HouseType"] = "";
|
||
НаселенныйПунктДетально["houseId"] = "";
|
||
НаселенныйПунктДетально["buildings"] = Новый Массив;
|
||
НаселенныйПунктДетально["apartments"] = Новый Массив;
|
||
|
||
ТипАдреса = ?(СведенияОСтране.УчастникЕАЭС,
|
||
УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(),
|
||
УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес());
|
||
НаселенныйПунктДетально.AddressType = ТипАдреса;
|
||
|
||
ЧастиАдреса = СтрРазделить(ПредставлениеАдреса, ",");
|
||
|
||
Если ЧастиАдреса.Количество() > 0 Тогда
|
||
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0));
|
||
ИндексИзАдреса = ОписаниеТипаЧисло.ПривестиЗначение(ЧастиАдреса.Получить(0));
|
||
Если ИндексИзАдреса >= 0 Тогда
|
||
НаселенныйПунктДетально["ZIPCode"] = СокрЛП(ЧастиАдреса.Получить(0));
|
||
ЧастиАдреса.Удалить(0);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ИменаУровнейНовогоТипа = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(ТипАдреса, Истина);
|
||
Для Счетчик = 0 По ЧастиАдреса.Количество() - 1 Цикл
|
||
|
||
Если ИменаУровнейНовогоТипа.Количество() > Счетчик Тогда
|
||
ИмяУровня = ИменаУровнейНовогоТипа.Получить(Счетчик);
|
||
НаселенныйПунктДетально[ИмяУровня] = СокрЛП(ЧастиАдреса.Получить(0));
|
||
Иначе
|
||
Прервать;
|
||
КонецЕсли;
|
||
ЧастиАдреса.Удалить(0);
|
||
|
||
КонецЦикла;
|
||
|
||
Если ЧастиАдреса.Количество() > 0 Тогда
|
||
|
||
СведенияОДоме = СтрРазделить(СокрЛП(ЧастиАдреса.Получить(0)), " ");
|
||
Если СведенияОДоме.Количество() > 1 Тогда
|
||
НаселенныйПунктДетально["HouseType"] = СведенияОДоме.Получить(0);
|
||
СведенияОДоме.Удалить(0);
|
||
КонецЕсли;
|
||
НаселенныйПунктДетально["HouseNumber"] = СтрСоединить(СведенияОДоме, " ");
|
||
ЧастиАдреса.Удалить(0);
|
||
|
||
КонецЕсли;
|
||
|
||
Если ЧастиАдреса.Количество() > 0 Тогда
|
||
|
||
СведенияОЗдании = СтрРазделить(СокрЛП(ЧастиАдреса.Получить(0)), " ");
|
||
НаселенныйПунктДетально["buildings"] = Новый Массив;
|
||
ТипЗданияИзАдреса = СведенияОЗдании.Получить(0);
|
||
СведенияОЗдании.Удалить(0);
|
||
ДанныеЗдания = СтрСоединить(СведенияОЗдании, " ");
|
||
ЗданиеИзАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипЗданияИзАдреса, ДанныеЗдания);
|
||
НаселенныйПунктДетально["buildings"].Добавить(ЗданиеИзАдреса);
|
||
ЧастиАдреса.Удалить(0);
|
||
|
||
КонецЕсли;
|
||
|
||
Если ЧастиАдреса.Количество() > 0 Тогда
|
||
|
||
СведенияОПомещении = СтрРазделить(СокрЛП(ЧастиАдреса.Получить(0)), " ");
|
||
НаселенныйПунктДетально["apartments"] = Новый Массив;
|
||
ТипПомещенияИзАдреса = СведенияОПомещении.Получить(0);
|
||
СведенияОПомещении.Удалить(0);
|
||
ДанныеПомещения = СтрСоединить(СведенияОПомещении, " ");
|
||
ПомещениеИзАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипПомещенияИзАдреса, ДанныеПомещения);
|
||
НаселенныйПунктДетально["apartments"].Добавить(ПомещениеИзАдреса);
|
||
ЧастиАдреса.Удалить(0);
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ПереключитьОтображениеАдресВСвободнойФорме();
|
||
КонецЕсли;
|
||
|
||
Если ВыбранныйТипАдреса = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес() Тогда
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.munDistrict)
|
||
И ПустаяСтрока(НаселенныйПунктДетально.settlement) Тогда
|
||
|
||
УстановитьМуниципальныеСведения(НаселенныйПунктДетально);
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ВыбранныйТипАдреса <> Неопределено Тогда
|
||
НаселенныйПунктДетально.AddressType = ВыбранныйТипАдреса;
|
||
КонецЕсли;
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
ПроизвольныйВводАдреса = Ложь;
|
||
ПереключитьОтображениеАдресВСвободнойФорме();
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоИностранныйАдресИлиЕАЭС(НаселенныйПунктДетально.AddressType) Тогда
|
||
ВидимостьПолейИностраногоАдреса(Истина);
|
||
КонецЕсли;
|
||
|
||
УстановитьФлагиВМенюПоТипуАдреса();
|
||
ПоказатьПодсказкуПоТипАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УдалитьСтрануИзПредставления()
|
||
|
||
НаименованиеСтраны = ВРег(НаименованиеСтраны(Страна,
|
||
ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).МеждународныйФорматАдреса));
|
||
|
||
ПредставлениеАдреса = СокрЛП(ПредставлениеАдреса);
|
||
Если СтрНачинаетсяС(ВРег(ПредставлениеАдреса), НаименованиеСтраны) Тогда
|
||
Позиция = СтрДлина(НаименованиеСтраны) + 1;
|
||
Позиция = ?(Сред(ПредставлениеАдреса, Позиция, 1) = ",", Позиция + 1, Позиция);
|
||
ПредставлениеАдреса = СокрЛП(Сред(ПредставлениеАдреса, Позиция));
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПоказатьСписокДомовИлиЗемельныхУчастков(ВключитьОтбор)
|
||
|
||
Идентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
|
||
Если ЗначениеЗаполнено(Идентификатор) Тогда
|
||
|
||
НаименованиеАдресногоОбъекта = РаботаСАдресамиКлиентСервер.НаименованиеРодительскогоОбъекта(НаселенныйПунктДетально, Идентификатор);
|
||
|
||
ПараметрыФормы = Новый Структура();
|
||
ПараметрыФормы.Вставить("ТипДома", ТипДома);
|
||
ПараметрыФормы.Вставить("Номер", Дом);
|
||
ПараметрыФормы.Вставить("Идентификатор", Идентификатор);
|
||
ПараметрыФормы.Вставить("НаименованиеАдресногоОбъекта", НаименованиеАдресногоОбъекта);
|
||
ПараметрыФормы.Вставить("Строение", Строение);
|
||
ПараметрыФормы.Вставить("ТипСтроения", ТипСтроения);
|
||
ПараметрыФормы.Вставить("Отбор", ВключитьОтбор);
|
||
|
||
ОповещениеОЗакрытие = Новый ОписаниеОповещения("ВыбранДом", ЭтотОбъект);
|
||
ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборДома", ПараметрыФормы,
|
||
ЭтотОбъект,,,, ОповещениеОЗакрытие, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
|
||
Иначе
|
||
Если ЗначениеЗаполнено(ПредставлениеАдреса) Тогда
|
||
ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о нумерации домов для введенного адреса.'");
|
||
Иначе
|
||
ТекстПредупреждения = НСтр("ru = 'Для просмотра списка домов заполните поля адреса.'");
|
||
КонецЕсли;
|
||
ПоказатьПредупреждение(, ТекстПредупреждения);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПоказатьСписокПомещений()
|
||
|
||
ИдентификаторДома = ИдентификаторАдреса(НаселенныйПунктДетально, Истина, Истина);
|
||
|
||
Если ЗначениеЗаполнено(ИдентификаторДома) Тогда
|
||
|
||
ИдентификаторУлицы = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
НаименованиеАдресногоОбъекта = "";
|
||
Если ЗначениеЗаполнено(ИдентификаторУлицы) Тогда
|
||
НаименованиеАдресногоОбъекта = РаботаСАдресамиКлиентСервер.НаименованиеРодительскогоОбъекта(НаселенныйПунктДетально, ИдентификаторУлицы);
|
||
КонецЕсли;
|
||
НаименованиеДома = УправлениеКонтактнойИнформациейКлиентСервер.СоединитьНаименованиеИТипАдресногоОбъекта(Дом, НРег(ТипДома), Ложь);
|
||
НаименованиеАдресногоОбъекта = НаименованиеАдресногоОбъекта + " " + НаименованиеДома;
|
||
|
||
ПараметрыФормы = Новый Структура();
|
||
ПараметрыФормы.Вставить("Идентификатор", ИдентификаторДома);
|
||
ПараметрыФормы.Вставить("НаименованиеАдресногоОбъекта", НаименованиеАдресногоОбъекта);
|
||
ПараметрыФормы.Вставить("НомерПомещения", Помещение);
|
||
ПараметрыФормы.Вставить("ТипПомещения", ТипПомещения);
|
||
|
||
ОповещениеОЗакрытие = Новый ОписаниеОповещения("ВыбраноПомещение", ЭтотОбъект);
|
||
ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВыборПомещения", ПараметрыФормы,
|
||
ЭтотОбъект,,,, ОповещениеОЗакрытие, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
|
||
Иначе
|
||
Если ЗначениеЗаполнено(ПредставлениеАдреса) Тогда
|
||
ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о нумерации помещений для введенного адреса.'");
|
||
Иначе
|
||
ТекстПредупреждения = НСтр("ru = 'Для просмотра списка помещений заполните поля адреса.'");
|
||
КонецЕсли;
|
||
ПоказатьПредупреждение(, ТекстПредупреждения);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВопросОбОбновлениеАдресногоКлассификатора(Знач СообщениеОПроверкеАдреса)
|
||
|
||
Кнопки = Новый СписокЗначений();
|
||
Кнопки.Добавить("Закрыть", НСтр("ru = 'Закрыть'"));
|
||
Кнопки.Добавить("ОбновитьКлассификатор", НСтр("ru = 'Обновить классификатор'"));
|
||
Оповещение = Новый ОписаниеОповещения("ПослеВопросОбОбновление", ЭтотОбъект);
|
||
ПоказатьВопрос(Оповещение, СообщениеОПроверкеАдреса, Кнопки);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВыбранДом(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат <> Неопределено Тогда
|
||
НаселенныйПунктДетально.apartmentId = "";
|
||
ЗаполнитьПоляДомовСтроенийЗемельныхУчастков(Результат);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВыбраноПомещение(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат <> Неопределено Тогда
|
||
ЗаполнитьПоляПомещения(Результат);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УстановитьПиктограммуКомментария()
|
||
Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий);
|
||
КонецПроцедуры
|
||
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * ВидКонтактнойИнформации - см. УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации
|
||
// * НаселенныйПунктДетально - Структура
|
||
// * ОсновнаяСтрана - СправочникСсылка.СтраныМира
|
||
// * Страна - СправочникСсылка.СтраныМира
|
||
// * ИсключатьГородИзМуниципальногоАдреса - Булево
|
||
//
|
||
&НаКлиенте
|
||
Функция ОписаниеКонтекста()
|
||
|
||
Контекст = Новый Структура;
|
||
Контекст.Вставить("ВидКонтактнойИнформации", Новый Структура);
|
||
Контекст.Вставить("НаселенныйПунктДетально", Новый Структура);
|
||
Контекст.Вставить("ОсновнаяСтрана", Неопределено);
|
||
Контекст.Вставить("Страна", Неопределено);
|
||
Контекст.Вставить("ИсключатьГородИзМуниципальногоАдреса", Ложь);
|
||
|
||
ЗаполнитьЗначенияСвойств(Контекст, ЭтотОбъект);
|
||
|
||
Возврат Контекст;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
|
||
|
||
Если Модифицированность Тогда // При немодифицированности работает как "отмена".
|
||
|
||
Контекст = ОписаниеКонтекста();
|
||
|
||
Результат = РезультатВыбора(Контекст, ВозвращатьСписокЗначений);
|
||
|
||
// Флаги вида были прочитаны заново.
|
||
ВидКонтактнойИнформации = Контекст.ВидКонтактнойИнформации;
|
||
|
||
Если (ВидКонтактнойИнформации.ПроверятьКорректность И Не РазрешитьВводАдресаВСвободнойФорме
|
||
Или ВидКонтактнойИнформации.МеждународныйФорматАдреса)
|
||
И Результат.ОшибкиЗаполнения.Количество() > 0 Тогда
|
||
|
||
СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь);
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
Результат = Результат.ДанныеВыбора;
|
||
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда
|
||
ОбработатьКонтактнуюИнформациюСИсторией(Результат);
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(Результат) = Тип("Структура") Тогда
|
||
Результат.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", КонтактнаяИнформацияОписаниеДополнительныхРеквизитов);
|
||
КонецЕсли;
|
||
|
||
СброситьМодифицированностьПриВыборе();
|
||
#Если ВебКлиент Тогда
|
||
ФлагЗакрытия = ЗакрыватьПриВыборе;
|
||
ЗакрыватьПриВыборе = Ложь;
|
||
ОповеститьОВыборе(Результат);
|
||
ЗакрыватьПриВыборе = ФлагЗакрытия;
|
||
#Иначе
|
||
ОповеститьОВыборе(Результат);
|
||
#КонецЕсли
|
||
СохранитьСостояниеФормы();
|
||
|
||
Иначе
|
||
Результат = Неопределено;
|
||
КонецЕсли;
|
||
|
||
Если (МодальныйРежим Или ЗакрыватьПриВыборе) И Открыта() Тогда
|
||
СброситьМодифицированностьПриВыборе();
|
||
СохранитьСостояниеФормы();
|
||
Закрыть(Результат);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработатьКонтактнуюИнформациюСИсторией(Результат)
|
||
|
||
Результат.Вставить("ДействуетС", ?(ВводНовогоАдреса, АдресНаДату, АдресДействуетС));
|
||
ИмяРеквизита = "";
|
||
Отбор = Новый Структура("Вид", Результат.Вид);
|
||
|
||
СтрокаДействующегоАдреса = Неопределено;
|
||
ДатаБылаИзменена = Истина;
|
||
ТекущаяДатаАдреса = ОбщегоНазначенияКлиент.ДатаСеанса();
|
||
Дельта = АдресНаДату - ТекущаяДатаАдреса;
|
||
МинимальнаяДельта = ?(Дельта > 0, Дельта, -Дельта);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
|
||
Если ЗначениеЗаполнено(НайденнаяСтрока.ИмяРеквизита) Тогда
|
||
ИмяРеквизита = НайденнаяСтрока.ИмяРеквизита;
|
||
КонецЕсли;
|
||
Если НайденнаяСтрока.ДействуетС = АдресНаДату Тогда
|
||
ДатаБылаИзменена = Ложь;
|
||
СтрокаДействующегоАдреса = НайденнаяСтрока;
|
||
Прервать;
|
||
КонецЕсли;
|
||
|
||
Дельта = ТекущаяДатаАдреса - НайденнаяСтрока.ДействуетС;
|
||
Дельта = ?(Дельта > 0, Дельта, -Дельта);
|
||
Если Дельта <= МинимальнаяДельта Тогда
|
||
МинимальнаяДельта = Дельта;
|
||
СтрокаДействующегоАдреса = НайденнаяСтрока;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если СтрокаДействующегоАдреса <> Неопределено Тогда
|
||
ДанныеБылиИзменены = ДанныеБылиИзменены(Результат.Значение, СтрокаДействующегоАдреса.Значение);
|
||
Иначе
|
||
ДанныеБылиИзменены = Истина;
|
||
КонецЕсли;
|
||
|
||
Если ДатаБылаИзменена Тогда
|
||
|
||
Отбор = Новый Структура("ДействуетС, Вид", АдресДействуетС, Результат.Вид);
|
||
СтрокиСАдресом = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
|
||
Если ДанныеБылиИзменены Тогда
|
||
НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, Результат);
|
||
НоваяКонтактнаяИнформация.ЗначенияПолей = Результат.КонтактнаяИнформация;
|
||
НоваяКонтактнаяИнформация.Значение = Результат.Значение;
|
||
НоваяКонтактнаяИнформация.ДействуетС = АдресНаДату;
|
||
НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина;
|
||
Если СтрокаДействующегоАдреса = Неопределено Тогда
|
||
Отбор = Новый Структура("ЭтоИсторическаяКонтактнаяИнформация, Вид", Ложь, Результат.Вид);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
|
||
НайденнаяСтрока.ЭтоИсторическаяКонтактнаяИнформация = Истина;
|
||
НайденнаяСтрока.ИмяРеквизита = "";
|
||
КонецЦикла;
|
||
НоваяКонтактнаяИнформация.ИмяРеквизита = ИмяРеквизита;
|
||
НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Ложь;
|
||
Иначе
|
||
НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина;
|
||
Результат.Представление = СтрокаДействующегоАдреса.Представление;
|
||
Результат.КонтактнаяИнформация = СтрокаДействующегоАдреса.ЗначенияПолей;
|
||
Результат.Значение = СтрокаДействующегоАдреса.Значение;
|
||
КонецЕсли;
|
||
ИначеЕсли СтрокаДействующегоАдреса <> Неопределено
|
||
И СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0
|
||
И СтрокиСАдресом.Количество() > 0 Тогда
|
||
// Поменяли только комментарий.
|
||
СтрокиСАдресом[0].Комментарий = Результат.Комментарий;
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ДанныеБылиИзменены Тогда
|
||
ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат);
|
||
СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация;
|
||
СтрокаДействующегоАдреса.Значение = Результат.Значение;
|
||
СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита;
|
||
СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ДанныеБылиИзменены(ЗначениеПолейДо, ЗначениеПолейПосле)
|
||
|
||
Если СтрСравнить(ЗначениеПолейПосле, ЗначениеПолейДо) = 0 Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ЗначениеПолейДо)И ЗначениеЗаполнено(ЗначениеПолейПосле) Тогда
|
||
|
||
ЗначенияДо = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначениеПолейДо, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
ЗначенияПосле = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначениеПолейПосле, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
|
||
Если СтрСравнить(ЗначенияДо.value, ЗначенияПосле.value) <> 0
|
||
Или СтрСравнить(ЗначенияДо.country, ЗначенияПосле.country) <> 0
|
||
Или СтрСравнить(ЗначенияДо.comment, ЗначенияПосле.comment) <> 0
|
||
Или СтрСравнить(ЗначенияДо.oktmo, ЗначенияПосле.oktmo) <> 0 Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
|
||
Возврат Ложь;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат Истина; // Один из вариантов пустой, другой заполнен.
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеЗакрытияФормыИстории(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ВводНовогоАдреса = ?(Результат.Свойство("ВводНовогоАдреса"), Результат.ВводНовогоАдреса, Ложь);
|
||
Если ВводНовогоАдреса Тогда
|
||
АдресДействуетС = АдресНаДату;
|
||
АдресНаДату = Результат.ТекущийАдрес;
|
||
Страна = ОсновнаяСтрана;
|
||
ТипАдреса = НаселенныйПунктДетально.addressType;
|
||
НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"));
|
||
НаселенныйПунктДетально.Country = Строка(Страна);
|
||
НаселенныйПунктДетально.addressType = ТипАдреса;
|
||
ОбработкаИзмененияАдреса();
|
||
Иначе
|
||
Отбор = Новый Структура("Вид", ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
|
||
ИмяРеквизита = "";
|
||
Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл
|
||
Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда
|
||
ИмяРеквизита = СтрокаКонтактнойИнформации.ИмяРеквизита;
|
||
КонецЕсли;
|
||
КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации);
|
||
КонецЦикла;
|
||
|
||
Для Каждого СтрокаКонтактнойИнформации Из Результат.История Цикл
|
||
ДанныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить();
|
||
ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации);
|
||
Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда
|
||
ДанныеСтроки.ИмяРеквизита = ИмяРеквизита;
|
||
КонецЕсли;
|
||
Если НачалоДня(Результат.ТекущийАдрес) = НачалоДня(СтрокаКонтактнойИнформации.ДействуетС) Тогда
|
||
АдресНаДату = Результат.ТекущийАдрес;
|
||
НаселенныйПунктДетально = СтрокаJSONВСтруктуру(СтрокаКонтактнойИнформации.Значение);
|
||
Комментарий = НаселенныйПунктДетально.comment;
|
||
ОбработкаИзмененияАдреса();
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
ОтобразитьИнформациюОДатахДействияАдреса(АдресНаДату);
|
||
|
||
Если НЕ Модифицированность Тогда
|
||
Модифицированность = Результат.Модифицированность;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СтрокаJSONВСтруктуру(Значение)
|
||
Возврат УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура СохранитьСостояниеФормы()
|
||
УстановитьКлючИспользованияФормы();
|
||
СохраняемыеВНастройкахДанныеМодифицированы = Истина;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СброситьМодифицированностьПриВыборе()
|
||
Модифицированность = Ложь;
|
||
КопияКомментария = Комментарий;
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Контекст - см. ОписаниеКонтекста
|
||
//
|
||
// ВозвращатьСписокЗначений - Булево
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * ДанныеВыбора - Структура:
|
||
// ** Представление - Строка
|
||
// ** КонтактнаяИнформация - Строка
|
||
// ** Значение - Строка
|
||
// ** Комментарий - Строка
|
||
// ** ВведеноВСвободнойФорме - Булево
|
||
// ** ВВидеГиперссылки - Булево
|
||
// ** Вид - СправочникСсылка.ВидыКонтактнойИнформации
|
||
// ** Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации
|
||
// * ОшибкиЗаполнения - Массив из Строка
|
||
//
|
||
&НаСервереБезКонтекста
|
||
Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений = Ложь)
|
||
|
||
// Обновляем некоторые флаги
|
||
ВидКИ = Контекст.ВидКонтактнойИнформации; // см. УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации
|
||
ЗначениеФлагов = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(ВидКИ.Ссылка);
|
||
|
||
ВидКИ.ТолькоНациональныйАдрес = ЗначениеФлагов.ТолькоНациональныйАдрес;
|
||
ВидКИ.ПроверятьКорректность = ЗначениеФлагов.ПроверятьКорректность;
|
||
|
||
НаселенныйПунктДетально = Контекст.НаселенныйПунктДетально;
|
||
Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения");
|
||
|
||
НаселенныйПунктДетально.Value = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(НаселенныйПунктДетально, ВидКИ.ВключатьСтрануВПредставление);
|
||
|
||
Если ВозвращатьСписокЗначений Тогда
|
||
ДанныеВыбора = Обработки.РасширенныйВводКонтактнойИнформации.КонтактнаяИнформацияВСтаруюСтруктуру(НаселенныйПунктДетально);
|
||
ИначеЕсли Контекст.Страна = Контекст.ОсновнаяСтрана И ПустаяСтрока(НаселенныйПунктДетально.Value) Тогда
|
||
ДанныеВыбора = "";
|
||
Иначе
|
||
ДанныеВыбора = НаселенныйПунктДетально;
|
||
КонецЕсли;
|
||
|
||
КонтактнаяИнформация = "";
|
||
Если ТипЗнч(ДанныеВыбора) = Тип("Структура") Тогда
|
||
Если ПустаяСтрока(ДанныеВыбора.countryCode) Тогда
|
||
СведенияОСтране = УправлениеКонтактнойИнформацией.ДанныеСтраныМира(Неопределено, ДанныеВыбора.Country);
|
||
Если СведенияОСтране <> Неопределено Тогда
|
||
ДанныеВыбора.countryCode = СведенияОСтране.Код;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ДанныеВыбора);
|
||
УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнуюИнформациюИзJSONВXML(ДанныеВыбора,
|
||
КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
Иначе
|
||
Значение = "";
|
||
КонецЕсли;
|
||
|
||
Результат.ДанныеВыбора = Новый Структура;
|
||
Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", КонтактнаяИнформация);
|
||
Результат.ДанныеВыбора.Вставить("Значение", Значение);
|
||
Результат.ДанныеВыбора.Вставить("Представление", НаселенныйПунктДетально.Value);
|
||
Результат.ДанныеВыбора.Вставить("Комментарий", НаселенныйПунктДетально.Comment);
|
||
Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме",
|
||
УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(НаселенныйПунктДетально));
|
||
|
||
// ошибки заполнения
|
||
Результат.ОшибкиЗаполнения = Новый Массив;
|
||
ПроверятьКорректность = ВидКИ.ПроверятьКорректность Или ВидКИ.МеждународныйФорматАдреса;
|
||
Если ПроверятьКорректность И ЗначениеЗаполнено(Значение) Тогда
|
||
Результат.ОшибкиЗаполнения = Обработки.РасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдреса(
|
||
Значение, ВидКИ);
|
||
КонецЕсли;
|
||
|
||
Результат.ДанныеВыбора.Вставить("ВВидеГиперссылки", Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог");
|
||
|
||
// Подавляем перенос строк в возвращаемом отдельно представлении.
|
||
Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " "));
|
||
Результат.ДанныеВыбора.Вставить("Вид",ВидКИ.Ссылка);
|
||
Результат.ДанныеВыбора.Вставить("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СписокОшибокЗаполнения(Адрес, ВидКонтактнойИнформации, ПредупреждатьОбОтсутствии, ТребуетсяОбновление = Ложь)
|
||
|
||
Результат = Обработки.РасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдреса(Адрес, ВидКонтактнойИнформации);
|
||
ОпределитьНеобходимостьОбновленияКлассификатора(Адрес, ТребуетсяОбновление);
|
||
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура ОпределитьНеобходимостьОбновленияКлассификатора(Знач НаселенныйПунктДетально, ТребуетсяОбновление)
|
||
|
||
// проверка источника
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
ИнформацияОбОбновление = МодульАдресныйКлассификаторСлужебный.ОписаниеПоследнейЗагрузки(НаселенныйПунктДетально.AreaID);
|
||
ТребуетсяОбновление = ИнформацияОбОбновление.НеобходимоОбновление;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция НаименованиеРегиона(НаселенныйПункт)
|
||
|
||
Возврат СокрЛП(НаселенныйПункт.area + " " + НаселенныйПункт.areaType);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона)
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("АдресныйКлассификаторДоступен", Ложь);
|
||
Результат.Вставить("РегионЗагружен", Ложь);
|
||
Результат.Вставить("СведенияУстарели", Ложь);
|
||
Результат.Вставить("ТекстОшибки", "");
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
Результат.АдресныйКлассификаторДоступен = Истина;
|
||
|
||
МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор");
|
||
КодРегиона = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеРегиона);
|
||
|
||
СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора();
|
||
Результат.ТекстОшибки = СведенияОАдресномКлассификаторе["ТекстОшибки"];
|
||
|
||
СведенияОРегиона = СведенияОАдресномКлассификаторе.Получить(КодРегиона);
|
||
Если ТипЗнч(СведенияОРегиона) = Тип("Структура") Тогда
|
||
Результат.РегионЗагружен = СведенияОРегиона.ИспользоватьЗагруженные;
|
||
ОписаниеДаты = Новый ОписаниеТипов("Дата");
|
||
ДатаЗагрузки = ОписаниеДаты.ПривестиЗначение(СведенияОРегиона.ДатаЗагрузки);
|
||
Если ТекущаяДатаСеанса() - ДатаЗагрузки > 2592000 Тогда
|
||
Результат.СведенияУстарели = Истина; // Данным более 30 дней.
|
||
КонецЕсли;
|
||
Иначе
|
||
Результат.РегионЗагружен = СведенияОАдресномКлассификаторе.Получить("ИспользоватьЗагруженные");
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов)
|
||
|
||
Отбор = Новый Структура("Вид", ВидКонтактнойИнформации);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
|
||
СписокКонтактнойИнформации = Новый Массив;
|
||
Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл
|
||
КонтактнаяИнформация = НовыйСписокКонтактнойИнформации();
|
||
ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации);
|
||
СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация);
|
||
КонецЦикла;
|
||
|
||
Возврат СписокКонтактнойИнформации;
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПолеИностранногоАдреса(ИмяПоля, ЗначениеПоля)
|
||
|
||
НаселенныйПунктДетально[ИмяПоля] = ЗначениеПоля;
|
||
НаселенныйПунктДетально[ИмяПоля + "Type"] = "";
|
||
НаселенныйПунктДетально[ИмяПоля + "ID"] = "";
|
||
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, ИмяПоля, ЗначениеЗаполнено(ЗначениеПоля));
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Представление - Строка
|
||
// * Значение - Строка
|
||
// * ЗначенияПолей - Строка
|
||
// * ДействуетС - Неопределено, Дата
|
||
// * Комментарий - Строка
|
||
//
|
||
&НаСервереБезКонтекста
|
||
Функция НовыйСписокКонтактнойИнформации()
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Представление", "");
|
||
Результат.Вставить("Значение", "");
|
||
Результат.Вставить("ЗначенияПолей", "");
|
||
Результат.Вставить("ДействуетС", Неопределено);
|
||
Результат.Вставить("Комментарий", "");
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеЗагрузкиАдресногоКлассификатора(Результат, ДополнительныеПараметры) Экспорт
|
||
Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("areaId") Тогда
|
||
СообщениеОНеобходимостиОбновленияКлассификатора(НаселенныйПунктДетально.areaId);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура СообщениеОНеобходимостиОбновленияКлассификатора(Идентификатор = Неопределено)
|
||
|
||
Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь;
|
||
Если НЕ ВебСервисИспользуется И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
ИнформацияОбОбновление = МодульАдресныйКлассификаторСлужебный.ОписаниеПоследнейЗагрузки(Идентификатор);
|
||
Элементы.АдресныйКлассификаторУстарел.Видимость = ИнформацияОбОбновление.НеобходимоОбновление;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПривестиИндексКФорматуСтраны()
|
||
|
||
ИндексБылИзменен = Ложь;
|
||
|
||
МаксимальнаяДлинаПочтовогоИндекса = ?(ЭтоНациональныйАдрес(), 6, 10);
|
||
|
||
Элементы.Индекс.ОграничениеТипа = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(МаксимальнаяДлинаПочтовогоИндекса));
|
||
|
||
Если ЭтоНациональныйАдрес() И ЗначениеЗаполнено(Индекс) Тогда
|
||
ЛишниеСимволы = СтрСоединить(СтрРазделить(Индекс, "0123456789"), "");
|
||
Индекс = СтрСоединить(СтрРазделить(Индекс, ЛишниеСимволы), "");
|
||
Если ЗначениеЗаполнено(ЛишниеСимволы) Тогда
|
||
ИндексБылИзменен = Истина;
|
||
КонецЕсли;
|
||
Если СтрДлина(Индекс) > МаксимальнаяДлинаПочтовогоИндекса Тогда
|
||
Индекс = Лев(Индекс, МаксимальнаяДлинаПочтовогоИндекса);
|
||
НаселенныйПунктДетально.Zipcode = Индекс;
|
||
ИндексБылИзменен = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат ИндексБылИзменен;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Функция ЭтоНациональныйАдрес()
|
||
Возврат РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) И Не МеждународныйФорматАдреса;
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОтобразитьПоляПоТипуАдреса()
|
||
|
||
ЭтоНациональныйАдрес = ЭтоНациональныйАдрес();
|
||
ОпределитьДоступностьАвтоПодборАдреса();
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
НаселенныйПунктДетально.Country = ?(ЗначениеЗаполнено(СведенияОСтране.МеждународноеНаименование),
|
||
СведенияОСтране.МеждународноеНаименование, ДанныеСтраныМира(СведенияОСтране).Наименование);
|
||
Иначе
|
||
НаселенныйПунктДетально.Country = ДанныеСтраныМира(СведенияОСтране).Наименование;
|
||
КонецЕсли;
|
||
|
||
УлицаЗаголовок = НСтр("ru = 'Улица'");
|
||
ОтображатьПоляИностранногоАдреса = Ложь;
|
||
|
||
Если ЭтоНациональныйАдрес Тогда
|
||
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.AddressType) Тогда
|
||
НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес();
|
||
КонецЕсли;
|
||
|
||
ЭтоЗемельныйУчасток = ?(ЭтоЗемельныйУчасток(ТипДома), Истина, Ложь);
|
||
|
||
Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО;
|
||
ВебСервисИспользуется = ВебКлассификаторДоступен;
|
||
АвтоподборДоступен = ИспользуетсяАдресныйКлассификатор И (ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор);
|
||
ВидимостьСтроений = Истина;
|
||
Элементы.ГруппаДобавлениеСтроения.Видимость = Истина;
|
||
Элементы.ГруппаДобавлениеПомещения.Видимость = Истина;
|
||
Элементы.Дом.КнопкаВыбора = АвтоподборДоступен;
|
||
Элементы.Улица.КнопкаВыбора = АвтоподборДоступен;
|
||
Элементы.НаселенныйПункт.КнопкаВыбора = Истина;
|
||
Элементы.Строение.КнопкаВыбора = Ложь;
|
||
Элементы.Помещение.КнопкаВыбора = АвтоподборДоступен;
|
||
Элементы.Строение.Доступность = Не ЭтоЗемельныйУчасток;
|
||
Элементы.ТипСтроения.Доступность = Не ЭтоЗемельныйУчасток;
|
||
Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru = 'Выберите или введите название населенного пункта'");
|
||
|
||
Иначе
|
||
|
||
Элементы.ГруппаДобавлениеСтроения.Видимость = Ложь;
|
||
Элементы.ГруппаДобавлениеПомещения.Видимость = Ложь;
|
||
|
||
Если Не МеждународныйФорматАдреса Тогда
|
||
|
||
ВидимостьСтроений = Истина;
|
||
Элементы.Дом.КнопкаВыбора = Ложь;
|
||
Элементы.Строение.КнопкаВыбора = Ложь;
|
||
ОтображатьПоляИностранногоАдреса = Истина;
|
||
Элементы.Помещение.КнопкаВыбора = Ложь;
|
||
|
||
Иначе
|
||
УлицаЗаголовок = НСтр("ru = 'Адрес'");
|
||
ВидимостьСтроений = Ложь;
|
||
КонецЕсли;
|
||
|
||
Элементы.ОКТМО.Видимость = Ложь;
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Ложь;
|
||
ВебСервисИспользуется = Ложь;
|
||
АвтоподборДоступен = Ложь;
|
||
Элементы.НаселенныйПункт.КнопкаВыбора = Ложь;
|
||
Элементы.НаселенныйПункт.ПодсказкаВвода = "";
|
||
Элементы.Улица.КнопкаВыбора = Ложь;
|
||
Элементы.Улица.ПодсказкаВвода = "";
|
||
|
||
КонецЕсли;
|
||
|
||
Элементы.Улица.Заголовок = УлицаЗаголовок;
|
||
ВидимостьПолейИностраногоАдреса(ОтображатьПоляИностранногоАдреса);
|
||
|
||
// Проверять, вводить в свободной форме и искать по индексу можем только российские адреса.
|
||
Элементы.Улица.МногострочныйРежим = Не ВидимостьСтроений; // Если нет строений, то улица многострочная
|
||
Элементы.ГруппаСтроенияИИнформация.Видимость = ВидимостьСтроений;
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес И АвтоподборДоступен;
|
||
Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоНациональныйАдрес;
|
||
Элементы.МуниципальноеДеление.Доступность = ЭтоНациональныйАдрес;
|
||
Элементы.АдминистративноТерриториальноеДеление.Доступность = ЭтоНациональныйАдрес;
|
||
|
||
Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление И ЭтоНациональныйАдрес() Тогда
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецЕсли;
|
||
|
||
УстановитьФлагиВМенюПоТипуАдреса();
|
||
ПоказатьПодсказкуПоТипАдреса();
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
ПоказатьАдресВСвободнойФорме();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВидимостьПолейИностраногоАдреса(Видимость)
|
||
|
||
Элементы.РегионИностранногоАдреса.Видимость = Видимость;
|
||
Элементы.РайонИностранногоАдреса.Видимость = Видимость;
|
||
Элементы.ВнутригородскойРайонИностранногоАдреса.Видимость = Видимость;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОпределитьДоступностьАвтоПодборАдреса()
|
||
|
||
Если Не РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда
|
||
АвтоподборДоступен = Ложь;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
АвтоподборДоступен = ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОпределитьОтображениеЭлементовИЦветов(ТолькоПросмотр)
|
||
|
||
ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы;
|
||
ЦветПоясняющегоТекста = ЦветаСтиля.ПоясняющийТекст;
|
||
|
||
Если Не ЕстьЗагруженныйКлассификатор Тогда
|
||
Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь;
|
||
Элементы.Улица.КнопкаВыбора = Ложь;
|
||
Элементы.Дом.КнопкаВыбора = Ложь;
|
||
Элементы.Строение.КнопкаВыбора = Ложь;
|
||
Элементы.Помещение.КнопкаВыбора = Ложь;
|
||
Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru = 'Выберите или введите название населенного пункта'");
|
||
КонецЕсли;
|
||
|
||
Если ВебКлассификаторДоступен Или МеждународныйФорматАдреса Тогда
|
||
Элементы.ГруппаИнформация.Видимость = Ложь;
|
||
Иначе
|
||
|
||
СведенияОЗагрузке = АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона(НаселенныйПунктДетально));
|
||
Если СведенияОЗагрузке.АдресныйКлассификаторДоступен Тогда
|
||
Если Не СведенияОЗагрузке.РегионЗагружен Тогда
|
||
ТекстОшибки = ДополнитьТекстОшибкиСсылкойДляЗагрузки(СведенияОЗагрузке);
|
||
Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = ТекстОшибки;
|
||
Элементы.ГруппаИнформация.Видимость = Истина;
|
||
Иначе
|
||
Элементы.ГруппаИнформация.Видимость = Ложь;
|
||
Элементы.АдресныйКлассификаторУстарел.Видимость = СведенияОЗагрузке.СведенияУстарели;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ТолькоПросмотр Тогда
|
||
Элементы.ГруппаКомандаДобавить.Видимость = Ложь;
|
||
Элементы.ДобавитьКомментарий.Доступность = Ложь;
|
||
Элементы.ФормаОчиститьАдрес.Доступность = Ложь;
|
||
Элементы.АдресНаДату.Доступность = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ДополнитьТекстОшибкиСсылкойДляЗагрузки(СведенияОЗагрузке)
|
||
|
||
Если ПустаяСтрока(СведенияОЗагрузке.ТекстОшибки) Тогда
|
||
Возврат "";
|
||
КонецЕсли;
|
||
|
||
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
ИППодключена = МодульАдресныйКлассификаторСлужебный.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки();
|
||
Если Не ИППодключена Тогда
|
||
ТекстОшибки = СтроковыеФункции.ФорматированнаяСтрока(СведенияОЗагрузке.ТекстОшибки + " <a href=""load"">%1</a>", НСтр("ru = 'Загрузить'"));
|
||
Возврат ТекстОшибки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат СведенияОЗагрузке.ТекстОшибки;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура УстановитьСписокВыбораЭлемента(ЭлементВид, ЭлементЗначение, Данные)
|
||
|
||
ЭлементЗначение.КнопкаВыпадающегоСписка = Данные.МожноПодбиратьЗначения;
|
||
|
||
СписокТипов = Данные.ВариантыТипа;
|
||
ЭлементВид.КнопкаВыпадающегоСписка = СписокТипов.Количество() > 0;
|
||
Если ЭлементВид.КнопкаВыпадающегоСписка Тогда
|
||
Для Каждого НаименованиеТипа Из СписокТипов Цикл
|
||
Если ЭлементВид.СписокВыбора.НайтиПоЗначению(НаименованиеТипа) = Неопределено Тогда
|
||
ЭлементВид.СписокВыбора.Добавить(НаименованиеТипа);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьЗначениеРеквизитовПоКонтактнойИнформации(ДанныеАдреса)
|
||
|
||
// Общие реквизиты
|
||
ПредставлениеАдреса = ДанныеАдреса.Value;
|
||
Если ДанныеАдреса.Свойство("Comment") Тогда
|
||
Комментарий = ДанныеАдреса.Comment;
|
||
КонецЕсли;
|
||
|
||
СсылкаНаОсновнуюСтрану = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана();
|
||
ДанныеСтраны = Неопределено;
|
||
Если ДанныеАдреса.Свойство("Country") И ЗначениеЗаполнено(ДанныеАдреса.Country) Тогда
|
||
ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, СокрЛП(ДанныеАдреса.Country));
|
||
КонецЕсли;
|
||
|
||
Если ДанныеСтраны = Неопределено Тогда
|
||
// Не нашли ни в справочнике, ни в классификаторе.
|
||
Страна = СсылкаНаОсновнуюСтрану;
|
||
КодСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОсновнуюСтрану, "Код");
|
||
Иначе
|
||
Страна = ДанныеСтраны.Ссылка;
|
||
КодСтраны = ДанныеСтраны.Код;
|
||
КонецЕсли;
|
||
|
||
СведенияОСтране = СведенияОСтране(Страна);
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ДанныеАдреса.AddressType) Тогда
|
||
РазрешитьВводАдресаВСвободнойФорме = Истина;
|
||
КонецЕсли;
|
||
|
||
УстановитьЗначенияНациональныхРеквизитовКонтактнойИнформации(ДанныеАдреса);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьЗначенияНациональныхРеквизитовКонтактнойИнформации(ДанныеАдреса)
|
||
|
||
// Индекс просто ставим
|
||
Если ДанныеАдреса.Свойство("ZIPCode") Тогда
|
||
Индекс = Формат(ДанныеАдреса.ZIPCode, "ЧГ=");
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ДанныеАдреса.HouseType) Тогда
|
||
ТипДома = ДанныеАдреса.HouseType;
|
||
Если ДанныеАдреса.Свойство("HouseNumber") Тогда
|
||
Дом = ДанныеАдреса.HouseNumber;
|
||
ИначеЕсли ДанныеАдреса.Свойство("House") Тогда
|
||
Дом = ДанныеАдреса.House;
|
||
КонецЕсли;
|
||
ИначеЕсли ЗначениеЗаполнено(ДанныеАдреса.stead) Тогда
|
||
ТипДома = РаботаСАдресамиКлиентСервер.НаименованиеЗемельногоУчастка();
|
||
Дом = ДанныеАдреса.stead;
|
||
КонецЕсли;
|
||
|
||
ЗаполняемПервоеЗдание = Истина;
|
||
Если ДанныеАдреса.Свойство("buildings") И ТипЗнч(ДанныеАдреса.buildings) = Тип("Массив") Тогда
|
||
Для каждого ОписаниеЗдания Из ДанныеАдреса.buildings Цикл
|
||
Если ЗаполняемПервоеЗдание Тогда
|
||
ТипСтроения = ОписаниеЗдания.Type;
|
||
Строение = ОписаниеЗдания.Number;
|
||
ЗаполняемПервоеЗдание = Ложь;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
ЗаполняемПервоеПомещение = Истина;
|
||
Если ДанныеАдреса.Свойство("Apartments") И ТипЗнч(ДанныеАдреса.Apartments) = Тип("Массив") Тогда
|
||
Для каждого ОписаниеСтроения Из ДанныеАдреса.Apartments Цикл
|
||
Если ЗаполняемПервоеПомещение Тогда
|
||
ТипПомещения = ОписаниеСтроения.Type;
|
||
Помещение = ОписаниеСтроения.Number;
|
||
ЗаполняемПервоеПомещение = Ложь;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоИностранныйАдресИлиЕАЭС(ДанныеАдреса.addressType) Тогда
|
||
Если МеждународныйФорматАдреса Тогда
|
||
НаселенныйПункт =
|
||
УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(ДанныеАдреса, "area", "Type");
|
||
Иначе
|
||
РегионИностранногоАдреса =
|
||
УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(ДанныеАдреса, "area", "Type");
|
||
РайонИностранногоАдреса =
|
||
УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(ДанныеАдреса, "district", "Type", Истина);
|
||
ВнутригородскойРайонИностранногоАдреса =
|
||
УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(ДанныеАдреса, "locality", "Type", Истина);
|
||
НаселенныйПункт =
|
||
УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(ДанныеАдреса, "city", "Type", Истина);
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ДанныеАдреса.Свойство("OKTMO") Тогда
|
||
ОКТМО = Формат(ДанныеАдреса.OKTMO, "ЧГ=");
|
||
КонецЕсли;
|
||
|
||
// Синтетический "Населенный пункт" получаем как представление.
|
||
НаселенныйПункт = Обработки.РасширенныйВводКонтактнойИнформации.ПредставлениеНаселенногоПункта(ДанныеАдреса);
|
||
КонецЕсли;
|
||
|
||
Улица = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеАдресногоОбъекта(ДанныеАдреса, "street", "Type", Истина);
|
||
|
||
ОтобразитьДополнительныеЗдания(НаселенныйПунктДетально);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ДобавитьПолеСтроенияИлиПомещения(Идентификатор, Тип, Значение)
|
||
|
||
Если Тип = "Помещение" Тогда
|
||
|
||
НоваяГруппа = Элементы.Добавить("ГруппаПомещение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаПомещенияДополнительно);
|
||
ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаПомещенияОсновная,, "ПутьКДаннымЗаголовка");
|
||
|
||
НовыйТип = Элементы.Добавить("ТипПомещения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении");
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
НовыйТип.КнопкаВыбора = Истина;
|
||
НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто;
|
||
КонецЕсли;
|
||
|
||
НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Помещение.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении");
|
||
НовыйЭлемент.УстановитьДействие("НачалоВыбора", "Подключаемый_ПомещениеНачалоВыбора");
|
||
НовыйЭлемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_ПомещениеОбработкаВыбора");
|
||
НовыйЭлемент.УстановитьДействие("АвтоПодбор", "Подключаемый_ПомещениеАвтоПодбор");
|
||
|
||
ЭтоНациональныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)
|
||
Или РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.addressType);
|
||
|
||
НовыйЭлемент.КнопкаВыбора = ЭтоНациональныйАдрес;
|
||
|
||
Иначе
|
||
|
||
НоваяГруппа = Элементы.Добавить("ГруппаСтроение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаСтроенияДополнительно);
|
||
ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаСтроенияОсновная,, "ПутьКДаннымЗаголовка");
|
||
|
||
НовыйТип = Элементы.Добавить("ТипСтроения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипСтроения.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипСтроенияПриИзменении");
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
НовыйТип.КнопкаВыбора = Истина;
|
||
НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто;
|
||
КонецЕсли;
|
||
|
||
НовыйЭлемент = Элементы.Добавить("Строение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Строение.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_СтроениеПриИзменении");
|
||
НовыйЭлемент.КнопкаВыбора = Ложь;
|
||
|
||
КонецЕсли;
|
||
|
||
Добавлять = Новый Массив;
|
||
|
||
Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка")));
|
||
Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка")));
|
||
|
||
ИзменитьРеквизиты(Добавлять);
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Значение));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
НайденныеСтроки[0].ИмяЭлемента = Идентификатор;
|
||
КонецЕсли;
|
||
|
||
Если СтрСравнить(Значение, НаименованиеПриДобавлениеПроизвольногоПомещения()) <> 0 Тогда
|
||
|
||
ЭтотОбъект[НовыйТип.Имя] = Значение;
|
||
Результат = НовыйЭлемент.Имя;
|
||
|
||
Иначе
|
||
|
||
НайденныеСтроки[0].ПредыдущиеЗначение = "";
|
||
Результат = НовыйТип.Имя;
|
||
|
||
КонецЕсли;
|
||
|
||
ЭтотОбъект[НовыйЭлемент.Имя] = "";
|
||
|
||
НовыйТип.ПутьКДанным = НовыйТип.Имя;
|
||
НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОбновитьДополнительныеЗдания()
|
||
ОтобразитьДополнительныеЗдания();
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ОтобразитьДополнительныеЗдания(НаселенныйПунктДетальноПереопределение = Неопределено)
|
||
|
||
Если НаселенныйПунктДетальноПереопределение <> Неопределено Тогда
|
||
НаселенныйПунктДетально = НаселенныйПунктДетальноПереопределение;
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
Удалять = Новый Массив;
|
||
|
||
КоличествоЭлементов = Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Количество();
|
||
Пока КоличествоЭлементов > 0 Цикл
|
||
|
||
КоличествоЭлементов = КоличествоЭлементов - 1;
|
||
|
||
ЭлементыФормы = Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Получить(КоличествоЭлементов);
|
||
Идентификатор = Сред(ЭлементыФормы.Имя, СтрДлина("ГруппаСтроение") + 1);
|
||
Удалять.Добавить("ТипСтроения" + Идентификатор);
|
||
Удалять.Добавить("Строение" + Идентификатор);
|
||
Элементы.Удалить(Элементы["ГруппаСтроение" + Идентификатор]);
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
НайденныеСтроки[0].ИмяЭлемента = "";
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КоличествоЭлементов = Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Количество();
|
||
Пока КоличествоЭлементов > 0 Цикл
|
||
|
||
КоличествоЭлементов = КоличествоЭлементов - 1;
|
||
ЭлементыФормы = Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Получить(КоличествоЭлементов);
|
||
|
||
Идентификатор = Сред(ЭлементыФормы.Имя, СтрДлина("ГруппаПомещение") + 1);
|
||
Удалять.Добавить("ТипПомещения" + Идентификатор);
|
||
Удалять.Добавить("Помещение" + Идентификатор);
|
||
Элементы.Удалить(Элементы["ГруппаПомещение" + Идентификатор]);
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
НайденныеСтроки[0].ИмяЭлемента = "";
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
ИзменитьРеквизиты(, Удалять);
|
||
|
||
Если ТипЗнч(НаселенныйПунктДетально.buildings) = Тип("Массив") Тогда
|
||
КоличествоЗданий = НаселенныйПунктДетально.buildings.Количество() - 1;
|
||
|
||
Результат = Неопределено;
|
||
Для НомерСтроки = 1 По КоличествоЗданий Цикл
|
||
|
||
Строка = НаселенныйПунктДетально.buildings[НомерСтроки];
|
||
Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-", "");
|
||
|
||
НоваяГруппа = Элементы.Добавить("ГруппаСтроение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаСтроенияДополнительно);
|
||
ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаСтроенияОсновная,, "ПутьКДаннымЗаголовка");
|
||
|
||
НовыйТип = Элементы.Добавить("ТипСтроения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипСтроения.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипСтроенияПриИзменении");
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
НовыйТип.КнопкаВыбора = Истина;
|
||
НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто;
|
||
КонецЕсли;
|
||
|
||
НовыйЭлемент = Элементы.Добавить("Строение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Строение.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_СтроениеПриИзменении");
|
||
НовыйЭлемент.КнопкаВыбора = Ложь;
|
||
|
||
Если НомерСтроки = КоличествоЗданий Тогда
|
||
Результат = НовыйЭлемент.Имя;
|
||
КонецЕсли;
|
||
|
||
Добавлять = Новый Массив;
|
||
Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка")));
|
||
Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка")));
|
||
|
||
ИзменитьРеквизиты(Добавлять);
|
||
ЭтотОбъект[НовыйТип.Имя] = Строка.Type;
|
||
ЭтотОбъект[НовыйЭлемент.Имя] = Строка.Number;
|
||
|
||
НовыйТип.ПутьКДанным = НовыйТип.Имя;
|
||
НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя;
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Строка.Type));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
НайденныеСтроки[0].ИмяЭлемента = Идентификатор;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(НаселенныйПунктДетально.Apartments) = Тип("Массив") Тогда
|
||
КоличествоПомещений = НаселенныйПунктДетально.Apartments.Количество() - 1;
|
||
|
||
Результат = Неопределено;
|
||
Для НомерСтроки = 1 По КоличествоПомещений Цикл
|
||
|
||
Строка = НаселенныйПунктДетально.Apartments[НомерСтроки];
|
||
Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-", "");
|
||
|
||
НоваяГруппа = Элементы.Добавить("ГруппаПомещение" + Идентификатор, Тип("ГруппаФормы"), Элементы.ГруппаПомещенияДополнительно);
|
||
ЗаполнитьЗначенияСвойств(НоваяГруппа, Элементы.ГруппаПомещенияОсновная,, "ПутьКДаннымЗаголовка");
|
||
|
||
НовыйТип = Элементы.Добавить("ТипПомещения" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении");
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
НовыйТип.КнопкаВыбора = Истина;
|
||
НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто;
|
||
КонецЕсли;
|
||
|
||
НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа);
|
||
ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу");
|
||
НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Помещение.СписокВыбора.ВыгрузитьЗначения());
|
||
НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении");
|
||
НовыйЭлемент.УстановитьДействие("НачалоВыбора", "Подключаемый_ПомещениеНачалоВыбора");
|
||
НовыйЭлемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_ПомещениеОбработкаВыбора");
|
||
НовыйЭлемент.УстановитьДействие("АвтоПодбор", "Подключаемый_ПомещениеАвтоПодбор");
|
||
|
||
ЭтоНациональныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)
|
||
Или РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.addressType);
|
||
|
||
НовыйЭлемент.КнопкаВыбора = ЭтоНациональныйАдрес;
|
||
|
||
Если НомерСтроки = КоличествоПомещений Тогда
|
||
Результат = НовыйЭлемент.Имя;
|
||
КонецЕсли;
|
||
|
||
Добавлять = Новый Массив;
|
||
Добавлять.Добавить(Новый РеквизитФормы(НовыйТип.Имя, Новый ОписаниеТипов("Строка")));
|
||
Добавлять.Добавить(Новый РеквизитФормы(НовыйЭлемент.Имя, Новый ОписаниеТипов("Строка")));
|
||
|
||
ИзменитьРеквизиты(Добавлять);
|
||
ЭтотОбъект[НовыйТип.Имя] = Строка.Type;
|
||
ЭтотОбъект[НовыйЭлемент.Имя] = Строка.Number;
|
||
|
||
НовыйТип.ПутьКДанным = НовыйТип.Имя;
|
||
НовыйЭлемент.ПутьКДанным = НовыйЭлемент.Имя;
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Строка.Type));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
|
||
НайденныеСтроки[0].ИмяЭлемента = Идентификатор;
|
||
|
||
Иначе
|
||
|
||
НовоеПомещение = ДополнительныеСтроенияИПомещения.Добавить();
|
||
НовоеПомещение.Тип = "Помещение";
|
||
НовоеПомещение.Значение = НаименованиеПриДобавлениеПроизвольногоПомещения();
|
||
НовоеПомещение.Видимость = Ложь;
|
||
НовоеПомещение.Ключ = "";
|
||
НовоеПомещение.ПредыдущиеЗначение = Строка.Type;
|
||
НовоеПомещение.ИмяЭлемента = Идентификатор;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС)
|
||
|
||
Если ВводНовогоАдреса Тогда
|
||
ТекстИсторическийАдрес = "";
|
||
АдресНаДату = ДействуетС;
|
||
Элементы.ГруппаИсторическийАдрес.Видимость = ЗначениеЗаполнено(ДействуетС);
|
||
Иначе
|
||
|
||
Отбор = Новый Структура("Вид", ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Если НайденныеСтроки.Количество() = 0
|
||
ИЛИ (НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].Представление)) Тогда
|
||
АдресНаДату = Дата(1, 1, 1);
|
||
Элементы.ГруппаИсторическийАдрес.Видимость = Ложь;
|
||
Элементы.ИсторияИзменений.Видимость = Ложь;
|
||
Иначе
|
||
Результат = ОпределитьДатуДействия(ДействуетС, НайденныеСтроки);
|
||
АдресНаДату = Результат.ДействуетС;
|
||
АдресДействуетС = Результат.ДействуетС;
|
||
|
||
Если НЕ ЗначениеЗаполнено(Результат.ДействуетС)
|
||
И ПустаяСтрока(Результат.ТекущаяСтрока.Представление) Тогда
|
||
Элементы.ГруппаИсторическийАдрес.Видимость = Ложь;
|
||
ИначеЕсли ЗначениеЗаполнено(Результат.ДействуетПо) Тогда
|
||
ТекстИсторическийАдрес = " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'действует по %1'"), Формат(Результат.ДействуетПо - 10, "ДЛФ=DD"));
|
||
Иначе
|
||
ТекстИсторическийАдрес = НСтр("ru = 'действует по настоящее время.'");
|
||
КонецЕсли;
|
||
ОтобразитьКоличествоЗаписейВИсторииИзменений();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Элементы.АдресНаДату.РасширеннаяПодсказка.Заголовок = ТекстИсторическийАдрес;
|
||
Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + НачалоУчета() + """'");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОтобразитьКоличествоЗаписейВИсторииИзменений()
|
||
|
||
ВидКИ = ВидКонтактнойИнформации; // см. УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации
|
||
Отбор = Новый Структура("Вид", ВидКИ.Ссылка);
|
||
НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
|
||
Если Параметры.ИзФормыИстории Тогда
|
||
Элементы.ИсторияИзмененийГиперссылка.Видимость = Ложь;
|
||
ИначеЕсли НайденныеСтроки.Количество() > 1 Тогда
|
||
Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'История изменений (%1)'"), НайденныеСтроки.Количество());
|
||
Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина;
|
||
ИначеЕсли НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].ЗначенияПолей) Тогда
|
||
Элементы.ИсторияИзмененийГиперссылка.Видимость = Ложь;
|
||
Иначе
|
||
Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru = 'История изменений'");
|
||
Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ОпределитьДатуДействия(ДействуетС, История)
|
||
|
||
Результат = Новый Структура("ДействуетПо, ДействуетС, ТекущаяСтрока");
|
||
Если История.Количество() = 0 Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
ТекущаяСтрока = Неопределено;
|
||
ДействуетПо = Неопределено;
|
||
Минимум = -1;
|
||
МинимумСравнительный = Неопределено;
|
||
|
||
Для каждого СтрокаИстория Из История Цикл
|
||
Дельта = СтрокаИстория.ДействуетС - ДействуетС;
|
||
Если Дельта <= 0 И (МинимумСравнительный = Неопределено ИЛИ Дельта > МинимумСравнительный) Тогда
|
||
ТекущаяСтрока = СтрокаИстория;
|
||
МинимумСравнительный = Дельта;
|
||
КонецЕсли;
|
||
|
||
Если Минимум = -1 Тогда
|
||
Минимум = Дельта + 1;
|
||
ТекущаяСтрока = СтрокаИстория;
|
||
КонецЕсли;
|
||
Если Дельта > 0 И МодульЧисла(Дельта) < МодульЧисла(Минимум) Тогда
|
||
ДействуетПо = СтрокаИстория.ДействуетС;
|
||
Минимум = МодульЧисла(Дельта);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Результат.ДействуетПо = ДействуетПо;
|
||
Результат.ДействуетС = ТекущаяСтрока.ДействуетС;
|
||
Результат.ТекущаяСтрока = ТекущаяСтрока;
|
||
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция МодульЧисла(Число)
|
||
Возврат Макс(Число, -Число);
|
||
КонецФункции
|
||
|
||
// Параметры:
|
||
// Элемент - ПолеФормы
|
||
//
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ТипСтроенияПриИзменении(Элемент)
|
||
|
||
Идентификатор = Сред(Элемент.Имя, СтрДлина("ТипСтроения") + 1);
|
||
НайденныеСтрокиСтарые = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор));
|
||
Если НайденныеСтрокиСтарые.Количество() > 0 Тогда
|
||
СтароеЗначение = НайденныеСтрокиСтарые[0].Значение;
|
||
КонецЕсли;
|
||
|
||
Значение = ЭтотОбъект[Элемент.Имя];
|
||
|
||
НайденныеСтрокиНовый = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Значение));
|
||
Если НайденныеСтрокиНовый.Количество() > 0 Тогда
|
||
|
||
Если НайденныеСтрокиНовый[0].Видимость = Ложь Тогда
|
||
ЭтотОбъект[Элемент.Имя] = СтароеЗначение; // Такое уже значение есть на форме, откатываем на старое.
|
||
Возврат;
|
||
КонецЕсли;
|
||
НайденныеСтрокиСтарые[0].ИмяЭлемента = "";
|
||
НайденныеСтрокиНовый[0].ИмяЭлемента = Идентификатор;
|
||
КонецЕсли;
|
||
|
||
Для каждого Помещения Из НаселенныйПунктДетально.buildings Цикл
|
||
Если СтрСравнить(Помещения.Type, СтароеЗначение) = 0 Тогда
|
||
Помещения.Type = ЭтотОбъект[Элемент.Имя];
|
||
ОбновитьПредставлениеАдреса();
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Элемент - ПолеФормы
|
||
//
|
||
&НаКлиенте
|
||
Процедура Подключаемый_СтроениеПриИзменении(Элемент)
|
||
|
||
Идентификатор = Сред(Элемент.Имя, СтрДлина("Строение") + 1);
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
Значение = НайденныеСтроки[0].Значение;
|
||
Иначе
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЭтоНовый = Истина;
|
||
Для ИндексПозиции = 0 По НаселенныйПунктДетально.buildings.Количество() - 1 Цикл
|
||
Помещения = НаселенныйПунктДетально.buildings[ИндексПозиции];
|
||
Если СтрСравнить(Помещения.Type, Значение) = 0 Тогда
|
||
Если ЗначениеЗаполнено(ЭтотОбъект[Элемент.Имя]) Тогда
|
||
Помещения.Number = ЭтотОбъект[Элемент.Имя];
|
||
Иначе
|
||
НаселенныйПунктДетально.buildings.Удалить(ИндексПозиции);
|
||
КонецЕсли;
|
||
ЭтоНовый = Ложь;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ЭтоНовый Тогда
|
||
НаселенныйПунктДетально.buildings.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[Элемент.Имя]));
|
||
КонецЕсли;
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Элемент - ПолеФормы
|
||
//
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ТипПомещенияПриИзменении(Элемент)
|
||
|
||
Идентификатор = Сред(Элемент.Имя, СтрДлина("ТипПомещения") + 1);
|
||
НайденныеСтрокиСтарые = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор));
|
||
Если НайденныеСтрокиСтарые.Количество() > 0 Тогда
|
||
СтароеЗначение = НайденныеСтрокиСтарые[0].ПредыдущиеЗначение;
|
||
КонецЕсли;
|
||
|
||
Значение = ПерваяБукваЗаглавная(ЭтотОбъект[Элемент.Имя]);
|
||
Если ПустаяСтрока(Значение) Тогда
|
||
ЭтотОбъект[Элемент.Имя] = СтароеЗначение; // Такое значение есть на форме, откатываем на старое.
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НайденныеСтрокиНовый = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("Значение", Значение));
|
||
Если НайденныеСтрокиНовый.Количество() > 0 Тогда
|
||
|
||
Если НайденныеСтрокиНовый[0].Видимость = Ложь Тогда
|
||
ЭтотОбъект[Элемент.Имя] = СтароеЗначение; // Такое значение есть на форме, откатываем на старое.
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НайденныеСтрокиНовый[0].ИмяЭлемента = Идентификатор;
|
||
НайденныеСтрокиСтарые[0].ИмяЭлемента = "";
|
||
Если СтрСравнить(НайденныеСтрокиСтарые[0].Значение, НаименованиеПриДобавлениеПроизвольногоПомещения()) <> 0 Тогда
|
||
НайденныеСтрокиСтарые[0].ПредыдущиеЗначение = ЭтотОбъект[Элемент.Имя];
|
||
Иначе
|
||
НайденныеСтрокиСтарые[0].ПредыдущиеЗначение = НаименованиеПриДобавлениеПроизвольногоПомещения();
|
||
КонецЕсли;
|
||
Иначе
|
||
|
||
НовоеПомещение = ДополнительныеСтроенияИПомещения.Добавить();
|
||
НовоеПомещение.Тип = "Помещение";
|
||
НовоеПомещение.Значение = Значение;
|
||
НовоеПомещение.Видимость = Ложь;
|
||
НовоеПомещение.Ключ = "";
|
||
НовоеПомещение.ПредыдущиеЗначение = ЭтотОбъект[Элемент.Имя];
|
||
НовоеПомещение.ИмяЭлемента = Идентификатор;
|
||
НайденныеСтрокиСтарые[0].ИмяЭлемента = "";
|
||
|
||
КонецЕсли;
|
||
|
||
Для каждого СвойстваПомещения Из НаселенныйПунктДетально.Apartments Цикл
|
||
Если СтрСравнить(СвойстваПомещения.Type, СтароеЗначение) = 0 Тогда
|
||
СвойстваПомещения.Type = ЭтотОбъект[Элемент.Имя];
|
||
ОбновитьПредставлениеАдреса();
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Элемент - ПолеФормы
|
||
//
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПомещениеПриИзменении(Элемент)
|
||
|
||
Идентификатор = Сред(Элемент.Имя, СтрДлина("Помещение") + 1);
|
||
|
||
НайденныеСтроки = ДополнительныеСтроенияИПомещения.НайтиСтроки(Новый Структура("ИмяЭлемента", Идентификатор));
|
||
Если НайденныеСтроки.Количество() > 0 Тогда
|
||
Если СтрСравнить(НайденныеСтроки[0].Значение, НаименованиеПриДобавлениеПроизвольногоПомещения()) <> 0 Тогда
|
||
Значение = НайденныеСтроки[0].Значение;
|
||
Иначе
|
||
Значение = НайденныеСтроки[0].ПредыдущиеЗначение;
|
||
КонецЕсли;
|
||
Иначе
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЭтоНовый = Истина;
|
||
Для ИндексПозиции = 0 По НаселенныйПунктДетально.Apartments.Количество() - 1 Цикл
|
||
Помещения = НаселенныйПунктДетально.Apartments[ИндексПозиции];
|
||
Если СтрСравнить(Помещения.Type, Значение) = 0 Тогда
|
||
Если ЗначениеЗаполнено(ЭтотОбъект[Элемент.Имя]) Тогда
|
||
Помещения.Number = ЭтотОбъект[Элемент.Имя];
|
||
Иначе
|
||
НаселенныйПунктДетально.Apartments.Удалить(ИндексПозиции);
|
||
КонецЕсли;
|
||
ЭтоНовый = Ложь;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ЭтоНовый Тогда
|
||
НаселенныйПунктДетально.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[Элемент.Имя]));
|
||
КонецЕсли;
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПомещениеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
|
||
|
||
ПоказатьСписокПомещений();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПомещениеОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, ВыборДобавлением, СтандартнаяОбработка)
|
||
|
||
Если ВыбранноеЗначение = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
ЗаполнитьПоляПомещения(ВыбранноеЗначение);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПомещениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
|
||
Если Не АвтоподборДоступен Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Текст) Тогда
|
||
ИдентификаторДома = НаселенныйПунктДетально.houseId;
|
||
Если ЗначениеЗаполнено(ИдентификаторДома) Тогда
|
||
|
||
ДанныеВыбора = СписокАвтоподбораПомещений(ИдентификаторДома, Текст + "%");
|
||
|
||
Если ДанныеВыбора.Количество() > 0 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УдалитьПомещениеИзАдреса(УдаляемыйТипПомещения)
|
||
|
||
Для ИндексПозиции = 0 По НаселенныйПунктДетально.Apartments.Количество() - 1 Цикл
|
||
СведенияОПомещении = НаселенныйПунктДетально.Apartments[ИндексПозиции];
|
||
Если СтрСравнить(СведенияОПомещении.Type, УдаляемыйТипПомещения) =0 Тогда
|
||
НаселенныйПунктДетально.Apartments.Удалить(ИндексПозиции);
|
||
Возврат;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбновитьМенюДобавленияСтроенийИПомещений()
|
||
|
||
Для каждого СтроениеПомещение Из ДополнительныеСтроенияИПомещения Цикл
|
||
|
||
Если ЗначениеЗаполнено(СтроениеПомещение.Ключ) Тогда
|
||
|
||
Если ЗначениеЗаполнено(СтроениеПомещение.ИмяЭлемента)
|
||
Или СтрСравнить(СтроениеПомещение.Значение, ТипПомещения) = 0
|
||
Или СтрСравнить(СтроениеПомещение.Значение, ТипСтроения) = 0 Тогда
|
||
СтроениеПомещение.Видимость = Ложь;
|
||
Элементы["Добавить_"+ СтроениеПомещение.Ключ].Видимость = Ложь;
|
||
Иначе
|
||
СтроениеПомещение.Видимость = Истина;
|
||
Элементы["Добавить_"+ СтроениеПомещение.Ключ].Видимость = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СообщитьОбОшибкахЗаполнения(СписокОшибок, ПредупреждатьОбОтсутствии, ТребуетсяОбновление = Ложь)
|
||
|
||
ОчиститьСообщения();
|
||
|
||
КоличествоОшибок = СписокОшибок.Количество();
|
||
Если КоличествоОшибок = 0 И ПредупреждатьОбОтсутствии Тогда
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.Видимость = Ложь;
|
||
// Нет ошибок
|
||
Если НЕ ВебСервисИспользуется И ТребуетсяОбновление Тогда
|
||
Если ЕстьПравоЗагружатьКлассификатор Тогда
|
||
СообщениеОПроверкеАдреса = НСтр("ru = 'Адрес введен корректно, но адресные сведения, загруженные в приложение, давно не обновлялись.
|
||
|Рекомендуется выполнить обновление и повторить проверку адреса заново.'");
|
||
ВопросОбОбновлениеАдресногоКлассификатора(СообщениеОПроверкеАдреса);
|
||
Иначе
|
||
СообщениеОПроверкеАдреса = НСтр("ru = 'Адрес введен корректно, но адресные сведения, загруженные в приложение,
|
||
|давно не обновлялись. Рекомендуется выполнить обновление и повторить проверку адреса заново.
|
||
|Для обновления адресного классификатора обратитесь к администратору.'");
|
||
ПоказатьПредупреждение(, СообщениеОПроверкеАдреса);
|
||
КонецЕсли;
|
||
Иначе
|
||
ПоказатьПредупреждение(, НСтр("ru = 'Адрес введен корректно'"));
|
||
КонецЕсли;
|
||
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СервисДоступен;
|
||
Элементы.СообщениеОбОшибке.Видимость = Ложь;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если КоличествоОшибок = 1 Тогда
|
||
МестоОшибки = СписокОшибок[0].ИмяПоля;
|
||
Если СписокОшибок[0].АдресПроверен = Ложь И НЕ ВебСервисИспользуется Тогда
|
||
ТекстВопроса = НСтр("ru = 'Адрес не может быть проверен.'") + Символы.ПС
|
||
+ СписокОшибок[0].ТекстОшибки + Символы.ПС + НСтр("ru = 'Загрузить классификатор для проверки адреса?'");
|
||
ПредложениеЗагрузкиКлассификатора(ТекстВопроса);
|
||
Возврат;
|
||
ИначеЕсли ПустаяСтрока(МестоОшибки) Или МестоОшибки = "/" Тогда
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СообщениеОбОшибке;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СообщениеОбОшибке;
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.Видимость = Истина;
|
||
Элементы.СообщениеОбОшибке.Видимость = Истина;
|
||
|
||
Для Каждого Элемент Из СписокОшибок Цикл
|
||
Если Элемент.ВариантАдреса.Количество() > 0 Тогда
|
||
ДополнительныеПараметры = Новый Структура("НовыйАдрес", Элемент.ВариантАдреса[0]);
|
||
Оповещение = Новый ОписаниеОповещения("ПослеВопросаПроЗаменуИсторическогоАдреса", ЭтотОбъект, ДополнительныеПараметры);
|
||
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1
|
||
|Обновить адрес?'"), Элемент.ТекстОшибки);
|
||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
|
||
Возврат;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
// Сообщаем список с привязкой к полям.
|
||
Для Каждого Элемент Из СписокОшибок Цикл
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(
|
||
Элемент.ТекстОшибки,,, Элемент.ИмяПоля);
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеВопросаПроЗаменуИсторическогоАдреса(Результат, ДополнительныеПараметры) Экспорт
|
||
Если Результат = КодВозвратаДиалога.Да Тогда
|
||
ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ДополнительныеПараметры.НовыйАдрес);
|
||
УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально);
|
||
ОбновитьПредставлениеАдреса();
|
||
Модифицированность = Истина;
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеВопросОбОбновление(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат = "ОбновитьКлассификатор" Тогда
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗагрузкиАдресногоКлассификатора", ЭтотОбъект);
|
||
МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент");
|
||
МодульАдресныйКлассификаторКлиент.ПоказатьФормуЗагрузкиАдресногоКлассификатора(ОповещениеОЗакрытие);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОчиститьАдресКлиент()
|
||
|
||
РаботаСАдресамиКлиент.ОчиститьАдрес(НаселенныйПунктДетально);
|
||
ОтобразитьДополнительныеЗдания();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, Знач СведенияОбАдресе, Знач ВключатьУлица)
|
||
|
||
Если СведенияОбАдресе.Свойство("Адрес") И ТипЗнч(СведенияОбАдресе.Адрес) = Тип("Строка") Тогда
|
||
ПолученныйАдрес = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(СведенияОбАдресе.Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
Иначе
|
||
ПолученныйАдрес = ОпределитьАдресПоИдентификатору(СведенияОбАдресе);
|
||
КонецЕсли;
|
||
|
||
Если Не ВключатьУлица Тогда
|
||
ВключатьУлица = ЗначениеЗаполнено(ПолученныйАдрес.street);
|
||
КонецЕсли;
|
||
|
||
ИменаУровнейНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", ВключатьУлица);
|
||
Для каждого ИмяУровня Из ИменаУровнейНаселенногоПункта Цикл
|
||
Если ПолученныйАдрес.Свойство(ИмяУровня) Тогда
|
||
НаселенныйПунктДетально[ИмяУровня] = ПолученныйАдрес[ИмяУровня];
|
||
НаселенныйПунктДетально[ИмяУровня + "Type"] = ПолученныйАдрес[ИмяУровня + "Type"];
|
||
НаселенныйПунктДетально[ИмяУровня + "Id"] = ПолученныйАдрес[ИмяУровня + "Id"];
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ЗначениеЗаполнено(ПолученныйАдрес.houseNumber) Тогда
|
||
ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ПолученныйАдрес,
|
||
"houseNumber,houseType,houseId");
|
||
Иначе
|
||
НаселенныйПунктДетально.houseId = "";
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(ПолученныйАдрес.buildings) = Тип("Массив") И ПолученныйАдрес.buildings.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.buildings = ПолученныйАдрес.buildings;
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(ПолученныйАдрес.apartments) = Тип("Массив") И ПолученныйАдрес.apartments.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.apartments = ПолученныйАдрес.apartments;
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ПолученныйАдрес,
|
||
"areaValue,addressType,admLevels,munLevels,version,stead,steadId");
|
||
|
||
Если ПустаяСтрока(ПолученныйАдрес.street) Тогда
|
||
НаселенныйПунктДетально.streetId = "";
|
||
ИначеЕсли ЗначениеЗаполнено(ПолученныйАдрес.streetId) Тогда
|
||
НаселенныйПунктДетально.id = ПолученныйАдрес.streetId;
|
||
КонецЕсли;
|
||
|
||
РаботаСАдресами.ДобавитьУровеньУлицыДляАдреса(НаселенныйПунктДетально);
|
||
|
||
Если ЗначениеЗаполнено(ПолученныйАдрес.ZipCode) Тогда
|
||
НаселенныйПунктДетально.ZipCode = ПолученныйАдрес.ZipCode;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ПолученныйАдрес.OKTMO) Тогда
|
||
НаселенныйПунктДетально.OKTMO = ПолученныйАдрес.OKTMO;
|
||
КонецЕсли;
|
||
|
||
Если (ЗначениеЗаполнено(НаселенныйПунктДетально.Street)
|
||
И Не ЗначениеЗаполнено(НаселенныйПунктДетально.streetId))
|
||
Или ЗначениеЗаполнено(НаселенныйПунктДетально.HouseNumber)
|
||
Или НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
УстановитьИдентификаторыАдреса(НаселенныйПунктДетально);
|
||
КонецЕсли;
|
||
|
||
ИдентификаторНаселенногоПункта = ИдентификаторАдреса(НаселенныйПунктДетально, Ложь, Ложь);
|
||
СодержитУлицы = РаботаСАдресами.АдресСодержитУлицы(ИдентификаторНаселенногоПункта,
|
||
НаселенныйПунктДетально.AddressType);
|
||
|
||
Возврат СодержитУлицы;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция КодСтраны(Страна)
|
||
СведенияОбАдресе = УправлениеКонтактнойИнформацией.ДанныеСтраныМира(Неопределено, Строка(Страна));
|
||
Если СведенияОбАдресе <> Неопределено Тогда
|
||
Возврат СведенияОбАдресе.Код;
|
||
КонецЕсли;
|
||
|
||
Возврат 0;
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура УстановитьКлючИспользованияФормы()
|
||
КлючСохраненияПоложенияОкна = Строка(Страна);
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
&НаКлиенте
|
||
Процедура ПроверитьДоступностьКлассификатора()
|
||
|
||
Если Не ЕстьЗагруженныйКлассификатор Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Задание = ПроверитьДоступностьКлассификатораВФоне(УникальныйИдентификатор);
|
||
|
||
НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
|
||
НастройкиОжидания.ВыводитьОкноОжидания = Ложь;
|
||
|
||
Обработчик = Новый ОписаниеОповещения("ПослеПроверкиДоступностиКлассификатораВФоне", ЭтотОбъект);
|
||
ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания);
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Результат - см. ДлительныеОперацииКлиент.НовыйРезультатДлительнойОперации
|
||
// ДополнительныеПараметры - Неопределено
|
||
//
|
||
&НаКлиенте
|
||
Процедура ПослеПроверкиДоступностиКлассификатораВФоне(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Результат.Статус = "Выполнено" Тогда
|
||
ДоступностьКлассификатора = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
|
||
Если ДоступностьКлассификатора <> Неопределено Тогда
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = ?(ДоступностьКлассификатора.Отказ,
|
||
Элементы.СервисНедоступен, Элементы.СервисДоступен);
|
||
Если ДоступностьКлассификатора.Отказ Тогда
|
||
ТекстСообщенияСервиса = НСтр("ru = 'Автоподбор и проверка адреса недоступны:'") + Символы.ПС
|
||
+ ДоступностьКлассификатора.КраткоеПредставлениеОшибки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли Результат.Статус = "Ошибка" Тогда
|
||
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура АвторизацияНаСайтеПоддержкиПользователейЗавершение(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат <> Неопределено Тогда
|
||
ОбновитьПовторноИспользуемыеЗначения();
|
||
ПроверитьДоступностьКлассификатора();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// ВыбранноеЗначение - см. АдресныйКлассификаторСлужебный.ОписаниеДомаИЗемельногоУчастка
|
||
//
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПоляДомовСтроенийЗемельныхУчастков(Знач ВыбранноеЗначение)
|
||
|
||
Модифицированность = Истина;
|
||
|
||
НаселенныйПунктДетально.ZIPcode = ВыбранноеЗначение.Индекс;
|
||
НаселенныйПунктДетально.OKTMO = ВыбранноеЗначение.ОКТМО;
|
||
НаселенныйПунктДетально.okato = ВыбранноеЗначение.ОКАТО;
|
||
НаселенныйПунктДетально.ifnsFLCode = ВыбранноеЗначение.КодИФНСФЛ;
|
||
НаселенныйПунктДетально.ifnsULCode = ВыбранноеЗначение.КодИФНСЮЛ;
|
||
НаселенныйПунктДетально.ifnsFLAreaCode = ВыбранноеЗначение.КодУчасткаИФНСФЛ;
|
||
НаселенныйПунктДетально.ifnsULAreaCode = ВыбранноеЗначение.КодУчасткаИФНСЮЛ;
|
||
НаселенныйПунктДетально.codeKLADR = ВыбранноеЗначение.КодКЛАДР;
|
||
|
||
Если СтрСравнить(ТипДома, РаботаСАдресамиКлиентСервер.НаименованиеЗемельногоУчастка()) <> 0 Тогда
|
||
ЗаполнитьПоляДомовИСтроений(ВыбранноеЗначение);
|
||
Иначе
|
||
ЗаполнитьПоляЗемельногоУчастка(ВыбранноеЗначение);
|
||
КонецЕсли;
|
||
|
||
УстановитьМуниципальныеЧастиАдресаИИдентификаторы(НаселенныйПунктДетально, ВыбранноеЗначение);
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// ВыбранноеЗначение - см. АдресныйКлассификаторСлужебный.ОписаниеПомещения
|
||
//
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПоляПомещения(Знач ВыбранноеЗначение)
|
||
|
||
Модифицированность = Истина;
|
||
НаселенныйПунктДетально.Apartments.Очистить();
|
||
|
||
ТипПомещения = ВыбранноеЗначение.ТипПомещения;
|
||
Помещение = ВыбранноеЗначение.НомерПомещения;
|
||
НаселенныйПунктДетально.ApartmentId = ВыбранноеЗначение.ИдентификаторПомещения;
|
||
|
||
ИнформацияОПомещении = ЗначениеСтроенияИлиПомещения(ТипПомещения, Помещение);
|
||
НаселенныйПунктДетально.Apartments.Добавить(ИнформацияОПомещении);
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
ОбработкаИзмененияАдреса(Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// ВыбранноеЗначение - см. АдресныйКлассификаторСлужебный.ОписаниеДомаИЗемельногоУчастка
|
||
//
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПоляДомовИСтроений(Знач ВыбранноеЗначение)
|
||
|
||
НеобходимоПерерисоватьПоляДомов = НаселенныйПунктДетально.buildings.Количество() > 1;
|
||
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение.НомерДома) Тогда
|
||
НаселенныйПунктДетально.HouseNumber = ВыбранноеЗначение.НомерДома;
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение.НаименованиеДома) Тогда
|
||
НаселенныйПунктДетально.HouseType = ПерваяБукваЗаглавная(ВыбранноеЗначение.НаименованиеДома);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
НаселенныйПунктДетально.buildings.Очистить();
|
||
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение.ДополнительныйНомерДома1) Тогда
|
||
СведенияОКорпусе = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(
|
||
ПерваяБукваЗаглавная(ВыбранноеЗначение.НаименованиеДополнительногоДома1), ВыбранноеЗначение.ДополнительныйНомерДома1);
|
||
НаселенныйПунктДетально.buildings.Добавить(СведенияОКорпусе);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение.ДополнительныйНомерДома2) Тогда
|
||
СведенияОКорпусе = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(
|
||
ПерваяБукваЗаглавная(ВыбранноеЗначение.НаименованиеДополнительногоДома2), ВыбранноеЗначение.ДополнительныйНомерДома2);
|
||
НаселенныйПунктДетально.buildings.Добавить(СведенияОКорпусе);
|
||
КонецЕсли;
|
||
|
||
НаселенныйПунктДетально.houseId = ВыбранноеЗначение.ИдентификаторДома;
|
||
|
||
ЗаполнитьУровниДомовИЗемельныхУчастков();
|
||
|
||
// отрисовка
|
||
|
||
Индекс = НаселенныйПунктДетально.ZipCode;
|
||
ОКТМО = НаселенныйПунктДетально.OKTMO;
|
||
|
||
Дом = НаселенныйПунктДетально.HouseNumber;
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseType) Тогда
|
||
ТипДома = НаселенныйПунктДетально.HouseType;
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
Строение = НаселенныйПунктДетально.buildings[0].Number;
|
||
ТипСтроения = НаселенныйПунктДетально.buildings[0].Type;
|
||
Если НаселенныйПунктДетально.buildings.Количество() > 1 Тогда
|
||
НеобходимоПерерисоватьПоляДомов = Истина;
|
||
КонецЕсли;
|
||
Иначе
|
||
Строение = "";
|
||
КонецЕсли;
|
||
|
||
Если НеобходимоПерерисоватьПоляДомов Тогда
|
||
ПодключитьОбработчикОжидания("ОтобразитьДополнительныеЗданияКлиент", 0.1, Истина);
|
||
Иначе
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// ВыбранноеЗначение - см. АдресныйКлассификаторСлужебный.ОписаниеДомаИЗемельногоУчастка
|
||
//
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПоляЗемельногоУчастка(Знач ВыбранноеЗначение)
|
||
|
||
НаселенныйПунктДетально.stead = ВыбранноеЗначение.НомерДома;
|
||
НаселенныйПунктДетально.steadId = ВыбранноеЗначение.ИдентификаторДома;
|
||
|
||
Индекс = НаселенныйПунктДетально.ZipCode;
|
||
ОКТМО = НаселенныйПунктДетально.OKTMO;
|
||
Дом = НаселенныйПунктДетально.stead;
|
||
|
||
НаселенныйПунктДетально.buildings.Очистить();
|
||
Строение = "";
|
||
|
||
ПодключитьОбработчикОжидания("ОтобразитьДополнительныеЗданияКлиент", 0.1, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПерваяБукваЗаглавная(Строка)
|
||
Возврат ВРег(Лев(Строка, 1)) + Сред(НРег(Строка), 2); // Использовать ТРег нельзя.
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОтобразитьДополнительныеЗданияКлиент()
|
||
ИмяТекущего = ОтобразитьДополнительныеЗдания();
|
||
|
||
ОбновитьМенюДобавленияСтроенийИПомещений();
|
||
|
||
Если ИмяТекущего <> Неопределено Тогда
|
||
ТекущийЭлемент = Элементы[ИмяТекущего];
|
||
КонецЕсли;
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ЗаполнитьПредопределенныеВариантыАдреса()
|
||
|
||
Если ЗначениеЗаполнено(Параметры.Индекс) Тогда
|
||
Индекс = Параметры.Индекс;
|
||
НаселенныйПунктДетально.ZipCode = Индекс;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Параметры.Страна) И ПустаяСтрока(НаселенныйПунктДетально.Country) Тогда
|
||
|
||
Если ТипЗнч(Параметры.Страна) = Тип("СправочникСсылка.СтраныМира") Тогда
|
||
Если ЗначениеЗаполнено(Параметры.Страна) Тогда
|
||
Страна = Параметры.Страна; // СправочникСсылка.СтраныМира
|
||
НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование");
|
||
Иначе
|
||
Страна = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана();
|
||
НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование");
|
||
КонецЕсли;
|
||
Иначе
|
||
Страна = УправлениеКонтактнойИнформацией.СтранаМираПоКодуИлиНаименованию(Параметры.Страна);
|
||
Если Страна <> Справочники.СтраныМира.ПустаяСсылка() Тогда
|
||
НаселенныйПунктДетально.Country = Параметры.Страна;
|
||
Иначе
|
||
Страна = РаботаСАдресамиКлиентСервер.ОсновнаяСтрана();
|
||
НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально, СведенияОСтране(Страна), МеждународныйФорматАдреса);
|
||
|
||
КонецЕсли;
|
||
|
||
// Возможные варианты дома, строения, квартиры.
|
||
ВариантыДанныхДом = РаботаСАдресамиПовтИсп.ВариантыДанныхДом();
|
||
УстановитьСписокВыбораЭлемента(Элементы.ТипДома, Элементы.Дом, ВариантыДанныхДом);
|
||
|
||
ВариантыДанныхСтроение = РаботаСАдресамиПовтИсп.ВариантыДанныхСтроение();
|
||
УстановитьСписокВыбораЭлемента(Элементы.ТипСтроения, Элементы.Строение, ВариантыДанныхСтроение);
|
||
|
||
ВариантыДанныхПомещение = РаботаСАдресамиПовтИсп.ВариантыДанныхПомещение();
|
||
УстановитьСписокВыбораЭлемента(Элементы.ТипПомещения, Элементы.Помещение, ВариантыДанныхПомещение);
|
||
Элементы.ТипПомещения.СписокВыбора.НайтиПоЗначению("").Значение = НаименованиеПриДобавлениеПроизвольногоПомещения();
|
||
|
||
// Возможно пустые значения, чтобы не смущали.
|
||
Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда
|
||
ТипДома = ПервыйИлиПустой(Элементы.ТипДома);
|
||
КонецЕсли;
|
||
Если ПустаяСтрока(Строение) И ПустаяСтрока(ТипСтроения) Тогда
|
||
ТипСтроения = ПервыйИлиПустой(Элементы.ТипСтроения);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Параметры.ТипПомещения)
|
||
И ВариантыДанныхПомещение.ВариантыТипа.Найти(Параметры.ТипПомещения) <> Неопределено Тогда
|
||
ТипПомещения = Параметры.ТипПомещения;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Помещение) И ПустаяСтрока(ТипПомещения) Тогда
|
||
ТипПомещения = ПервыйИлиПустой(Элементы.ТипПомещения);
|
||
КонецЕсли;
|
||
|
||
Для каждого ВариантДанных Из ВариантыДанныхСтроение.ВариантыТипа Цикл
|
||
ДобавитьОписаниеСтроенияИлиПомещения(ВариантДанных, "Строение");
|
||
КонецЦикла;
|
||
|
||
Для каждого ВариантДанных Из ВариантыДанныхПомещение.ВариантыТипа Цикл
|
||
|
||
Если ПустаяСтрока(ВариантДанных) Тогда
|
||
ВариантДанных = НаименованиеПриДобавлениеПроизвольногоПомещения();
|
||
КонецЕсли;
|
||
|
||
ДобавитьОписаниеСтроенияИлиПомещения(ВариантДанных, "Помещение", СтрЗаменить(ВариантДанных, "/", ""));
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает первый элемент из списка.
|
||
//
|
||
// Параметры:
|
||
// СписокДанных - СписокЗначений
|
||
// - Массив
|
||
// - ПолеФормы.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Произвольный - первый элемент.
|
||
// Неопределено - нет первого элемента.
|
||
//
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ПервыйИлиПустой(Знач СписокДанных)
|
||
|
||
ТипСписка = ТипЗнч(СписокДанных);
|
||
Если ТипСписка = Тип("СписокЗначений") И СписокДанных.Количество() > 0 Тогда
|
||
Возврат СписокДанных[0].Значение;
|
||
ИначеЕсли ТипСписка = Тип("Массив") И СписокДанных.Количество() > 0 Тогда
|
||
Возврат СписокДанных[0];
|
||
ИначеЕсли ТипСписка = Тип("ПолеФормы") Тогда
|
||
Возврат ПервыйИлиПустой(СписокДанных.СписокВыбора);
|
||
КонецЕсли;
|
||
|
||
Возврат Неопределено;
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СведенияОРегионе(НаименованиеСубъектаРФ, ТипОбъекта)
|
||
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
СведенияОРегионе = МодульАдресныйКлассификаторСлужебный.СведенияОРегионе(НаименованиеСубъектаРФ, ТипОбъекта);
|
||
|
||
Возврат СведенияОРегионе;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ПроверитьДоступностьКлассификатораВФоне(Знач УникальныйИдентификатор)
|
||
|
||
НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
|
||
НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Проверка доступности сервиса адресного классификатора'");
|
||
НастройкиЗапуска.УточнениеОшибки = НСтр("ru = 'Автоподбор и проверка адреса недоступны:'");
|
||
|
||
Возврат ДлительныеОперации.ВыполнитьВФоне(
|
||
"Обработки.РасширенныйВводКонтактнойИнформации.ПроверитьДоступностьКлассификатора",
|
||
Новый Структура,
|
||
НастройкиЗапуска);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ОпределитьАдресПоИдентификатору(СведенияОбАдреса)
|
||
Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокРеквизитовНаселенныйПункт(СведенияОбАдреса);
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Комментарий = "", РазбиватьНаПоля = Ложь)
|
||
|
||
Адрес = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес, РазбиватьНаПоля);
|
||
Адрес.comment = Комментарий;
|
||
Возврат Адрес;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПоказатьАдресВСвободнойФорме()
|
||
|
||
Если Не СведенияОСтране.УчастникЕАЭС Или МеждународныйФорматАдреса Тогда
|
||
ОчиститьАдресКлиент();
|
||
КонецЕсли;
|
||
УдалитьСтрануИзПредставления();
|
||
|
||
НаселенныйПунктДетально.value = ПредставлениеАдреса;
|
||
НаселенныйПунктДетально.addressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме();
|
||
НаселенныйПунктДетально.comment = Комментарий;
|
||
|
||
НаселенныйПунктДетально.country = НаименованиеСтраны(Страна,
|
||
ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).МеждународныйФорматАдреса);
|
||
|
||
Если Элементы.Страна.Доступность Тогда
|
||
Элементы.Страна.Видимость = Не ВидКонтактнойИнформации.ТолькоНациональныйАдрес;
|
||
КонецЕсли;
|
||
|
||
ПереключитьОтображениеАдресВСвободнойФорме();
|
||
|
||
Элементы.АдресВСвободнойФорме.Пометка = Истина;
|
||
Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь;
|
||
Элементы.МуниципальноеДеление.Пометка = Ложь;
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме();
|
||
|
||
ВидимостьПолейИностраногоАдреса(Ложь);
|
||
|
||
ПоказатьПодсказкуПоТипАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПереключитьОтображениеАдресВСвободнойФорме()
|
||
|
||
ЭтоАдресВСвободнойФорме = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType);
|
||
Элементы.ПредставлениеАдреса.ПодсказкаВвода = ?(ЭтоАдресВСвободнойФорме, НСтр("ru = 'Введите или вставьте адрес'"), "");
|
||
Элементы.ПредставлениеАдреса.ТолькоПросмотр = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.Улица.КнопкаВыбора = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.Дом.КнопкаВыбора = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.Строение.КнопкаВыбора = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.Помещение.КнопкаВыбора = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.ТипДома.РедактированиеТекста = ЭтоАдресВСвободнойФорме;
|
||
Элементы.ТипСтроения.РедактированиеТекста = ЭтоАдресВСвободнойФорме;
|
||
Элементы.ТипДома.РежимВыбораИзСписка = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.ТипСтроения.РежимВыбораИзСписка = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СервисДоступен;
|
||
Если Не ЭтоАдресВСвободнойФорме Тогда
|
||
Если Элементы.ТипДома.СписокВыбора.НайтиПоЗначению(ТипДома) = Неопределено Тогда
|
||
ТипДома = ПервыйИлиПустой(Элементы.ТипДома.СписокВыбора);
|
||
КонецЕсли;
|
||
Если Элементы.ТипСтроения.СписокВыбора.НайтиПоЗначению(ТипСтроения) = Неопределено Тогда
|
||
ТипСтроения = ПервыйИлиПустой(Элементы.ТипСтроения.СписокВыбора);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЭтоАдресВСвободнойФорме Тогда
|
||
ВебКлассификаторДоступен = Ложь;
|
||
ИспользуетсяАдресныйКлассификатор = Ложь;
|
||
Иначе
|
||
СведенияОАдресномКлассификаторе = СведенияОАдресномКлассификаторе();
|
||
ЕстьЗагруженныйКлассификатор = СведенияОАдресномКлассификаторе.Получить("ИспользоватьЗагруженные");
|
||
ВебКлассификаторДоступен = СведенияОАдресномКлассификаторе.Получить("КлассификаторДоступен");
|
||
ИспользуетсяАдресныйКлассификатор = СведенияОАдресномКлассификаторе.Получить("ИспользуетсяАдресныйКлассификатор");
|
||
ВебСервисИспользуется = ВебКлассификаторДоступен;
|
||
КонецЕсли;
|
||
АвтоподборДоступен = ИспользуетсяАдресныйКлассификатор И (ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор);
|
||
ЭтоНациональныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)
|
||
Или РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.addressType);
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес И АвтоподборДоступен;
|
||
|
||
Если Не ЭтоНациональныйАдрес() Тогда
|
||
ЭтоАдресВСвободнойФорме = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType);
|
||
Элементы.Улица.Видимость = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.НаселенныйПункт.Видимость = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.Индекс.Видимость = Не ЭтоАдресВСвободнойФорме;
|
||
|
||
Элементы.ГруппаСтроенияИИнформация.Видимость = Не ЭтоАдресВСвободнойФорме;
|
||
Элементы.Улица.КнопкаВыбора = ЭтоНациональныйАдрес;
|
||
|
||
Иначе
|
||
Элементы.Улица.Видимость = Истина;
|
||
Элементы.НаселенныйПункт.Видимость = Истина;
|
||
Элементы.Индекс.Видимость = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СведенияОАдресномКлассификаторе()
|
||
Возврат УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора();
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СписокАвтоподбораНаселенногоПункта(Текст, ТипАдреса)
|
||
|
||
ДополнительныеПараметры = УправлениеКонтактнойИнформациейСлужебный.ПараметрыАвтоподбораАдреса();
|
||
ДополнительныеПараметры.Уровни = "1,2,3,4,5,6,7";
|
||
ДополнительныеПараметры.ТипАдреса = ТипАдреса;
|
||
ДополнительныеПараметры.ПрямойПорядок = Ложь;
|
||
|
||
Результат = Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры);
|
||
УправлениеКонтактнойИнформациейСлужебный.ФорматированиеРезультатовАвтоподбора(Результат.Данные, Текст, ПустаяСтрока(ТипАдреса));
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СписокАвтоподбораУлицы(Текст, ПараметрыАвтоподбора)
|
||
|
||
Результат = Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораУлицы(Текст, ПараметрыАвтоподбора);
|
||
УправлениеКонтактнойИнформациейСлужебный.ФорматированиеРезультатовАвтоподбора(Результат.Данные, Текст, Ложь);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СписокАвтоподбораВариантовДомов(Идентификатор, Текст)
|
||
Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораНомераДомов(Идентификатор, Текст);
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СписокАвтоподбораПомещений(Знач Идентификатор, Знач Текст)
|
||
Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораПомещений(Идентификатор, Текст);
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СписокАвтоподбораЗемельныхУчастков(Идентификатор, Текст)
|
||
Возврат Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораЗемельныхУчастков(Идентификатор, Текст);
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура ПриСозданииНаСервереХранитьИсториюИзменений()
|
||
|
||
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда
|
||
Если ЗначениеЗаполнено(Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов) Тогда
|
||
Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
|
||
НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ);
|
||
КонецЦикла;
|
||
Иначе
|
||
Элементы.ИсторияИзменений.Видимость = Ложь;
|
||
КонецЕсли;
|
||
ВводНовогоАдреса = Параметры.ВводНовогоАдреса;
|
||
Элементы.ИсторияИзмененийГиперссылка.Видимость = НЕ Параметры.ИзФормыИстории;
|
||
Если ВводНовогоАдреса Тогда
|
||
ДействуетС = Параметры.ДействуетС;
|
||
Иначе
|
||
ДействуетС = ?(ЗначениеЗаполнено(Параметры.ДействуетС), Параметры.ДействуетС, ТекущаяДатаСеанса());
|
||
КонецЕсли;
|
||
ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС);
|
||
Иначе
|
||
Элементы.ИсторияИзменений.Видимость = Ложь;
|
||
Элементы.ГруппаИсторическийАдрес.Видимость = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьТипАдресаИзПараметра(ТипАдресаИзПараметра)
|
||
|
||
Если СтрСравнить(ТипАдресаИзПараметра, "АдминистративноТерриториальный") = 0 Или СтрСравнить(ТипАдресаИзПараметра, РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()) = 0 Тогда
|
||
НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес();
|
||
ТипАдреса = РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес();
|
||
ИначеЕсли СтрСравнить(ТипАдресаИзПараметра, "ВСвободнойФорме") = 0 Тогда
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме();
|
||
ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме();
|
||
ИначеЕсли СтрСравнить(ТипАдресаИзПараметра, "ЕАЭС") = 0 Тогда
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС();
|
||
ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС();
|
||
Иначе
|
||
НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес();
|
||
ТипАдреса = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес();
|
||
КонецЕсли;
|
||
|
||
Элементы.ФормаВсеДействияИзмененияАдреса.Видимость = Ложь;
|
||
Элементы.ДекорацияМуниципальный.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
|
||
Элементы.ДекорацияАдминистративноТерриториальный.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ЭтоИностранныйАдрес(ТипАдреса)
|
||
Возврат СтрСравнить(УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(), ТипАдреса) = 0;
|
||
КонецФункции
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ЭтоЗемельныйУчасток(ТипДома)
|
||
Возврат СтрСравнить(РаботаСАдресамиКлиентСервер.НаименованиеЗемельногоУчастка(), ТипДома) = 0;
|
||
КонецФункции
|
||
|
||
// Предлагает загрузить адресный классификатор.
|
||
//
|
||
// Параметры:
|
||
// Текст - Строка - дополнительный текст предложения.
|
||
// Регион - Число
|
||
// - Строка - код или название региона для загрузки.
|
||
//
|
||
&НаКлиенте
|
||
Процедура ПредложениеЗагрузкиКлассификатора(Знач Текст = "", Знач ДанныеОбАдресе = Неопределено)
|
||
|
||
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НеЗагружатьАдресныйКлассификатор = ПараметрыПриложения.Получить("АдресныйКлассификатор.НеЗагружатьКлассификатор");
|
||
Если ДанныеОбАдресе <> Неопределено
|
||
И (НеЗагружатьАдресныйКлассификатор = Неопределено
|
||
ИЛИ НеЗагружатьАдресныйКлассификатор = Ложь) Тогда
|
||
|
||
Регион = ДанныеОбАдресе.Представление;
|
||
ТипПараметраРегиона = ТипЗнч(Регион);
|
||
ПараметрыФормы = Новый Структура;
|
||
ПараметрыЗагрузки = Новый Структура;
|
||
ПараметрыЗагрузки.Вставить("ДанныеОбАдресе", ДанныеОбАдресе);
|
||
ПараметрыФормы.Вставить("ТекстПредупреждения", Текст);
|
||
|
||
Если ТипПараметраРегиона = Тип("Число") Тогда
|
||
ПараметрыЗагрузки.Вставить("КодРегионаДляЗагрузки", Регион);
|
||
|
||
ИначеЕсли ТипПараметраРегиона = Тип("Строка") Тогда
|
||
ПараметрыЗагрузки.Вставить("НазваниеРегиона", Регион);
|
||
ПараметрыФормы.Вставить("НазваниеРегиона", Регион);
|
||
КонецЕсли;
|
||
|
||
ДополнительныеПараметры = Новый Структура;
|
||
ДополнительныеПараметры.Вставить("ПараметрыЗагрузки", ПараметрыЗагрузки);
|
||
ДополнительныеПараметры.Вставить("ПараметрыФормы", ПараметрыФормы);
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
Оповещение = Новый ОписаниеОповещения("ПослеВводаЛогинИПароля", ЭтотОбъект, ДополнительныеПараметры);
|
||
|
||
МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент");
|
||
МодульАдресныйКлассификаторКлиент.АвторизоватьНаСайтеПоддержкиПользователей(Оповещение, ЭтотОбъект);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеВводаЛогинИПароля(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
|
||
|
||
Если РезультатВопроса = Неопределено Тогда
|
||
Оповещение = Новый ОписаниеОповещения("ПредложениеЗагрузкиКлассификатораЗавершение", ЭтотОбъект, ДополнительныеПараметры.ПараметрыЗагрузки);
|
||
ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ЗагрузкаАдресногоКлассификатора",
|
||
ДополнительныеПараметры.ПараметрыФормы, ЭтотОбъект,,,, Оповещение,
|
||
РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
УстановитьНаселенныйПунктПослеВыбора(ДополнительныеПараметры.ПараметрыЗагрузки.ДанныеОбАдресе);
|
||
ОбновитьПовторноИспользуемыеЗначения();
|
||
ВебКлассификаторДоступен = Истина;
|
||
СообщениеОНеобходимостиЗагрузкиКлассификатора();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредложениеЗагрузкиКлассификатораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
|
||
|
||
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
|
||
УстановитьНаселенныйПунктПослеВыбора(ДополнительныеПараметры.ДанныеОбАдресе);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СообщениеОНеобходимостиЗагрузкиКлассификатора()
|
||
|
||
АдресныеСведенияЗагружены = АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона(НаселенныйПунктДетально));
|
||
Если ВебКлассификаторДоступен Или АдресныеСведенияЗагружены.РегионЗагружен Тогда
|
||
Элементы.ГруппаИнформация.Видимость = Ложь;
|
||
Элементы.Дом.КнопкаВыбора = Истина;
|
||
Элементы.Улица.КнопкаВыбора = Истина;
|
||
АвтоподборДоступен = Истина;
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина;
|
||
ИначеЕсли АдресныеСведенияЗагружены.АдресныйКлассификаторДоступен Тогда
|
||
Элементы.ГруппаИнформация.Видимость = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УстановитьНаселенныйПунктПослеВыбора(Знач ДанныеОбАдресе)
|
||
|
||
СодержитУлицы = НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, ДанныеОбАдресе, Ложь);
|
||
Элементы.Улица.ПодсказкаВвода = УстановитьПодсказкуВводаДляУлиц(СодержитУлицы);
|
||
|
||
ОбработкаИзмененияАдреса();
|
||
УстановитьФлагиВМенюПоТипуАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция УстановитьПодсказкуВводаДляУлиц(СодержитУлицы)
|
||
Возврат ?(СодержитУлицы, НСтр("ru = 'Выберите или введите улицу'"), "");
|
||
КонецФункции
|
||
|
||
// Загружает адресный классификатор.
|
||
//
|
||
&НаКлиенте
|
||
Процедура ЗагрузитьАдресныйКлассификатор(Знач ДополнительныеПараметры = Неопределено)
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент");
|
||
МодульАдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция СведенияОСтране(Страна)
|
||
Возврат УправлениеКонтактнойИнформацией.ДанныеСтраныМира(, Страна);
|
||
КонецФункции
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция НаименованиеПриДобавлениеПроизвольногоПомещения()
|
||
Возврат НСтр("ru = 'Другое'");
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ОпределитьЗначениеАдреса()
|
||
|
||
ЗначенияПолей = ?(ЗначениеЗаполнено(Параметры.Значение), Параметры.Значение, Параметры.ЗначенияПолей);
|
||
|
||
Если ПустаяСтрока(ЗначенияПолей) И ЗначениеЗаполнено(Параметры.Представление) Тогда
|
||
ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(Параметры.Представление,
|
||
Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
Модифицированность = Истина;
|
||
КонецЕсли;
|
||
|
||
Возврат ЗначенияПолей;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ИзвлечьСтарыйФорматАдреса(Знач ЗначенияПолей, Знач ТипКонтактнойИнформации)
|
||
|
||
Перем XDTOКонтактная, РезультатыЧтения;
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей)
|
||
И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
|
||
РезультатыЧтения = Новый Структура;
|
||
XDTOКонтактная = УправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения);
|
||
Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда
|
||
// Распознали с ошибками, сообщим при открытии.
|
||
ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки;
|
||
XDTOКонтактная.Представление = Параметры.Представление;
|
||
XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнаяСтрана, "Наименование");
|
||
КонецЕсли;
|
||
Иначе
|
||
XDTOКонтактная = УправлениеКонтактнойИнформациейЛокализация.АдресXMLВXDTO(ЗначенияПолей, Параметры.Представление, );
|
||
Если ЗначениеЗаполнено(Параметры.Страна) Тогда
|
||
Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда
|
||
СтранаСсылка = Параметры.Страна; // СправочникСсылка.СтраныМира
|
||
XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтранаСсылка , "Наименование");
|
||
Иначе
|
||
XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна);
|
||
КонецЕсли;
|
||
Иначе
|
||
XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнаяСтрана, "Наименование");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Параметры.Комментарий <> Неопределено Тогда
|
||
// Ставим новый комментарий, иначе он придет из информации.
|
||
XDTOКонтактная.Комментарий = Параметры.Комментарий;
|
||
КонецЕсли;
|
||
Возврат XDTOКонтактная;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура СформироватьМенюДобавленияСтроенийИПомещений()
|
||
|
||
Для каждого СтроениеИлиПомещение Из ДополнительныеСтроенияИПомещения Цикл
|
||
|
||
Если ЗначениеЗаполнено(СтроениеИлиПомещение.Ключ) Тогда
|
||
ИмяКоманды = "Добавить_" + СтроениеИлиПомещение.Ключ;
|
||
Команда = Команды.Добавить(ИмяКоманды);
|
||
Команда.Подсказка = НСтр("ru = 'Добавить'") + " " + НРег(СтроениеИлиПомещение.Значение);
|
||
Команда.Действие = "Подключаемый_ДобавитьСтроениеИлиПомещение";
|
||
Команда.ИзменяетСохраняемыеДанные = Истина;
|
||
|
||
Группа = ?(СтроениеИлиПомещение.Тип = "Строение", Элементы.ГруппаДобавлениеСтроения, Элементы.ГруппаДобавлениеПомещения);
|
||
Кнопка = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Группа);
|
||
Кнопка.ИмяКоманды = ИмяКоманды;
|
||
Кнопка.Заголовок = СтроениеИлиПомещение.Значение;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ДобавитьОписаниеСтроенияИлиПомещения(ИмяПомещенияИлиСтроения, Тип, Ключ = "")
|
||
|
||
ОписаниеПомещения = ДополнительныеСтроенияИПомещения.Добавить();
|
||
ОписаниеПомещения.Значение = ИмяПомещенияИлиСтроения;
|
||
ОписаниеПомещения.Тип = Тип;
|
||
ОписаниеПомещения.Видимость = Истина;
|
||
ОписаниеПомещения.Ключ = "key" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
|
||
ОписаниеПомещения.ПредыдущиеЗначение = ИмяПомещенияИлиСтроения;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ЗначениеСтроенияИлиПомещения(Тип, Значение)
|
||
Возврат Новый Структура("type, number", Тип, Значение);
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОбновитьПредставлениеАдреса()
|
||
|
||
ПредставлениеИзПолей = ?(Не СведенияОСтране.УчастникЕАЭС Или МеждународныйФорматАдреса, Ложь, Истина);
|
||
ПредставлениеАдреса = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(НаселенныйПунктДетально, ВидКонтактнойИнформации.ВключатьСтрануВПредставление, ,ПредставлениеИзПолей);
|
||
НаселенныйПунктДетально.Value = ПредставлениеАдреса;
|
||
|
||
Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
УдалитьСтрануИзПредставления();
|
||
КонецЕсли;
|
||
|
||
ПоказатьПодсказкуПоТипАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИзменитьСведенияОНаселенномПункте()
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоИностранныйАдресИлиЕАЭС(НаселенныйПунктДетально.AddressType) Тогда
|
||
Если МеждународныйФорматАдреса Тогда
|
||
ЗаполнитьПолеИностранногоАдреса("area", "");
|
||
Иначе
|
||
ЗаполнитьПолеИностранногоАдреса("city", "");
|
||
КонецЕсли;
|
||
Иначе
|
||
ОчиститьНаселенныйПункт();
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(НаселенныйПункт) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
АдресВосстановлен = Ложь;
|
||
ОчиститьИдентификаторыАдреса();
|
||
Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) И Не МеждународныйФорматАдреса Тогда
|
||
|
||
ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь);
|
||
АдресВосстановлен = ВосстановитьНаселенныйПунктАдреса(НаселенныйПункт, НаселенныйПунктДетально, ИменаУровнейАдреса);
|
||
|
||
КонецЕсли;
|
||
|
||
Если Не АдресВосстановлен Тогда
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес();
|
||
ИначеЕсли Не ЭтоРФАдрес() И Не РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда
|
||
|
||
ЗаполнитьПолеИностранногоАдреса("city", НаселенныйПункт);
|
||
ОбновитьПредставлениеАдреса();
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.addressType, Ложь);
|
||
|
||
ПорядокУровнейВАдресе = Новый Массив;
|
||
|
||
Если ИменаУровнейАдреса.Количество() = 1 Тогда
|
||
НаселенныйПунктДетально[ИменаУровнейАдреса[0]] = НаселенныйПункт;
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, ИменаУровнейАдреса[0], ЗначениеЗаполнено(НаселенныйПункт));
|
||
Иначе
|
||
|
||
ЭлементыАдреса = СтрРазделить(НаселенныйПункт, ",", Истина);
|
||
Для ИндексАдреса = 0 По ИменаУровнейАдреса.Количество() - 1 Цикл
|
||
ИмяУровня = ИменаУровнейАдреса[ИндексАдреса];
|
||
|
||
Если ЭлементыАдреса.Количество() > 0 Тогда
|
||
ЗначениеПоля = СокрЛП(ЭлементыАдреса[0]);
|
||
|
||
Если ЭтоРФАдрес() Тогда
|
||
Позиция = СтрНайти(ЗначениеПоля, " ", НаправлениеПоиска.СНачала);
|
||
Иначе
|
||
Позиция = 0;
|
||
КонецЕсли;
|
||
|
||
Если Позиция > 0 Тогда
|
||
НаселенныйПунктДетально[ИмяУровня] = СокрЛП(Сред(ЗначениеПоля, Позиция + 1));
|
||
НаселенныйПунктДетально[ИмяУровня + "Type"] = СокрЛП(Лев(ЗначениеПоля, Позиция));
|
||
Иначе
|
||
НаселенныйПунктДетально[ИмяУровня] = ЗначениеПоля;
|
||
КонецЕсли;
|
||
ЭлементыАдреса.Удалить(0);
|
||
ПорядокУровнейВАдресе.Добавить(ИмяУровня);
|
||
Иначе
|
||
НаселенныйПунктДетально[ИмяУровня] = "";
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType) Тогда
|
||
НаселенныйПунктДетально.munLevels = ПорядокУровнейВАдресе;
|
||
ИмяПоляДругогоТипаАдреса = "admLevels";
|
||
ИменаУровнейДругогоТипаАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(
|
||
РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(), Ложь);
|
||
Иначе
|
||
НаселенныйПунктДетально.admLevels = ПорядокУровнейВАдресе;
|
||
ИмяПоляДругогоТипаАдреса = "munLevels";
|
||
ИменаУровнейДругогоТипаАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(
|
||
РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(), Ложь);
|
||
КонецЕсли;
|
||
|
||
НаселенныйПунктДетально[ИмяПоляДругогоТипаАдреса] = Новый Массив;
|
||
Для каждого ИмяУровня Из ИменаУровнейДругогоТипаАдреса Цикл
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, ИмяУровня, ЗначениеЗаполнено(НаселенныйПунктДетально[ИмяУровня]));
|
||
КонецЦикла;
|
||
|
||
Если ЭлементыАдреса.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально[ИменаУровнейАдреса[ИменаУровнейАдреса.Количество() - 1]] = СокрЛП(СтрСоединить(ЭлементыАдреса, ","));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ВосстановитьНаселенныйПунктАдреса(НаселенныйПункт, НаселенныйПунктДетально, ИменаУровнейАдреса)
|
||
|
||
Результат = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(НаселенныйПункт, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
|
||
Адрес = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Результат, Перечисления.ТипыКонтактнойИнформации.Адрес);
|
||
Если УправлениеКонтактнойИнформацией.АдресВведенВСвободнойФорме(Адрес) Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
Для каждого ИмяУровняАдреса Из ИменаУровнейАдреса Цикл
|
||
НаселенныйПунктДетально[ИмяУровняАдреса] = Адрес[ИмяУровняАдреса];
|
||
НаселенныйПунктДетально[ИмяУровняАдреса + "Type"] = Адрес[ИмяУровняАдреса + "Type"];
|
||
ОбновитьСписокУровней(НаселенныйПунктДетально, ИмяУровняАдреса, ЗначениеЗаполнено(Адрес[ИмяУровняАдреса]));
|
||
КонецЦикла;
|
||
|
||
УстановитьИдентификаторыАдреса(НаселенныйПунктДетально);
|
||
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПоказатьПодсказкуПоТипАдреса()
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес;
|
||
Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь;
|
||
ЦветРамки = Новый Цвет();
|
||
ЦветТекстаПредставления = Новый Цвет();
|
||
ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда
|
||
Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаМуниципальныйАдрес;
|
||
Элементы.ГруппаТребуетсяПомощь.Видимость = Истина;
|
||
ЦветРамки = ЦветФонаФормы;
|
||
ЦветТекстаПредставления = ЦветПоясняющегоТекста;
|
||
ИначеЕсли РаботаСАдресамиКлиент.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда
|
||
Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаАдминистративноТерриториальныйАдрес;
|
||
Элементы.ГруппаТребуетсяПомощь.Видимость = Истина;
|
||
ЦветРамки = ЦветФонаФормы;
|
||
ЦветТекстаПредставления = ЦветПоясняющегоТекста;
|
||
ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаАдресВСвободнойФорме;
|
||
Элементы.ГруппаТребуетсяПомощь.Видимость = Истина;
|
||
ЦветРамки = Новый Цвет();
|
||
ЦветТекстаПредставления = Новый Цвет();
|
||
Иначе
|
||
Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес;
|
||
Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь;
|
||
ЦветРамки = ЦветФонаФормы;
|
||
ЦветТекстаПредставления = ЦветПоясняющегоТекста;
|
||
КонецЕсли;
|
||
|
||
Элементы.ПредставлениеАдреса.ЦветРамки = ЦветРамки;
|
||
Элементы.ПредставлениеАдреса.ЦветТекста = ЦветТекстаПредставления;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаИзмененияАдреса(ОбновитьДополнительныеЗдания = Истина)
|
||
|
||
Если ЭтоНациональныйАдрес() Тогда
|
||
НаселенныйПункт = ПредставлениеНаселенногоПунктаАдреса(НаселенныйПунктДетально);
|
||
Иначе
|
||
РегионИностранногоАдреса = НаселенныйПунктДетально.area;
|
||
РайонИностранногоАдреса = НаселенныйПунктДетально.district;
|
||
НаселенныйПункт = НаселенныйПунктДетально.city;
|
||
ВнутригородскойРайонИностранногоАдреса = НаселенныйПунктДетально.locality;
|
||
КонецЕсли;
|
||
|
||
Улица = ?(ПустаяСтрока(НаселенныйПунктДетально.Street), "",
|
||
УправлениеКонтактнойИнформациейКлиентСервер.СоединитьНаименованиеИТипАдресногоОбъекта(
|
||
НаселенныйПунктДетально.Street, НаселенныйПунктДетально.StreetType));
|
||
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.country) И (ЗначениеЗаполнено(НаселенныйПункт) Или ЗначениеЗаполнено(Улица)) Тогда
|
||
НаселенныйПунктДетально.country = ?(ЗначениеЗаполнено(Страна), Строка(Страна), РаботаСАдресамиКлиентСервер.ОсновнаяСтрана());
|
||
КонецЕсли;
|
||
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
ФорматАдреса = НаселенныйПунктДетально.AddressType;
|
||
Индекс = НаселенныйПунктДетально.ZIPCode;
|
||
ОКТМО = НаселенныйПунктДетально.OKTMO;
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseType) Тогда
|
||
ТипДома = НаселенныйПунктДетально.HouseType;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.stead) Тогда
|
||
Дом = НаселенныйПунктДетально.HouseNumber;
|
||
Иначе
|
||
Дом = НаселенныйПунктДетально.stead;
|
||
ТипДома = РаботаСАдресамиКлиентСервер.НаименованиеЗемельногоУчастка();
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.buildings[0].Type) Тогда
|
||
ТипСтроения = НаселенныйПунктДетально.buildings[0].Type;
|
||
КонецЕсли;
|
||
|
||
Строение = НаселенныйПунктДетально.buildings[0].Number;
|
||
Иначе
|
||
Строение = "";
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.Apartments.Количество() > 0 Тогда
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.Apartments[0].Type) Тогда
|
||
ТипПомещения = НаселенныйПунктДетально.Apartments[0].Type;
|
||
КонецЕсли;
|
||
|
||
Помещение = НаселенныйПунктДетально.Apartments[0].Number;
|
||
|
||
Иначе
|
||
Помещение = "";
|
||
КонецЕсли;
|
||
|
||
УстановитьФлагиВМенюПоТипуАдреса();
|
||
Если ОбновитьДополнительныеЗдания Тогда
|
||
ПодключитьОбработчикОжидания("ОбновитьДополнительныеЗдания", 0.1, Истина);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Комментарий) Тогда
|
||
Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
|
||
Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий);
|
||
Иначе
|
||
Элементы.ОсновныеСтраницы.ТекущаяСтраница = Элементы.СтраницаАдрес;
|
||
Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
|
||
КонецЕсли;
|
||
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПредставлениеНаселенногоПунктаАдреса(Адрес)
|
||
|
||
СписокЗаполненныхУровней = Новый Массив;
|
||
|
||
ПорядокУровнейВАдресе = РаботаСАдресамиКлиентСервер.ИменаУровнейАдресаПоАдресу(Адрес, Ложь);
|
||
|
||
Для каждого ИмяУровня Из ПорядокУровнейВАдресе Цикл
|
||
|
||
Если ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда
|
||
|
||
Если СтрСравнить(ИмяУровня, "street") = 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
СписокЗаполненныхУровней.Добавить(РаботаСАдресамиКлиентСервер.ПредставлениеУровняАдреса(Адрес, ИмяУровня));
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат СтрСоединить(СписокЗаполненныхУровней, ", ");
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура УстановитьФлагиВМенюПоТипуАдреса()
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
Элементы.АдресВСвободнойФорме.Пометка = Истина;
|
||
Элементы.МуниципальноеДеление.Пометка = Ложь;
|
||
Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь;
|
||
ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда
|
||
Элементы.АдресВСвободнойФорме.Пометка = Ложь;
|
||
Элементы.МуниципальноеДеление.Пометка = Истина;
|
||
Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь;
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина;
|
||
ИначеЕсли РаботаСАдресамиКлиент.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда
|
||
Элементы.АдресВСвободнойФорме.Пометка = Ложь;
|
||
Элементы.МуниципальноеДеление.Пометка = Ложь;
|
||
Элементы.АдминистративноТерриториальноеДеление.Пометка = Истина;
|
||
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина;
|
||
Иначе
|
||
Элементы.МуниципальноеДеление.Пометка = Ложь;
|
||
Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь;
|
||
Элементы.АдресВСвободнойФорме.Пометка = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПереключитьНаСтруктурированныйВвод(ТипАдреса = Неопределено)
|
||
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда
|
||
РазрешитьВводАдресаВСвободнойФорме = Ложь;
|
||
ТекстВопроса = НСтр("ru = 'Изменения, введенные вручную, будут потеряны.
|
||
|Исходный адрес будет перемещен в комментарий.
|
||
|Продолжить?'");
|
||
|
||
Если МеждународныйФорматАдреса Тогда
|
||
ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес();
|
||
КонецЕсли;
|
||
|
||
ДополнительныеПараметры = Новый Структура("ТипАдреса", ТипАдреса);
|
||
Оповещение = Новый ОписаниеОповещения("ПереключитьНаСтруктурированныйВводЗавершение", ЭтотОбъект, ДополнительныеПараметры );
|
||
|
||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,, НСтр("ru = 'Подтверждение'"));
|
||
Иначе
|
||
ОтобразитьВыбранныйТипАдреса(ТипАдреса);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПереключитьНаСтруктурированныйВводЗавершение(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат <> КодВозвратаДиалога.Да Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(СокрЛП(ПредставлениеАдреса))
|
||
И СтрНайти(ВРег(Комментарий), ВРег(ПредставлениеАдреса)) = 0 Тогда
|
||
Комментарий = ?(НЕ ПустаяСтрока(Комментарий), Комментарий + Символы.ПС, "")
|
||
+ НСтр("ru = 'Исходный адрес:'") + " " + ПредставлениеАдреса;
|
||
НаселенныйПунктДетально.comment = Комментарий;
|
||
КонецЕсли;
|
||
|
||
ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина);
|
||
|
||
ОтобразитьВыбранныйТипАдреса(ДополнительныеПараметры.ТипАдреса);
|
||
ПереключитьОтображениеАдресВСвободнойФорме();
|
||
ОбновитьПредставлениеАдреса();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОчиститьИдентификаторыАдреса()
|
||
Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл
|
||
Если СтрЗаканчиваетсяНа(ЭлементАдреса.Ключ, "Id") Тогда
|
||
НаселенныйПунктДетально[ЭлементАдреса.Ключ] = "";
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура УстановитьИдентификаторыАдреса(Адрес)
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(Адрес);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ИдентификаторАдреса(Адрес, ВключатьУлицу, ВключатьУровеньДома = Ложь)
|
||
|
||
Возврат РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(Адрес, ВключатьУлицу, ВключатьУровеньДома);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция НайтиИндексУДома(АдресныйОбъект, Дом)
|
||
|
||
ПолныйСписокДомов = Обработки.РасширенныйВводКонтактнойИнформации.СписокДомов(АдресныйОбъект, Дом, 1);
|
||
Если ПолныйСписокДомов.Количество() > 0 Тогда
|
||
Возврат ПолныйСписокДомов[0].Значение.Индекс;
|
||
КонецЕсли;
|
||
|
||
Возврат "";
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьФормуЗагрузкиКлассификатора()
|
||
|
||
ДополнительныеПараметры = Новый Структура();
|
||
|
||
Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("Area") Тогда
|
||
СведенияОРегионе = СведенияОРегионе(НаселенныйПунктДетально.area, НаселенныйПунктДетально.areaType);
|
||
ДополнительныеПараметры.Вставить("КодРегионаДляЗагрузки", СведенияОРегионе.КодСубъектаРФ);
|
||
КонецЕсли;
|
||
|
||
ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура УстановитьМуниципальныеЧастиАдресаИИдентификаторы(НаселенныйПунктДетально, ВыбранноеЗначение)
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
ТипЧисло = Новый ОписаниеТипов("Число");
|
||
ОКТМО = ТипЧисло.ПривестиЗначение(ВыбранноеЗначение.ОКТМО);
|
||
|
||
ЗагруженныеДанные = ВыбранноеЗначение.ЗагруженныеДанные;
|
||
|
||
ЕстьИдентификаторПомещения = Ложь;
|
||
Если НаселенныйПунктДетально.apartments.Количество() = 1 Тогда
|
||
ЕстьИдентификаторПомещения = Истина;
|
||
МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(НаселенныйПунктДетально);
|
||
КонецЕсли;
|
||
|
||
Если ЗагруженныеДанные Тогда
|
||
ИдентификаторАдреса = ИдентификаторАдреса(НаселенныйПунктДетально, Истина);
|
||
Иначе
|
||
Если ЗначениеЗаполнено(ВыбранноеЗначение.ИдентификаторДома) И Не ЕстьИдентификаторПомещения Тогда
|
||
ИдентификаторАдреса = ВыбранноеЗначение.ИдентификаторДома;
|
||
Иначе
|
||
ИдентификаторАдреса = ИдентификаторАдреса(НаселенныйПунктДетально, Истина, Не ЗагруженныеДанные);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
МодульАдресныйКлассификаторСлужебный.УстановитьМуниципальныеСведения(НаселенныйПунктДетально, ОКТМО,
|
||
ИдентификаторАдреса, ЗагруженныеДанные);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура СформироватьТекстНужнаПомощь()
|
||
|
||
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ВидКонтактнойИнформации.ПроверятьКорректность И Не ВидКонтактнойИнформации.МожноИзменятьСпособРедактирования Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ДополнительныйТекст = Символы.ПС + Символы.ПС + НСтр("ru = 'Также адрес можно ввести в свободной форме (см. Еще - Адрес в свободной форме).'");
|
||
|
||
Если ВидКонтактнойИнформации.МожноИзменятьСпособРедактирования И ВидКонтактнойИнформации.ПроверятьКорректность Тогда
|
||
ДополнительныйТекст = ДополнительныйТекст + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||
НСтр("ru = 'Для этого предварительно снять флажок ""Запрещать ввод некорректных адресов"" в виде контактной информации ""%1"".'"),
|
||
ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка);
|
||
КонецЕсли;
|
||
|
||
Элементы.ДекорацияНужнаПомощь.Заголовок = Новый ФорматированнаяСтрока(Элементы.ДекорацияНужнаПомощь.Заголовок, ДополнительныйТекст);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращаемое значение:
|
||
// см. УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации
|
||
//
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ОписаниеВидаКонтактнойИнформации(Форма)
|
||
Возврат Форма.ВидКонтактнойИнформации;
|
||
КонецФункции
|
||
|
||
// Параметры:
|
||
// Страна - Структура
|
||
// Возвращаемое значение:
|
||
// см. УправлениеКонтактнойИнформацией.ДанныеСтраныМира
|
||
//
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ДанныеСтраныМира(Страна)
|
||
Возврат Страна;
|
||
КонецФункции
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция НаименованиеСтраны(Страна, МеждународныйФорматАдреса)
|
||
|
||
СведенияОСтране = СведенияОСтране(Страна);
|
||
|
||
НаименованиеСтраны = СведенияОСтране.Наименование;
|
||
Если МеждународныйФорматАдреса Тогда
|
||
Если ЗначениеЗаполнено(СведенияОСтране.МеждународноеНаименование) Тогда
|
||
НаименованиеСтраны = СведенияОСтране.МеждународноеНаименование;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат НаименованиеСтраны;
|
||
|
||
КонецФункции
|
||
|
||
// Конструкторы
|
||
|
||
&НаКлиенте
|
||
Функция ПараметрыОткрытияФормыНаселенногоПункта()
|
||
|
||
ПараметрыФормы = Новый Структура;
|
||
ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально);
|
||
ПараметрыФормы.Вставить("ОтображатьКнопкиВыбора", ИспользуетсяАдресныйКлассификатор);
|
||
ПараметрыФормы.Вставить("ТипАдреса", ТипАдреса);
|
||
|
||
Возврат ПараметрыФормы;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Функция ПараметрыОткрытияФормаВыбораПоИндексу()
|
||
|
||
ПараметрыФормы = Новый Структура;
|
||
|
||
ПараметрыФормы.Вставить("Индекс", "");
|
||
ПараметрыФормы.Вставить("ВыборАдресаПоПочтовомуИндексу", Истина);
|
||
ПараметрыФормы.Вставить("ТипАдреса", ТипАдреса);
|
||
|
||
Возврат ПараметрыФормы;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция НачалоУчета()
|
||
|
||
Возврат НСтр("ru = 'начало учета'");
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеАвторизоватьНаСайтеПоддержкиПользователей(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат = Неопределено Тогда
|
||
ОткрытьФормуЗагрузкиКлассификатора();
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОбновитьПовторноИспользуемыеЗначения();
|
||
ВебКлассификаторДоступен = Истина;
|
||
СообщениеОНеобходимостиЗагрузкиКлассификатора();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеВыбораУлицы(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если ТипЗнч(Результат) = Тип("Структура") Тогда
|
||
Если Не Результат.Отказ Тогда
|
||
НаселенныйПунктДетально = ОпределитьАдресПоИдентификатору(Результат);
|
||
ОбработкаИзмененияАдреса();
|
||
КонецЕсли;
|
||
Иначе
|
||
ПоказатьПредупреждение(, НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация об улицах для введенного населенного пункта.'"));
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// Результат - см. РаботаСАдресамиКлиентСервер.ВозвращаемыеДанныеОбАдресе
|
||
// ДополнительныеПараметры - Неопределено
|
||
//
|
||
&НаКлиенте
|
||
Процедура ПослеВводаСведенийНаселенногоПункта(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если ТипЗнч(Результат) = Тип("Структура") Тогда
|
||
|
||
НаселенныйПунктДетально = Результат.НаселенныйПунктДетально;
|
||
Элементы.Улица.ПодсказкаВвода = УстановитьПодсказкуВводаДляУлиц(Результат.УАдресаЕстьУлицы);
|
||
ОбработкаИзмененияАдреса();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ЗаполнениеПолейАдресаДляРанееВведенныхАдресов()
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.value) Тогда
|
||
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.areaValue) Тогда
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
|
||
|
||
МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор");
|
||
|
||
Если ПустаяСтрока(НаселенныйПунктДетально.areaCode) Тогда
|
||
НаселенныйПунктДетально.areaCode = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(
|
||
УправлениеКонтактнойИнформациейКлиентСервер.СоединитьНаименованиеИТипАдресногоОбъекта(НаселенныйПунктДетально.area,
|
||
НаселенныйПунктДетально.areaType, Истина))
|
||
КонецЕсли;
|
||
|
||
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
|
||
НаселенныйПунктДетально.areaValue = МодульАдресныйКлассификаторСлужебный.ПолноеНаименованиеРегионаПоКоду(НаселенныйПунктДетально.areaCode);
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.munLevels.Количество() = 0 Тогда
|
||
УровниАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(), Истина);
|
||
Для Каждого УровеньАдреса Из УровниАдреса Цикл
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально[УровеньАдреса]) Тогда
|
||
НаселенныйПунктДетально.munLevels.Добавить(УровеньАдреса);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.houseNumber) Или НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.munLevels.Добавить("house");
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если НаселенныйПунктДетально.admLevels.Количество() = 0 Тогда
|
||
УровниАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(), Истина);
|
||
Для Каждого УровеньАдреса Из УровниАдреса Цикл
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально[УровеньАдреса]) Тогда
|
||
НаселенныйПунктДетально.admLevels.Добавить(УровеньАдреса);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ЗначениеЗаполнено(НаселенныйПунктДетально.houseNumber) Или НаселенныйПунктДетально.buildings.Количество() > 0 Тогда
|
||
НаселенныйПунктДетально.admLevels.Добавить("house");
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УстановитьЗначенияПолейПослеИзмененияПредставления()
|
||
|
||
Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType)
|
||
И Не Элементы.АдресВСвободнойФорме.Пометка Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ПредставлениеАдресаКеш = Неопределено Или (ПредставлениеАдресаКеш = ПредставлениеАдреса
|
||
И ЗначениеЗаполнено(ПредставлениеАдресаКеш)) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
УстановитьЗначенияПолейПослеИзмененияПредставленияНаСервере(ПредставлениеАдреса, НаселенныйПунктДетально);
|
||
ПредставлениеАдресаКеш = ПредставлениеАдреса;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьЗначенияПолейПослеИзмененияПредставленияНаСервере(ПредставлениеАдреса, Знач Адрес = Неопределено)
|
||
|
||
Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType)
|
||
И Не Элементы.АдресВСвободнойФорме.Пометка Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Не СведенияОСтране.УчастникЕАЭС Или МеждународныйФорматАдреса Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ПредставлениеАдресаДоУстановкиРеквизитов = ПредставлениеАдреса;
|
||
СтранаДоИзменения = НаселенныйПунктДетально.country;
|
||
Комментарий = НаселенныйПунктДетально.comment;
|
||
|
||
ДанныеАдреса = РаботаСАдресами.РазложитьПредставлениеАдресаПоПолям(ПредставлениеАдреса, Адрес);
|
||
|
||
НаселенныйПунктДетально = РаботаСАдресами.ПодготовитьАдресДляВвода(ДанныеАдреса);
|
||
НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме();
|
||
НаселенныйПунктДетально.country = ?(ЗначениеЗаполнено(НаселенныйПунктДетально.country),
|
||
НаселенныйПунктДетально.country, СтранаДоИзменения);
|
||
НаселенныйПунктДетально.comment = Комментарий;
|
||
|
||
НаселенныйПункт = "";
|
||
Улица = "";
|
||
Дом = "";
|
||
Строение = "";
|
||
Помещение = "";
|
||
|
||
РазрешитьВводАдресаВСвободнойФормеКеш = РазрешитьВводАдресаВСвободнойФорме;
|
||
УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально);
|
||
ПредставлениеАдреса = ПредставлениеАдресаДоУстановкиРеквизитов;
|
||
РазрешитьВводАдресаВСвободнойФорме = РазрешитьВводАдресаВСвободнойФормеКеш;
|
||
НаселенныйПунктДетально.value = ПредставлениеАдреса;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПроверкаОбновленияПолейПослеИзмененияПредставления()
|
||
Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType)
|
||
И Элементы.АдресВСвободнойФорме.Пометка Тогда
|
||
УстановитьЗначенияПолейПослеИзмененияПредставления();
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти |