В начало

Ввод телефонов с проверкой

 

            В справочнике есть форма элемента, на которой есть реквизит «F1_ТелефонСтрока», в который нужно добавить или удалить телефон в определенном формате «81231234567».

 

Листинг. Модуль формы элемента справочника

&НаСервере

Функция СписокТелефоновИзСтроки(Знач СписокТелефоновСтрокой)

            м = СтрРазделить(СписокТелефоновСтрокой, ";", Ложь);

            сз = Новый СписокЗначений;

           

            Для Каждого Эл Из М Цикл

                        Если ЗначениеЗаполнено(Эл) Тогда

                                   СЗ.Добавить(Эл, Эл);

                        КонецЕсли;

            КонецЦикла;

 

            Возврат сз;    

КонецФункции

 

&НаКлиенте

Процедура ИзменитьСписокТелефонов(Команда)

            Параметры1 = Новый Структура("СЗ", СписокТелефоновИзСтроки(Объект.F1_ТелефонСтрока));

            Параметры1.Вставить("СсылкаНаЛС", Объект.Ссылка);   

            ОповещениеТелефонов = Новый ОписаниеОповещения("ИзменитьСписокТелефонов_Завершение", ЭтотОбъект, Новый Структура);

            ОткрытьФорму("Справочник.Партнеры.Форма.СписокТелефонов", Параметры1, ЭтаФорма,,,,ОповещениеТелефонов,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры

 

&НаКлиенте

Процедура ИзменитьСписокТелефонов_Завершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт  

            ЭтаФорма.Прочитать();//Чтобы обновить форму элемента справочника

КонецПроцедуры

 

            Изменять список телефонов будем в отдельной форме. Далее приведена форма ввода списка телефонов.

Рис. Форма ввода списка телефонов

 

            Для открытия формы модальном режиме нужно или установить свойство формы РежимОткрытияОкнаФормы = БлокироватьОкноВладельца или установить данный параметр при программном открытии.

 

Рис. Установка модального режима формы «СписокТелефонов»

 

            Примечательно, что работает или подсказка или маска ввода.

 

Рис. Пример маски ввода и подсказки ввода

 

Листинг. Модуль формы ввода телефонов

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)           

            Параметры.Свойство("СЗ", СЗ);

            Параметры.Свойство("СсылкаНаЛС", СсылкаНаЛС);   

КонецПроцедуры

 

Функция УдалитьСимволСКонца(Знач СтрВх)

            СтрВх = СокрЛП(СтрВх);

            Если Прав(СтрВх, 1) = ";" Тогда

                        Возврат Сред(СтрВх, 1, СтрДлина(СтрВх)-1);

            Иначе

                        Возврат СтрВх;

            КонецЕсли;  

КонецФункции

 

&НаСервере

Функция СЗвСтроку(Знач СЗ)

стр = "";

Если ЗначениеЗаполнено(СЗ) Тогда

            Для Каждого Эл Из СЗ Цикл

                        Если ЗначениеЗаполнено(Эл.Представление) Тогда

                                   тек = СтрЗаменить(Эл.Представление, "+7", "8");

                                   тек = СтрЗаменить(тек, " ", "");

                                   тек = СтрЗаменить(тек, "-", "");

                                   тек = СтрЗаменить(тек, "(", "");

                                   тек = СтрЗаменить(тек, ")", "");

                                  

                                   стр = стр + Тек + ";";

                        КонецЕсли;

            КонецЦикла;

КонецЕсли;

           

Возврат УдалитьСимволСКонца(стр);

КонецФункции        

           

&НаСервере

Процедура СохранитьСписокНаСервере()       

            Об = ЭтотОбъект.СсылкаНаЛС.ПолучитьОбъект();

            Об.F1_ТелефонСтрока = СЗвСтроку(СЗ);

            Об.Записать();

КонецПроцедуры

 

&НаКлиенте

Процедура СохранитьСписок(Команда)

            СохранитьСписокНаСервере();

            ЭтаФорма.Закрыть();

КонецПроцедуры

 

&НаКлиенте

Процедура ЗакрытьФорму(Команда)

            ЭтаФорма.Закрыть();

КонецПроцедуры

 

&НаКлиенте

Процедура ДобавитьНовыйТелефон(Команда)

 

            Если Лев(НовыйТелефон, 1) = "8" И

                        СтрДлина(НовыйТелефон) = 11 Тогда

                        СЗ.Добавить(НовыйТелефон, НовыйТелефон);

            Иначе

                        Сообщить("Неправильный формат телефона, нужно вводить 11 цифр, начиная с 8-ки");

            КонецЕсли;

           

КонецПроцедуры