|
Выгрузка в Excel 2016 по шаблону Active Document | ☑ | ||
---|---|---|---|---|
0
НоваяВолна
10.06.16
✎
21:06
|
Господа и Дамы!
...Честно не знаю с каким ещё бубном танцевать... Выгружаю из 1С в Excel 2007. Шаблон загружаю из Excel как Active Document. Выглядит шаблон так: http://s019.radikal.ru/i612/1606/37/40c16382882b.jpg Код из модуля формы документа 1С такой: Попытка МакетExcel = ПолучитьМакет("ВыгрузкаВExcel"); msExcel = МакетExcel.Получить(); WBook = msExcel.Application.Workbooks(1); Лист = WBook.Worksheets(1); WBook.Activate(); Исключение Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; Лист = WBook.Worksheets("Лист1"); //// заполнение шапки первой страницы // Блок 1 Лист.Cells(1,1).Value = Строка("" + "Протокол № " + Номер + " от " + Формат(Дата,"ДФ=dd.MM.yyyy" )); Лист.Cells(2,10).Value = Строка(ГруппаТоваров); //Категория товара Лист.Cells(2,14).Value = Строка(Покупатель); Лист.Cells(4,3).Value = Строка(ДокОснование); //Заявка Лист.Cells(4,10).Value = Строка(СрокПоставки); Лист.Cells(4,15).Value = Строка(УсловияОплаты); Лист.Cells(6,3).Value = Строка(БазисПоставки); Лист.Cells(6,5).Value = Строка(МестоПоставки); Лист.Cells(6,10).Value = СтрЗаменить(Строка(Формат(СуммаПродажи,"ЧЦ=20; ЧДЦ=2")),",", "."); Лист.Cells(6,11).Value = Строка(ВалютаПродажи); Лист.Cells(6,15).Value = Строка(МетодПроведенияЗакупки); // заполнение табличных частей с добалением строк // Блок 2 Если ИнформацияОПоставщиках.Количество() > 2 Тогда Для Сч = 3 По ИнформацияОПоставщиках.Количество() Цикл Лист.Rows(11).Insert(); Лист.Range("A11:C11").MergeCells = True; Лист.Range("D11:F11").MergeCells = True; Лист.Range("G11:K11").MergeCells = True; Лист.Range("L11:O11").MergeCells = True; КонецЦикла; КонецЕсли; СтрокаExcel = 10; Для Каждого Стр Из ИнформацияОПоставщиках Цикл Лист.Cells(СтрокаExcel,1).Value = Строка(Стр.Поставщик); Лист.Cells(СтрокаExcel,4).Value = Строка(Стр.СтатусПоставщика); Лист.Cells(СтрокаExcel,7).Value = Строка(Стр.Контакты); Лист.Cells(СтрокаExcel,12).Value = Строка(Стр.Информация); СтрокаExcel = СтрокаExcel + 1; КонецЦикла; ДобавленоСтрок = ИнформацияОПоставщиках.Количество() - 2; // Блок 3 Если ДобавленоСтрок > 0 Тогда СтрокаТретьегоБлока = 15+ДобавленоСтрок; Иначе СтрокаТретьегоБлока = 15; КонецЕсли; Область1 = Строка("A" + Строка(СтрокаТретьегоБлока) + ":C" + Строка(СтрокаТретьегоБлока)); Область2 = Строка("D" + Строка(СтрокаТретьегоБлока) + ":I" + Строка(СтрокаТретьегоБлока)); Область3 = Строка("J" + Строка(СтрокаТретьегоБлока) + ":K" + Строка(СтрокаТретьегоБлока)); Область4 = Строка("L" + Строка(СтрокаТретьегоБлока) + ":O" + Строка(СтрокаТретьегоБлока)); Если ПроверкаПоставщиков.Количество() > 2 Тогда Для Сч = 3 По ПроверкаПоставщиков.Количество() Цикл Лист.Rows(СтрокаТретьегоБлока).Insert(); Лист.Range(Область1).MergeCells = True; Лист.Range(Область2).MergeCells = True; Лист.Range(Область3).MergeCells = True; Лист.Range(Область4).MergeCells = True; КонецЦикла; КонецЕсли; Если ДобавленоСтрок > 0 Тогда СтрокаExcel = 14 + ДобавленоСтрок; Иначе СтрокаExcel = 14; КонецЕсли; Для Каждого Стр Из ПроверкаПоставщиков Цикл Лист.Cells(СтрокаExcel,1).Value = Строка(Стр.Поставщик); Лист.Cells(СтрокаExcel,4).Value = Строка(Стр.Состояние); Лист.Cells(СтрокаExcel,10).Value = Строка(Стр.УставнойКапитал); Лист.Cells(СтрокаExcel,12).Value = Строка(Стр.НаличиеЗадолженностиПоНалогам); СтрокаExcel = СтрокаExcel + 1; КонецЦикла; ДобавленоСтрок = ДобавленоСтрок + ПроверкаПоставщиков.Количество() - 2; // Блок 4 Если ДобавленоСтрок > 0 Тогда СтрокаExcel = 17 + ДобавленоСтрок; Иначе СтрокаExcel = 17; КонецЕсли; Лист.Cells(СтрокаExcel,1).Value = Строка(ДополнительныеДетали); // Блок 5 Если ДобавленоСтрок > 0 Тогда СтрокаПятогоБлока = 22 + ДобавленоСтрок; Иначе СтрокаПятогоБлока = 22; КонецЕсли; Область1 = Строка("A" + Строка(СтрокаПятогоБлока) + ":E" + Строка(СтрокаПятогоБлока)); Область2 = Строка("F" + Строка(СтрокаПятогоБлока) + ":O" + Строка(СтрокаПятогоБлока)); Если ЗаключениеИсполнителя.Количество() > 2 Тогда Для Сч = 3 По ЗаключениеИсполнителя.Количество() Цикл Лист.Rows(СтрокаПятогоБлока).Insert(); Лист.Range(Область1).MergeCells = True; Лист.Range(Область2).MergeCells = True; КонецЦикла; КонецЕсли; Если ДобавленоСтрок > 0 Тогда СтрокаExcel = 21 + ДобавленоСтрок; Иначе СтрокаExcel = 21; КонецЕсли; Для Каждого Стр Из ЗаключениеИсполнителя Цикл Лист.Cells(СтрокаExcel,1).Value = Строка(Стр.Товар); Лист.Cells(СтрокаExcel,6).Value = Строка(Стр.Поставщик); СтрокаExcel = СтрокаExcel + 1; КонецЦикла; Лист = WBook.Worksheets("Лист2"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ИсторияСогласованияПротоколаВыбора.Документ, | ИсторияСогласованияПротоколаВыбора.Период КАК ДатаСогласованияВозврата, | ИсторияСогласованияПротоколаВыбора.СогласуещееЛицо, | ИсторияСогласованияПротоколаВыбора.КомментарийВозврата, | ИсторияСогласованияПротоколаВыбора.ГруппаПользователей, | ИсторияСогласованияПротоколаВыбора.Возврат, | ИсторияСогласованияПротоколаВыбора.ПорядокСогласования КАК ПорядокСогласования |ИЗ | РегистрСведений.ИсторияСогласованияПротоколаВыбора КАК ИсторияСогласованияПротоколаВыбора |ГДЕ | ИсторияСогласованияПротоколаВыбора.Документ = &ТекущийДокумент | |УПОРЯДОЧИТЬ ПО | ДатаСогласованияВозврата, | ПорядокСогласования"; Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); СтрокаExcel = 1; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Лист.Cells(СтрокаExcel,1).Value = Строка(ВыборкаДетальныеЗаписи.ГруппаПользователей); Лист.Cells(СтрокаExcel,2).Value = Строка("" + ВыборкаДетальныеЗаписи.СогласуещееЛицо + " " + ВыборкаДетальныеЗаписи.ДатаСогласованияВозврата); Лист.Cells(СтрокаExcel,3).Value = Строка(ВыборкаДетальныеЗаписи.КомментарийВозврата); СтрокаExcel = СтрокаExcel + 2; КонецЦикла; msExcel.Application.Visible = 1; msExcel.Windows(1).Visible = 1;/// вот тут Excel 2016 ругается msExcel.Activate(); |
|||
1
Dmitry1c
10.06.16
✎
21:08
|
(0) запиши файл на диск и потом работай через COM-объект Excel.Application
|
|||
2
НоваяВолна
10.06.16
✎
21:10
|
(0) В Excel 2007 этот код работает. А вот в Excel 2016 выдает ошибку
{Документ.ПротоколВыбораПоставщика.Форма.ФормаДокумента(2269)}: Ошибка при вызове метода контекста (Windows) WBook.Windows(1).Visible = 1; по причине: Произошла исключительная ситуация (0x8002000b) |
|||
3
НоваяВолна
10.06.16
✎
21:12
|
(2)+++ WBook.Windows(1).Visible = 1; читать как
msExcel.Windows(1).Visible = 1 |
|||
4
НоваяВолна
10.06.16
✎
21:15
|
(1) Записать на диск не могу... Так ка диска нет. База физически на удаленном сервере. Я конечно доступ имею.. Но не давать же доступ сотне пользователей
|
|||
5
НоваяВолна
10.06.16
✎
21:16
|
(4) + пользователю должен выводится файл Excel, а он уж себе сам его сохранит на своём терминале
|
|||
6
НоваяВолна
10.06.16
✎
21:25
|
(0) дайте уже ссыль на учебник VBA... Почитаю, просвещюсь )))
|
|||
7
minele
10.06.16
✎
21:34
|
Все очень просто как день: программы 1С работают максимум до Office 2007 (см. выборку), а на все что выше просто надо написать конвертацию дополнительно.
|
|||
8
ViSo76
10.06.16
✎
21:37
|
Попробуй msExcel.Worksheets(1).Visible = Истина
|
|||
9
НоваяВолна
10.06.16
✎
21:42
|
(7) какую конвертацию? подскажи, где почитать про это?
(8) пробовал открывается пустое окно Excel без файлика.... Именно на строчку msExcel.Windows(1).Visible = 1; Excel 2007 реагирует (выводит всё,как я хочу) а 2016 ... ругается как в (2) |
|||
10
НоваяВолна
10.06.16
✎
22:15
|
апну потом
|
|||
11
b_ru
10.06.16
✎
23:48
|
А что, просто
msExcel.Application.Visible = Истина; не показывает то что нужно? Вроде должен бы. |
|||
12
НоваяВолна
20.06.16
✎
00:18
|
Разрулил. хоть долго не мог понять причину...Уже учебник VBA купил себе и с "умным" видом изучал... =) Не туда копал!
Хочу сделать закрытие ветки. Смысл моей проблемы оказался не в различии команд MS VBA Excel разных версий. Проблема была в том, что созлавая файл Excel, должен создать временный файл Excel, причем в том месте (по умолчанию), где установлен MS Excel, да и весть МС офис... В моём случае удаленный компьютер закрыт от записи извне. То есть у него есть разрешения на запись, но только от определенных IP. |
|||
13
НоваяВолна
20.06.16
✎
00:22
|
+(12) При этом команда
msExcel.Windows(1).Visible = 1; скрыто (не визуально пока) пытается создать временный файл Книги Эквель |
|||
14
DES
20.06.16
✎
06:46
|
(12) ищи TMP каталог, 1С - юзает его на запись, вот и ты туда пиши.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |