Имя: Пароль:
1C
1С v8
Отправка по почте: "Ошибка доступа к файлу 5(0x00000005): Отказано в доступе."
,
0 dft2014
 
04.09.18
11:20
ЗУП3
Пишу обработку по рассылке отчетов на электронную почту сотрудников, в виде вложения. На строчке:
Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ) Тогда
Выдает ошибку:
Ошибка при вызове метода контекста (ПоместитьФайлы)
Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ) Тогда
по причине:
Ошибка доступа к файлу 'C:\temp'. 5(0x00000005): Отказано в доступе.


Если закомментировать строчки с прикреплением вложения, то письмо отправляется, правда без вложения. Ниже код:


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

&НаКлиенте
Функция ДобавлениеФайлаКВложениям(мФайл = Неопределено)
    Перем ПомещенныеФайлы;
    
    ПомещаемыеФайлы = Новый Массив;
    
    Для каждого Файл из мФайл Цикл
        Если Файл <> Неопределено Тогда
            Файлы = Новый ОписаниеПередаваемогоФайла;
            Файлы.Имя = Файл;
            ПомещаемыеФайлы.Добавить(Файлы);
        КонецЕсли;
    КонецЦикла;
    
    Если ПодключитьРасширениеРаботыСФайлами() Тогда
        ПомещенныеФайлы = Новый Массив;
        Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ) Тогда  //вот здесь ошибка доступа к файлу
            Возврат ДобавитьФайлыВСписок(ПомещенныеФайлы);
        КонецЕсли;
    Иначе
        ПоказатьПредупреждение(,НСтр("ru = 'В Веб-клиенте без установленного расширения работы с файлами добавление файлов не поддерживается.'"));
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции
1 vova1122
 
04.09.18
11:23
А такая папка существует (C:\temp)? и есть ли у пользователя доступ на запись в нее?
2 dft2014
 
04.09.18
11:29
(1) Да, папка есть, вложение в виде в файла в нем есть. Доступ на эту папку есть.
3 Флориан
 
04.09.18
11:34
ИдентификаторОтправки = ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); - на сервере скорей всего выполняется и (C:\temp) долже быть на сервере
4 dft2014
 
04.09.18
11:35
(3) На сервере тоже сеть эта папка.
5 vova1122
 
04.09.18
11:35
+ еще насколько я помню Функция "ЕСЛИ" -это условие. И там обезательно должно быть "<, >, или =" какому то значению, или я ошибаюсь?
6 dft2014
 
04.09.18
11:35
(3) Дело в том, что даже не доходит до строчки:
ИдентификаторОтправки = ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма);
7 Флориан
 
04.09.18
11:36
ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ) - где выполняется на сервере?  (C:\temp) - пользователю которому под которым запускается агент сервера 1С даны права на папку?
8 dft2014
 
04.09.18
11:37
(5) &НаСервере
Функция ДобавитьФайлыВСписок(ПомещенныеФайлы)
    
    Результат = Новый Массив;
    Для Сч=0 по ПомещенныеФайлы.Количество()-1 Цикл                                        
        
        Файл = Новый Файл(ПомещенныеФайлы[Сч].Имя);
        
        ОписаниеВложения = Новый Структура;
        ОписаниеВложения.Вставить("Представление", Файл.Имя);
        ОписаниеВложения.Вставить("АдресВоВременномХранилище",ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(ПомещенныеФайлы[Сч].Хранение),УникальныйИдентификатор));
        ОписаниеВложения.Вставить("Кодировка", "");
        Результат.Добавить(ОписаниеВложения);
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции
9 dft2014
 
04.09.18
11:40
Но в отладчике, в (8) Функция ДобавитьФайлыВСписок(ПомещенныеФайлы) не доходит, прерывается с ошибкой в (0).
10 Greeen
 
04.09.18
11:53
(9) Права на папку попробуй выдать всем пользователям и проверить (сейчас скорее всего выборочным пользователям даты)
+ если уже всем - возможно, антивирус блочит
11 dft2014
 
04.09.18
11:55
(10) А можно программно проверить права на папку?
12 Greeen
 
04.09.18
12:01
(11) попробуй файл создать (если там не только для чтения предполагается), типа
ЗТ = новый ТекстовыйДокумент;
Зт.Записать("c:\temp\t.txt");
13 Greeen
 
04.09.18
12:06
+ "C:\temp" - не это значение в виде имени файла передается?
14 dft2014
 
04.09.18
12:10
Другой процедурой я же сохраняю отчеты там:

&НаКлиенте
Процедура Сформировать(Команда)
    
    ТабДок = СформироватьНаСервере();
    
    Если ТабДок.Области.количество() > 0 Тогда
        ПутьСохранения = Объект.ПутьВыгрузки;
        
        ТабДок.Записать(ПутьСохранения + "\Табл.XLSX", ТипФайлаТабличногоДокумента.XLSX);
    КонецЕсли;
    
КонецПроцедуры
15 бомболюк
 
04.09.18
12:11
Первое что надо сделать - это перезапустить сервер приложения. Если не полетит - то имхо винда обновилась, и надо пакет обновления какой то откатывать. Вот не далее как сегодня утром ставил студию - такая же история началась, вылечил с помощью http://comp-profi.com/view_post.php?id=589
16 dft2014
 
04.09.18
12:13
Т.е. на обработке есть две кнопки:
Первая кнопка: создает и сохраняет отчеты - Процедура Сформировать(Команда), см.(14).
Вторая кнопка: отправляет сохраненные отчеты на почту в виде вложений, см.(0).
17 dft2014
 
04.09.18
12:14
(15) Не думаю, что это наш случай. Почти аналогичной обработкой делаем рассылку табелей - все работает!
18 progaoff
 
04.09.18
12:22
(6) Доступа нет. Дай права на чтение и запись пользователю под которым служба Агента запущена. Или открой от администратора локального 1с.
19 dft2014
 
04.09.18
12:27
(18) База лежит на сервере (клиент-серверная). Процедуры выполняются на Клиенте, поэтому вопрос: при чем тут пользователь, под которым запущен Агент?
20 dft2014
 
04.09.18
12:38
Ап!
21 dft2014
 
04.09.18
12:38
Напишите какой-нибудь работающий пример прикрепления вложений к письму!!!
22 Fram
 
04.09.18
12:45
Может уже покажешь ПоместитьФайлы ?
23 Флориан
 
04.09.18
12:51
(22) зачем? человек не хочет думать, не хочет дружить с админами - ему нужно работающий пример и всё
24 dft2014
 
04.09.18
12:55
(23) Админы уже подтвердили полный доступ.
25 dft2014
 
04.09.18
12:58
(22) Из синтаксиса-помощника:

Синтаксис:
ПоместитьФайлы(<ПомещаемыеФайлы>, <ПомещенныеФайлы>, <НаборПомещаемыхФайлов>, <Интерактивно>, <УникальныйИдентификаторФормы>)

Возвращаемое значение:
Тип: Булево.

Описание: Помещает набор файлов из локальной файловой системы во временное хранилище.

Доступность: Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
26 МихаилМ
 
04.09.18
13:11
(0) Вы Мисти ?
27 Флориан
 
04.09.18
13:27
(25) что внутри ПомещаемыеФайлы - смотрел отладчиком?
28 dft2014
 
04.09.18
14:11
Разобралась: я передавала в ПомещаемыеФайлы значение C:\temp, а надо было C:\temp\Отчет.xlsx
Теперь все заработало!!! Всем спасибо!
29 vova1122
 
04.09.18
14:18
(28) Иногда и такое бывает.... Думаешь что что-то сверхестественное случилось, а тут элементарная ошибка по невнимательности. Я еще
30 vova1122
 
04.09.18
14:19
я Еще думал почему 1С ругается на каталог, сообщая что это файл. Ну думаю "так и должно быть..."
2 + 2 = 3.9999999999999999999999999999999...