В начало

Загрузка телефонов из Иксель

 

            Нужно загрузить номера телефонов из файла формата Иксель в справочник «Физические лица».

 

Рис. Справочник «Физические лица»

 

Рис. Первая строка икселевского файла

 

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

&НаСервере

Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт

            Если ПомещенныеФайлы = Неопределено Тогда

                        Возврат;

            КонецЕсли;

           

            Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл                 

                        РасширениеФайла = "";

                        МассивСтрок = СтрРазделить(ПереданныйФайл.Имя, ".", Ложь);

                        Если МассивСтрок.Количество() > 1 Тогда

                                   РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];

                        КонецЕсли;

                       

                        ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПереданныйФайл.Хранение);       

                        ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);

                        ДвоичныеДанные.Записать(ИмяВременногоФайла);                                   

                       

                        ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла);  

            КонецЦикла;

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

 

Функция УбратьРазделителиВНомереТелефона(ЗначНомерТелефона)

            Поз = Найти(НомерТелефона, ",");

            Если Поз <> 0 Тогда

                        НомерТелефона = Лев(НомерТелефона, Поз-1);

            КонецЕсли;                                                   

           

            НомерТелефона = СтрЗаменить(НомерТелефона, "-", "");

            НомерТелефона = СтрЗаменить(НомерТелефона, " ", "");//пробел

            НомерТелефона = СтрЗаменить(НомерТелефона, " ", "");//непонятный пробел!

            НомерТелефона = СтрЗаменить(НомерТелефона, "+", "");

 

            Возврат НомерТелефона;

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

 

Функция НайтиНомерТелефона(ЗначвхТел, ЗначвхТабл) 

            Если НЕ ЗначениеЗаполнено(вхТабл) Тогда

                        Возврат Ложь;

            КонецЕсли;

           

            Для Каждого Эл Из вхТабл Цикл

                        Если Эл.НомерТелефона = вхТел Тогда

                                   Возврат Истина;

                        КонецЕсли;

            КонецЦикла; 

           

            Возврат Ложь;

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

 

&НаСервере

Процедура ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла)       

            ТабличныйДокумент = Новый ТабличныйДокумент;

            ТабличныйДокумент.Прочитать(ИмяВременногоФайла);

           

            Построитель = Новый ПостроительЗапроса;

            Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());

            Построитель.Выполнить();

           

            ТЗ = Построитель.Результат.Выгрузить();

           

            //Загружаем "ТЗ" в "ТабДок"

            Объект.ТабДок.Загрузить(ТЗ);

           

            //Обрабатываем данные

            Для НомерСтроки = 2 По ТабличныйДокумент.ВысотаТаблицы Цикл

                        Фамилия = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 3).Текст);

                        Имя = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 4).Текст);

                        Отчество = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 5).Текст);   

                        НомерТелефона = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 6).Текст);

                       

                        //Чистим номер телефона

                        НомерТелефона = УбратьРазделителиВНомереТелефона(НомерТелефона);

                       

                        Если СтрДлина(НомерТелефона) <> 11 Тогда

                                   Продолжить;

                        КонецЕсли;    

                       

                       

                        СпрСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию(Фамилия + " " + Имя + " " + Отчество);

                        Если НЕ СпрСсылка.Пустая() Тогда

                                   //Если СтрНайти(СпрСсылка.Телефоны, НомерТелефона,,,) = 0 Тогда

                                   Если НЕ НайтиНомерТелефона(НомерТелефона, СпрСсылка.КонтактнаяИнформация) Тогда

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

                                              

                                               НоваяСтрока = СпрОбъект.КонтактнаяИнформация.Добавить();

                                               НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;                     

                                              

                                               Если СтрНайти(НомерТелефона, "8495") > 0 Тогда

                                                           НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера;

                                               Иначе

                                                           НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;

                                               КонецЕсли;

                                              

                                               НоваяСтрока.Представление = НомерТелефона;

                                               НоваяСтрока.НомерТелефона = НомерТелефона;

                                               НоваяСтрока.НомерТелефонаБезКодов = НомерТелефона;           

                                              

                                               СпрОбъект.Записать();

                                   КонецЕсли;    

                        КонецЕсли;    

            КонецЦикла;   

           

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

 

&НаКлиенте

Процедура ВыбратьФайл(Команда)

            ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

            ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

            ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Лист MicrosoftExcel'; en = 'Лист MicrosoftExcel'") + "(*.xlsx)|*.xlsx;*.xls";

           

            ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтаФорма);   

            НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

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