|
Помощь с написанием обработки проверка email адресов контрагентов | ☑ | ||
---|---|---|---|---|
0
matrix_ekb
02.09.19
✎
12:56
|
Всем добрый день!
Только вникаю в 1с, в плане написания чего-либо, надо написать обработку, которая будет проверять правильность написания email адресов контрагентов, выдернул из модуля ОбщегоНазначенияКлиентСервер код проверки // Функция проверяет, что введенная строка с e-mail адресами введена правильно. // // Формат строки: // Z = ИмяПользователя|[Имя Пользователя] [<]пользователь@почтовый_сервер[>], Строка = Z[<разделитель*>Z]. // // Прим.: разделитель* - имеется ввиду любой разделитель адресов. // // Параметры: // СтрокаПереданныхАдресов - Строка - правильная строка с почтовыми адресами. // ВызыватьИсключение - Булево - необходимо передать Ложь, чтобы в случае неуспешного разбора не выдавалось исключение. // // Возвращаемое значение: // Структура - результат разбора: // * Статус - Булево - успех или неуспех преобразования // * Значение - Массив - (параметр доступен, если Статус = Истина) коллекция адресов в виде структур: // ** Адрес - Строка - e-mail получателя. // ** Представление - Строка - имя получателя. // * СообщениеОбОшибке - Строка - (параметр доступен, если Статус = Ложь) информация об ошибке. // // ВАЖНО: Функция возвращает массив структур, в которых одно поле (любое) // может быть незаполнено. Может использоваться различными // подсистемами для собственного сопоставления имени пользователя // некому e-mail адресу. Поэтому, необходимо перед непосредственной // отправкой проверить, что поле почтового адреса заполнено. // Функция РазобратьСтрокуСПочтовымиАдресами(Знач СтрокаПереданныхАдресов, ВызыватьИсключение = Истина) Экспорт Результат = Новый Массив; НедопустимыеСимволы = "!#$%^&*()`~|\/="; СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ ""%1"" в адресе электронной почты ""%2""'"); СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты ""%1""'"); СтрокаПереданныхАдресов = СтрЗаменить(СтрокаПереданныхАдресов, ",", ";"); МассивПодстрокКОбработке = СтрРазделить(СокрЛП(СтрокаПереданныхАдресов), ";", Ложь); Для Каждого СтрокаАдреса Из МассивПодстрокКОбработке Цикл Индекс = 1; // Номер обрабатываемого символа. Накопитель = ""; // Накопитель символов, после анализа перемещается либо в полное имя // либо в почтовый адрес. ПолноеИмяАдресата = ""; // Переменная, накапливающая имя адресата. ПочтовыйАдрес = ""; // Переменная, накапливающая e-mail адрес // 1 - формирование полного имени: ожидаются любые допустимые символы имени адресата // 2 - формирование почтового адреса: ожидаются любые допустимые символы email адреса // 3 - завершение формирования очередного почтового адреса - ожидаются символы разделители либо пробелы. СтадияРазбора = 1; Пока Индекс <= СтрДлина(СтрокаАдреса) Цикл Символ = Сред(СтрокаАдреса, Индекс, 1); Если Символ = " " Тогда Индекс = ? ((ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1) > Индекс, ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1, Индекс); Если СтадияРазбора = 1 Тогда ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель + " "; ИначеЕсли СтадияРазбора = 2 Тогда ПочтовыйАдрес = Накопитель; СтадияРазбора = 3; КонецЕсли; Накопитель = ""; ИначеЕсли Символ = "@" Тогда Если СтадияРазбора = 1 Тогда СтадияРазбора = 2; Для ИндексПоискаНС = 1 По СтрДлина(Накопитель) Цикл Если СтрНайти(НедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1)) > 0 И ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1),СтрокаАдреса); КонецЕсли; КонецЦикла; Накопитель = Накопитель + Символ; ИначеЕсли СтадияРазбора = 2 И ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); ИначеЕсли СтадияРазбора = 3 И ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); КонецЕсли; Иначе Если СтадияРазбора = 2 ИЛИ СтадияРазбора = 3 Тогда Если СтрНайти(НедопустимыеСимволы, Символ) > 0 И ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы,Символ,СтрокаАдреса); КонецЕсли; КонецЕсли; Накопитель = Накопитель + Символ; КонецЕсли; Индекс = Индекс + 1; КонецЦикла; Если СтадияРазбора = 1 Тогда ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель; ИначеЕсли СтадияРазбора = 2 Тогда ПочтовыйАдрес = Накопитель; КонецЕсли; Если ПустаяСтрока(ПочтовыйАдрес) И (Не ПустаяСтрока(ПолноеИмяАдресата)) И ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса, ПолноеИмяАдресата); ИначеЕсли СтрЧислоВхождений(ПочтовыйАдрес, "@") <> 1 И ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,ПочтовыйАдрес); КонецЕсли; Если НЕ (ПустаяСтрока(ПолноеИмяАдресата) И ПустаяСтрока(ПочтовыйАдрес)) Тогда Результат.Добавить(ПроверитьИПодготовитьПочтовыйАдрес(ПолноеИмяАдресата, ПочтовыйАдрес)); КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции Создаю внешнюю обработку, на кнопку выполнить запихиваю этот код и ничего не происходит, я так понимаю чего-то не хватает? Подскажите пожалуйста, что исправить. |
|||
1
Lokli
02.09.19
✎
13:01
|
Функция? На кнопку?
На кнопку надо вешать процедуру. И в этой процедуре делать вызов функции. А вот что ты будешь делать с возвращаемым значением, решай сам. |
|||
2
catena
02.09.19
✎
13:03
|
А что должно происходить в вашем понимании?
|
|||
3
matrix_ekb
02.09.19
✎
13:41
|
(1) я же говорю, только вникать пытаюсь, с процедурой понял, буду смотреть как это делается
(2) как вижу это: при нажатии кнопки выполнить, обработка проверяет всех контрагентов на корректность написания почтового адреса, и в случае обнаружения ошибок выводить список контрагентов |
|||
4
catena
02.09.19
✎
13:49
|
(3)Где в коде вывод списка?
|
|||
5
Kigo_Kigo
02.09.19
✎
13:58
|
(3) ну обрабатывает функция строку с емейлами, разделенными запятой, где вы тут контрагентов то нашли?
|
|||
6
Lokli
02.09.19
✎
14:00
|
(3) Необходимо внимательно прочитать описание функции.
Там видно, что на вход функции подаётся строка специального формата. Данную строку необходимо как-то получить. Например, перебрать все контактные данные контрагентов и почтовые адреса из них преобразовать в строку. После вызова функции на выходе получить структуру, которую так же необходимо как-то обработать... Я буду пессимистом и порекомендую вам нанять специалиста за денежку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |