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

1. go_margaret 15 25.02.20 10:10 Сейчас в теме
При попытке адаптации обработки по загрузки данных из Excel выходит ошибка:
Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ...
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При этом соm отрабатывает, но файл не читается.
Тот же самый модуль в обычном приложении отрабатывает без проблем.
Это из-за серверного варианта работы? Как данный вопрос можно исправить?
Метот добавления папки C:\Windows\System32\config\systemprofile\Desktop не помог(((
По теме из базы знаний
Найденные решения
11. Serega-artem 15 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 15 25.02.20 11:04 Сейчас в теме
(4) если ставлю серверную папку, выходит сообщение:
Приложения, позволяющие открыть ссылки данного типа не установлены.

На самом сервере офис есть, файлы открываю, но видимо какая-то проблема с самим офисом?
2. RustamZz 25.02.20 10:25 Сейчас в теме
Передать с клиента на сервер этот файл и тогда на сервере откроется.
3. go_margaret 15 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 15 25.02.20 11:07 Сейчас в теме
10. mushdaj 25.02.20 11:12 Сейчас в теме
(8) ну значит у вас две проблемы
1. Файл должен быть доступен с кластера 1С, в том числе по правам доступа службы под которой запущен агент сервера
2. На сервере должен быть установлен Word и зарегистрирован COM (обычно автоматом регистрируется при установке), но возможны еще проблемы с разрядностью

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

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

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


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

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

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

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

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

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

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

2. На стороне сервера он от туда извлекается и записывается с каким-то локальным путем на сервере. Этот самый путь используется в серверных процедурах по работе с данным файлом.
go_margaret; +1 Ответить
21. go_margaret 15 25.02.20 14:34 Сейчас в теме
(20) Спасибо, попробую все же первый вариант с работой файла на сервере, что бы пока не заморачиваться с перезаписью)))
22. Serega-artem 15 25.02.20 15:10 Сейчас в теме
(21) Ну как гласит сисадминская мудрость: работает - не лезь. Если всё устраивает в данном варианте. зачем что-то трогать) Успехов, коллега!
23. go_margaret 15 25.02.20 15:25 Сейчас в теме
24. AlexO 134 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 15 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 на сервере.
Т.к. Эксель не умеет по нормальному работать в серверном режиме.
Оставьте свое сообщение
Вакансии
Разработчик 1С
Ростов-на-Дону
зарплата от 230 000 руб. до 260 000 руб.
Полный день

Консультант 1С ERP
Москва
зарплата от 200 000 руб. до 250 000 руб.
Полный день

Аналитик 1C
Самара
зарплата от 160 000 руб. до 180 000 руб.
Полный день

Старший программист 1С
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Аналитик 1С
Казань
зарплата от 200 000 руб. до 250 000 руб.
Полный день