Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[1С:Бухгалтерия 8]

Массовая Рассылка

Илья Привалов
читатель
офлайн
Дата регистрации: 13.10.2017
Сообщений: 13
Пост №1
 
13.10.2017 14:04

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

Процедура отправки:


Процедура ОтправитьНажатие()
      КоличествоСтрок = ЭлементыФормы.ВыбДилеры.Значение.Количество();
      Если КоличествоСтрок <> 0 тогда
            Для каждого строкаТаблицы из ВыбДилеры цикл
            ВыбФайл="";
            КонецЦикла;
      КонецЕсли;
            Для каждого строкаТаблицы из ВыбФайлы цикл
      Если Выбфайл=0 тогда
                   ВыбФайл=ВыбФайл+";";
                   Выбфайл=ВыбФайл+ВыбФайлы.Путь;
      КонецЕсли;
      КонецЦикла;
            
      ТемаОтправки=ТемаПисьма;
      ФайлТекстаСообщения=ТекстПисьма;
      фс=ВыбФайл;
      
      глОтправитьОтчетПоПочте(ФайлТекстаСообщения,ВыбДилер,ТемаОтправки,0,ВыбФайл,2);
КонецПроцедуры



Процедура почтового клиента:


Процедура глОтправитьПисьмоДиллерам(ТаблицаОтправки,Получатель,ТемаПисьма,Сообщения=1,ТелоПисьма="",ТипПисьма=0) Экспорт
//      
//      если ТипЗначенияСтр(ТаблицаОтправки)="Таблица" Тогда
      Если ТипЗнч(ТаблицаОтправки)=Тип("ТабличныйДокумент") или ТипЗнч(ТаблицаОтправки)=Тип("ПолеТабличногоДокумента") тогда
//            ИмяФайла=КаталогПользователя()+"Отчет"+СтрЗаменить(СокрЛП(ТекущаяДата()),".","")+"_"+СтрЗаменить(СокрЛП(ТекущееВремя()),":","")+".xls";
            ИмяФайла=КаталогВременныхФайлов()+"Отчет"+Формат(ТекущаяДата(),"ДФ=""ддммгггг'_'ЧЧммсс""")+".xls";
//            ТаблицаОтправки.Записать(ИмяФайла,1);
            ТаблицаОтправки.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
      //иначеесли ТипЗначенияСтр(ТаблицаОтправки)="Строка" тогда
      ИначеЕсли ТипЗнч(ТаблицаОтправки)=Тип("Строка") тогда
//            поз=Найти(ТаблицаОтправки,";");
            поз=СтрНайти(ТаблицаОтправки,";");
            ИмяФайла=Новый Массив;//"";
            
            пока поз<>0 цикл
                  тестфайла=Лев(ТаблицаОтправки,поз-1);
                  фс=Новый Файл(тестфайла);
//                  если фс.СуществуетФайл(тестфайла)=1 тогда
                  Если фс.Существует() тогда
                  //      если Пустоезначение(ИмяФайла)=0 тогда
                  //            ИмяФайла=ИмяФайла+";";      
                  //      конецесли;
                  //      ИмяФайла=ИмяФайла+тестфайла;
                        ИмяФайла.Добавить(фс);
                  конецесли;
                  ТаблицаОтправки=Сред(ТаблицаОтправки,поз+1);
                  поз=Найти(ТаблицаОтправки,";");
            конеццикла;
//
            фс=Новый Файл(ТаблицаОтправки);
//            если фс.СуществуетФайл(ТаблицаОтправки)=1 тогда
            Если фс.Существует() тогда
                  //если Пустоезначение(ИмяФайла)=0 тогда
                  //      ИмяФайла=ИмяФайла+";";      
                  //конецесли;
                  //ИмяФайла=ИмяФайла+ТаблицаОтправки;
                  ИмяФайла.Добавить(фс);
            конецесли;
      иначе
            ИмяФайла="";      
      конецесли;
//      
      АдресЭл=Константы.ЭлПочта.Получить();
      Профиль=Новый ИнтернетПочтовыйПрофиль;
      Профиль.АдресСервераSMTP=АдресЭл.Сервер;
      Профиль.АдресСервераPOP3=АдресЭл.Сервер;
      Профиль.Таймаут=60;
      Профиль.ПортSMTP=?(НЕ ЗначениеЗаполнено(АдресЭл.Порт),"25",Строка(АдресЭл.Порт));
      Профиль.ПортPOP3=110;
      Профиль.ПользовательSMTP=АдресЭл.Логин;
      Профиль.ПарольSMTP=АдресЭл.Пароль;
      Профиль.Пользователь=АдресЭл.Логин;
      Профиль.Пароль=АдресЭл.Пароль;
      Профиль.АутентификацияSMTP=СпособSMTPАутентификации.Login;
      Сообщение=Новый ИнтернетПочтовоеСообщение;
      Сообщение.Отправитель=АдресЭл.АдресОтправителя;
      Сообщение.ИмяОтправителя=АдресЭл.Отправитель;
      Сообщение.Получатели.Добавить(СокрЛП(Получатель.ЭлПочта));
      Сообщение.Тема=ТемаПисьма;
      Если НЕ ЗначениеЗаполнено(ТелоПисьма) тогда
            Сообщение.Тексты.Добавить(ТемаПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
      ИначеЕсли лев(ТелоПисьма,5)="file:" тогда
      //      ВК.ЗагрузитьИзФайла(СокрЛП(сред(ТелоПисьма,6)));
            ТекстСообщения="";
       ФайлТекстаСообщения=Новый ТекстовыйДокумент;
            ФайлТекстаСообщения.Прочитать(СокрЛП(сред(ТелоПисьма,6)));
            ТекстСообщения=ФайлТекстаСообщения.ПолучитьТекст();
            Сообщение.Тексты.Добавить(ТекстСообщения,ТипТекстаПочтовогоСообщения.HTML);
            
      Иначе
            Сообщение.Тексты.Добавить(ТелоПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
      КонецЕсли;
      Если ТипЗНЧ(ИмяФайла)=Тип("Строка") и ЗначениеЗаполнено(ИмяФайла) тогда
            ФайлСообщения=Новый Файл(ИмяФайла);
            Сообщение.Вложения.Добавить(ИмяФайла,ФайлСообщения.Имя);
      ИначеЕсли ТипЗнч(ИмяФайла)=Тип("Массив") тогда
            Для каждого МЗнач из ИмяФайла Цикл
                  Сообщение.Вложения.Добавить(ИмяФайла.ПолноеИмя,ИмяФайла.Имя);
            КонецЦикла;      
      КонецЕсли;      
      Почта=Новый ИнтернетПочта;
      Попытка
            Почта.Подключиться(Профиль);
      Исключение
            Сообщить("Ошибка отправки файла: "+ИмяФайла);
            Сообщить(ОписаниеОшибки());
            Возврат;
      КонецПопытки;
      Попытка
            Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
            //СообщенияОтправки=Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
      Исключение
            Сообщить(Получатель.ЭлПочта);
            Сообщить(ОписаниеОшибки());
      КонецПопытки;
      УдалитьФайлы("file:G :\ Bases2\Balance.htm");
      Сообщить(Получатель.Наименование);
      Сообщить(ТемаПисьма);
      Почта.Отключиться();

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

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №2
 
13.10.2017 15:25

Может проще интегрировать "Работу с почтовыми сообщениями" из БСП чем самокат изобретать?

Ответили: пост №3
Илья Привалов
читатель
офлайн
Дата регистрации: 13.10.2017
Сообщений: 13
Пост №3
 
13.10.2017 15:38
Ответ на пост №2

Денис (САМАРА), Ну как бы уже решение практически готово, обидно бросать его не оконченным..

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №4
 
13.10.2017 17:00

Цитата
Ну как бы уже решение практически готово
Судя по коду, г..но полное, если честно.

Илья Привалов
читатель
офлайн
Дата регистрации: 13.10.2017
Сообщений: 13
Пост №5
 
13.10.2017 17:05

Чем богаты тому рады....Процедуру глотправитьотчетпопочте не я писал, потому не могу вьехать что к чему, но она многофункцианальная, и под мои цели подходит.

Ответили: пост №6
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20997
Пост №6
 
13.10.2017 18:50
Ответ на пост №5

Илья Привалов, судя по всему из 7.7 переносили.

Ответили: пост №7
Илья Привалов
читатель
офлайн
Дата регистрации: 13.10.2017
Сообщений: 13
Пост №7
 
16.10.2017 09:06
Ответ на пост №6

Prikum, Так и есть, вот рассылку осталось перенести.

Ответили: пост №8
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20997
Пост №8
 
16.10.2017 09:15
Ответ на пост №7

Илья Привалов, когда пишешь ответ, то в окне есть пиктограмма "<...>", если ее нажать и ввести туда свой код, то он будет выглядеть в более читаемом виде, а разбираться в той мешанине что выложил не очень охотно.

Ответили: пост №9
Илья Привалов
читатель
офлайн
Дата регистрации: 13.10.2017
Сообщений: 13
Пост №9
 
16.10.2017 09:53
Ответ на пост №8

Prikum, Я понял, спасибо, Вот код в виде читаемом) Проблем в обработке оказалось много, если выбрана группа целиком и из нее в таблицу отправки перенесены несколько человек пишет ошибку о неверном адресе элПочты, если же каждого выбрать по отдельности то письмо отправляется не каждому контрагенту из списка, а только одному, то количество раз, сколько строк в таблице..


Код
Процедура ОтправитьНажатие()
      КоличествоСтрок = ЭлементыФормы.ВыбДилеры.Значение.Количество();
      Если КоличествоСтрок <> 0 тогда
            Для каждого Строка из ВыбДилеры цикл
            ВыбФайл=ТекстПисьма;
            ТемаОтправки=ТемаПисьма;
            глОтправитьОтчетПоПочте(,ВыбДилер,ТемаОтправки,0,ВыбФайл,2);
            КонецЦикла;
      КонецЕсли;
            Для каждого строкаТаблицы из ВыбФайлы цикл
      Если Выбфайл=0 тогда
                   ВыбФайл=ВыбФайл+";";
                   //Выбфайл=ВыбФайл+ВыбФайлы.Путь;
                   
            КонецЕсли;

      КонецЦикла; 
КонецПроцедуры
 

Это процедура общего модуля в которой уже к почте подключается и цепляет данные письма:

Код
 Процедура глОтправитьОтчетПоПочте(ТаблицаОтправки,Получатель,ТемаПисьма,Сообщения=1,ТелоПисьма="",ТипПисьма=0) Экспорт    
//       
//      если ТипЗначенияСтр(ТаблицаОтправки)="Таблица" Тогда
      Если ТипЗнч(ТаблицаОтправки)=Тип("ТабличныйДокумент") или ТипЗнч(ТаблицаОтправки)=Тип("ПолеТабличногоДокумента") тогда
//            ИмяФайла=КаталогПользователя()+"Отчет"+СтрЗаменить(СокрЛП(ТекущаяДата()),".","")+"_"+СтрЗаменить(СокрЛП(ТекущееВремя()),":","")+".xls";
            ИмяФайла=КаталогВременныхФайлов()+"Отчет"+Формат(ТекущаяДата(),"ДФ=""ддммгггг'_'ЧЧммсс""")+".xls";
//            ТаблицаОтправки.Записать(ИмяФайла,1);
            ТаблицаОтправки.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
      //иначеесли ТипЗначенияСтр(ТаблицаОтправки)="Строка" тогда 
      ИначеЕсли ТипЗнч(ТаблицаОтправки)=Тип("Строка") тогда
//            поз=Найти(ТаблицаОтправки,";");
            поз=СтрНайти(ТаблицаОтправки,";");
            ИмяФайла=Новый Массив;//"";
            
            пока поз<>0 цикл
                  тестфайла=Лев(ТаблицаОтправки,поз-1);
                  фс=Новый Файл(тестфайла);
//                  если фс.СуществуетФайл(тестфайла)=1 тогда
                  Если фс.Существует() тогда
                  //      если Пустоезначение(ИмяФайла)=0 тогда
                  //            ИмяФайла=ИмяФайла+";";      
                  //      конецесли;
                  //      ИмяФайла=ИмяФайла+тестфайла;
                        ИмяФайла.Добавить(фс);
                  конецесли;
                  ТаблицаОтправки=Сред(ТаблицаОтправки,поз+1);
                  поз=Найти(ТаблицаОтправки,";");
            конеццикла;
//
            фс=Новый Файл(ТаблицаОтправки);
//            если фс.СуществуетФайл(ТаблицаОтправки)=1 тогда
            Если фс.Существует() тогда
                  //если Пустоезначение(ИмяФайла)=0 тогда
                  //      ИмяФайла=ИмяФайла+";";      
                  //конецесли;
                  //ИмяФайла=ИмяФайла+ТаблицаОтправки;
                  ИмяФайла.Добавить(фс);
            конецесли;
      иначе
            ИмяФайла="";      
      конецесли;
//      
      АдресЭл=Константы.ЭлПочта.Получить();
      Профиль=Новый ИнтернетПочтовыйПрофиль;
      Профиль.АдресСервераSMTP=АдресЭл.Сервер;
      Профиль.АдресСервераPOP3=АдресЭл.Сервер;
      Профиль.Таймаут=60;
      Профиль.ПортSMTP=?(НЕ ЗначениеЗаполнено(АдресЭл.Порт),"25",Строка(АдресЭл.Порт));
      Профиль.ПортPOP3=110;
      Профиль.ПользовательSMTP=АдресЭл.Логин;
      Профиль.ПарольSMTP=АдресЭл.Пароль;
      Профиль.Пользователь=АдресЭл.Логин;
      Профиль.Пароль=АдресЭл.Пароль;
      Профиль.АутентификацияSMTP=СпособSMTPАутентификации.Login;
      Сообщение=Новый ИнтернетПочтовоеСообщение;
      Сообщение.Отправитель=АдресЭл.АдресОтправителя;
      Сообщение.ИмяОтправителя=АдресЭл.Отправитель;
      Сообщение.Получатели.Добавить(СокрЛП(Получатель.ЭлПочта));
      Сообщение.Тема=ТемаПисьма;
      Если НЕ ЗначениеЗаполнено(ТелоПисьма) тогда
            Сообщение.Тексты.Добавить(ТемаПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
      ИначеЕсли лев(ТелоПисьма,5)="file:" тогда
      //      ВК.ЗагрузитьИзФайла(СокрЛП(сред(ТелоПисьма,6)));
            ТекстСообщения="";
          ФайлТекстаСообщения=Новый ТекстовыйДокумент;
            ФайлТекстаСообщения.Прочитать(СокрЛП(сред(ТелоПисьма,6)));
            ТекстСообщения=ФайлТекстаСообщения.ПолучитьТекст();
            Сообщение.Тексты.Добавить(ТекстСообщения,ТипТекстаПочтовогоСообщения.HTML);
            
      Иначе
            Сообщение.Тексты.Добавить(ТелоПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
      КонецЕсли;
      Если ТипЗНЧ(ИмяФайла)=Тип("Строка") и ЗначениеЗаполнено(ИмяФайла) тогда
            ФайлСообщения=Новый Файл(ИмяФайла);
            Сообщение.Вложения.Добавить(ИмяФайла,ФайлСообщения.Имя);
      ИначеЕсли ТипЗнч(ИмяФайла)=Тип("Массив") тогда
            Для каждого МЗнач из ИмяФайла Цикл
                  Сообщение.Вложения.Добавить(ИмяФайла.ПолноеИмя,ИмяФайла.Имя);
            КонецЦикла;      
      КонецЕсли;      
      Почта=Новый ИнтернетПочта;
      Попытка
            Почта.Подключиться(Профиль);
      Исключение
            Сообщить("Ошибка отправки файла: "+ИмяФайла);
            Сообщить(ОписаниеОшибки());
            Возврат;
      КонецПопытки;
      Попытка
            Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
            //СообщенияОтправки=Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
      Исключение
            Сообщить(Получатель.ЭлПочта);
            Сообщить(ОписаниеОшибки());
      КонецПопытки;
      УдалитьФайлы("file:G:\Bases2\Balance.htm");
      Сообщить(Получатель.Наименование);
      Сообщить(ТемаПисьма);
      Почта.Отключиться();

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

Ответили: пост №10
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20997
Пост №10
 
16.10.2017 13:19
Ответ на пост №9

Илья Привалов, у тебя в циклах не используется итераторы (строка,строкаТаблицы)

Ответили: пост №11
Показывать по 10 20 40 сообщений

Читают тему:

1 гостей
Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация