Имя: Пароль:
1C
1С v8
Помощь с написанием обработки проверка 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) Необходимо внимательно прочитать описание функции.
Там видно, что на вход функции подаётся строка специального формата. Данную строку необходимо как-то получить. Например, перебрать все контактные данные контрагентов и почтовые адреса из них преобразовать в строку.  
После вызова функции на выходе получить структуру, которую  так же необходимо как-то обработать...
Я буду пессимистом и порекомендую вам нанять специалиста за денежку.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.