Ошибка при открытии .xls

1. qux 25 19.06.17 16:53 Сейчас в теме
Имеем:
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'


Ветки форума на подобную тему читал, все о чем там говорится пробовал. Может будут еще какие мысли.
По теме из базы знаний
Найденные решения
36. PerlAmutor 129 19.06.18 09:43 Сейчас в теме
(34) Когда я выбираю файл через диалог выбора - он помещается в ДвоичныеДанные, оттуда во Временное Хранилище, адрес хранилища передается на сервер, там он забирается из хранилища и записывается через ДвоичныеДанные во временную папку через ПолучитьИмяВременногоФайла. Затем я уже передаю это имя в ТабличныйДокумент, который создаю через оператор Новый, затем вызываю Прочитать() и получаю ошибку. Содержимое временного файла проверял - идентичное с тем, что на клиенте. Тем же самым алгоритмом mxl файлы читаются на ура.
---
UPDATE: поборол таки. Оказывается 1С тупенькая и ей обязательно нужно сообщать расширение файла для того, чтобы она могла понять по какому алгоритму ей грузить документ:

Это:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла();


Заменяем на это и все работает:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла(".xlsx");
kaaasteeen; user599318_virus235; m_kislyak; AlexeyPapanov; JinAir7460; KirinaAS; echo77; +7 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
15. AntonSm 30 20.06.17 12:28 Сейчас в теме
(1) а сам временный файл создается?
Еще может быть, что при копировании файла ничего и не происходит. Т.е. временный не является копией файла из письма.
Права на папку %темп% есть? Можно проверить создав там произвольный файл в этой же процедуре и проверить, что он действительно там создался.
16. qux 25 20.06.17 12:57 Сейчас в теме
(15) Временный файл создается. И от других отправителей временные файлы создавшиеся после копирования их вложений открываются.
18. qux 25 20.06.17 13:00 Сейчас в теме
(15) Можно и не копировать во временный файл, все равно это картины не меняет. Это я на всякий случай попробовал...
27. пользователь 20.06.17 23:07
Сообщение было скрыто модератором.
...
28. qux 25 21.06.17 07:30 Сейчас в теме
(27) ...затем я его вручную сохраняю в формате, который предположительно должен прочитать 1С. Файл не открывается.

Комментарий про лыжи, думаю лишний...
2. user616578_warlonx 19.06.17 18:01 Сейчас в теме
Вариант с переносом %temp% в другое место я так понимаю уже пробовали?
7. qux 25 20.06.17 07:47 Сейчас в теме
(2) Пробовал. Но, все вложения открываются, кроме этого вложения, которое приходит от одного адресата.



Т.е. все файлы находятся в одной папке, но от одного адресата вложения не открываются.
3. SyachinS 19.06.17 18:04 Сейчас в теме
Юзеры работают на сервере?
6. qux 25 20.06.17 07:42 Сейчас в теме
(3) Юзеры работают: Клиент - Сервер. Но и из терминальной сессии на этом файле проявляется ошибка.
4. shnurov 20.06.17 03:17 Сейчас в теме
В управляемых формах нужно не забывать где выполняется код, если на клиенте то и пути к папкам доступны только клиентские, если на сервере то папки доступны только те что видит пользователь от имени которого запущена служба на сервере с самого сервера. В неуправляемых формах я честно сказать не знаю как с этим, но скорее всего у вас проблема в путях к файлу.
5. qux 25 20.06.17 07:41 Сейчас в теме
(4) Обработка написана на неуправляемой форме.
8. varlon 20.06.17 09:31 Сейчас в теме
А знак $ только в имени этого файла присутствует?
10. qux 25 20.06.17 09:53 Сейчас в теме
(8) Знак $ убирал из имени файла, файл все равно не открывается.
9. v3rter 20.06.17 09:38 Сейчас в теме
Может адресат присылает xlsx с расширением xls?
11. v3rter 20.06.17 10:44 Сейчас в теме
Попробуйте переименовать в xlsx и открыть еще раз. Попробуйте сделать паузу на 2...3 секунды перед открытием на случай "любопытства" антивируса на сервере.
12. qux 25 20.06.17 11:49 Сейчас в теме
(11) Антивируса на сервере нет, если не считать стандартного WinServer Defender. Переименование не помогло (
13. KapasMordorov 428 20.06.17 12:08 Сейчас в теме
8.3.9 платформу попробуйте.
19. qux 25 20.06.17 13:04 Сейчас в теме
(13) Попробовал. Ошибка проявилась и в этой версии платформы.
14. v3rter 20.06.17 12:27 Сейчас в теме
Может в этом файле несколько листов?
17. qux 25 20.06.17 12:58 Сейчас в теме
(14) Лист один, проверял эту версию одной из первых (
20. qux 25 20.06.17 13:07 Сейчас в теме
На первый взгляд разница между файлами которые открываются и теми которые не открываются (при одинаковом количестве информации на листе Excel) в размере. Файлы которые не открываются меньше примерно в два раза.
21. AntonSm 30 20.06.17 13:54 Сейчас в теме
(20) а если указать СпособЧтенияЗначенийТабличногоДокумента.Текст, будет какая-либо информация прочитана из файла?
22. v3rter 20.06.17 14:29 Сейчас в теме
(20)
Файлы которые не открываются меньше примерно в два раза.
Если открыть и сохранить в экселе - тоже?
23. qux 25 20.06.17 16:59 Сейчас в теме
(21) Пробовал, та же ошибка.
24. qux 25 20.06.17 17:13 Сейчас в теме
(22) Когда открываю этот файл (размер 6 кб) и нажимаю "Сохранить как" то выбирается следующее расширение:


Когда сохраняю с расширением:

Получается размер 7кб, но 1С не открывает все равно.
26. AntonSm 30 20.06.17 22:24 Сейчас в теме
(24) выкладывай тогда уж сам файл.
Все возможные предположения либо высказаны, либо ты сам уже попробовал.
32. v3rter 21.06.17 12:58 Сейчас в теме
(24) Попробуйте сохранить его как Лист(книга) эксель 97 или как просто эксель.
25. user616578_warlonx 20.06.17 20:42 Сейчас в теме
Немного путаницы
Не открываются файлы от одного отправителя?
или
не открываются некоторые файлы одного отправителя?
или
не открываются некоторые файлы нескольких отправителей?

По комментариям нестыковки.
Если от 1 отправителя ничего не открывается - тогда надо копать исходное письмо.
29. qux 25 21.06.17 07:33 Сейчас в теме
(25) Не открываются файлы от одного отправителя. Именно это утверждается во всех моих сообщениях.
"все файлы находятся в одной папке, но от одного адресата вложения не открываются."
30. varlon 21.06.17 07:48 Сейчас в теме
(29) тогда копайте в сторону исходного письма и отправителя. Возможно там есть серьезные отличия.
31. Xershi 1479 21.06.17 09:47 Сейчас в теме
(29) возможно он отправляет пдф через 1С, а он бывает битый вот и итог! Так что нудно знать точно что файл не битый и его расширение. Запроси у поставщика инфу и дело в с концом!
33. PerlAmutor 129 19.06.18 08:58 Сейчас в теме
Возникла та же проблема. Метод Прочитать() табличного документа не работает ни на 8.3.7 ни на 8.3.11 для .xls и .xlsx файлов. Тот же .mxl открывается отлично, лежит рядом с xls, в той же временной папке, также передается через временное хранилище. Дело явно в 1С, т.к. пробовал .xls (97) открывать и .xlsx (2010). При этом в пользовательском режиме на тонком клиенте, через Файл->Открыть отлично открывает, даже там где не установлен офис.
---
UPDATE: похоже что дело во включенном режиме совместимости конфигурации. В моем случае это 8.3.6, поэтому неважно на какой платформе выполняется код...
35. PerlAmutor 129 19.06.18 09:39 Сейчас в теме
(33) И все-таки нет. Проверил на ERP 2.4, без режима совместимости на 8.3.10. Ошибка везде одна и та же.
34. user954807 19.06.18 09:12 Сейчас в теме
Была подобная ошибка, когда файл ексель был открыт другим пользователем на другом ПК. Фоновое задание должно было перезаписать данный файл.
36. PerlAmutor 129 19.06.18 09:43 Сейчас в теме
(34) Когда я выбираю файл через диалог выбора - он помещается в ДвоичныеДанные, оттуда во Временное Хранилище, адрес хранилища передается на сервер, там он забирается из хранилища и записывается через ДвоичныеДанные во временную папку через ПолучитьИмяВременногоФайла. Затем я уже передаю это имя в ТабличныйДокумент, который создаю через оператор Новый, затем вызываю Прочитать() и получаю ошибку. Содержимое временного файла проверял - идентичное с тем, что на клиенте. Тем же самым алгоритмом mxl файлы читаются на ура.
---
UPDATE: поборол таки. Оказывается 1С тупенькая и ей обязательно нужно сообщать расширение файла для того, чтобы она могла понять по какому алгоритму ей грузить документ:

Это:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла();


Заменяем на это и все работает:
РасположениеКопииФайла = ПолучитьИмяВременногоФайла(".xlsx");
kaaasteeen; user599318_virus235; m_kislyak; AlexeyPapanov; JinAir7460; KirinaAS; echo77; +7 Ответить
37. PerlAmutor 129 19.06.18 10:24 Сейчас в теме
(36) Причем важно указывать верное расширение, если указать ".xls" вместо ".xlsx" (если он действительно там), то метод Прочитать() также перестает работать.
tolyan_ekb; AlexeyPapanov; KirinaAS; +3 Ответить
40. KirinaAS 101 19.07.19 12:47 Сейчас в теме
(37)
.xlsx
Вот это прям супер помогло. Спасибо!
42. tolyan_ekb 104 11.03.21 14:24 Сейчас в теме
(37) спасибо, делал загрузку по файлу-примеру в формате ".xls" получал такое же расширение ПолучитьИмяВременногоФайла(xls). Но пользователи решили загрузить отредактированный файл ".xlsx" и появилась ошибка "... доступ к файлу не может быть получен 1с". Пока не нашел эту тему думал, что ошибка в правах на каталог.
Nefertary; +1 Ответить
38. echo77 1880 12.07.19 10:22 Сейчас в теме
(36) Поставьте отметку, что это решение, пожалуйста. Это поможет быстрее найти ответ другим участникам
39. PerlAmutor 129 12.07.19 17:19 Сейчас в теме
(38) Эту отметку может поставить только автор темы.
41. AlexeyPapanov 459 10.04.20 19:01 Сейчас в теме
(36) Спасибо!
Тоже сидел голову ломал. Магия какая-то)
44. aleksanders 04.04.24 15:19 Сейчас в теме
(36)
Оказывается 1С тупенькая

Не всегда она такая плохая...Еще добавлю в копилку знаний. Все операции идут по вашему алгоритму, после записи файла столкнулся с проблемой:

Невозможно прочитать файл "C:\Users\USR1CV8\AppData\Local\Temp\00000001.xls". Ошибка при вызове метода контекста (Прочитать): Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\00000001.xls'. Доступ к файлу не может быть получен.

Надо упомянуть, что не все файлы экселя созданы самим экселем! Отсюда (я не знаток структур файлов) предположу, что у файла эксель есть образно говоря какие-то заголовки в которых описаны некие служебные данные. В том числе и какой программой он был создан например. И когда эти заголовки сделаны не правильно - вне зависимости как вы будете менять расширение....1С не сможет прочесть файл, потому что в служебных полях 1С найдет или не найдет описания для подбора алгоритма чтения.

Проверяется легко: копируем содержимое проблемного файла и создаем его настоящим экселем - и вуаля все читается.

Таким образом некие служебные поля файлов должны быть правильно заполнены чтобы 1С смогла их прочесть ...
45. PerlAmutor 129 04.04.24 19:55 Сейчас в теме
(44)
Еще бывает сюрприз, когда создал временный файл - ушел в долгий алгоритм проводящий документы за год, возвращается к временному файлу, а его уже не существует... Платформа сама удаляет временные файлы по прошествии некоего времени, даже если алгоритм не закончил с ним работать...
46. user1880116 04.04.24 21:33 Сейчас в теме
(45)
Платформа сама удаляет временные файлы по прошествии некоего времени
...
даже если алгоритм
А вот не надо таки кривые алгоритмы делать.

Оно удаляется через 20 минут после серверного вызова. И это правильно, потому что следующий серверный вызов можт прийти на другой рабочий сервер, на дисковой системе которого тебе никто ничего не обещал.
43. maslyann 13 05.10.23 14:09 Сейчас в теме
В моем случае помог только перезапуск кластера сервера. Другие методы не помогли.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот