Версия для печати темы (https://pro1c.org.ua/index.php?s=a875b93db1f84275fc2e19c02f88ab71&showtopic=11895)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Формирование и рассылка отчетов по емайл.

Автор: Михрутка 03.04.13, 17:37

1С 8.2. УПП

Необходимо перед закрытием программы формировать отчет(отчеты) и отправлять их по указанным электронным адресам. Никогда с таким не сталкивался, подскажите куда копать.

Автор: zay 03.04.13, 18:29



Функция ОтправитьЭлектронноеПисьмоHTML(
                            пАдрес,
                            пИмяОтправителя = "sender records",
                            пОтправитель = "reportbot@SCI.com.ua",
                            пТема,
                            пТекст,
                            пВложения,
                            пОписаниеПисьма = "",
                            пПочтовоеСоединение = Неопределено
                            ) Экспорт
    
    
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    
    Если ПустаяСтрока(пАдрес) Тогда
        ОбщегоНазначения.СообщитьОбОшибке("Ошибка! В электронном письме ("+пОписаниеПисьма+") не указан адрес",,, СтатусСообщения.ОченьВажное);
        Возврат ложь;
    КонецЕсли;
    
    Сообщение.Получатели.Добавить(пАдрес);
    Сообщение.Тема =пТема;
    Сообщение.ИмяОтправителя=пИмяОтправителя;
    Сообщение.Отправитель=пОтправитель;
    
    Для каждого лИмяФайлВложения из пВложения Цикл
        Если ПустаяСтрока(лИмяФайлВложения) Тогда
            Продолжить;
        КонецЕсли;
        Попытка
            Сообщение.Вложения.Добавить(лИмяФайлВложения);
        Исключение
            ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),,"Ошибка при присоединении вложения к электронному письму", СтатусСообщения.ОченьВажное);
            Возврат ложь;
        КонецПопытки;
    КонецЦикла;
    
    Сообщение.Кодировка = "windows-1251";
    
    ТекстПисьма = Сообщение.Тексты.Добавить(пТекст);
    ТекстПисьма.Кодировка = "windows-1251";
    ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
    
    Если пПочтовоеСоединение = Неопределено Тогда
        
        Почта = Новый ИнтернетПочта();
        
        ПочтовыйПрофиль = ПолучитьПочтовыйПрофиль();
        
        Попытка
            Почта.Подключиться(ПочтовыйПрофиль);
        Исключение
            ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),,"Ошибка при подключению к почтовому профилю", СтатусСообщения.ОченьВажное);
            Возврат ложь;
        КонецПопытки;
            
        Попытка
            Почта.Послать(Сообщение);
        Исключение
            ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),,"Ошибка при отправке электронного письма на адрес "+пАдрес, СтатусСообщения.ОченьВажное);
            Возврат ложь;
        КонецПопытки;
        
        Почта.Отключиться();
        
    Иначе
        Попытка
            пПочтовоеСоединение.Послать(Сообщение);
        Исключение
            ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),,"Ошибка при отправке электронного письма на адрес "+пАдрес, СтатусСообщения.ОченьВажное);
            Возврат ложь;
        КонецПопытки;
    КонецЕсли;
    
    Возврат истина;
    
КонецФункции



Функция ПолучитьПочтовыйПрофиль() Экспорт
    
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    
    Профиль.АдресСервераSMTP    = "192.168.4.16";
    Профиль.АдресСервераPOP3    = "192.168.4.16";
    Профиль.Пользователь        = "MailUser";
    Профиль.Пароль        = "MailPassword";
    Профиль.ПортSMTP        = 25;
    Профиль.ПортPOP3        = 110;
    Профиль.ВремяОжидания    = 60;
    
    Возврат Профиль;
    
КонецФункции


Комментарии к параметрам функции:
пВложения - массив строк, значение элемента - полный путь к файлу вложения
пОписаниеПисьма - идентификатор, которая будет выводится в сообщении об ошибке
пПочтовоеСоединение - можно передавать в функцию объект ИнтернетПочта (незначительно экономит время отправки). Если не заполнено - используется функция ПолучитьПочтовыйПрофиль

Пример использования

Для каждого АдресЭлектроннойПочты из масАдресаЭлектроннойПочты Цикл
            
    Если ПустаяСтрока(АдресЭлектроннойПочты) Тогда
        Сообщить("Для клиента "+Клиент+" не установлен адрес электронной почты");
        Продолжить;
    КонецЕсли;
            
    УправлениеЭлектроннойПочтой
        .ОтправитьЭлектронноеПисьмоHTML(
            АдресЭлектроннойПочты,
            "Sharashkyna Contora Incorporated",
            "reportbot@SCI.com.ua",
            "Задолженность по оплате комиссии",
            ТекстСообщения,
            Вложения);

КонецЦикла;

Автор: logist 03.04.13, 18:52

Цитата(Михрутка @ 03.04.13, 17:37) http://pro1c.org.ua/index.php?act=findpost&pid=67422
1С 8.2. УПП

Меня прям вдохновило это сочетание smile.gif

Только еще совет - запускайте задание в фоне, что бы пользователь мог нормально завершить работу приложения, и его процесс завершился, а отчет сформировался и отправился бы в фоновом задании.

Автор: zay 03.04.13, 19:26

Цитата(logist @ 03.04.13, 19:52) *
Только еще совет - запускайте задание в фоне

Я использовал виндовс планировщик. Фоновые задания требуют чтобы все выполнялось на стороне сервера. А формировать отчеты и сбрасывать их в Excel на стороне сервера не получится.

Запускаем приложение с определенным параметром, который обрабатываем при старте. Т.е. если запуск с параметром "ФормируйОтчеты" - то сформировать отчеты и выйти из 1С. Если с параметром "РассылайОтчеты" - то разослать и выйти из 1С.

Еще надо понимать, что рассылка может быть запущена повторно. Получать один и тот же отчет клиенту наверное будет не очень интересно.

Автор: alex040269 03.04.13, 20:57

а если введены еще не все данные, а пользователь случайно вышел? такой отчет кому нибудь нужен? разве сто это мониторинг работы пользоваеля

Автор: logist 04.04.13, 7:50

Цитата(zay @ 03.04.13, 19:26) *
А формировать отчеты и сбрасывать их в Excel на стороне сервера не получится.

Не получится и не умею это разные вещи. Типовые регламентные задания типа рассылок отчетов об ошибках и уведомлений о задачах - как-то же работают.

Автор: Vofka 04.04.13, 7:56

Я саму идею считаю не совсем разумной. В чем сложность сформировать отчеты в программе - непонятно.

Автор: zay 04.04.13, 10:16

Цитата(logist @ 04.04.13, 8:50) *
Не получится и не умею это разные вещи.

Версия платформы базы, в которой это реализовано - 1С:Предприятие 8.1 (8.1.11.67)

В справке по ТабличныйДокумент.Записать (<Имя файла>, <Тип файла таблицы>)
Примечание:
При работе на сервере или через com-соединение использует только файлы форматов mxl и txt.

В 8.2 - согласен, сохранять в Excel можно и на сервере.

Автор: logist 04.04.13, 10:25

Цитата(Михрутка @ 03.04.13, 17:37) http://pro1c.org.ua/index.php?act=findpost&pid=67422
Версия платформы базы, в которой это реализовано - 1С:Предприятие 8.1 (8.1.11.67)

Так наверное надо сразу это уточнить, что бы не возникало таких вопросов.

Автор: zay 04.04.13, 10:49

Цитата(Vofka @ 04.04.13, 8:56) *
Я саму идею считаю не совсем разумной. В чем сложность сформировать отчеты в программе - непонятно.

Если это замечание по поводу запуска с помощью виндовс планировщика - то поясню:
по регламенту отчеты формируются в 18:40. Только к этому времени в учетной системе есть все необходимые данные для формирования отчетов. Заставлять сотрудника каждый день сидеть до этого времени, только для того чтобы он запустил обработку с одной единственной кнопкой "Сформировать", нажал ее и ждал пока все отчеты сформируются... Ну и допустим есть 400 клиентов. Группа отчетов для одного клиента формируются 15 сек. (если сервер больше ничем не загружен) = полтора часа просто формируются отчеты.
А удаленный доступ для сотрудника - это звонки, в том числе и в десять ночи, на тему: пропал интернет, разрядился ноут и не заряжается и т.п.

Автор: Vofka 04.04.13, 10:52

Цитата(zay @ 04.04.13, 11:49) *
Если это замечание по поводу запуска с помощью виндовс планировщика

Это было замечание, насчет "отправлять при закрытии программы" smile.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua