Всем, привет! 1С 8.3 УТП. Типа сделал печную форму для документа "Договор". При формировании печатной формы по непонятным мне причинам открываются 3 Excel файла, а потом выдает ошибку!!!
{Документ.Договор.Форма.ФормаДокумента.Форма(2757)}: Ошибка при вызове метода контекста (Windows)
Книга.Windows(1).Visible = 1;
по причине:
Произошла исключительная ситуация (0x8002000b)
Но! Если у меня будет открыт какой-либо файл Excel на компьютере Тогда печатная форма сформируется без проблем без ошибок!
Исходный код простой
{Документ.Договор.Форма.ФормаДокумента.Форма(2757)}: Ошибка при вызове метода контекста (Windows)
Книга.Windows(1).Visible = 1;
по причине:
Произошла исключительная ситуация (0x8002000b)
Но! Если у меня будет открыт какой-либо файл Excel на компьютере Тогда печатная форма сформируется без проблем без ошибок!
Исходный код простой
// Доп. соглашение (Добавление, Изменение программы ЗЛ)
Процедура ОсновныеДействияФормыДействие4(Кнопка)
Макет = ПолучитьМакет("ДопСоглашенияДобИзменПрогрЗЛ");
Книга = Макет.Получить();
Лист = Книга.WorkSheets(1);
Лист.Cells.Replace("[Дата]", Строка(Формат(Дата,"ДЛФ=DD")));
Лист.Cells.Replace("[Номер]", Строка(Формат(Номер,"ДЛФ=DD")));
Лист.Cells.Replace("[НомерКарты]", Строка(НомерКарты));
Лист.Cells.Replace("[Контрагент]", Строка(Контрагент.Наименование));
Лист.Cells.Replace("[ДатаРождения]", Строка(Контрагент.ДатаРождения));
Лист.Cells.Replace("[Адрес1]", Строка(УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[Телефон]", Строка(УправлениеКонтактнойИнформацией.ПолучитьТелефонИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[ИНН]", Строка(Контрагент.ИНН));
Лист.Cells.Replace("[ПрограммаСтрахования]", Строка(ПрограммаСтрахования));
Лист.Cells.Replace("[СтраховаяСумма]", Число(Сумма));
Лист.Cells.Replace("[Премия]", Число(Премия));
Книга.Application.Visible = 1;
Книга.Windows(1).Visible = 1;
Книга.Activate();
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Внешняя печатная форма документа "Реализация товаров и услуг" в EXCEL
- Внешняя печатная форма для БП 3.0 и УТ 11.2 Квитанция ПД-4сб в Excel и без него
- Печатные формы для документа реализации
- Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3
- Макеты печатных форм в программе 1С: Документооборот 8
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А так можно?
Там разве не должно быть чего-то такого:
Там разве не должно быть чего-то такого:
Excel = Новый COMОбъект("Excel.Application");
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанные = ПолучитьМакет("ДопСоглашенияДобИзменПрогрЗЛ");
ДвоичныеДанные.Записать(ИмяВременногоФайла);
Книга = Excel.WorkBooks.Open(ИмяВременногоФайла);
Лист = Книга.WorkSheets(1);
ТемпФайл = ПолучитьИмяВременногоФайла("xlsx");
ДД = ПолучитьМакет("ДопСоглашенияДобИзменПрогрЗЛ");
ДД.Записать(ТемпФайл);
Excel = Новый COMОбъект("Excel.Application");
Excel.Visible = true;
Попытка
WorkBook = Excel.WorkBooks.Open(ТемпФайл);
Лист = WorkBook.Sheets(1);
Лист.Cells.Replace("[Дата]", Строка(Формат(Дата,"ДЛФ=DD")));
Лист.Cells.Replace("[Номер]", Строка(Формат(Номер,"ДЛФ=DD")));
Лист.Cells.Replace("[НомерКарты]", Строка(НомерКарты));
Лист.Cells.Replace("[Контрагент]", Строка(Контрагент.Наименование));
Лист.Cells.Replace("[ДатаРождения]", Строка(Контрагент.ДатаРождения));
Лист.Cells.Replace("[Адрес1]", Строка(УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[Телефон]", Строка(УправлениеКонтактнойИнформацией.ПолучитьТелефонИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[ИНН]", Строка(Контрагент.ИНН));
Лист.Cells.Replace("[ПрограммаСтрахования]", Строка(ПрограммаСтрахования));
Лист.Cells.Replace("[СтраховаяСумма]", Число(Сумма));
Лист.Cells.Replace("[Премия]", Число(Премия));
Исключение
КонецПопытки;
WorkBook.Application.Visible = 1;
WorkBook.Windows(1).Visible = 1;
Excel.WindowState = -4140;
Excel.WindowState = -4137;
Показать
с вордом работаю вот так без проблем
в коде
и т.д.
и в итоге
Функция ПолучитьШаблонMSWord()
Макет = ПолучитьМакет("Макет");
MSWord = Макет.Получить();
Попытка
Документ = MSWord.Application.Documents(1);
MSWord.Activate();
Исключение
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
Возврат MSWord;
КонецФункции // ПолучитьШаблонMSWord()
Показатьв коде
Шаблон = ПолучитьШаблонMSWord();
Шаблон.Variables("Номер").Value = СокрЛП(СсылкаНаОбъект.Номер);
Шаблон.Variables("Город").Value = СокрЛП(Город);
Шаблон.Variables("ДатаДок").Value = Формат(Стр.ДатаНачала,"ДФ=dd.MM.yyyy");
и т.д.
и в итоге
Шаблон.Fields.UpDate();
Шаблон.ActiveWindow.View.ShowFieldCodes = False;
Шаблон.Application.Visible = Истина;
Шаблон.Application.Quit();
(1) А если так?
Макет = ПолучитьМакет("ДопСоглашенияДобИзменПрогрЗЛ");
Книга = Макет.Получить();
Лист = Книга.WorkSheets(1);
Лист.Cells.Replace("[Дата]", Строка(Формат(Дата,"ДЛФ=DD")));
Лист.Cells.Replace("[Номер]", Строка(Формат(Номер,"ДЛФ=DD")));
Лист.Cells.Replace("[НомерКарты]", Строка(НомерКарты));
Лист.Cells.Replace("[Контрагент]", Строка(Контрагент.Наименование));
Лист.Cells.Replace("[ДатаРождения]", Строка(Контрагент.ДатаРождения));
Лист.Cells.Replace("[Адрес1]", Строка(УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[Телефон]", Строка(УправлениеКонтактнойИнформацией.ПолучитьТелефонИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[ИНН]", Строка(Контрагент.ИНН));
Лист.Cells.Replace("[ПрограммаСтрахования]", Строка(ПрограммаСтрахования));
Лист.Cells.Replace("[СтраховаяСумма]", Число(Сумма));
Лист.Cells.Replace("[Премия]", Число(Премия));
Книга.Application.Visible = 1;
Книга.Application.Workbooks(1).Activate();
Книга.Windows(1).Visible = 1;
Книга.Activate();
КонецПроцедуры
Показать
Николай, можно так,
ну, один из очередных примеров скажем так,
У тебя есть Таб часть документа, выгрузи ее в ТаблицуЗначений, далее:
далее, просто:
Зуб даю, не будет трех копий Excell-ля :))))
ну, один из очередных примеров скажем так,
У тебя есть Таб часть документа, выгрузи ее в ТаблицуЗначений, далее:
ТабДок = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета();
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТвояТаблицаЗначений);
Построитель.ВыводитьЗаголовокОтчета = Ложь;
Построитель.Вывести(ТабДок );
ТабДок.Записать("C:\ФайлРезультат" + ".xlsx",ТипФайлаТабличногоДокумента.XLSX);
//Допустим что имя файла: ФайлРезультат.xlsx
Показатьдалее, просто:
ЗапуститьПриложение("C:\ФайлРезультат.xlsx");
Зуб даю, не будет трех копий Excell-ля :))))
(1) Сорян, что делать с activex - не знаю, просто не надо так 8)
держи вариант с минимальными изменениями логики:
держи вариант с минимальными изменениями логики:
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xls");
Макет = ПолучитьМакет("Макет");
Книга = Макет.Получить();
Лист = Книга.WorkSheets(1);
Лист.Cells.Replace("[Номер]", "123");
Книга.SaveAs(ИмяВременногоФайла);
Книга.Close();
// если сильно хочется, открой через ком
ЗапуститьПриложение(ИмяВременногоФайла);
Показать
(1) Попробуйте так:
// Доп. соглашение (Добавление, Изменение программы ЗЛ)
Процедура ОсновныеДействияФормыДействие4(Кнопка)
Макет = ПолучитьМакет("ДопСоглашенияДобИзменПрогрЗЛ");
Книга = Макет.Получить();
Лист = Книга.WorkSheets(1);
Лист.Cells.Replace("[Дата]", Строка(Формат(Дата,"ДЛФ=DD")));
Лист.Cells.Replace("[Номер]", Строка(Формат(Номер,"ДЛФ=DD")));
Лист.Cells.Replace("[НомерКарты]", Строка(НомерКарты));
Лист.Cells.Replace("[Контрагент]", Строка(Контрагент.Наименование));
Лист.Cells.Replace("[ДатаРождения]", Строка(Контрагент.ДатаРождения));
Лист.Cells.Replace("[Адрес1]", Строка(УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[Телефон]", Строка(УправлениеКонтактнойИнформацией.ПолучитьТелефонИзКонтактнойИнформации(Контрагент)));
Лист.Cells.Replace("[ИНН]", Строка(Контрагент.ИНН));
Лист.Cells.Replace("[ПрограммаСтрахования]", Строка(ПрограммаСтрахования));
Лист.Cells.Replace("[СтраховаяСумма]", Число(Сумма));
Лист.Cells.Replace("[Премия]", Число(Премия));
Книга.Activate(); // сначала активируем
//Книга.Application.Visible = 1;
Книга.Windows(1).Visible = 1;
КонецПроцедуры
Показать
Если нужно открыть не сохранённый Excel-файл, то:
Лучше сделать так:
А ещё можно создать табличный документ, сохранить как Excel и открыть методом "ЗапуститьПриложение(ИмяФайлаExcel)"
EXCELApplication = Новый COMОбъект("Excel.Application");
EXCELApplication.Workbooks.Add();
Лист = EXCELApplication.ActiveSheet;
Лист.Cells.Replace...
...
EXCELApplication.Visible = Истина;
EXCELApplication.Application.Quit();//Система предложит сохранить файл перед закрытием. Вероятно, от этого не избавиться, пока документ не сохранён.
ПоказатьЛучше сделать так:
EXCELApplication = Новый COMОбъект("Excel.Application");
EXCELApplication.Workbooks.Add();
Лист = EXCELApplication.ActiveSheet;
Лист.Cells.Replace...
...
EXCELApplication.ActiveWorkbook.SaveAs(ИмяФайлаExcel);
EXCELApplication.ActiveWorkbook.Close(0);
EXCELApplication.Application.Quit();
ЗапуститьПриложение(ИмяФайлаExcel);
ПоказатьА ещё можно создать табличный документ, сохранить как Excel и открыть методом "ЗапуститьПриложение(ИмяФайлаExcel)"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот