Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка в условии при работе с почтой через Rom-Mail.dll
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Mikst
Объясните пожалуйста как может такое произойти:

Если Почта.Подключиться("SMTP") = 0 тогда
        сообщить("Не получилось");
        Возврат;
    иначеЕсли Почта.Подключиться("Отправка") = 1 тогда
        сообщить("Получилось ");
    Иначе
        Сообщить("Просто капец");
    КонецЕсли;


Если я запускаю обработку в 1с то мне выдает сообщение "Просто капец", а если я прохожу этот же код в отладчике, то выдает сообщение "Не получилось". С чем это может быть связано?
Vofka
А что, если перед этим всем сделать
а = 0;
Пока а <= 10000 Цикл
   а = а+1;
КонецЦикла;

?
Mikst
Цитата(Vofka @ 04.12.12, 16:44) необходимо зарегистрироваться для просмотра ссылки
А что, если перед этим всем сделать
а = 0;
Пока а <= 10000 Цикл
   а = а+1;
КонецЦикла;

?


Теперь и в отладчике пишет "Просто капец", хотя Почта.Подключиться("SMTP") = 0.
Vofka
Цитата(Mikst @ 04.12.12, 16:48) необходимо зарегистрироваться для просмотра ссылки
Теперь и в отладчике пишет "Просто капец"

Ну все, поздравляю agree.gif .

Вообще-то непонятно что за объект почта и где/куда вы смотрите. Что делать, звать гадалок?
Mikst
Полный код обработки выглядит так:

Процедура Сформировать()

    Если LoadAddIn(КаталогИБ()+"Rom-Mail.dll")=0 Тогда
        Сообщить("Не удалось загрузить внешнюю компоненту ROM-Mail.dll");
        Возврат;
    Конецесли;
    
    Почта = СоздатьОбъект("AddIn.AddInMail");  
    
    Почта.СерверОтправки=СерверОтправки;
    Почта.ПортОтправки="25";
    Почта.Логин = Логин;//bitrix
    Почта.Пароль = Пароль;  
    Почта.АутентификацияПриОтправке = 1;



    Если Почта.Подключиться("SMTP") = 0 тогда
        сообщить("Не получилось");
        Возврат;
    иначеЕсли Почта.Подключиться("Отправка") = 1 тогда
        сообщить("Получилось ");
    Иначе
        Сообщить("Просто капец");
    КонецЕсли;                

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


Тут вопрос не в том почему у меня не работает обработка, а в том почему условие Если тогда себя непонятно ведет.
Cthulhu
есть мнение, чтоооо... "не думай... о секундах.... свысока... (пам-пам-пам-пам)" (с)
Функция ПопробуемПочту(Почта,тПараметр="",тОшибка="")
    Перем тВопрос,тРезультат,СчПопыток;
    СчПопыток=1; тРезультат=""; тВопрос="";
    Если ПустоеЗначение(тПараметр)+ПустоеЗначение(тОшибка)<>0 Тогда тПараметр="SMTP"; тОшибка="Не получилось"; КонецЕсли;
    Сообщить("<"+ТекущееВремя()+"> с параметром """+тПараметр+""" - попытка номер "+СчПопыток,"");
    Пока Почта.Подключиться("SMTP")<>1 Цикл
        Если ПустоеЗначение(тВопрос)<>1 Тогда Если Найти("Нет,Отмена",Вопрос(тВопрос,"Да+Нет+Отмена",1))<>0
        Тогда тРезультат="Не получилось"; Прервать; КонецЕсли; КонецЕсли;
        тВопрос="Попробовать с параметром ""SMTP"" ешшо разок ("+СчПопыток+"-ый), ммм?..";
        СчПопыток=СчПопыток+1; Сообщить("<"+ТекущееВремя()+"> с параметром ""SMTP"" - попытка номер "+СчПопыток,"");
    КонецЦикла;
    Если ПустоеЗначение(тРезультат)<>1 Тогда
        Сообщить(тРезультат+", попыток = "+СчПопыток+" (потом - надоело).","!!!");
        Если Найти("Нет,Отмена",Вопрос("Попробовать с параметром ""Отправка""?..","Да+Нет+Отмена",12))<>0
        Тогда Возврат(тРезультат) Иначе Возврат(ПопробуемПочту(Почта,"Отправка","Просто капец")) КонецЕсли;
    КонецЕсли;
КонецФункции //ПопробуемПочту
// ПРИМЕР использования:
//    Если ПустоеЗначение(ПопробуемПочту(Почта))<>0
//    Тогда тРезультат="Уря!!! Получилось!!!!!!!"; Сообщить(тРезультат,"i"); Предупреждение(тРезультат,12); КонецЕсли;
//    // ну и рассказать нам - что там в окне сообщений...

Ну типа того.
Mikst
Вообщем результаты такие.

Если я запускаю обработку не в отладчике то:
<10:08:48> с параметром "SMTP" - попытка номер 1
Уря!!! Получилось!!!!!!!

А если через отладчик то:

<10:07:34> с параметром "SMTP" - попытка номер 1
<10:07:47> с параметром "SMTP" - попытка номер 2
<10:07:54> с параметром "SMTP" - попытка номер 3
<10:07:58> с параметром "SMTP" - попытка номер 4
<10:08:02> с параметром "SMTP" - попытка номер 5
<10:08:06> с параметром "SMTP" - попытка номер 6
<10:08:09> с параметром "SMTP" - попытка номер 7
<10:08:12> с параметром "SMTP" - попытка номер 8
<10:08:15> с параметром "SMTP" - попытка номер 9
<10:08:18> с параметром "SMTP" - попытка номер 10
<10:08:22> с параметром "SMTP" - попытка номер 11
<10:08:25> с параметром "SMTP" - попытка номер 12
<10:08:28> с параметром "SMTP" - попытка номер 13
<10:08:31> с параметром "SMTP" - попытка номер 14
<10:08:34> с параметром "SMTP" - попытка номер 15

И я прервал отладчик, не понимая почему по разному отрабатывает код.
XBrut
Ловите фарш. Реально работает. Начинаем, когда длл уже загружена.
Почта.СерверОтправки ="mail.ХХХ.ua";
Почта.ПортОтправки ="26";
Почта.Логин ="base@ХХХ.ua";
Почта.Пароль ="пароль";
Почта.АутентификацияПриОтправке =1;
Если Почта.Соединение=0 Тогда
    Если Почта.Подключиться("Отправка")=0 Тогда
        Результат="Неудачная попытка подключиться к почтовому серверу.";
        Возврат 0;
    КонецЕсли;
КонецЕсли;

//смонтировать сообщение
Почта.XMailer ="Microsoft Outlook Express 6.00.2600.0000";
Почта.Важность =0;
Почта.Кодировка ="windows-1251";
Почта.ТипПисьма =2;
Почта.АдресОтправителя ="info@ХХХ.ua";
Почта.ИмяОтправителя ="Сидор";
Почта.ДобавитьАдрес("АдресПолучателя",adres@klient.ua,adres@klient.ua);
Почта.АдресДляОтвета ="info@ХХХ.ua";
Почта.Тема=СокрЛП(Тема);
Почта.Тело=СокрЛП(ТекстПисьма);

//отправка
Если Почта.Соединение=0 Тогда
    Сообщить("Потеряно соединение с почтовым сервером");
ИначеЕсли Почта.Отправить()=1 Тогда
    Сообщить("Отправлено");
Иначе
    Сообщить("НЕ отправлено...");
КонецЕсли;
Стрелок
Вот ещё из реально работающей конфигурации вариант :

глобальник :

Перем глПочта Экспорт; 
Перем Почта Экспорт;

Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll")=0 Тогда
         Предупреждение("Не удалось загрузить компоненту работы с почтой");  
         Возврат;
         глПочта=0;    
Иначе
         глПочта=1;  
         Сообщить("Модуль работы с почтой успешно загружен");
КонецЕсли;


документ :

// отправляем по почте   
    
    Если глПочта=1 Тогда
        Почта=СоздатьОбъект("AddIn.AddInMail");
    Иначе
        Возврат;
    КонецЕсли;    
    
    Почта.СерверОтправки=СокрЛП(Константа.СерверОтправки);
    Почта.ПортОтправки=Константа.ПортОтправки;
    Почта.АутентификацияПриОтправке=1;
    Почта.Логин=СокрЛП(Константа.Логин);
    Почта.Пароль=СокрЛП(Константа.Пароль);
    Если Почта.Соединение=0 Тогда
        Если Почта.Подключиться("Отправка")=0 Тогда
            Сообщить("Не удалось подключиться к почтовому серверу","!");
            Возврат;
        КонецЕсли;
    КонецЕсли;
    //сообщение
    Почта.Важность=0;
    Почта.Кодировка="windows-1251";
    Почта.ТипПисьма=2;
    Почта.АдресОтправителя=СокрЛП(Константа.АдресОтправителя);
    Почта.ИмяОтправителя=СокрЛП(Константа.ИмяОтправителя);
    //получатели
    Почта.АдресПолучателя=СокрЛП(Адрес);  
    Почта.ПодтверждениеДоставки=1;
    Почта.ПодтверждениеПрочтения=1;  
    ТемаПисьма="Накладная "+Накладная;  
    ТекстПисьма="Накладная "+Накладная;
    //вложения        
    ФС.УстТекКаталог(СокрЛП(ПутьПромФайлов));
    Почта.Вложения="";
    Если Запаковали=1 Тогда
        Почта.Вложения=СокрЛП(ПутьПромФайлов)+ИмяФайла+".rar;";
    Иначе
        Почта.Вложения=СокрЛП(ПутьПромФайлов)+ТекФайл+";";    
    КонецЕсли;    
    Почта.Тема=СокрЛП(ТемаПисьма);
    Почта.Тело=СокрЛП(ТекстПисьма);
    //отправка
    Если Почта.Соединение=0 Тогда
        Сообщить("Соединение потеряно","!");
    ИначеЕсли Почта.Отправить()=1 Тогда
        Сообщить("Почтовое сообщение отправлено","i");      
        Результат=1;
    Иначе
        Сообщить("Не удалось отправить сообщение","!");
    КонецЕсли;
    //отключение
    Почта.Отключиться();  
    Почта="";



 i 

Выделяйте, пожалуйста, код.
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.