Имеем:
1С:Предприятие 8.3 (8.3.8.1747)
Бухгалтерия предприятия, редакция 2.0 (2.0.66.26)
MS SQL Server 2008 R2
1C получает почту, сохраняет вложения в папку на сервере. Права к папке в наличии. Далее юзер с помощью обработки открывает нужное ему вложение и делает с ним что хочет.
*Копирую файл на всякий случай для избежания проблем с правами
От одного и того-же адресата приходят письма с вложенными файлами .xls
Одно вложение открывается без проблем, другое не открывается с ошибкой:
Ветки форума на подобную тему читал, все о чем там говорится пробовал. Может будут еще какие мысли.
1С:Предприятие 8.3 (8.3.8.1747)
Бухгалтерия предприятия, редакция 2.0 (2.0.66.26)
MS SQL Server 2008 R2
1C получает почту, сохраняет вложения в папку на сервере. Права к папке в наличии. Далее юзер с помощью обработки открывает нужное ему вложение и делает с ним что хочет.
ИмяВременногоФайла=ПолучитьИмяВременногоФайла(".xls");
КопироватьФайл("\\srv\1Cpost\"+ЭлементыФормы.СписокПисем.ТекущаяСтрока.ИмяВложения,ИмяВременногоФайла);
ТабличныйДокумент = Новый ТабличныйДокумент;
Попытка
ТабличныйДокумент.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ТабличныйДокумент.Показать();
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
Показать*Копирую файл на всякий случай для избежания проблем с правами
От одного и того-же адресата приходят письма с вложенными файлами .xls
Одно вложение открывается без проблем, другое не открывается с ошибкой:
{ВнешняяОбработка.mail.Форма.Форма.Форма(211)}: Ошибка при вызове метода контекста (Прочитать): Ошибка при выполнении файловой операции 'C:\Users\...\AppData\Local\Temp\3\v8_C8BE_15.xls'
Ветки форума на подобную тему читал, все о чем там говорится пробовал. Может будут еще какие мысли.
По теме из базы знаний
Найденные решения
(34) Когда я выбираю файл через диалог выбора - он помещается в ДвоичныеДанные, оттуда во Временное Хранилище, адрес хранилища передается на сервер, там он забирается из хранилища и записывается через ДвоичныеДанные во временную папку через ПолучитьИмяВременногоФайла. Затем я уже передаю это имя в ТабличныйДокумент, который создаю через оператор Новый, затем вызываю Прочитать() и получаю ошибку. Содержимое временного файла проверял - идентичное с тем, что на клиенте. Тем же самым алгоритмом mxl файлы читаются на ура.
---
UPDATE: поборол таки. Оказывается 1С тупенькая и ей обязательно нужно сообщать расширение файла для того, чтобы она могла понять по какому алгоритму ей грузить документ:
Это:
Заменяем на это и все работает:
---
UPDATE: поборол таки. Оказывается 1С тупенькая и ей обязательно нужно сообщать расширение файла для того, чтобы она могла понять по какому алгоритму ей грузить документ:
Это:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла();
Заменяем на это и все работает:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла(".xlsx");
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) а сам временный файл создается?
Еще может быть, что при копировании файла ничего и не происходит. Т.е. временный не является копией файла из письма.
Права на папку %темп% есть? Можно проверить создав там произвольный файл в этой же процедуре и проверить, что он действительно там создался.
Еще может быть, что при копировании файла ничего и не происходит. Т.е. временный не является копией файла из письма.
Права на папку %темп% есть? Можно проверить создав там произвольный файл в этой же процедуре и проверить, что он действительно там создался.
В управляемых формах нужно не забывать где выполняется код, если на клиенте то и пути к папкам доступны только клиентские, если на сервере то папки доступны только те что видит пользователь от имени которого запущена служба на сервере с самого сервера. В неуправляемых формах я честно сказать не знаю как с этим, но скорее всего у вас проблема в путях к файлу.
Немного путаницы
Не открываются файлы от одного отправителя?
или
не открываются некоторые файлы одного отправителя?
или
не открываются некоторые файлы нескольких отправителей?
По комментариям нестыковки.
Если от 1 отправителя ничего не открывается - тогда надо копать исходное письмо.
Не открываются файлы от одного отправителя?
или
не открываются некоторые файлы одного отправителя?
или
не открываются некоторые файлы нескольких отправителей?
По комментариям нестыковки.
Если от 1 отправителя ничего не открывается - тогда надо копать исходное письмо.
Возникла та же проблема. Метод Прочитать() табличного документа не работает ни на 8.3.7 ни на 8.3.11 для .xls и .xlsx файлов. Тот же .mxl открывается отлично, лежит рядом с xls, в той же временной папке, также передается через временное хранилище. Дело явно в 1С, т.к. пробовал .xls (97) открывать и .xlsx (2010). При этом в пользовательском режиме на тонком клиенте, через Файл->Открыть отлично открывает, даже там где не установлен офис.
---
UPDATE: похоже что дело во включенном режиме совместимости конфигурации. В моем случае это 8.3.6, поэтому неважно на какой платформе выполняется код...
---
UPDATE: похоже что дело во включенном режиме совместимости конфигурации. В моем случае это 8.3.6, поэтому неважно на какой платформе выполняется код...
(34) Когда я выбираю файл через диалог выбора - он помещается в ДвоичныеДанные, оттуда во Временное Хранилище, адрес хранилища передается на сервер, там он забирается из хранилища и записывается через ДвоичныеДанные во временную папку через ПолучитьИмяВременногоФайла. Затем я уже передаю это имя в ТабличныйДокумент, который создаю через оператор Новый, затем вызываю Прочитать() и получаю ошибку. Содержимое временного файла проверял - идентичное с тем, что на клиенте. Тем же самым алгоритмом mxl файлы читаются на ура.
---
UPDATE: поборол таки. Оказывается 1С тупенькая и ей обязательно нужно сообщать расширение файла для того, чтобы она могла понять по какому алгоритму ей грузить документ:
Это:
Заменяем на это и все работает:
---
UPDATE: поборол таки. Оказывается 1С тупенькая и ей обязательно нужно сообщать расширение файла для того, чтобы она могла понять по какому алгоритму ей грузить документ:
Это:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла();
Заменяем на это и все работает:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла(".xlsx");
(37) спасибо, делал загрузку по файлу-примеру в формате ".xls" получал такое же расширение ПолучитьИмяВременногоФайла(xls). Но пользователи решили загрузить отредактированный файл ".xlsx" и появилась ошибка "... доступ к файлу не может быть получен 1с". Пока не нашел эту тему думал, что ошибка в правах на каталог.
(36)
Не всегда она такая плохая...Еще добавлю в копилку знаний. Все операции идут по вашему алгоритму, после записи файла столкнулся с проблемой:
Невозможно прочитать файл "C:\Users\USR1CV8\AppData\Local\Temp\00000001.xls". Ошибка при вызове метода контекста (Прочитать): Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\00000001.xls'. Доступ к файлу не может быть получен.
Надо упомянуть, что не все файлы экселя созданы самим экселем! Отсюда (я не знаток структур файлов) предположу, что у файла эксель есть образно говоря какие-то заголовки в которых описаны некие служебные данные. В том числе и какой программой он был создан например. И когда эти заголовки сделаны не правильно - вне зависимости как вы будете менять расширение....1С не сможет прочесть файл, потому что в служебных полях 1С найдет или не найдет описания для подбора алгоритма чтения.
Проверяется легко: копируем содержимое проблемного файла и создаем его настоящим экселем - и вуаля все читается.
Таким образом некие служебные поля файлов должны быть правильно заполнены чтобы 1С смогла их прочесть ...
Оказывается 1С тупенькая
Не всегда она такая плохая...Еще добавлю в копилку знаний. Все операции идут по вашему алгоритму, после записи файла столкнулся с проблемой:
Невозможно прочитать файл "C:\Users\USR1CV8\AppData\Local\Temp\00000001.xls". Ошибка при вызове метода контекста (Прочитать): Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\00000001.xls'. Доступ к файлу не может быть получен.
Надо упомянуть, что не все файлы экселя созданы самим экселем! Отсюда (я не знаток структур файлов) предположу, что у файла эксель есть образно говоря какие-то заголовки в которых описаны некие служебные данные. В том числе и какой программой он был создан например. И когда эти заголовки сделаны не правильно - вне зависимости как вы будете менять расширение....1С не сможет прочесть файл, потому что в служебных полях 1С найдет или не найдет описания для подбора алгоритма чтения.
Проверяется легко: копируем содержимое проблемного файла и создаем его настоящим экселем - и вуаля все читается.
Таким образом некие служебные поля файлов должны быть правильно заполнены чтобы 1С смогла их прочесть ...
(44)
Еще бывает сюрприз, когда создал временный файл - ушел в долгий алгоритм проводящий документы за год, возвращается к временному файлу, а его уже не существует... Платформа сама удаляет временные файлы по прошествии некоего времени, даже если алгоритм не закончил с ним работать...
Еще бывает сюрприз, когда создал временный файл - ушел в долгий алгоритм проводящий документы за год, возвращается к временному файлу, а его уже не существует... Платформа сама удаляет временные файлы по прошествии некоего времени, даже если алгоритм не закончил с ним работать...
(45)
Оно удаляется через 20 минут после серверного вызова. И это правильно, потому что следующий серверный вызов можт прийти на другой рабочий сервер, на дисковой системе которого тебе никто ничего не обещал.
Платформа сама удаляет временные файлы по прошествии некоего времени
...даже если алгоритм
А вот не надо таки кривые алгоритмы делать.
Оно удаляется через 20 минут после серверного вызова. И это правильно, потому что следующий серверный вызов можт прийти на другой рабочий сервер, на дисковой системе которого тебе никто ничего не обещал.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот