15.05.15 — 10:30
Столкнулся со следущим: При сохранении файла ексель в 1С вылетает ошибка:
Ошибка при вызове метода контекста (Save)
ТекущийДокЕксель.Save();
по причине:
Произошла исключительная ситуация (Microsoft Excel): Метод Save из класса Application завершен неверно
Порылся на форумах, внятного ответа как исправить не нашёл.
Делается следущее: есть файл екселя (.xls) с заданной структурой, в него вносятся данные, сохраняются, отсылаются на почты.
Может ли быть такая ошибка из-за того, что на сервере, где выполняется обработка стоит 2013 офис и файл открывается в режиме совместимости? Как это обходить?
1 — 15.05.15 — 10:59
Метод saveAs вообще не обнаружен.
2 — 15.05.15 — 11:01
может прав нет на место сохранения?
3 — 15.05.15 — 11:01
Никто не сталкивался?
4 — 15.05.15 — 11:02
Права есть. Если просто открыть екселем, изменить и сохранить как — все прокатывает, а через 1С сохранить не получается.
5 — 15.05.15 — 11:04
Создается файлик, но ячейки пустые. Формат вроде нужный — .xls
6 — 15.05.15 — 11:05
(4) если это делается на сервере, то права надо смотреть у пользователя под кем работает служба сервера приложений
7 — 15.05.15 — 11:13
Новая книга? Попобуй saveas()
8 — 15.05.15 — 11:13
(6) Попробую уточнить. По результатам отпишусь.
9 — 15.05.15 — 11:13
(7) При этом методе
Метод объекта не обнаружен (SaveAs) ТекущийДокЕксель.SaveAs(КаталогДанных + «» + ТекИмя);
10 — 15.05.15 — 11:14
Текущийдокэксель это книга или аппликейшн?
11 — 15.05.15 — 11:17
Ну кароч ты книгу должен сохранять. Покажи что присваиваешь текущийдокэксель
12 — 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 — 15.05.15 — 11:37
(15) Пробовал
ТекущийДокЕксель.Application.Workbooks.SaveAs(КаталогДанных + «» + ТекИмя);
ТекущийДокЕксель.Workbooks.SaveAs(КаталогДанных + «» + ТекИмя);
Также не видит функцию
17 — 15.05.15 — 11:43
(15)
{Форма.Форма.Форма(571)}: Ошибка при вызове метода контекста (SaveAs)
ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + «» + ТекИмя);
по причине:
Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно
18 — 15.05.15 — 11:43
(16) workbooks это не workbook — другой объект
19 — 15.05.15 — 11:43
(16) смотри (12). то что у тебя все неправильное написание.
20 — 15.05.15 — 11:44
Ответ дан выше, перечитай (14)
21 — 15.05.15 — 11:46
(20) я в (17) показал какая ошибка выпадает при ТекущийДокЕксель.ActiveWorkbook
22 — 15.05.15 — 11:47
(19) где неправильно?
23 — 15.05.15 — 11:47
Сообщить(каталогданных+»»+текимя);
24 — 15.05.15 — 11:58
(23) Здесь все четко.
«F:Ведомостиимя.xls»
25 — 15.05.15 — 12:01
(24) Если файл существует попробуй опять save(). Для saveas можно вторым параметром задать формат файла еще
26 — 15.05.15 — 12:07
(25) Я ж говорю — ошибка есть, но файл пустой появляется..)
27 — 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 — 15.05.15 — 12:17
(28) Создал. Ура! Осталось протестировать откроет ли 2003 офис
31 — 15.05.15 — 12:22
(30) Вбей в справке по vba xlFileFormat
32 — 15.05.15 — 12:56
(31) а в Save есть подобные параметры?
33 — 15.05.15 — 13:12
(32) нет, он вообще без параметров
34 — 15.05.15 — 13:20
(33) Тогда ладно. Файлики создаются.
Есть ещё вопрос.
Обработина, сделанная по образу и подобию
http://catalog.mista.ru/public/88055/
ругается на .Windows(1).Visible = 1;
35 — 15.05.15 — 13:28
(34) значит опять путанница с объектами
36 — 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 — 15.05.15 — 13:30
(35) выложил код. Запросы всякие вырезал.
38 — 15.05.15 — 13:32
Вся эта ботва вылезла когда поставили 2013 офис)
39 — 15.05.15 — 13:43
Отдельный момент.
Я может ошибаюсь: по коду если все удачно сохранилось, то объект excel не удаляется.
40 — 15.05.15 — 13:45
(39) не совсем понимаю к чему это..
41 — 15.05.15 — 13:48
Ошибка такая: Ошибка при вызове метода контекста (Windows)
КомОбъект.Windows(1).Visible = 1;
по причине:
Произошла исключительная ситуация (0x8002000b)
42 — 15.05.15 — 13:54
(40)Ну если я все правильно понимаю, то 10 раз запустите свой код, не выходя из 1с, и в процессах будет висеть 10 excel-ей.
43 — 15.05.15 — 14:01
(42) Это все проверяю
44 — 15.05.15 — 14:02
У меня просто открывается ексель как приложение, а окна документа не видно. Серый экран.
45 — 15.05.15 — 14:08
А со второго раза создает.
bard666
46 — 15.05.15 — 14:26
Придумал как поправить:
Вместо
КомОбъект.Application.Visible = 1;
КомОбъект.Windows(1).Visible = 1;
КомОбъект.Activate();
Делаю
КомОбъект.Activate();
КомОбъект.Windows(1).Visible = 1;
Автор leklerk85, 14 июн 2021, 20:01
0 Пользователей и 1 гость просматривают эту тему.
Добрый день! Подскажите пожалуйста, как можно решить проблему. В регл. задании формируется файл Excel и записывается, но при записи ошибка «Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно». В файле Excel 2 листа, в каждом из которых в среднем около 50-60 тысяч строк.
Решить проблему можно отказом от OLE и формированием и сохранением файла средствами 1С.
Вы имеете в виду сформировать через табличный документ и записать через ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX)? Сегодня попробовал, всё равно ошибка «Ошибка при вызове метода контекста (Записать): Ошибка доступа к файлу ‘\мой_путьмой_ файл.xlsx'». Папка «мой_путь» на момент записи файла была создана.
Цитата: leklerk85 от 16 июн 2021, 08:08
Вы имеете в виду сформировать через табличный документ и записать через ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX)? Сегодня попробовал, всё равно ошибка «Ошибка при вызове метода контекста (Записать): Ошибка доступа к файлу ‘\мой_путьмой_ файл.xlsx'». Папка «мой_путь» на момент записи файла была создана.
а на сервере доступна эта созданная папка?
На другом форуме подсказали — на папку, куда сохраняется Эксель, надо дать права пользователю, под которым выполняется регл. задание (USR1CV8). Скорее всего, из-за этого ошибка.
Цитата: leklerk85 от 16 июн 2021, 12:56
На другом форуме подсказали — на папку, куда сохраняется Эксель, надо дать права пользователю, под которым выполняется регл. задание (USR1CV8). Скорее всего, из-за этого ошибка.
Да, причина была именно в этом — всё заработало сегодня, когда дали права на папку!
- Форум База
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Ошибка при сохранении файла Excel из регламентного задания
Похожие темы (5)
Поиск
bard666
15.05.15 — 10:30
Столкнулся со следущим: При сохранении файла ексель в 1С вылетает ошибка:
Ошибка при вызове метода контекста (Save)
ТекущийДокЕксель.Save();
по причине:
Произошла исключительная ситуация (Microsoft Excel): Метод Save из класса Application завершен неверно
Порылся на форумах, внятного ответа как исправить не нашёл.
Делается следущее: есть файл екселя (.xls) с заданной структурой, в него вносятся данные, сохраняются, отсылаются на почты.
Может ли быть такая ошибка из-за того, что на сервере, где выполняется обработка стоит 2013 офис и файл открывается в режиме совместимости? Как это обходить?
bard666
1 — 15.05.15 — 10:59
Метод saveAs вообще не обнаружен.
Ненавижу 1С
2 — 15.05.15 — 11:01
может прав нет на место сохранения?
bard666
3 — 15.05.15 — 11:01
Никто не сталкивался?
bard666
4 — 15.05.15 — 11:02
Права есть. Если просто открыть екселем, изменить и сохранить как — все прокатывает, а через 1С сохранить не получается.
bard666
5 — 15.05.15 — 11:04
Создается файлик, но ячейки пустые. Формат вроде нужный — .xls
Ненавижу 1С
6 — 15.05.15 — 11:05
(4) если это делается на сервере, то права надо смотреть у пользователя под кем работает служба сервера приложений
фобка
7 — 15.05.15 — 11:13
Новая книга? Попобуй saveas()
bard666
8 — 15.05.15 — 11:13
(6) Попробую уточнить. По результатам отпишусь.
bard666
9 — 15.05.15 — 11:13
(7) При этом методе
Метод объекта не обнаружен (SaveAs) ТекущийДокЕксель.SaveAs(КаталогДанных + «» + ТекИмя);
фобка
10 — 15.05.15 — 11:14
Текущийдокэксель это книга или аппликейшн?
фобка
11 — 15.05.15 — 11:17
Ну кароч ты книгу должен сохранять. Покажи что присваиваешь текущийдокэксель
bard666
12 — 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) копрокод
bard666
16 — 15.05.15 — 11:37
(15) Пробовал
ТекущийДокЕксель.Application.Workbooks.SaveAs(КаталогДанных + «» + ТекИмя);
ТекущийДокЕксель.Workbooks.SaveAs(КаталогДанных + «» + ТекИмя);
Также не видит функцию
bard666
17 — 15.05.15 — 11:43
(15)
{Форма.Форма.Форма(571)}: Ошибка при вызове метода контекста (SaveAs)
ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + «» + ТекИмя);
по причине:
Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно
фобка
18 — 15.05.15 — 11:43
(16) workbooks это не workbook — другой объект
Wern
19 — 15.05.15 — 11:43
(16) смотри (12). то что у тебя все неправильное написание.
фобка
20 — 15.05.15 — 11:44
Ответ дан выше, перечитай (14)
bard666
21 — 15.05.15 — 11:46
(20) я в (17) показал какая ошибка выпадает при ТекущийДокЕксель.ActiveWorkbook
bard666
22 — 15.05.15 — 11:47
(19) где неправильно?
фобка
23 — 15.05.15 — 11:47
Сообщить(каталогданных+»»+текимя);
bard666
24 — 15.05.15 — 11:58
(23) Здесь все четко.
«F:Ведомостиимя.xls»
фобка
25 — 15.05.15 — 12:01
(24) Если файл существует попробуй опять save(). Для saveas можно вторым параметром задать формат файла еще
bard666
26 — 15.05.15 — 12:07
(25) Я ж говорю — ошибка есть, но файл пустой появляется..)
bard666
27 — 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:ведомости?
bard666
30 — 15.05.15 — 12:17
(28) Создал. Ура! Осталось протестировать откроет ли 2003 офис
фобка
31 — 15.05.15 — 12:22
(30) Вбей в справке по vba xlFileFormat
bard666
32 — 15.05.15 — 12:56
(31) а в Save есть подобные параметры?
фобка
33 — 15.05.15 — 13:12
(32) нет, он вообще без параметров
bard666
34 — 15.05.15 — 13:20
(33) Тогда ладно. Файлики создаются.
Есть ещё вопрос.
Обработина, сделанная по образу и подобию
http://catalog.mista.ru/public/88055/
ругается на .Windows(1).Visible = 1;
фобка
35 — 15.05.15 — 13:28
(34) значит опять путанница с объектами
bard666
36 — 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();
bard666
37 — 15.05.15 — 13:30
(35) выложил код. Запросы всякие вырезал.
bard666
38 — 15.05.15 — 13:32
Вся эта ботва вылезла когда поставили 2013 офис)
DomovoiAtakue
39 — 15.05.15 — 13:43
Отдельный момент.
Я может ошибаюсь: по коду если все удачно сохранилось, то объект excel не удаляется.
bard666
40 — 15.05.15 — 13:45
(39) не совсем понимаю к чему это..
bard666
41 — 15.05.15 — 13:48
Ошибка такая: Ошибка при вызове метода контекста (Windows)
КомОбъект.Windows(1).Visible = 1;
по причине:
Произошла исключительная ситуация (0x8002000b)
DomovoiAtakue
42 — 15.05.15 — 13:54
(40)Ну если я все правильно понимаю, то 10 раз запустите свой код, не выходя из 1с, и в процессах будет висеть 10 excel-ей.
bard666
43 — 15.05.15 — 14:01
(42) Это все проверяю
bard666
44 — 15.05.15 — 14:02
У меня просто открывается ексель как приложение, а окна документа не видно. Серый экран.
bard666
45 — 15.05.15 — 14:08
А со второго раза создает.
bard666
46 — 15.05.15 — 14:26
Придумал как поправить:
Вместо
КомОбъект.Application.Visible = 1;
КомОбъект.Windows(1).Visible = 1;
КомОбъект.Activate();
Делаю
КомОбъект.Activate();
КомОбъект.Windows(1).Visible = 1;
Столкнулся со следущим: При сохранении файла ексель в 1С вылетает ошибка: Ошибка при вызове метода контекста (Save) ТекущийДокЕксель.Save; по причине: Произошла исключительная ситуация (Microsoft Excel): Метод Save из класса Application завершен неверно Порылся на форумах, внятного ответа как исправить не нашёл. Делается следущее: есть файл екселя (.xls) с заданной структурой, в него вносятся данные, сохраняются, отсылаются на почты. Может ли быть такая ошибка из-за того, что на сервере, где выполняется обработка стоит 2013 офис и файл открывается в режиме совместимости? Как это обходить?
Метод saveAs вообще не обнаружен.
может прав нет на место сохранения?
Права есть. Если просто открыть екселем, изменить и сохранить как — все прокатывает, а через 1С сохранить не получается.
Создается файлик, но ячейки пустые. Формат вроде нужный — .xls
если это делается на сервере, то права надо смотреть у пользователя под кем работает служба сервера приложений
Новая книга? Попобуй saveas
Попробую уточнить. По результатам отпишусь.
При этом методе Метод объекта не обнаружен (SaveAs) ТекущийДокЕксель.SaveAs(КаталогДанных + «» + ТекИмя);
Текущийдокэксель это книга или аппликейшн?
Ну кароч ты книгу должен сохранять. Покажи что присваиваешь текущийдокэксель
До меня делалось: Код функции, которая возвращает ТекущийДок
в данном случае текущийдок это не книга
Пробовал Также не видит функцию
{Форма.Форма.Форма}: Ошибка при вызове метода контекста (SaveAs) ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + «» + ТекИмя); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно
workbooks это не workbook — другой объект
смотри . то что у тебя все неправильное написание.
Ответ дан выше, перечитай
я в показал какая ошибка выпадает при ТекущийДокЕксель.ActiveWorkbook
Сообщить(каталогданных+»»+текимя);
Если файл существует попробуй опять save. Для saveas можно вторым параметром задать формат файла еще
Я ж говорю — ошибка есть, но файл пустой появляется..)
Попробовал передать формат {Форма.Форма.Форма}: Ошибка при вызове метода контекста (SaveAs) ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + «» + ТекИмя, «.xls»); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно
не, формат это число. Передай туда 50
Существует ли на сервере f:ведомости?
Создал. Ура! Осталось протестировать откроет ли 2003 офис
Вбей в справке по vba xlFileFormat
а в Save есть подобные параметры?
нет, он вообще без параметров
Тогда ладно. Файлики создаются. Есть ещё вопрос. Обработина, сделанная по образу и подобию
значит опять путанница с объектами
выложил код. Запросы всякие вырезал.
Вся эта ботва вылезла когда поставили 2013 офис)
Отдельный момент. Я может ошибаюсь: по коду если все удачно сохранилось, то объект excel не удаляется.
не совсем понимаю к чему это..
Ошибка такая: Ошибка при вызове метода контекста (Windows) по причине: Произошла исключительная ситуация (0x8002000b)
Ну если я все правильно понимаю, то 10 раз запустите свой код, не выходя из 1с, и в процессах будет висеть 10 excel-ей.
У меня просто открывается ексель как приложение, а окна документа не видно. Серый экран.
А со второго раза создает.
Придумал как поправить: Вместо
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Как известно, 1С:Предприятие 8.1 имеет довольно ограниченное количество форматов в которых можно сохранить табличный документ. Вашему вниманию предлагается простая процедура, которая восполняет в какой-то мере этот недостаток.
Зачем это нужно? Дело в том, что при сохранении табличного документа в формате Excel средствами платформы 8.1 файл получается просто неприличных размеров и совершенно непригоден к рассылке. К примеру, прайс-листы с картинками могли иметь размер до 15-20 Мб. После сохранения в формате 2007 размер уменьшался на порядок. В результате я написал процедуру, которая сохраняет MXL в XLSX. Но умные люди посоветовали, что не нужно плодить обработки и процедуры для одного формата. Поэтому я написал более универсальную процедуру, которая в идеале поддерживает все форматы MS Excel 2003 — 2007, в том числе Dbf, Pdf и таблицы Open (Libre) office. Я включил в процедуру наиболее востребованные по моему мнению форматы. Но каждый для себя может добавить необходимые форматы. Как говорится, MSDN Вам в помощь.
Тестировалось на MS Office 2003 с установленным пакетом совместимости и MS Office 2010.
Ниже приведена процедура сохранения табличного документа. Идея проста — табличный документ сохраняется средствами 1С в формате Excel 97, а потом средствами Excel сохраняется в выбранном формате. Прилагается простенькая обработка, демонстрирующая этот метод. Вы можете не скачивать обработку — модуль прост и понятен. А интерфейсную часть реализовать — как Ваша фантазия позволит.
Ограничения:
Необходимо иметь установленный MS Excel 2003 с пакетом совместимости 2007 или MS Excel 2007 — 2010
// константы форматов 2003
// xlCSVWindows = 23;
// xlDBF2 = 7;
// xlDBF3 = 8;
// xlDBF4 = 11;
// xlDIF = 9;
// xlExcel9795 = 43;
// xlTextWindows = 20;
// xlUnicodeText = 42;
// xlWebArchive = 45;
// xlXMLSpreadsheet = 46;
// xlXMLData = 47;
// основные константы 2007
// These are the main file formats in Excel 2007-2010:
// 51 = xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx)
// 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro’s in 2007-2010, xlsm)
// 50 = xlExcel12 (Excel Binary Workbook in 2007-2010 with or without macro’s, xlsb)
// 56 = xlExcel8 (97-2003 format in Excel 2007-2010, xls)
// 57 = PDF
// 60 = xlOpenDocumentSpreadsheet OpenDocument Spreadsheet
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем СоответствиеРасширений;
Перем СоответствиеВерсий;
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
// Запись табличного документа в формате 2007 EXCEL
//
// Параметры
// <пТабДок> — <ТабличныйДокумент> — табличный документ
// <пИмяФайла> — <Строка> — имя исходного файла.
// <пФорматФайла> — <Число> — константа, определяющая формат файла
//
Процедура ЗаписатьMXLВФормате2007(пТабДок, пИмяФайла, пФорматФайла = 51) Экспорт
Если НЕ ЗначениеЗаполнено(пИмяФайла) Тогда Возврат КонецЕсли;
ОбъектФайл = Новый Файл(пИмяФайла);
Расширение = СоответствиеРасширений.Получить(пФорматФайла);
ИмяНовогоФайла = ОбъектФайл.Путь + ОбъектФайл.ИмяБезРасширения + Расширение;
ИмяВременногоФайла = КаталогВременныхФайлов() + Лев(Строка(Новый УникальныйИдентификатор), 8) + «.xls»;
пТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLS);
Excel = Новый COMОбъект(«Excel.Application»);
Если Excel.Version < СоответствиеВерсий.Получить(пФорматФайла) Тогда
Сообщить(«В текущей версии Excel выбранный формат файла не поддерживается. Преобразование не выполнено!», СтатусСообщения.Важное);
Excel.Quit();
Excel = Неопределено;
Возврат;
КонецЕсли;
Excel.Visible = Ложь;
Excel.DisplayAlerts = Ложь;//чтобы EXCEL не спрашивал о перезаписи файла
КнигаExcel = Excel.WorkBooks.Open(ИмяВременногоФайла);
Попытка
Если пФорматФайла = 57 Тогда //PDF
КнигаExcel.ExportAsFixedFormat(0, ИмяНовогоФайла, 0);
Иначе
КнигаExcel.SaveAs(ИмяНовогоФайла, пФорматФайла);
КонецЕсли;
Исключение
Сообщить(«Не удалось сохранить файл: » + ОписаниеОшибки());
КонецПопытки;
КнигаExcel.Close();
Excel.DisplayAlerts = Истина;
Excel.Quit();
Excel = Неопределено;
УдалитьФайлы(ИмяВременногоФайла);
КонецПроцедуры // ЗаписатьВФормате2007()
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ — ОБРАБОТЧИКИ СОБЫТИЙ ОБЪЕКТА
////////////////////////////////////////////////////////////////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
СоответствиеРасширений = Новый Соответствие;
СоответствиеРасширений.Вставить(51, «.xlsx»);
СоответствиеРасширений.Вставить(45, «.mht»);
СоответствиеРасширений.Вставить(46, «.xml»);
СоответствиеРасширений.Вставить(23, «.csv»);
СоответствиеРасширений.Вставить(9, «.dif»);
СоответствиеРасширений.Вставить(8, «.dbf»);
//работает только в 2007
СоответствиеРасширений.Вставить(47, «.xml»);
СоответствиеРасширений.Вставить(57, «.pdf»);
СоответствиеРасширений.Вставить(60, «.ods»);
СоответствиеВерсий = Новый Соответствие;
СоответствиеВерсий.Вставить(51, «11.0»);
СоответствиеВерсий.Вставить(45, «11.0»);
СоответствиеВерсий.Вставить(46, «11.0»);
СоответствиеВерсий.Вставить(23, «11.0»);
СоответствиеВерсий.Вставить(9, «11.0»);
СоответствиеВерсий.Вставить(8, «11.0»);
//работает только в 2007
СоответствиеВерсий.Вставить(47, «12.0»);
СоответствиеВерсий.Вставить(57,«12.0»);
СоответствиеВерсий.Вставить(60,«12.0»);
Ermak27 4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
||||
1 |
||||
1C 8.x 13.07.2017, 14:39. Показов 4072. Ответов 28 Метки нет (Все метки)
Добрый день! Мне нужно выгружать в каждый файл Excel до 1000 строк с базы данных. Вот мой код:
Выдает ошибку {ВнешняяОбработка.ПД.Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Ошибка доступа к документу ‘Шаблон импорта платежных документов от 03.07.2017 12-44.xlsx’, допускающему доступ только для чтения. Файл не сохранен!
__________________ 0 |
Модератор 3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
13.07.2017, 19:59 |
2 |
допускающему доступ только для чтения ответ в вопросе 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
13.07.2017, 20:46 [ТС] |
3 |
Dethmontt, как сделать, чтобы сохранить файл и открыть новый чтобы загрузка пошла дальше, потому что большее 1000 строк в БД 0 |
Модератор 3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
13.07.2017, 23:54 |
4 |
Ermak27, проверить если счетчик = 1000 повторить все что у тебя там происходит 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
14.07.2017, 11:09 [ТС] |
5 |
Dethmontt, мне не понятно куда вставить условие если Добавлено через 8 минут 0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
14.07.2017, 11:15 |
6 |
Ermak27, у вас код рабочий вообще? Зачем вы предлагаете выбрать файл для каждой строки таблицы?) 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
14.07.2017, 11:26 [ТС] |
7 |
GreenkA, Код у меня работает, только не сохраняет. Не могу понять как сделать, можете показать как. 0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
14.07.2017, 11:36 |
8 |
Ermak27, не сохраняет, выдавая ту ошибку выше? Вам же ответили, в чем дело. Вы выбираете для изменения файл с ограниченными правами — только чтение. Выбирайте другой, создавайте новый, сделайте что-нибудь) 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
14.07.2017, 11:59 [ТС] |
9 |
Все разобрался. Код правильный, просто файл был открыть в процессе 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
26.10.2017, 14:35 [ТС] |
10 |
Сделайте в цикле обхода Таб счетчик и заполняйте файл до значения 1000, потом обнуляете счетчик и создаете новый файл. Добрый день! Можете подсказать как это сделать? 0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
26.10.2017, 14:40 |
11 |
Ermak27, вы же написали, что решили задачу)3 месяца прошло… 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
26.10.2017, 14:44 [ТС] |
12 |
GreenkA, я проверил на файл где было 50000 строк, но до конца файл не до делал. Сейчас стал обрабатывать файл и смотрю что обработка не рабочая. Не могу понять почему все 3000 строк одно значение записывает и постоянно требует файл. Добавлено через 2 минуты 0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,903 |
||||
26.10.2017, 15:35 |
13 |
|||
Правда не тестил 1 |
Ermak27 4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
||||
27.10.2017, 09:32 [ТС] |
14 |
|||
Joker_vad, выдает ошибки Добавлено через 17 часов 7 минут
выдает ошибку {ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Фо рма(1827)}: Значение не является значением объектного типа (SaveAs) Файл не сохранен! 0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,903 |
||||
27.10.2017, 09:55 |
15 |
|||
1 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
27.10.2017, 10:53 [ТС] |
16 |
Joker_vad, по просил выбрать файл, я выбрал, сразу же по просил пере сохранить его, я пере сохранил, и все. Открываю файл а они пустой, а где там 1000 строк? 0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,903 |
||||
27.10.2017, 10:56 |
17 |
|||
Сколько записей вернула? 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
27.10.2017, 10:57 [ТС] |
18 |
Joker_vad, в отладчике показало что в таб = 0 0 |
476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,903 |
|
27.10.2017, 10:58 |
19 |
Ну тогда все адекватно отработало, у вас 0 строк к записи в эксель 0 |
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
27.10.2017, 11:03 [ТС] |
20 |
Joker_vad, спасибо большое, буду разбираться. Добавлено через 4 минуты 0 |
Столкнулся со следущим: При сохранении файла ексель в 1С вылетает ошибка: Ошибка при вызове метода контекста (Save) ТекущийДокЕксель.Save; по причине: Произошла исключительная ситуация (Microsoft Excel): Метод Save из класса Application завершен неверно Порылся на форумах, внятного ответа как исправить не нашёл. Делается следущее: есть файл екселя (.xls) с заданной структурой, в него вносятся данные, сохраняются, отсылаются на почты. Может ли быть такая ошибка из-за того, что на сервере, где выполняется обработка стоит 2013 офис и файл открывается в режиме совместимости? Как это обходить?
Метод saveAs вообще не обнаружен.
может прав нет на место сохранения?
Права есть. Если просто открыть екселем, изменить и сохранить как — все прокатывает, а через 1С сохранить не получается.
Создается файлик, но ячейки пустые. Формат вроде нужный — .xls
если это делается на сервере, то права надо смотреть у пользователя под кем работает служба сервера приложений
Новая книга? Попобуй saveas
Попробую уточнить. По результатам отпишусь.
При этом методе Метод объекта не обнаружен (SaveAs) ТекущийДокЕксель.SaveAs(КаталогДанных + «» + ТекИмя);
Текущийдокэксель это книга или аппликейшн?
Ну кароч ты книгу должен сохранять. Покажи что присваиваешь текущийдокэксель
До меня делалось: Код функции, которая возвращает ТекущийДок
в данном случае текущийдок это не книга
Пробовал Также не видит функцию
{Форма.Форма.Форма}: Ошибка при вызове метода контекста (SaveAs) ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + «» + ТекИмя); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно
workbooks это не workbook — другой объект
смотри . то что у тебя все неправильное написание.
Ответ дан выше, перечитай
я в показал какая ошибка выпадает при ТекущийДокЕксель.ActiveWorkbook
Сообщить(каталогданных+»»+текимя);
Если файл существует попробуй опять save. Для saveas можно вторым параметром задать формат файла еще
Я ж говорю — ошибка есть, но файл пустой появляется..)
Попробовал передать формат {Форма.Форма.Форма}: Ошибка при вызове метода контекста (SaveAs) ТекущийДокЕксель.ActiveWorkbook.SaveAs(КаталогДанных + «» + ТекИмя, «.xls»); по причине: Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно
не, формат это число. Передай туда 50
Существует ли на сервере f:ведомости?
Создал. Ура! Осталось протестировать откроет ли 2003 офис
Вбей в справке по vba xlFileFormat
а в Save есть подобные параметры?
нет, он вообще без параметров
Тогда ладно. Файлики создаются. Есть ещё вопрос. Обработина, сделанная по образу и подобию
значит опять путанница с объектами
выложил код. Запросы всякие вырезал.
Вся эта ботва вылезла когда поставили 2013 офис)
Отдельный момент. Я может ошибаюсь: по коду если все удачно сохранилось, то объект excel не удаляется.
не совсем понимаю к чему это..
Ошибка такая: Ошибка при вызове метода контекста (Windows) по причине: Произошла исключительная ситуация (0x8002000b)
Ну если я все правильно понимаю, то 10 раз запустите свой код, не выходя из 1с, и в процессах будет висеть 10 excel-ей.
У меня просто открывается ексель как приложение, а окна документа не видно. Серый экран.
А со второго раза создает.
Придумал как поправить: Вместо
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Добрый день
Подскажите как сохранить с квадратными скобками ? пишет типо нельзя
Книга.SaveAs(ПутьВыгрузки + «[ПодтверждениеЗаказа] » + ДокументОтгрузки.Сделка.Номер + » «+ ДокументОтгрузки.Номер + «.xls»);
{ВнешняяОбработка.обменспоставщиками.Форма.Форма.Форма(171)}: Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Доступ к файлу невозможен. Проверьте следующее:
• имеется ли указанная папка;
• папка, содержащая этот файл, доступна для записи;
• в имени файла не содержатся знаки: < > ? [ ] : | или *;
• полный путь к файлу не превышает 218 знаков.