|
Функция ПроверкаФорматаТелефонаИзЕДС(Знач Телефон)
Телефон = СтрЗаменить(Телефон,
"(", "");
Телефон = СтрЗаменить(Телефон,
")", "");
Телефон = СтрЗаменить(Телефон,
"-", "");
Телефон = СтрЗаменить(Телефон,
" ", "");
Если СтрДлина(Телефон)
<> 11 ИЛИ
Лев(Телефон, 1) <> "8"
Тогда
Возврат ЛОЖЬ;
Иначе
Возврат ИСТИНА;
КонецЕсли;
КонецФункции
&НаСервере
Функция ПроверкаТелефонаВЛС(Знач ЛС, Знач Телефон)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Партнеры.Ссылка КАК Ссылка
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Ссылка = &Ссылка
| И
Партнеры.F1_ТелефонСтрока ПОДОБНО &Телефон";
Запрос.УстановитьПараметр("Ссылка",
ЛС);
Запрос.УстановитьПараметр("Телефон",
"%" + Телефон + "%");
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий()
Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции//ПроверкаТелефонаВЛС
&НаСервере
Функция ПолучитьСсылкуНаЛС(Знач стрФИО, Знач стрКодФИАС)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Партнеры.Ссылка КАК Ссылка
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.F1_Дом.КодДомаПоФИАС
= &КодФИАС
| И
Партнеры.F1_ФИО = &ФИО";
Запрос.УстановитьПараметр("ФИО",
стрФИО);
Запрос.УстановитьПараметр("КодФИАС", стрКодФИАС);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий()
Тогда
Возврат Выборка.Ссылка;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции//ПолучитьСсылкуНаЛС
&НаСервере
Процедура ЗагрузитьТелефоны_ИзТЗ(Знач тзТелефоны)
//============================
//Колонки ТЗ
//============================
//1 - ФИО
//2 - КодФИАС
//3 - Телефоны
Для Каждого ТекСтр Из тзТелефоны Цикл
//==============
//Строковые
//==============
стрФИО = ТекСтр.ФИО;
стрКодФИАС = ТекСтр.КодФИАС;
стрТелефоны = ТекСтр.Телефоны;
//=====================
//Преобразование типов
//=====================
//дДатаОплаты = СтрокуВДату(стрДатаОплаты);
мТелефоны = СтрРазделить(стрТелефоны,
";", Ложь);
Если НЕ ЗначениеЗаполнено(стрФИО) ИЛИ
НЕ ЗначениеЗаполнено(стрКодФиас) ИЛИ
НЕ ЗначениеЗаполнено(стрТелефоны) Тогда
ПРОДОЛЖИТЬ;
КонецЕсли;
//============
//Ссылки
//============
ссЛС = ПолучитьСсылкуНаЛС(стрФИО, стрКодФИАС);
Если НЕ ЗначениеЗаполнено(ссЛС) Тогда
ПРОДОЛЖИТЬ;
КонецЕсли;
//===================================
//Проверяем телефон в
ЛС и добавляем,
//если его нет
//===================================
Для Каждого ТекТел
Из мТелефоны Цикл
НаличиеТелефонаВДЗФЗ
= ПроверкаТелефонаВЛС(ссЛС, ТекТел);
ПроверкаФормата
= ПроверкаФорматаТелефонаИзЕДС(ТекТел);
Если НЕ НаличиеТелефонаВДЗФЗ
И
ПроверкаФормата
Тогда
обЛС
= ссЛС.ПолучитьОбъект();
Если ЗначениеЗаполнено(ссЛС.F1_ТелефонСтрока) Тогда
Если
Прав(ссЛС.F1_ТелефонСтрока, 1) <> ";" Тогда
обЛС.F1_ТелефонСтрока
= ссЛС.F1_ТелефонСтрока + ";" + ТекТел;
Иначе
обЛС.F1_ТелефонСтрока
= ссЛС.F1_ТелефонСтрока + ТекТел;
КонецЕсли;
Иначе
обЛС.F1_ТелефонСтрока
= ТекТел;
КонецЕсли;
Попытка
обЛС.Записать();
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;//мТелефоны
КонецЦикла;//тзТелефоны
КонецПроцедуры
&НаСервере
Функция ЗагрузитьТелефоны_ИзВремФайла_вТЗ(ИмяВремФайла)
//Создаем Табличный
документ для перебора
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ИмяВремФайла);
//Заголовки таблицы
Заголовки = "";
Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
Заголовки = Заголовки + НомерКолонки
+ " " + СокрЛП(ТабличныйДокумент.Область(1,
НомерКолонки).Текст) + Символы.ПС;
Если ТабличныйДокумент.ШиринаТаблицы
<> 7 Тогда
КонецЕсли;
КонецЦикла;
//============================
//Колонки файла с Телефонами
//============================
//1 ФИО
//2 КодФИАС
//3 Телефоны
тзТелефоны = Новый ТаблицаЗначений;
тзТелефоны.Колонки.Добавить("ФИО");//1
тзТелефоны.Колонки.Добавить("КодФИАС");//2
тзТелефоны.Колонки.Добавить("Телефоны");//3
Если ТабличныйДокумент.Области.Количество()
> 1 Тогда
//Зафиксировать
ошибку
КонецЕсли;
//Перебор строк
Для НомерСтроки = 2 По ТабличныйДокумент.ВысотаТаблицы Цикл
иксФИО = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 1).Текст);
иксКодФИАС = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 2).Текст);
иксТелефоны = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 3).Текст);
//=======================
//Добавляем строку в
ТЗ
//=======================
Если НЕ ЗначениеЗаполнено(иксФИО) ИЛИ
НЕ ЗначениеЗаполнено(иксКодФИАС) ИЛИ
НЕ ЗначениеЗаполнено(иксТелефоны) Тогда
ПРОДОЛЖИТЬ;
КонецЕсли;
СтрокаТЗ = тзТелефоны.Добавить();
СтрокаТЗ.ФИО = иксФИО;
СтрокаТЗ.КодФИАС
= иксКодФИАС;
СтрокаТЗ.Телефоны
= иксТелефоны;
КонецЦикла;//Перебор строк
Если ЗначениеЗаполнено(тзТелефоны) Тогда
Возврат тзТелефоны;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
&НаСервере
Процедура ЗагрузитьТелефоны(Знач ДвоичныеДанныеФайла)
НачалоЗагрузки = ТекущаяДата();
ИмяВремФайлаНаСервере = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанныеФайла.Записать(ИмяВремФайлаНаСервере);
тзТелефоны = ЗагрузитьТелефоны_ИзВремФайла_вТЗ(ИмяВремФайлаНаСервере);
тзТелефоны.Свернуть("ФИО,
КодФИАС, Телефоны", );
Если ЗначениеЗаполнено(тзТелефоны)
Тогда
ЗагрузитьТелефоны_ИзТЗ(тзТелефоны);
КонецЕсли;
РегистрыСведений.ЖурналЗагрузкиДанных.ЗаписатьВЖурналЗагрузкиДанных("Загрузка
телефонов из ЕДС", ИмяВремФайлаНаСервере, ТекущаяДата() - НачалоЗагрузки,
тзТелефоны.Количество());
УдалитьФайлы(ИмяВремФайлаНаСервере);//Удаляем
временные файлы
КонецПроцедуры//ЗагрузитьТелефоны
&НаСервере
Функция СозданиеИнтернетПрофиля(Знач ТекЯщик)
ПочтовыйПрофиль
= Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.ВремяОжидания
= 300;
// Исходящая почта
//Если ФормироватьIMAPПрофиль
Тогда
ПочтовыйПрофиль.АдресСервераIMAP
= ТекЯщик.АдресСервераIMAP;
ПочтовыйПрофиль.ПользовательIMAP
= ТекЯщик.ПользовательIMAP;
ПочтовыйПрофиль.ПарольIMAP = ТекЯщик.ПарольIMAP;
ПочтовыйПрофиль.ПортIMAP = ТекЯщик.ПортIMAP;
Попытка
ПочтовыйПрофиль.ИспользоватьSSLIMAP
= Истина;
Исключение
КонецПопытки;
//КонецЕсли;
//Если ФормироватьSMTPПрофиль
Тогда
ПочтовыйПрофиль.АдресСервераSMTP = ТекЯщик.АдресСервераSMTP;
ПочтовыйПрофиль.ПортSMTP = ТекЯщик.ПортSMTP;
ПочтовыйПрофиль.ПользовательSMTP = ТекЯщик.ПользовательSMTP;
ПочтовыйПрофиль.ПарольSMTP = ТекЯщик.ПарольSMTP;
ПочтовыйПрофиль.АутентификацияSMTP
= СпособSMTPАутентификации.Login;
Попытка
//ПочтовыйПрофиль.ИспользоватьSSLSMTP
= Истина;
Исключение
КонецПопытки;
//
Входящая почта
//Если
ФормироватьPOP3Профиль Тогда
//ПочтовыйПрофиль.АдресСервераPOP3
= "pop.mail.ru";
//ПочтовыйПрофиль.Пользователь
= "user";
//ПочтовыйПрофиль.Пароль
= ЭтаФорма.Пароль;
//ПочтовыйПрофиль.ПортPOP3 = 995;
//ПочтовыйПрофиль.АутентификацияPOP3
= СпособPOP3Аутентификации.Обычная;
Попытка
//ПочтовыйПрофиль.ИспользоватьSSLPOP3
= Истина;
Исключение
КонецПопытки;
Возврат ПочтовыйПрофиль;
КонецФункции
&НаСервере
Функция ПолучитьПисьмаСПочтовогоСервера(Знач ТекЯщик)
Профиль = СозданиеИнтернетПрофиля(ТекЯщик);
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль,
ПротоколИнтернетПочты.IMAP);
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
мПисьма = Новый Массив;
мПисьма = Почта.Выбрать(Ложь);
Если мПисьма.Количество()
> 0 Тогда
стПисьма = Новый
Структура;
стПисьма.Вставить("Почта",
Почта);
стПисьма.Вставить("мПисьма", мПисьма);
Возврат стПисьма;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции//ПолучитьПисьмаСПочтовогоСервера
&НаСервере
Процедура ПрочитатьПочтуНаСервере(Знач ТекЯщик)
стПисьма = ПолучитьПисьмаСПочтовогоСервера(ТекЯщик);
Если ЗначениеЗаполнено(стПисьма) Тогда
мПисьма = стПисьма.мПисьма;
Почта = стПисьма.Почта;
Иначе
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(мПисьма) Тогда
Для Каждого Эл Из мПисьма
Цикл
Тема = Эл.Тема;
Вложения = Эл.Вложения;
Если ЗначениеЗаполнено(Вложения)
Тогда
Для Каждого Вл Из Вложения Цикл
ИмяФайла = Вл.ИмяФайла;
Данные =
Вл.Данные;
//===================================
//XSLX-файл
с телефонами
//===================================
Если СтрНайти(ИмяФайла, ".xlsx") > 0 Тогда
ЗагрузитьТелефоны(Данные);
КонецЕсли;
КонецЦикла;//Вложения
КонецЕсли;
КонецЦикла;//Письма
КонецЕсли;
//Массивы для удаления
сообщений
мСообщений = Новый Массив;
мИД = Новый Массив;
Для Каждого Эл Из мПисьма
Цикл
мСообщений.Добавить(Эл);
мИД.Добавить(Эл.Идентификатор[0]);
КонецЦикла;
//Удаляем почту
Почта.УдалитьСообщения(мПисьма);//Достаточно так
//Почта.УдалитьСообщения(мСообщений);
//Почта.УдалитьСообщения(мИД);
Почта.ОчиститьУдаленныеСообщения();//Для IMAP
Почта.Отключиться();
КонецПроцедуры
&НаСервере
Процедура ПереборЯщиков()
Выборка = Справочники.НастройкиДляЗагрузкиТелефоновИзЕДС.Выбрать();
Пока Выборка.Следующий() Цикл
Если НЕ Выборка.ПометкаУдаления
Тогда
ПрочитатьПочтуНаСервере(Выборка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
////////////////////////////////////////////
Функция ДляРегламентногоЗадания() Экспорт
ПереборЯщиков();
КонецФункции
|