Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу

1. go_margaret 18 25.02.20 10:10 Сейчас в теме
При попытке адаптации обработки по загрузки данных из Excel выходит ошибка:
Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ...
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При этом соm отрабатывает, но файл не читается.
Тот же самый модуль в обычном приложении отрабатывает без проблем.
Это из-за серверного варианта работы? Как данный вопрос можно исправить?
Метот добавления папки C:\Windows\System32\config\systemprofile\Desktop не помог(((
По теме из базы знаний
Найденные решения
5. Serega-artem 16 25.02.20 11:03 Сейчас в теме
Про клиент-сервер, Вам правильно написали выше. От себя замечу, что для вашей задачи эксель собственно и не нужен. Грубый код (что непонятно спрашивайте)

Процедура АнализФайла() 
	// Читаем файл и преобразуем его в табличный документ
	Попытка 
	ТабДок = Новый ТабличныйДокумент; 
	ТабДок.Прочитать(Объект.ПутьКФайлу);
	// Отправляем таб. док на разбор
	ТЗ	= Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ТочкаВремени");
	ТЗ.Колонки.Добавить("Сотрудник"); 
	ТЗ.Колонки.Добавить("verified"); 
	ТЗ.Колонки.Добавить("ТочкаПрохода");
	ТЗ.Колонки.Добавить("Статус");
Сч = 1;  // Заголовок в файле есть, пойдем сто второй строки. 
Пока НЕ Сч = ТабДок.ВысотаТаблицы цикл 
		  Сч = (Сч+1); 
        НС = ТЗ.Добавить(); 
	 НС.ТочкаВремени = ТабДок.ПолучитьОбласть(Сч,1,Сч,1).ТекущаяОбласть.Текст;
        НС.Сотрудник =  ТабДок.ПолучитьОбласть(Сч,2,Сч,2).ТекущаяОбласть.Текст;
КонецЦикла; 
Исключение 
	Сообщить("Неудалось прочитать файл: " + ОписаниеОшибки());
КонецПопытки; 	
КонецПроцедуры 	
Показать
Alexsh_kz; AndriyVis; mushdaj; +3 Ответить
11. Serega-artem 16 25.02.20 11:15 Сейчас в теме
(9)

    
ТабДок = Новый ТабличныйДокумент; 
 ТабДок.Прочитать(Объект.ПутьКФайлу);


Поясню, ПутьКФайлу - содержит полный путь к файлу НА СЕРВЕРЕ т.к. процедура с этими методами должна быть серверной. Как работать с клиентом и сервером в двух словах не описать. Суть в том, что надо забрать файл с клиента (с ПК пользователя) и поместить его на сервер (туда где "крутится" 1с). Прилагаю два внешних модуля, которые сам писал и использую во всех своих конфигурациях для работы с файловой системой. Один модуль серверный, второй клиент. Какой-какой из названий понятно. Там все грубо, писалось под себя, но думаю разберетесь.
Прикрепленные файлы:
МодулиРаботыСФайлами.zip
Alexsh_kz; go_margaret; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. PhoenixAOD 62 25.02.20 10:56 Сейчас в теме
(1)
Тот же самый модуль в обычном приложении отрабатывает без проблем.
тут несколько вариантом, в УФ заполняется эксель на клиенте или на сервер? скорее всего нет доступа к папке, укажите сетевую, должно помочь. опять же если на сервере заполняется файл, стоит ли на самом сервере офис?
6. go_margaret 18 25.02.20 11:04 Сейчас в теме
(4) если ставлю серверную папку, выходит сообщение:
Приложения, позволяющие открыть ссылки данного типа не установлены.

На самом сервере офис есть, файлы открываю, но видимо какая-то проблема с самим офисом?
2. RustamZz 25.02.20 10:25 Сейчас в теме
Передать с клиента на сервер этот файл и тогда на сервере откроется.
3. go_margaret 18 25.02.20 10:33 Сейчас в теме
(2) Можно более подробно, не совсем поняла, что значит передать файл на сервер?
На текущий момент на процедура на сервере содержит код:
//Пытаемся подключиться к Excel
Попытка
Excel = новый COMОбъект("Excel.Application");
Исключение
Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
Возврат;
КонецПопытки;

//Подключились удачно, открываем файл
Excel.Workbooks.Open(ИмяФайла);
7. mushdaj 25.02.20 11:04 Сейчас в теме
(3) архитектура sql или файловая база?
8. go_margaret 18 25.02.20 11:07 Сейчас в теме
10. mushdaj 25.02.20 11:12 Сейчас в теме
(8) ну значит у вас две проблемы
1. Файл должен быть доступен с кластера 1С, в том числе по правам доступа службы под которой запущен агент сервера
2. На сервере должен быть установлен Word и зарегистрирован COM (обычно автоматом регистрируется при установке), но возможны еще проблемы с разрядностью

а вообще если у вас только чтение файла, без записи, лучший вариант сделать как в (5) будет быстрее читать и не требует офиса
5. Serega-artem 16 25.02.20 11:03 Сейчас в теме
Про клиент-сервер, Вам правильно написали выше. От себя замечу, что для вашей задачи эксель собственно и не нужен. Грубый код (что непонятно спрашивайте)

Процедура АнализФайла() 
	// Читаем файл и преобразуем его в табличный документ
	Попытка 
	ТабДок = Новый ТабличныйДокумент; 
	ТабДок.Прочитать(Объект.ПутьКФайлу);
	// Отправляем таб. док на разбор
	ТЗ	= Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ТочкаВремени");
	ТЗ.Колонки.Добавить("Сотрудник"); 
	ТЗ.Колонки.Добавить("verified"); 
	ТЗ.Колонки.Добавить("ТочкаПрохода");
	ТЗ.Колонки.Добавить("Статус");
Сч = 1;  // Заголовок в файле есть, пойдем сто второй строки. 
Пока НЕ Сч = ТабДок.ВысотаТаблицы цикл 
		  Сч = (Сч+1); 
        НС = ТЗ.Добавить(); 
	 НС.ТочкаВремени = ТабДок.ПолучитьОбласть(Сч,1,Сч,1).ТекущаяОбласть.Текст;
        НС.Сотрудник =  ТабДок.ПолучитьОбласть(Сч,2,Сч,2).ТекущаяОбласть.Текст;
КонецЦикла; 
Исключение 
	Сообщить("Неудалось прочитать файл: " + ОписаниеОшибки());
КонецПопытки; 	
КонецПроцедуры 	
Показать
Alexsh_kz; AndriyVis; mushdaj; +3 Ответить
9. go_margaret 18 25.02.20 11:09 Сейчас в теме
(5) пользователю данные приходят в Ex, соответственно прочитать и записать данные мне нужно из него. Как используя табличный документ открыть данный файл и получить из него данные, программно?
11. Serega-artem 16 25.02.20 11:15 Сейчас в теме
(9)

    
ТабДок = Новый ТабличныйДокумент; 
 ТабДок.Прочитать(Объект.ПутьКФайлу);


Поясню, ПутьКФайлу - содержит полный путь к файлу НА СЕРВЕРЕ т.к. процедура с этими методами должна быть серверной. Как работать с клиентом и сервером в двух словах не описать. Суть в том, что надо забрать файл с клиента (с ПК пользователя) и поместить его на сервер (туда где "крутится" 1с). Прилагаю два внешних модуля, которые сам писал и использую во всех своих конфигурациях для работы с файловой системой. Один модуль серверный, второй клиент. Какой-какой из названий понятно. Там все грубо, писалось под себя, но думаю разберетесь.
Прикрепленные файлы:
МодулиРаботыСФайлами.zip
Alexsh_kz; go_margaret; +2 Ответить
15. go_margaret 18 25.02.20 13:29 Сейчас в теме
(11) да переписала код на табличный документ, все работает и без игры с передачей с сервера на клиент))) Спасибо!
16. Serega-artem 16 25.02.20 13:39 Сейчас в теме
(15) Не за что. Но есть нюанс. Если все работает без переноса между клиентом и сервером, это значит, что клиент и сервер на одной машине. Вы уверены, что всегда так будет?
17. go_margaret 18 25.02.20 13:45 Сейчас в теме
(16) нет, не уверена... сейчас еще посмотрб разные ситацию)
18. Serega-artem 16 25.02.20 13:59 Сейчас в теме
(17) смотрите, чтобы было понятно. Клиент - это тот компьютер, с которого запущен сеанс работы с 1с. Сервер - это тот компьютер где запущена платформа. Если совсем наглядно.

1. Файловая база на ПК. Клиент и сервер в одном месте. Не важно в какую процедур (серверную или клиентскую) путь к файлу передается, он будет одним и тем же.

2. Сервер 1с-предприятия, к нему подключается клиент с другого ПК. Получается клиент одно, а сервер другое. Пользователь указал путь к файлу на своем ПК (C:\share\fail.doc) - это локальный путь. В клиентских процедурах он правильный, т.к. они выполняется на клиенте т.е. на ПК пользователя и там этот путь правильный и корректный. Но если вы передадите этот путь в серверную процедуру, то получите ошибку т.к. файл будет искаться не на компьютере пользователя. а на сервере (там где служба сервера работает) и там он найден естественно не будет.

Поэтому универсальных вариантов два:

1. Перемещать файл на сервер.
2. Использовать сетевые пути. доступные и с клиента и с сервера.

Архитектурно правильный первый вариант.
19. go_margaret 18 25.02.20 14:06 Сейчас в теме
(18) в принципе суть я поняла, но пока не совсем догоняю как это программно реализовать, т.е. тот текст я посмотрела, что во вложении был, там получается что мы файл который указал пользователь записываем программно на сервер и далее используем путь к нему?
20. Serega-artem 16 25.02.20 14:11 Сейчас в теме
(19) В общих чертах да. проблема в том. что просто скопировать файл с клиента на сервер нельзя. Схема следующая:

1. На стороне клиента файл помещается во временное хранилище.

2. На стороне сервера он от туда извлекается и записывается с каким-то локальным путем на сервере. Этот самый путь используется в серверных процедурах по работе с данным файлом.
go_margaret; +1 Ответить
21. go_margaret 18 25.02.20 14:34 Сейчас в теме
(20) Спасибо, попробую все же первый вариант с работой файла на сервере, что бы пока не заморачиваться с перезаписью)))
22. Serega-artem 16 25.02.20 15:10 Сейчас в теме
(21) Ну как гласит сисадминская мудрость: работает - не лезь. Если всё устраивает в данном варианте. зачем что-то трогать) Успехов, коллега!
23. go_margaret 18 25.02.20 15:25 Сейчас в теме
24. AlexO 135 26.02.20 10:29 Сейчас в теме
(18)
Перемещать файл на сервер
Это вообще единственно правильный вариант.
Любой сбой в сети - и цепочка поломалась, а в 1С это вообще критично, с их отсутствием обратной связи и контроля исполнения.
27. Alexsh_kz 01.03.23 12:56 Сейчас в теме
(11) Отдельная благодарность за такой бонус :)
12. mushdaj 25.02.20 11:19 Сейчас в теме
(9) варианта два:
1 - Программно открывать файл на клиенте, передавать на сервер в виде потока двоичных данных, и обрабатывать на севере
2 - Пользователю копировать файл в сетевой каталог, в том числе доступный с сервера SQL
13. mushdaj 25.02.20 11:21 Сейчас в теме
(12) второй вариант соответственно более простой с точки зрения кода
14. Serega-artem 16 25.02.20 11:31 Сейчас в теме
Ну и не сочтите за спам, немного процитирую СП:

ТабличныйДокумент (SpreadsheetDocument)
Прочитать (Read)
Вариант синтаксиса: Из файла
Синтаксис:
Прочитать(<ИмяФайла>, <СпособЧтенияЗначений>)
Параметры:
<ИмяФайла> (обязательный)
Тип: Строка.
Имя файла табличного документа.
<СпособЧтенияЗначений> (необязательный)
Тип: СпособЧтенияЗначенийТабличногоДокумента.
Определяет, каким образом нужно интерпретировать значения, считываемые из исходного документа XLS, XLSX или ODS.
При загрузке табличного документа из формата Excel 97 - 2010 и OpenOffice Calc, в случае если в ячейке исходного документа содержалось значение типа Дата или Число, то в ячейку результирующего табличного документа это значение попадает в зависимости от значения этого параметра.
Значение по умолчанию: Текст.
Описание варианта метода:
Чтение табличного документа из файла.
Вариант синтаксиса: Из потока
Синтаксис:
Прочитать(<Поток>, <СпособЧтенияЗначений>, <ТипФайлаТаблицы>)
Параметры:
<Поток> (обязательный)
Тип: Поток, ПотокВПамяти, ФайловыйПоток.
Поток для чтения табличного документа.
<СпособЧтенияЗначений> (необязательный)
Тип: СпособЧтенияЗначенийТабличногоДокумента.
Определяет, каким образом нужно интерпретировать значения, считываемые из исходного документа XLS, XLSX или ODS.
При загрузке табличного документа из формата Excel 97 - 2010 и OpenOffice Calc, в случае если в ячейке исходного документа содержалось значение типа Дата или Число, то в ячейку результирующего табличного документа это значение попадает в зависимости от значения этого параметра.
Значение по умолчанию: Текст.
<ТипФайлаТаблицы> (необязательный)
Тип: ТипФайлаТабличногоДокумента.
Формат, в котором табличный документ хранится в потоке.
При чтении табличного документа из потока допустимы следующие форматы: MXL, ODS.
Значение по умолчанию: MXL.
Описание варианта метода:
Чтение табличного документа из потока.
При чтении из потока допускается использование только следующих форматов: MXL, MXL7, ODS.
Описание:
Считывает табличный документ из файла.
Позволяет считывать табличный документ из файла табличного документа Microsoft Excel 97 - 2010 ( *.xls и *.xlsx) или электронной таблицы OpenOffice Calc ( *.ods).
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер).
Пример:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\My Documents\Таблица1.mxl");
Использование в версии:
Доступен, начиная с версии 8.0.
Показать
go_margaret; +1 Ответить
25. user1135816 4 26.02.20 11:34 Сейчас в теме
Ком соединение, разрядность ОС, разрядность ПО, компоненты, Доступы к папкам и файлам, монопольный режим и в управляемом приложении открывать/читать через клиент
26. PiotrLoginov 26.02.20 13:34 Сейчас в теме
(25) это лучшее сообщение в данный ветке.
28. yaroslavch 29 19.06.23 11:45 Сейчас в теме
Прописал и сохранение файлов чтоб с сервера читало, однако сообщение ни куда не ушло. А нужно именно эксель открывать, а не встроенной приблудой 1с, которая глючит, если пользователь файл xslx в xls переименовал. А эксель, вполне такое хавает.

Нашел решение, (https://www.azhur-c.ru/arhiv_errors1c.html?id=133)
нужно создать папки desktop на сервере.
Т.к. Эксель не умеет по нормальному работать в серверном режиме.
29. ketr 125 02.04.24 09:21 Сейчас в теме
Мне вот это помогло:
Решение вопроса: Для решения этой пробемы нужно создать следующие каталоги: C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop и выдать права на запись пользователю "Система" Источник: https://fort.crimea.com/support/7911-proizoshla-isklyuchitelnaya-situaciya-microsoft-excel.html
Оставьте свое сообщение

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