Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 21:38

фоновое задание. ошибки при создании файла и отправки почты.

Автор andron81_81, 19 июн 2024, 15:35

0 Пользователей и 1 гость просматривают эту тему.

andron81_81

1С:Предприятие 8.3 (8.3.22.2411) УПП.

Создаю регламентное.
Оно должно создавать екселовский файл и отправлять его по почте но делать оно должно это не просто.
процедура регламентного делает следующие действия :

0. сохранить файл внешней обработки на диск и открыть процедуру "Сформировать" этой внешней обработки,
код процедуры запуска регламентного задания такой (спасибо LexaK, Максим75):


Спр = Справочники.ВнешниеОбработки.НайтиПоНаименованию("График прохождения заказов для регламентного");
        Если ЗначениеЗаполнено(спр) Тогда
            ИмяФайла = ПолучитьИмяВременногоФайла();             
            ДвоичныеДанные = Спр.ХранилищеВнешнейОбработки.Получить();
            ДвоичныеДанные.Записать(ИмяФайла);
            Об = ВнешниеОбработки.Создать(ИмяФайла);
макет = Об.ПолучитьМакет("Макет");
            Об.Сформировать(
началоМесяца(ТекущаяДата()),
конецМесяца(ТекущаяДата()),
Справочники.Организации.НайтиПоКоду("000000003") ,
Ложь,
ложь  );
           
    конецЕсли;



2. процедура Сформировать() внешней обработки создаёт xls файл, пишет в него данные , сохраняет-закрывает , затем расставляет формулы и фильтры в некоторые ячейки сохраняет - закрывает.
3. отсылает полученный файл по почте

код внешней обработки Сформировать() примерно следующий :
//...
//формирование данных , заполнение табличного документа.
//...

ФайлЕксельИмя = КаталогВременныхФайлов() + "выгрузка.xls";

файл = Новый Файл(ФайлЕксельИмя);
ТабДокумент.Записать(ФайлЕксельИмя,ТипФайлаТабличногоДокумента.XLS);


    Ехсел = Новый COMОбъект("Excel.Application");
    Книга=Ехсел.Workbooks.Open(ФайлЕксельИмя);
    Ехсел.Visible = ложь;    
    Ехсел.Cells(2,2).FormulaLocal = "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;B8:B1008)"; 
  Книга.Save();
  Ехсел.Workbooks.Close();
  Ехсел.Application.Quit();
  Ехсел="";
  Для каждого элементМассива из EmailПолучателей цикл
  ОтправитьНаПочту(элементМассива, Организация);
  КонецЦикла;

при запуске регламентного у меня возникает 2 ошибки бороться с которыми я не понимаю как :
ЦитироватьОшибка при вызове конструктора (Файл)
{ВнешняяОбработка.ГрафикПрохожденияЗаказовДляРегламентного.МодульОбъекта(437)}:файл = Новый Файл(ФайлЕксельИмя);
ЦитироватьОшибка при вызове конструктора (ИнтернетПочта)
{ВнешняяОбработка.ГрафикПрохожденияЗаказовДляРегламентного.МодульОбъекта(996)}:Почта = Новый ИнтернетПочта;

строчка "Почта = Новый ИнтернетПочта;" присутствует в функции ОтправитьНаПочту.

Кстати если создам внешнюю обработку и пункты 0-3 заставлю сделать её тогда всё работает.



antoneus

файл = Новый Файл(ФайлЕксельИмя);
Эта строчка не нужна.

При попытке создания ИнтернетПочты ничего больше не пишет?

LexaK

andron81_81, как-то сложно все.
1.внешнюю обработку можно сразу объявить регламентом и задать ей расписание выполнения.
2.проверьте пользователя под которым запускается регламент! Его права!
3.проверьте работу обработки именно в контексте Сервера целиком.
если помогло нажмите: Спасибо!

antoneus

И попробуйте так

ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
Об = ВнешниеОбработки.Создать(ИмяФайла, Ложь, ОписаниеЗащиты);

andron81_81

Цитата: antoneus от 19 июн 2024, 15:53файл = Новый Файл(ФайлЕксельИмя);
Эта строчка не нужна.

да, вы как бы правы. Но это я удалил лишнего, когда сюда урезал.
должно быть так :
файл = Новый Файл(ФайлЕксельИмя);
    Если (файл.Существует()) Тогда
        УдалитьФайлы(ФайлЕксельИмя)    ;
    КонецЕсли;


Цитата: antoneusПри попытке создания ИнтернетПочты ничего больше не пишет?


вот полный текст:
ЦитироватьОшибка при вызове конструктора (ИнтернетПочта)
{ВнешняяОбработка.ГрафикПрохожденияЗаказовДляРегламентного.МодульОбъекта(996)}:Почта = Новый ИнтернетПочта;
{ВнешняяОбработка.ГрафикПрохожденияЗаказовДляРегламентного.МодульОбъекта(475)}:ОтправитьСообщениеНаПочту(элементМассива, Организация,ФайлЕксельИмя );
{ОбщийМодуль.ВШ_Общий.Модуль(13)}:Справочники.Организации.НайтиПоКоду("000000003") ,

по причине:
Установлен безопасный режим. Выполнение операции запрещено
по причине:
Установлен безопасный режим. Выполнение операции запрещено

andron81_81

Цитата: LexaK от 19 июн 2024, 15:56andron81_81, как-то сложно все.
1.внешнюю обработку можно сразу объявить регламентом и задать ей расписание выполнения.
2.проверьте пользователя под которым запускается регламент! Его права!
3.проверьте работу обработки именно в контексте Сервера целиком.

1. да, конечно, сложно и через ... но внешняя обработка может запускаться и в обычном режиме пользователем. причем с параметрами которыми пользователь там введёт и это будут параметры отличные от параметров для запуска задания. плюс запрос может быть модифицирован в обработке и везде изменения должны вступить в силу(рассылка по заданию, запуск обработки в обычном режиме) поэтому обработка должна быть ОДНА !
2. права полные
3. не очень понимаю как это сделать. что почитать.



LexaK

andron81_81,
по п.3. когда Пользователь работает в форме обработки, часть действий выполняется на клиенте
файловые операции, почтовый агент, др.
а регламентное задание целиком выполняется на Сервере.

если помогло нажмите: Спасибо!

andron81_81

Цитата: LexaK от 19 июн 2024, 16:33andron81_81,
по п.3. когда Пользователь работает в форме обработки, часть действий выполняется на клиенте
файловые операции, почтовый агент, др.
а регламентное задание целиком выполняется на Сервере.



ну я создал именно задание, но запускал его принудительно . не по расписанию.

LexaK

Цитата: andron81_81 от 19 июн 2024, 20:44ну я создал именно задание
очень рады что у вас все получилось!   :zebzdr:
если помогло нажмите: Спасибо!

andron81_81

Цитата: LexaK от 20 июн 2024, 09:32
Цитата: andron81_81 от 19 июн 2024, 20:44ну я создал именно задание
очень рады что у вас все получилось!   :zebzdr:


вы мне пытались донести как запускать в контексте сервера целиком.
а я вам сказал как делал я и хотел получить ответ является ли это то что вы имели ввиду (в контексте сервера ли это) ???
ну и при этом всём не получилось - в том то и дело  :dfbsdfbsdf:

а кстати ещё вопрос :
достаточно ли создания регламентного задания в конфигураторе (создание процедуры в общих модулях, указание её в задании, расписания) или же этого мало и надо где-то ещё указать ??? (нигде толком найти не могу, а 1с-науке я нигде не учился). Какие-то консоли регламентных заданий вот нашёл, а сам пользовался обработкой инструмент разработчика, а без неё задания не отрабатывало. Но так это всё внешние обработки. Нужно ли это всё, как правильно ?

Похожие темы (5)

Рейтинг@Mail.ru

Поиск