Имя: Пароль:
1C
1С v8
Excel.Workbooks.Add()
0 nadysaan
 
18.04.18
09:54
Всем доброго дня!
Валится ошибка, моя не понимать. Помогите!
{Обработка.Доработка_ЗаказНоменклатуры.Форма.Форма.Форма(1452)}: Ошибка при вызове метода контекста (Add)
        Книга = Excel.Workbooks.Add();
по причине:
Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство Add класса Workbooks
Кусок кода:
    НаименованиеФайла = "Заказ " + СокрЛП(ПоставщикДляОтбора.Наименование);

    ИмяФайла = КаталогВременныхФайлов()+НаименованиеФайла+".xls";
    ФайлДанных = ИмяФайла;
        //подключаемся к MS Excel
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Попытка                          
        Книга = Excel.Workbooks.Open(ФайлДанных);
    Исключение
        Книга = Excel.Workbooks.Add();
        Книга.SaveAs(ФайлДанных);
    КонецПопытки;
1 Остап Сулейманович
 
18.04.18
10:01
(0) Я бы сделал так. Убрал бы из попытки
Книга = Excel.Workbooks.Open(ФайлДанных);
и посмотрел какая при этом возникает ошибка. Возможно (и даже скорее всего) она и не дает создать рабочую книгу.
2 mistеr
 
18.04.18
10:01
(0) Проверь на ЗначениеЗаполнено(Excel)
3 Масянька
 
18.04.18
10:10
(0) А зачем Add?
4 Остап Сулейманович
 
18.04.18
10:13
(3) Если не удалось открыть из папки временных файлов - тогда просто добавим пустой. А вот зачем... - тут интрига.
5 Масянька
 
18.04.18
10:13
(4) А просто записать не вариант?
6 Остап Сулейманович
 
18.04.18
10:17
(5) Ну так потом и делается Книга.SaveAs(ФайлДанных);
Тут больше вопрос зачем пытаться открыть файл, которого может и не быть. И почему бы не проверить существование до момента открытия? Опять же... Интрига.
7 Масянька
 
18.04.18
10:20
(6) По кругу - зачем Add? :))))))
Сразу нельзя впихнуть?
кстати, речь же о печ. форме?
8 mistеr
 
18.04.18
10:22
(7) Как создать книгу без Add()?
9 Остап Сулейманович
 
18.04.18
10:23
(7) "Сразу нельзя впихнуть?" Не понятен вопрос. Кому именно впихнуть? И почему именно сразу? )))
"речь же о печ. форме?" - не факт. Исходя из
"НаименованиеФайла = "Заказ " + СокрЛП(ПоставщикДляОтбора.Наименование);"
возможно такой себе файл обмена с контрагентом.
10 Масянька
 
18.04.18
10:25
(8) Это семерка:
        КаталогДляЗаписи = СокрЛП(КаталогДляЗаписи + "xls");
        
        ТабДокумент = СоздатьОбъект ("ТабличныйДокумент");
        ТабДокумент.ЗагрузитьИзТаблицы (АктивныйКонтекст);
        ТабДокумент.ПараметрыПечати.Ориентация = 1;
        
        ТабДокумент.Записать(КаталогДляЗаписи, 1);
        
        // удаляем картинки (печать + подписи)
        Excel    = СоздатьОбъект("Excel.Application");
        Книга     = Excel.Application.Workbooks.Open(КаталогДляЗаписи);
        Лист     = Книга.WorkSheets(1);
        Лист.Shapes.SelectAll();
        Excel.Selection.Delete();
        Книга.Save();
        Excel.ActiveWorkBook.Close(0);

Восьмерка настолько сырая?
11 Масянька
 
18.04.18
10:25
(9) Мужчина... Однозначно... :))))))))
12 mistеr
 
18.04.18
10:29
(10) Можно так, но... некрасиво. :)
13 Остап Сулейманович
 
18.04.18
10:31
(12) Самый простой путь - скорее всего самый правильный.
14 nadysaan
 
18.04.18
11:05
изначально было
Книга = Excel.Workbooks.Add();
это потом уже эксперементы пошли с попыткой открыть файл
15 nadysaan
 
18.04.18
11:08
Речь не про печ форму. Создаю ексель документ чтобы отправить поставщику
16 Vovik
 
18.04.18
11:10
Это ж эксель. Воркбукс, воркщитс. Примеров масса в нете. Помоему кстати по разному отрабатывает в зависимости от того в какой версии сохранишь (ексель 97, лист ексель, xls?xlsx).
17 nadysaan
 
18.04.18
11:11
при проверке на ЗначениеЗаполнено(Excel) пишет
Обработка.Доработка_ЗаказНоменклатуры.Форма.Форма.Форма(1448)}: Ошибка при вызове метода контекста (ЗначениеЗаполнено)
    Если ЗначениеЗаполнено(Excel) Тогда
по причине:
Проверка мутабельных значений на заполненность не поддерживается
18 nadysaan
 
18.04.18
11:12
ИмяФайла = КаталогВременныхФайлов()+НаименованиеФайла+".xls"
Excel2013
19 mistеr
 
18.04.18
11:15
(17) Тогда так

   Если Excel <> Неопределено Тогда
20 Масянька
 
18.04.18
11:17
(15) И что?
Выгрузить во врем. таблицу и её пихануть в Excel.
21 nadysaan
 
18.04.18
11:18
Excel <> Неопределено Истина
22 nadysaan
 
18.04.18
11:19
Попытка
Книга = Excel.WorkBooks.Add();
Именно здесь вылетает
23 mistеr
 
18.04.18
11:26
Что-то с Экселем не так, похоже.
Если подумать, то на этой строке


  Книга = Excel.Workbooks.Open(ФайлДанных);


тоже вылетает, а ошибку не видно, она съедается. Добавь Сообщить(ОписаниеОшибки()) перед


  Книга = Excel.Workbooks.Add();
24 Масянька
 
18.04.18
11:28
(12) Насчет "красиво": ИМХО, красиво - это когда одна строка кода.
25 nadysaan
 
18.04.18
11:33
Никакого сообщения нет, просто спокойно проходит строку        Сообщить(ОписаниеОшибки());
а на этой
Книга = Excel.WorkBooks.Add();
в исключение идет сразу
26 Spirtus
 
18.04.18
11:36
А нафига козе баян, когда 1С само умеет в Excel?
http://catalog.mista.ru/public/341855/
27 Happy Bear
 
18.04.18
11:37
регистр важен - пиши WorkBooks
28 mistеr
 
18.04.18
11:50
(27) Да ладно
29 mistеr
 
18.04.18
11:52
(26) По ссылке - "ИЗ" Excel. А тут как раз "В" нужно/
30 nadysaan
 
18.04.18
11:53
"регистр важен - пиши WorkBooks" -Ctrl + C Ctrl + v не помогло
31 aka AMIGO
 
18.04.18
11:54
Ну почему все забывают про макросы?!?!
Проще всего подсмотреть, что делает сам Excel, а не изобретать ненужные ему функции..
32 Spirtus
 
18.04.18
11:55
(29) А синтакс-помощник отменили уже?
33 aka AMIGO
 
18.04.18
11:57
(32) Сменили название на "Миста" :)
34 nadysaan
 
18.04.18
11:58
(29) А синтакс-помощник отменили уже? Весь уже пересмотрела, нет про ADD ничего. Найдешь скажу спасибо
35 aka AMIGO
 
18.04.18
11:59
(34) Поменяй пол в личке.
36 PiotrLoginov
 
18.04.18
12:00
(15) "Создаю ексель документ чтобы отправить поставщику"  имхо, ошибка здесь.   Следовало формировать данные силами платформы, после чего просто сохранить таблицу в формате, удобном поставщику - excel, pdf или еще каком-то.
37 Масянька
 
18.04.18
12:00
(36) Они ищут "красиво"... :)
38 PiotrLoginov
 
18.04.18
12:02
+ (35)  и фото тогда не забудь
39 Масянька
 
18.04.18
12:03
+ (37)
- Лёлик! Это же не эстетично!
- Зато - дешево, надежно и практично!
(тут - клюшкой по голове)
(С)
:))))))))))))
40 nadysaan
 
18.04.18
12:03
(34) Поменяй пол в личке. Поменяла :)
41 Масянька
 
18.04.18
12:04
(35) Валера! Как ники вставлять?
42 Spirtus
 
18.04.18
12:05
(34) Общие объекты - Табличный документ - Методы - Записать
43 nadysaan
 
18.04.18
12:05
(15) "Создаю ексель документ чтобы отправить поставщику"  имхо, ошибка здесь.   Следовало формировать данные силами платформы, после чего просто сохранить таблицу в формате, удобном поставщику - excel, pdf или еще каком-то.
Данные с помощью обработки формируются для манагеров, потом после проверки манагер должен нажать "Волшебную кнопку" и то что он (манагер) навоял должно улететь поставщику
44 aka AMIGO
 
18.04.18
12:06
(40) Теперь - порядок :)
(41)  Собака + текст ника. Если в нике есть пробелы - ник после собаки взять в фигурные скобки.. @{...}
Как-то так..

ЗЫ. тест: @Масянька
45 Масянька
 
18.04.18
12:06
(44) Не работает... Однако...
46 Масянька
 
18.04.18
12:07
(43) Очень тяжелый случай...
47 aka AMIGO
 
18.04.18
12:08
Мммм... После сбоя на серверах Мисты было восстановление форума, и этот способ перестал работать..
Некогда Asmody ремонтировать.. :((
48 nadysaan
 
18.04.18
12:08
вопрос не в том, как надо, а как не надо, не понятки именно с ADD. Много ваяла таких обработок и для этого клиента тоже есть несколько. а сейчас споткнулась и не знаю куда ковырять. или сервак или... не знаю. на другом серваке у этого же клиента даже ошибку не выдает, просто уходит в нирвану
49 aka AMIGO
 
18.04.18
12:09
Иногда срабатывает..
50 nadysaan
 
18.04.18
12:09
если предложений нет, буду по другому пробовать.
51 mistеr
 
18.04.18
12:10
(36) Вот у меня есть один "поставщик", которому нужно в формате .xls, причем два таблицы на двух листах, в одном файле. И никак иначе.
52 Victor111
 
18.04.18
12:10
(0) Проверьте настройку DCOM компоненты "Excel.Application"
http://catalog.mista.ru/public/325873/
53 Остап Сулейманович
 
18.04.18
12:14
(50) Тебе уже предложили. Вынеси Книга = Excel.Workbooks.Open(ФайлДанных); за Попытку и прочитай ошибку. Наверняка Эксель пытается тебе сказать, что файл типа "разрушен". И спрашивает что делать.

Поскольку вот это вот :
НаименованиеФайла = "Заказ " + СокрЛП(ПоставщикДляОтбора.Наименование);

ИмяФайла = КаталогВременныхФайлов()+НаименованиеФайла+".xls";
    ФайлДанных = ИмяФайла;

...
Книга = Excel.Workbooks.Open(ФайлДанных);
Скорее всего приводит к тому, что эксель пытается открыть несуществующий файл. И обработка ошибки методами 1С ничего не дает.
54 Остап Сулейманович
 
18.04.18
12:16
+ (53) Если коротко - то ПЕРЕД Excel.Workbooks.Open(ФайлДанных) нужно что бы когда-нибудь было Excel.Workbooks.Save(ФайлДанных). У тебя этого нет. Поэтому Ексель не понимает что от него хотят.

ЗЫ. Я бы точно не понял.
55 Остап Сулейманович
 
18.04.18
12:17
+ (54) Ну или хотя бы проверь средствами 1С наличие файла прежде, чем пытаешься его открыть.
56 nadysaan
 
18.04.18
12:44
{Обработка.Доработка_ЗаказНоменклатуры.Форма.Форма.Форма(1448)}: Метод объекта не обнаружен (Save)
    Excel.WorkBooks.Save(ФайлДанных);    

Попытка
        Excel = Новый COMОбъект("Excel.Application");
        
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Excel.WorkBooks.SaveAs(ФайлДанных);    
    Книга = Excel.WorkBooks.Open(ФайлДанных);
    Книга = Excel.WorkBooks.Add();
57 Victor111
 
18.04.18
12:50
(56) пример: Excel.ActiveWorkbook.SaveAs("C:\Temp\Файл.xls")

1) проверьте Полное имя файла или нет под переменной "ФайлДанных"
58 nadysaan
 
18.04.18
12:55
{Обработка.Доработка_ЗаказНоменклатуры.Форма.Форма.Форма(1448)}: Метод объекта не обнаружен (SaveAs)
    Excel.WorkBooks.SaveAs("C:\Temp\Проба.xls");
59 dezss
 
18.04.18
13:05
а там точно есть эксель?
60 nadysaan
 
18.04.18
13:09
:) Точно
61 catena
 
18.04.18
13:31
А если все-таки поставить возврат в исключение?

    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
62 nadysaan
 
18.04.18
13:35
Может я Вас не понимаю, но у меня изначально как было
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

так и осталось
63 catena
 
18.04.18
13:46
(62)Где возврат в исключении? Зачем дальше работать, если подключения не произошло?

    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить(ОписаниеОшибки());
        ВОЗВРАТ;
    КонецПопытки;
64 nadysaan
 
18.04.18
13:58
в том то и дело что подключение срабатывает
Excel <> Неопределено = Истина, проверила, зачем возврат?
65 1Садовник
 
18.04.18
14:06
в (0) если файл существует то он открывается и ... ВСЕ (ошибок никаких не будет).

Если файла нет - он должен создаваться и записываться. У пользователя есть права на запись файла?
66 nadysaan
 
18.04.18
14:29
я уже даже создала этот файл и через Excel он открывается спокойно, а из 1с нет. Захожу под пользователем с полными правами
67 1Садовник
 
18.04.18
14:33
(66) не могу воспроизвести ошибку. Этот кусок работает без ошибок:

Ексель   = Новый COMОбъект("Excel.Application");
Попытка                          
   Книга = Ексель.Workbooks.Open("D:\Книга4.xlsx");
Исключение
   Книга = Ексель.Workbooks.Add();
   Книга.SaveAs("D:\Книга9.xlsx");
КонецПопытки;
68 mistеr
 
18.04.18
14:39
Я же говорю, что-то с Экселем не так.

(66) На локальном компе работает?
69 Сияющий в темноте
 
18.04.18
19:55
Во первых,у адд могут быть параметры,во-вторых,когда вы создали ексель,он не инициализирован,и именно это может ему мешать работать
потом не забываем ставить Visible,иначе в диспетчере задач множатся процессы ексель со страшной силой
70 Сияющий в темноте
 
19.04.18
09:27
Кстати,для работы ексель на сервере нужно,чтобы у серверного пользователя было хранилище настроек и рабочий стол,тогда при открытии или создании файла ексель не будет падать из за невозможности что то записать в аппдата
удачи
71 nadysaan
 
19.04.18
11:02
Разобрались, кому интересно, проблема в том, что 1с 64 разрядная, а office 32 разрядный
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший