|
Чтение Excel в регламентном задании УТ 11 клиент-сервер | ☑ | ||
---|---|---|---|---|
0
PitNN
04.04.14
✎
16:59
|
Добрый день, коллеги.
Решил автоматизировать загрузку данных от клиентов. Многие высылают в экселе, соответственно нужно читать и анализировать её. Чтобы менеджеры не заморачивались с этим, чтение экселя решил вынести в регламентное задание. Но тут возникла проблема с созданием ком-объекта Excel.Application. Почитал статьи, рекомендуют вынести вызов ком-объекта на клиент, но при выполнении регламентного задания нет никакого клиента, все выполняется сервером. Как быть? Посоветуйте |
|||
1
SUA
04.04.14
✎
17:23
|
в регламентном без вариантов только сервер
или прайсы в csv перекидывать сначала и затем скармливать как текст если эксель тупить будет |
|||
2
ДенисЧ
04.04.14
✎
17:32
|
"Почитал статьи, рекомендуют вынести вызов ком-объекта на клиент"
Выкинь эти статьи. |
|||
3
х86
04.04.14
✎
17:39
|
(0)ексель на сервере установлен? )
|
|||
4
PitNN
04.04.14
✎
17:46
|
(2) Хороший совет, но а делать-то чего? ))
|
|||
5
ДенисЧ
04.04.14
✎
17:47
|
(4) а в чём конкретно проблема?
|
|||
6
PitNN
04.04.14
✎
17:47
|
(3) Да, установлен
|
|||
7
lex-kex
04.04.14
✎
17:47
|
(4) На серваке EXCEL установи
|
|||
8
lex-kex
04.04.14
✎
17:48
|
(6) Тогда должно все работать
|
|||
9
PitNN
04.04.14
✎
17:49
|
(5) создание ком объекта вызывает исключение
|
|||
10
PitNN
04.04.14
✎
17:49
|
Сервер работает как служба. Может в этом проблема?
|
|||
11
lex-kex
04.04.14
✎
17:51
|
(10) Скинь код как ты его вызываешь?
|
|||
12
mdocs
04.04.14
✎
17:52
|
может как xml читать.
|
|||
13
PitNN
04.04.14
✎
18:07
|
(11) Вот код:
Попытка Эксель = Новый COMОбъект("Excel.Application"); Исключение СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать Excel. Убедитесь, что на компьютере установлена программа Microsoft Excel. Подробности: '") + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; //Следующая команда откроет книгу: Книга = Эксель.WorkBooks.Open(ИмяФайла); // <-- Здесь вылетает исключение |
|||
14
PitNN
04.04.14
✎
18:07
|
(12) Покажи пример, пожалуйста
|
|||
15
SUA
04.04.14
✎
18:34
|
и какое исключение?
может файла нет? доступа к папке откуда его тянуть? или дальше гадать? |
|||
16
beholder
04.04.14
✎
18:39
|
(13) права на папку? Что за ошибка?
Не рекомендуют на сервере наверное из-за того что по сети файл взад-назад тягать не комильфо. |
|||
17
Heckfy
04.04.14
✎
18:39
|
Сдается мне, что нет прав у пользователя, под которым сервер 1С работает....
|
|||
18
beholder
04.04.14
✎
18:40
|
(14) на инфостарте есть примеры как парсить XSLX но могут возникнуть проблемы если сторонняя прога сохраняет в этот формат.
|
|||
19
PitNN
05.04.14
✎
12:52
|
(15) Вот такое исключение:
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks Файл есть. Он лежит локально на сервере. Доступ к папке есть для всех. |
|||
20
PitNN
05.04.14
✎
12:59
|
Тот же самый код, запущенный на клиенте выполняется без проблем.
|
|||
21
Tateossian
05.04.14
✎
12:59
|
(19) Значение имени файла в студию.
|
|||
22
PitNN
05.04.14
✎
13:03
|
(21) D:\1C\Inomarka\_ElDoc\NaklIn\[email protected]\СФ №00021194 от 21-03-14.XLS
|
|||
23
alexei366
05.04.14
✎
13:07
|
(22) попробуй путь с именем только из латиницы пока что
|
|||
24
alexei366
05.04.14
✎
13:08
|
(23) Если не получиться то мож чо ещё расскажу
|
|||
25
alexei366
05.04.14
✎
13:11
|
(19) И Для интереса, попробуй заместо Open использовать Add
|
|||
26
PitNN
05.04.14
✎
13:21
|
(23) (25) Ни то, ни другое не помогло
|
|||
27
alexei366
05.04.14
✎
13:28
|
(26) а просто Add без имени файла, пустой новый док добавить, и если получитьсязаписать его
|
|||
28
PitNN
05.04.14
✎
13:39
|
(27) Метод Add прошел, но при попытке сохранить документ опять исключение:
Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Office Excel): Метод SaveAs из класса Workbook завершен неверно Файл не сохранен! |
|||
29
PitNN
05.04.14
✎
13:40
|
Не помог и привелигированый режим
|
|||
30
alexei366
05.04.14
✎
13:40
|
(28) А есть папка C:\Users\Default\Desktop ?
|
|||
31
alexei366
05.04.14
✎
13:41
|
(30) когда оффис исполняется на сервере от службы, то он вроде использует эту папку для вр файлов
|
|||
32
PitNN
05.04.14
✎
13:41
|
Скорее всего тут суть в том, что на сервере, на уровне платформы, запрещены файловые операции
|
|||
33
alexei366
05.04.14
✎
13:42
|
(32) чувак у меня так везде работает, и с вордом и с экселем, попробуй (30)
|
|||
34
Denyk
05.04.14
✎
13:42
|
(0) ADO не рассматривали?
|
|||
35
alexei366
05.04.14
✎
13:44
|
(34) Ну если ток для чтения то покатит наверно, я просто для чтения, изменения и записи юзаю, так что мне COM нужен был
|
|||
36
PitNN
05.04.14
✎
13:46
|
(30) Да, папка такая есть на сервере
|
|||
37
alexei366
05.04.14
✎
13:47
|
(36) а сервер 1С скольки битный
|
|||
38
PitNN
05.04.14
✎
13:52
|
(34) Да, пробовал.
db = Новый COMОбъект("ADODB.Connection"); Rs = Новый COMОбъект("ADODB.RecordSet"); Попытка db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\1C\Inomarka\_ElDoc\NaklIn\[email protected]\00021194.XLS;Extended Properties="Excel 8.0;HDR=NO; IMEX=1;"; db.Open(); <-- Исключение Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Текст исключения: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно. |
|||
39
PitNN
05.04.14
✎
13:53
|
(37) Сервер x64
|
|||
40
alexei366
05.04.14
✎
13:55
|
(39) ОООООООО, а попробу C:\Users\Default\Desktop64 создать
|
|||
41
alexei366
05.04.14
✎
13:58
|
||||
42
PitNN
05.04.14
✎
14:00
|
(40) Не помогло
(41) Там и брал строку соединения |
|||
43
alexei366
05.04.14
✎
14:01
|
(42) А может C:\Users\Default64\Desktop
|
|||
44
alexei366
05.04.14
✎
14:02
|
(43) Или тогда от кого служба 1С запущена?
|
|||
45
PitNN
05.04.14
✎
14:06
|
(44) От пользователя домена
|
|||
46
alexei366
05.04.14
✎
14:08
|
(45) И если зайти от него то все в интерактиве получается?
|
|||
47
alexei366
05.04.14
✎
14:09
|
(46) я имею ввиду на серваке
|
|||
48
PitNN
05.04.14
✎
14:11
|
Нет возможности сейчас проверить.
|
|||
49
PitNN
05.04.14
✎
14:12
|
Если код открытия вызывать на стороне клиента, то все работает.
|
|||
50
etc
05.04.14
✎
14:12
|
(42) а если так?:
|
|||
51
alexei366
05.04.14
✎
14:13
|
(48) Как так, ты же смотрел наличие папки, создавал новую на серваке, почему проверить не можешь?
|
|||
52
alexei366
05.04.14
✎
14:13
|
(49) На стороне клиента на сервере?
|
|||
53
alexei366
05.04.14
✎
14:14
|
(52) Всмсле запущеного экземпляра предпрития на сервере?
|
|||
54
PitNN
05.04.14
✎
14:17
|
(51) Чтобы проверить, нужно авторизоваться под пользователем от которого запущен сервер 1С. Я не могу под ним авторизоваться в силу отсутствия пароля
(53) Запускаю экземпляр приложения, вызываю внешнюю обработку и там прописываю процедуру открытия с ключом &НаКлиенте |
|||
55
alexei366
05.04.14
✎
14:23
|
(54) ООООООООО, я походу тебя обманывал и сам забыл
|
|||
56
alexei366
05.04.14
✎
14:24
|
(55) Попробуй эти создать))))
C:\Windows\System32\Config\Systemprofile C:\Windows\SysWOW64\Config\Systemprofile |
|||
57
alexei366
05.04.14
✎
14:25
|
(56) Всмысле в этих папках папку Desktop
|
|||
58
alexei366
05.04.14
✎
14:26
|
(56) И вроде нужно только там какой битности оффис, пофиг на 1С
|
|||
59
PitNN
05.04.14
✎
14:47
|
(56) Вот ты добрый человек! Гений, по другому и не сказать )))
|
|||
60
alexei366
05.04.14
✎
14:49
|
(59) Да блин ты меня заставил на сервак зайти и вспомнить чо да как))))
|
|||
61
PitNN
05.04.14
✎
14:54
|
Единственное что осталось, это команда
Эксель.Application.Quit(); не завершает процесс. Экселька продолжает висеть в диспетчере задач на сервере. В чем может быть дело, подскажи пожалуйста |
|||
62
PitNN
05.04.14
✎
14:58
|
За твои заслуги готов поддержать тебя материально. Переводом либо на телефон
|
|||
63
alexei366
05.04.14
✎
16:00
|
(61) У тя исключение не выскакиевает при закрытии?
|
|||
64
Torquader
06.04.14
✎
00:30
|
(61) Так сначала нужно закрыть все документы, так как иначе мы видим вопрос о необходимости что-то сохранить, только, на самом деле, мы его не видим, так как рабочий стол записи SYSTEM невидим, но, если очень хочется, там окно можно найти и даже нажать кнопку "Нет".
|
|||
65
PitNN
07.04.14
✎
09:17
|
(63) Нет, код исполняется без исключений
|
|||
66
alexei366
07.04.14
✎
09:51
|
(65) Ну в теории не должно ругаться если ты в доке ничо не менял (типа букву в ячейке добавил).
Ну чтобы на точняк, погугли на msdn там или используешь метод Close(0) у WorkSheet или Эксель.Application.Quit(0) (или просто Эксель.Quit(0)). Нули как разтаки определяют закрытие документа или приложения без лишних проверок. Я конеш хз у себя сразу писал с нулями, а вот помню когда один из первых разов таким образом с Word работал, то он у меня с исключением вылетал (я имею ввиду на сервере) |
|||
67
ProProg
07.04.14
✎
09:54
|
УУУ. В сказку попал человек.
Обратись ко мне. Есть решение. Я уже все грабли протоптал с этим делом. Есть у нас решение. Можешь даже не парится. У нас компонента чтения эксель, нативная. Работает во всех режимах серверных на любых осях. |
|||
68
ProProg
07.04.14
✎
09:55
|
Гарантируем поддержку.
Да и собственно задачу импорта решена целой подсистемой. |
|||
69
PitNN
07.04.14
✎
09:57
|
(66) спасибо, попробую, сейчас пока некогда
|
|||
70
PitNN
07.04.14
✎
09:58
|
(67) Есть где почитать о решении?
|
|||
71
ProProg
07.04.14
✎
10:02
|
Лови http://subsystems.ru/catalog/43/595/
Будут вопросы - там есть мой скайп |
|||
72
PitNN
07.04.14
✎
10:08
|
(71) хорошо, спасибо
|
|||
73
PitNN
07.04.14
✎
11:04
|
Сделал вот так и все нормально стало:
Эксель.DisplayAlerts = 0; Эксель.Workbooks.Close(); Эксель.DisplayAlerts = 1; Эксель.Application.Quit(); |
|||
74
Lama12
07.04.14
✎
11:36
|
(56) Объясните про эти папки. Не понял :)
|
|||
75
alexei366
07.04.14
✎
15:49
|
(74) Когда приложение оффиса (Word, Exel) запускается от сервиса винды, коем в частности является служба 1С сервера, то для временных файлов используются данные каталоги взавизимости от разрядности оффиса.
|
|||
76
alexei366
07.04.14
✎
15:55
|
(73) а зачем Эксель.DisplayAlerts = 1?
это свойство вообще задавай после создания кома |
|||
77
Torquader
08.04.14
✎
00:44
|
(76) Если его не поставить, то в следующий раз, когда Excel откроется, сообщения не будут появляться.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |