|
1С и Ексель | ☑ | ||
---|---|---|---|---|
0
bard666
15.05.15
✎
10:30
|
Столкнулся со следущим: При сохранении файла ексель в 1С вылетает ошибка:
Ошибка при вызове метода контекста (Save) ТекущийДокЕксель.Save(); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод Save из класса Application завершен неверно Порылся на форумах, внятного ответа как исправить не нашёл. Делается следущее: есть файл екселя (.xls) с заданной структурой, в него вносятся данные, сохраняются, отсылаются на почты. Может ли быть такая ошибка из-за того, что на сервере, где выполняется обработка стоит 2013 офис и файл открывается в режиме совместимости? Как это обходить? |
|||
1
bard666
15.05.15
✎
10:59
|
Метод saveAs вообще не обнаружен.
|
|||
2
Ненавижу 1С
гуру
15.05.15
✎
11:01
|
может прав нет на место сохранения?
|
|||
3
bard666
15.05.15
✎
11:01
|
Никто не сталкивался?
|
|||
4
bard666
15.05.15
✎
11:02
|
Права есть. Если просто открыть екселем, изменить и сохранить как - все прокатывает, а через 1С сохранить не получается.
|
|||
5
bard666
15.05.15
✎
11:04
|
Создается файлик, но ячейки пустые. Формат вроде нужный - .xls
|
|||
6
Ненавижу 1С
гуру
15.05.15
✎
11:05
|
(4) если это делается на сервере, то права надо смотреть у пользователя под кем работает служба сервера приложений
|
|||
7
фобка
15.05.15
✎
11:13
|
Новая книга? Попобуй saveas()
|
|||
8
bard666
15.05.15
✎
11:13
|
(6) Попробую уточнить. По результатам отпишусь.
|
|||
9
bard666
15.05.15
✎
11:13
|
(7) При этом методе
Метод объекта не обнаружен (SaveAs) ТекущийДокЕксель.SaveAs(КаталогДанных + "\" + ТекИмя); |
|||
10
фобка
15.05.15
✎
11:14
|
Текущийдокэксель это книга или аппликейшн?
|
|||
11
фобка
15.05.15
✎
11:17
|
Ну кароч ты книгу должен сохранять. Покажи что присваиваешь текущийдокэксель
|
|||
12
bard666
15.05.15
✎
11:32
|
До меня делалось:
Код функции, которая возвращает ТекущийДок Excel = 0; Попытка Excel = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Не удалось инициализировать Excel"); Возврат Неопределено; КонецПопытки; Попытка тИмяСупера = СокрЛП(Супервайзер.Наименование); тИмяСупера = СтрЗаменить(тИмяСупера, "#", ""); чПоз = Найти(тИмяСупера, " "); Если чПоз > 0 Тогда тИмяСупера = СокрЛП(Лев(тИмяСупера, чПоз)); КонецЕсли; тТекстАшан = ""; чПозНайшлиАшан = Найти(Должность.Наименование, "АШАН"); Если чПозНайшлиАшан > 0 Тогда тТекстАшан = "_ashan"; КонецЕсли; ИмяФайлаКопия = тИмяСупера + "_" + СокрЛП(Должность.Должность) + тТекстАшан + "_" + СокрЛП(Должность.Код) + "_"+Месяц(ТекущаяДата()); ИмяФайлаКопия = СтрЗаменить(ИмяФайлаКопия,"00000",""); ИмяТекужегоДокументаЕксель = СокрЛП(КаталогДанных) + "\" + ИмяФайлаКопия + ".xls"; Попытка КопироватьФайл(ИмяФайла, ИмяТекужегоДокументаЕксель); Excel.Workbooks.Open(ИмяТекужегоДокументаЕксель); Исключение Сообщить("Некорректное имя файла при копировании (" + ИмяФайла + ") в (" + ИмяТекужегоДокументаЕксель + ")"); Excel = 0; КонецПопытки; Исключение Сообщить(ОписаниеОшибки()); Excel.Quit(); Excel = 0; КонецПопытки; Возврат Excel; |
|||
13
фобка
15.05.15
✎
11:33
|
(12) в данном случае текущийдок это не книга
|
|||
14
фобка
15.05.15
✎
11:34
|
Текдок.activeworkbook
|
|||
15
фобка
15.05.15
✎
11:35
|
И да - в (12) копрокод
|
|||
16
bard666
15.05.15
✎
11:37
|
(15) Пробовал
ТекущийДокЕксель.Application.Workbooks.SaveAs(КаталогДанных + "\" + ТекИмя); ТекущийДокЕксель.Workbooks.SaveAs(КаталогДанных + "\" + ТекИмя); Также не видит функцию |
|||
17
bard666
15.05.15
✎
11:43
|
(15)
{Форма.Форма.Форма(571)}: Ошибка при вызове метода контекста (SaveAs) ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + "\" + ТекИмя); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно |
|||
18
фобка
15.05.15
✎
11:43
|
(16) workbooks это не workbook - другой объект
|
|||
19
Wern
15.05.15
✎
11:43
|
(16) смотри (12). то что у тебя все неправильное написание.
|
|||
20
фобка
15.05.15
✎
11:44
|
Ответ дан выше, перечитай (14)
|
|||
21
bard666
15.05.15
✎
11:46
|
(20) я в (17) показал какая ошибка выпадает при ТекущийДокЕксель.ActiveWorkbook
|
|||
22
bard666
15.05.15
✎
11:47
|
(19) где неправильно?
|
|||
23
фобка
15.05.15
✎
11:47
|
Сообщить(каталогданных+"\"+текимя);
|
|||
24
bard666
15.05.15
✎
11:58
|
(23) Здесь все четко.
"F:\Ведомости\имя.xls" |
|||
25
фобка
15.05.15
✎
12:01
|
(24) Если файл существует попробуй опять save(). Для saveas можно вторым параметром задать формат файла еще
|
|||
26
bard666
15.05.15
✎
12:07
|
(25) Я ж говорю - ошибка есть, но файл пустой появляется..)
|
|||
27
bard666
15.05.15
✎
12:10
|
(25) Попробовал передать формат
{Форма.Форма.Форма(571)}: Ошибка при вызове метода контекста (SaveAs) ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + "\" + ТекИмя, ".xls"); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно |
|||
28
фобка
15.05.15
✎
12:13
|
(27) не, формат это число. Передай туда 50
|
|||
29
фобка
15.05.15
✎
12:16
|
Существует ли на сервере f:\ведомости?
|
|||
30
bard666
15.05.15
✎
12:17
|
(28) Создал. Ура! Осталось протестировать откроет ли 2003 офис
|
|||
31
фобка
15.05.15
✎
12:22
|
(30) Вбей в справке по vba xlFileFormat
|
|||
32
bard666
15.05.15
✎
12:56
|
(31) а в Save есть подобные параметры?
|
|||
33
фобка
15.05.15
✎
13:12
|
(32) нет, он вообще без параметров
|
|||
34
bard666
15.05.15
✎
13:20
|
(33) Тогда ладно. Файлики создаются.
Есть ещё вопрос. Обработина, сделанная по образу и подобию http://catalog.mista.ru/public/88055/ ругается на .Windows(1).Visible = 1; |
|||
35
фобка
15.05.15
✎
13:28
|
(34) значит опять путанница с объектами
|
|||
36
bard666
15.05.15
✎
13:29
|
Код такой:
ТабДок = Новый табличныйДокумент; АктивныйДокумент = ПолучитьМакет("Макет"); //-- Макет Active Document лист Ексель. КомОбъект = АктивныйДокумент.Получить(); //--- далее пишем в Cells(НомерСтроки, НомерСтолбца). Value все что нужно. см.пример ниже //шапка Лист=КомОбъект.Sheets(1); Лист.Cells(9,4).Value=Идент; Лист.Cells(10,4).Value=Док.Организация.ПолноеНаименование(); Лист.Cells(11,4).Value=НомерКонтракта; Лист.Cells(12,4).Value= ?(ЗначениеЗаполнено(Дата), Формат(Дата, "ДФ=dd.MM.yyyy"), Формат(Док.Дата, "ДФ=dd.MM.yyyy")); Лист.Cells(13,4).Value=НомРеестра; СимволовДоНулей=Найти(ДокППИ.Номер,"0"); НомППИ=Число(Прав(ДокППИ.Номер,СтрДлина(ДокППИ.Номер)-СимволовДоНулей-1)); Лист.Cells(14,4).Value=СокрЛП(Формат(НомППИ, "ЧГ=0")); Лист.Cells(15,4).Value=Формат(ДокППИ.Дата, "ДФ=dd.MM.yyyy"); //Зарплата к выплате организаций РезультатЗапроса = Запрос.Выполнить(); Если НЕ(РезультатЗапроса.Пустой()) Тогда //СтрокаОтчета = Лист.Range("Строка"); СтрокаОтчета = Лист.Range("A20"); Счетчик=0; Итого=0; Выборка=РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Счетчик=Счетчик+1; Если Счетчик>1 Тогда СтрокаОтчета.EntireRow.Copy(); СтрокаОтчета.EntireRow.Insert(); КонецЕсли; //ТекСтрока = СтрокаОтчета.Range("A"+(СтрокаОтчета.Row-1)); //ТекСтрока.Cells(СтрокаОтчета.Row-1,1).Value="Вася"; //ТекСтрока.Find("<ИмяСотрудника>").Value = СокрЛП(Выборка.ФизЛицоПолностью); Лист.Cells(19+Счетчик,1).Value=СокрЛП(Выборка.ФизЛицоПолностью); Лист.Cells(19+Счетчик,4).Value=СокрЛП(Выборка.ЛицевойСчет); Лист.Cells(19+Счетчик,6).Value=Число(СокрЛП(Выборка.Сумма)); Итого=Итого+Выборка.Сумма; КонецЦикла; КонецЕсли; //итоговая строка Лист.Cells(19+Счетчик+1,4).Value=СчетКонтракта; Лист.Cells(19+Счетчик+1,6).Value=Итого; Лист.Cells(19+Счетчик+20,1).Value=""; //заплатка с целью увидеть макет целиком КомОбъект.Application.Visible = 1; КомОбъект.Windows(1).Visible = 1; КомОбъект.Activate(); |
|||
37
bard666
15.05.15
✎
13:30
|
(35) выложил код. Запросы всякие вырезал.
|
|||
38
bard666
15.05.15
✎
13:32
|
Вся эта ботва вылезла когда поставили 2013 офис)
|
|||
39
DomovoiAtakue
15.05.15
✎
13:43
|
Отдельный момент.
Я может ошибаюсь: по коду если все удачно сохранилось, то объект excel не удаляется. |
|||
40
bard666
15.05.15
✎
13:45
|
(39) не совсем понимаю к чему это..
|
|||
41
bard666
15.05.15
✎
13:48
|
Ошибка такая: Ошибка при вызове метода контекста (Windows)
КомОбъект.Windows(1).Visible = 1; по причине: Произошла исключительная ситуация (0x8002000b) |
|||
42
DomovoiAtakue
15.05.15
✎
13:54
|
(40)Ну если я все правильно понимаю, то 10 раз запустите свой код, не выходя из 1с, и в процессах будет висеть 10 excel-ей.
|
|||
43
bard666
15.05.15
✎
14:01
|
(42) Это все проверяю
|
|||
44
bard666
15.05.15
✎
14:02
|
У меня просто открывается ексель как приложение, а окна документа не видно. Серый экран.
|
|||
45
bard666
15.05.15
✎
14:08
|
А со второго раза создает.
|
|||
46
bard666
15.05.15
✎
14:26
|
Придумал как поправить:
Вместо КомОбъект.Application.Visible = 1; КомОбъект.Windows(1).Visible = 1; КомОбъект.Activate(); Делаю КомОбъект.Activate(); КомОбъект.Windows(1).Visible = 1; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |