Имя: Пароль:
1C
1C 7.7
v7: Обработка Внешнего События
0 lavalit
 
19.09.14
13:40
Привет всем!
Если кто сталкивался с такой задачкой.
Почему во внешней ВК Не срабатывает ОбработкаВнешнегоСобытия(Источник,Событиеп,Данные)?
Коротенько по сути дела:
Есть внешка, которая отправляет почтовое сообщение из 1С. Написана в виде ВК с применением DialMail. Все вроде хорошо, но иногда надо получить сообщение от сервера если вдруг сообщение не ушло (по сути код ошибки). Раньше пользовал внешку на базе РОММАЙЛ, который благополучно почил в связи с переходом некоторых провайдеров (не будем говорить, что это таки Яндекс))) ) на SSL. РомМайл был попроще и либо отправлял либо нет..по большей части отправлял конечно же.  немногословный, но надежный. Жаль, что роммайл уже не попользовать.
1 varelchik
 
19.09.14
15:01
(0)Чет не совсем понятно причем здесь внешнеесобытие?
2 lavalit
 
19.09.14
15:15
Ну как же. Когда пользуешь вот это самое ДиалМайл, то можно отслеживать сколько уже ушло почты (в смысле сколько байткилобайт), с каким результатом (всякие обрывы сети и потеря инета в целом .. ну и .т.д.) так вот все это можно увидеть аккурат в этом самом событии... если все происходит в обычной обработке , то так оно и есть. а вот если ВК.. то хрен она туда заходит ваще.
3 varelchik
 
19.09.14
16:03
а нахрена тебе эта ВК?
4 lavalit
 
19.09.14
17:22
Да я ж уже говорил, что надо почту слать по яндуксу а они страшные такие перешли на SSL раньше у меня был ROMMAIL для этих целей, но он не умеет по SSL... вот и пришлось переходить на DialMail он умеет, но у него свои заморочки с механизьмом отсылки почты. Ну я конечно могу ее сделать и не на ВК а просто на внешней обработке... больше переписывать просто... "Ромик" то работал как ВК, вот и вздумалось просто подменить одну ВК на другую. Исходные данные все равно одни и те же ничего нового. Было удобно в три строки
Создал Объект,
Запустил,
Получил результат что все улетело. если кому надо..
все...
5 lavalit
 
19.09.14
17:25
а с дималом не так просто все... когда большой файл идет, то надо следить когда оно улетит.. икак раз в Этой самой Обработке внешнего события все и видно, в реквизите событие, которое может быть типа отправляется, готово , ошибка ну т.д.
6 lavalit
 
23.09.14
09:44
Задачка решена
7 lavalit
 
02.10.14
11:08
РЕШЕНО
8 aka AMIGO
 
02.10.14
11:12
плохо, когда форумчанин в поиске решения, заходит в ветку, а там - пустота..

что значит: "задачка решена"? неуж так трудно написать кратенько, как пришел к решению, что использовал, как настроил, что получил..
9 lavalit
 
02.10.14
13:40
(8) да вродь не интересовался никто... Но нет не жалко конечно
Результаты:
ОбработкаВнешнегоСобытия() по ходу в ВК не заходит в принципе своем, только в обычной обработке.
При этом в обработке на кнопу "выполнить" надо вешать не процедуру а функцию.
Ну собственно и все
Вот укороченный код:

Функция ОтправитьСообщение()
//Здесь код отправки почты.. ооочень длинный поентому только концовочка
Если ОтправкаПочты.ОтправитьВсеПисьма(1,1,1)=-100 тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции

Функция НачатьОтправку()
    Если ОтправитьСообщение()<>0 тогда
        ОшибкаОтправки=0;
        Возврат 1;
    КонецЕсли;
    Возврат 0;
КонецФункции
// здесь уж код по полной ради чего оно и хотелось то
// взял из примера, который был здесь: http://1c-asu.ru/index.php/otraslevye-resheniya/asu-pochtalon/alternativnye-pochtovye-programmy/95-komponenta-dialmail-s-primerami-na-7-7

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
    Если Источник="SMTP" тогда
        
        Если ВРЕГ(СокрЛП(Событие))="SEND" тогда
            Если ВРЕГ(СокрЛП(Данные))="BEGIN" тогда
            ИначеЕсли ВРЕГ(СокрЛП(Данные))="DONE" тогда
                Если ОтправкаПочты.ПоследняяОшибка<>0 тогда
                    СтатусОтправки = "Ошибка " + СокрЛП(ОтправкаПочты.ПоследняяОшибка)+" ("+ОтправкаПочты.ПоследняяОшибкаСтр+")"+"
                                     |Последний ответ сервера: " + ОтправкаПочты.ПоследнийОтветСервера;      
                Сообщить(СтатусОтправки);
                Если СтрокаСтатуса<>0 Тогда
                    Форма.Параметр.УстановитьЗначение(СтрокаСтатуса,СтатусОтправки,"СтатусОтправки");
                КонецЕсли;
                КонецЕсли;
                СтатусОтправки = "Сообщение отправлено"+"( "+СокрЛП(Отправили)+"/"+СокрЛП(ВсегоПисемНаКомпьютере)+" )";
                Подсказка = "Сообщения отправлены";
                Форма.Обновить();
                Если СтрокаСтатуса<>0 Тогда
                    Форма.Параметр.УстановитьЗначение(СтрокаСтатуса,СтатусОтправки,"СтатусОтправки");
                    Форма.Закрыть();
                Иначе
                    Предупреждение(СтатусОтправки);
                    Подсказка="";
                КонецЕсли;
                Возврат;
            КонецЕсли;
            х=ОтправкаПочты.ОтправленоВБайтах/ОбщаяДлинаОтправка*СтрДлина(Индик);
            ИндикаторОтправки=Лев(Индик,СтрДлина(Индик)-х);
            Форма.Обновить();
        ИначеЕсли ВРЕГ(СокрЛП(Событие))="SENDED" тогда
            х=ОтправкаПочты.ОтправленоВБайтах/ОбщаяДлинаОтправка*СтрДлина(Индик);
            ИндикаторОтправки=Лев(Индик,СтрДлина(Индик)-х);
            Отправили=Отправили+1;
            ;
        ИначеЕсли ВРЕГ(СокрЛП(Событие))="ERROR" тогда
            СтатусОтправки = (Данные+"  "+СокрЛП(ОтправкаПочты.ПоследняяОшибка)+" ("+ОтправкаПочты.ПоследняяОшибкаСтр+")")+"
                             |Последний ответ сервера: " + ОтправкаПочты.ПоследнийОтветСервера;
            Сообщить(СтатусОтправки);
            Если СтрокаСтатуса<>0 Тогда
                Форма.Параметр.УстановитьЗначение(СтрокаСтатуса,СтатусОтправки,"СтатусОтправки");
            КонецЕсли;
            ОшибкаОтправки=1;
            Возврат;  
            Форма.Обновить()
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Ошибка? Это не ошибка, это системная функция.