//******************************************************************************
Функция СоздатьSMTP_ROBOT (ДляПриема = 0)
Попытка
Если (ДляПриема = 0) Тогда
SMTP_ROBOT = СоздатьОбъект("AddIn.SMTP");
Иначе
SMTP_ROBOT = СоздатьОбъект("AddIn.Pop3");
КонецЕсли;
Возврат (SMTP_ROBOT);
Исключение
Сообщить (ОписаниеОшибки ());
Возврат ("err");
КонецПопытки;
Возврат ("");
КонецФункции
//
//******************************************************************************
Функция глВернутьПутьКСохраняемомуФайлу (КаталогВложений, НомерДок) Экспорт
КаталогВложений = КаталогИБ () + "MessageSMTP";
GUID = Прав (ТекущееВремя (), 2);
Вложения = КаталогВложений + "\SendMessage_" + СОКРЛП (НомерДок) + "_" + СОКРЛП (GUID) + ".xls";
Возврат (Вложения);
КонецФункции
//
//******************************************************************************
Функция глОтправитьПоПочтеОстаткиНаСкладе (ВхДатаОстатков, ФильтрСклад) Экспорт
Перем КаталогВложений;
ДатаОстатков = мин (ВхДатаОстатков, ПОлучитьДатуТА ());
ЛогинОбмена = СОКРЛП(Константа.ЛогинОбменаПолучательАвтоОстаткиСклад);
Если (ПустаяСтрока (ЛогинОбмена) = 1) Тогда
Возврат (0);
КонецЕсли;
Тема = "Остатки на " + Строка (ДатаОстатков) + " по складу " + СОКРЛП (ФильтрСклад);
Тело = Тема;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ЗапросПоОстаткамДляВнешенгоЗапроса)
|Период с ДатаОстатков по ДатаОстатков;
|МПЗ = Регистр.МестаХранения.МПЗ;
|МестоХранения = Регистр.МестаХранения.МестоХранения;
|Количество = Регистр.МестаХранения.Количество;
|Функция КонОст = КонОст(Количество);
|Группировка МПЗ без групп;
|Условие(МестоХранения = ФильтрСклад);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат (0);
КонецЕсли;
Табл = СоздатьОбъект ("Таблица");
Табл.ИсходнаяТаблица ("ОстаткиТМЦ");
Табл.Опции (0, 0, 4, 0);
Табл.ТолькоПросмотр (1);
Табл.ВывестиСекцию ("Шапка");
Пока Запрос.Группировка(1) = 1 Цикл
Табл.ВывестиСекцию ("Строка");
КонецЦикла;
Табл.ВывестиСекцию ("Подвал");
Вложения = глВернутьПутьКСохраняемомуФайлу(КаталогВложений, "ОстаткиТМЦПоЗапросу");
Табл.Записать (Вложения, "xls");
Ответ = 0;
Если (ФС.СуществуетФайл (Вложения) = 1) Тогда
Попытка
//
SMTP_ROBOT = СоздатьSMTP_ROBOT (0);
Если (SMTP_ROBOT = "") Тогда
Возврат (0);
ИначеЕсли (SMTP_ROBOT = "err") Тогда
Возврат (0);
КонецЕсли;
//
SMTP_ROBOT.РабочийКаталог = СокрЛП(КаталогВложений);
SMTP_ROBOT.УстановитьКодировкуИСпособКодирования(14, 1);
SMTP_ROBOT.MakeContentDescriptionTag = 0;
SMTP_ROBOT.ПочтоваяПрограмма = "1С 7.7.";
SMTP_ROBOT.ИспользоватьПрокси = 0;
SMTP_ROBOT.ИспользоватьSSL = Константа.ИспользоватьSSL;
SMTP_ROBOT.ИспользоватьTSL = Константа.ИспользоватьTSL;
SMTP_ROBOT.ВестиЛогФайл = 1;
SMTP_ROBOT.ИмяЛогФайла = КаталогИБ () + "LogDialMail.txt";
//
SMTP_ROBOT.СоздатьПисьмо (СокрЛП(Константа.ЛогинОтправки),
СокрЛП(ЛогинОбмена),
"",
СОКРЛП(Тема),
"1С 7.7.",
СОКРЛП(Тело),
Вложения);
//
Если (SMTP_ROBOT.Подключиться(СокрЛП(Константа.СерверОтправки),
Константа.ПортОтправки,
СокрЛП(Константа.ЛогинОтправки),
СокрЛП(Константа.ПарольОтправки),
3) = 0) Тогда
Сообщить ("Не удалось подключиться к почтовому серверу");
Ответ = 0;
SMTP_ROBOT.ОчиститьРабочийКаталог();
Перейти ~Выход;
КонецЕсли;
//
НомерПисьма = 1;
Пока (SMTP_ROBOT.КоличествоПисемВРабочемКаталоге > 0) цикл
Если (SMTP_ROBOT.ОтправитьПисьмо(1,1) SMTP_ROBOT.УдалитьПисьмоИзРабочегоКаталога();
SMTP_ROBOT.ОчиститьРабочийКаталог();
Возврат (0);
КонецЕсли;
НомерПисьма = НомерПисьма + 1;
КонецЦикла;
//
SMTP_ROBOT.Отключиться();
//
SMTP_ROBOT.ОчиститьРабочийКаталог();
//
Ответ = 1;
//
Исключение
Ответ = 0;
КонецПопытки;
~Выход:
Если (ФС.СуществуетФайл (Вложения) = 1) Тогда
ФС.УдалитьФайл (Вложения);
КонецЕсли;
КонецЕсли;
Возврат (Ответ);
КонецФункции
//
//******************************************************************************
Функция ПроверитьНаПочтеЗапросНаВыдачуОстатков ()
Если (Константа.StopОтправкиСкладскихОстатков = 1) Тогда
Возврат (0);
КонецЕсли;
Если (ПустаяСтрока (Константа.СерверПолучения) = 0) И (ПустаяСтрока (Константа.ЛогинПолучения) = 0) И (ПустаяСтрока (Константа.ПарольПолучения) = 0) И (Константа.СкладПросмотраGiveMyStockBalance.Выбран () = 1) Тогда
SMTP_ROBOT = СоздатьSMTP_ROBOT (1);
Если (SMTP_ROBOT = "") Тогда
Возврат (0);
ИначеЕсли (SMTP_ROBOT = "err") Тогда
Возврат (0);
КонецЕсли;
Если (SMTP_ROBOT.Подключиться(СокрЛП(Константа.СерверПолучения),
110,
СокрЛП(Константа.ЛогинПолучения),
СокрЛП(Константа.ПарольПолучения),
3) = 0) Тогда
Возврат (0);
КонецЕсли;
СпрЗапросовПоОстаткам = СоздатьОбъект ("Справочник.ЗапросыПоОстаткамПоПочте");
ТекстКоманды = ВРЕГ("GiveMyStockBalance_ForAnalize");
Попытка
Для НомерПисьма = 1 По SMTP_ROBOT.КоличествоПисем Цикл
Если (SMTP_ROBOT.ПолучитьЗаголовокПисьма (НомерПисьма) = 1) Тогда
SMTP_ROBOT.ПолучитьПисьмо (НомерПисьма, 0, 0);
IDПисьма = СОКРЛП(SMTP_ROBOT.createddate) + СОКРЛП(SMTP_ROBOT.createdtime);
ТелоПисьма = ВРЕГ(СОКРЛП (SMTP_ROBOT.subject));
Отправлять = 0;
Если (Найти (ТелоПисьма, ТекстКоманды) > 0) Тогда
Отправлять = 1;
КонецЕсли;
Если (Отправлять) = 0 Тогда
ТемаПисьма = ВРЕГ(СОКРЛП (SMTP_ROBOT.ТелоПисьма));
Если (Найти (ТемаПисьма, ТекстКоманды) > 0) Тогда
Отправлять = 1;
КонецЕсли;
КонецЕсли;
Если (Отправлять) = 1 Тогда
Если (СпрЗапросовПоОстаткам.НайтиПоНаименованию (IDПисьма, 0, 1) = 0) Тогда
СпрЗапросовПоОстаткамОбж = СоздатьОбъект ("Справочник.ЗапросыПоОстаткамПоПочте");
СпрЗапросовПоОстаткамОбж.Новый ();
СпрЗапросовПоОстаткамОбж.Наименование = IDПисьма;
СпрЗапросовПоОстаткамОбж.ДатаЗаписи = Строка (ТекущаяДата ()) + " " + ТекущееВремя ();
СпрЗапросовПоОстаткамОбж.Пользователь = ИмяПользователя ();
СпрЗапросовПоОстаткамОбж.Получатель = Константа.ЛогинОбменаПолучательАвтоОстаткиСклад;
СпрЗапросовПоОстаткамОбж.Записать ();
Если (SMTP_ROBOT.УдалитьПисьмо (НомерПисьма) = 0) Тогда
Константа.StopОтправкиСкладскихОстатков = 1;
Иначе
глОтправитьПоПочтеОстаткиНаСкладе (ТекущаяДата (), Константа.СкладПросмотраGiveMyStockBalance);
КонецЕсли;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Исключение
КонецПопытки;
SMTP_ROBOT.Отключиться ();
Возврат (1);
Иначе
Возврат (-1);
КонецЕсли;
КонецФункции
//
//*****************************************************************************
// !!!!!!!!!!!!! В глобальном модуле (в процедуре ПриНачалеРаботыСистемы ()) вставьте:
//Если (ЗагрузитьВнешнююКомпоненту(КаталогИБ () + "DialMail.dll") = 0) Тогда
// Сообщить ("Не могу загрузить компоненту DialMail.dll !!!", "!!");
//КонецЕсли;
// !!!!!!!!!!!!! Также подцепите в команду ОбработкаОжидания процедуру ПроверитьНаПочтеЗапросНаВыдачуОстатков (). Например, вот так: ОбработкаОжидания ("ПроверитьНаПочтеЗапросНаВыдачуОстатков", 100)