Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 03:35

выгрузка в excel

Автор nikolski, 17 июн 2010, 14:07

0 Пользователей и 1 гость просматривают эту тему.

nikolski

Господа, помогите пожалуйста с проблемой.
Первая моя доработка в 1С, опыта мало в программировании вообще, а сроки уже поджимают, срочно нужна помощь.

Необходимо на основании данных документа заполнить таблицу Excel, вида (http://rghost.ru/1911966, приложить не получилось):

пару строк шапки (с переменными, которые надо заполнить)
таблица (количество строк зависит от количества данных из табличной части документа, часть ячеек в строке заполнено данными, часть - формулами расчета)
подвал с итогами
пару строк с переменными

В основном проблема в том, что я плохо знаю структуру объектов в excel, да и вообще программирования office.
накидал примерно это

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = "ВЫБРАТЬ
               | РеализацияТоваровУслугТовары.Номенклатура,
               | РеализацияТоваровУслугТовары.Количество,
               | РеализацияТоваровУслугТовары.Цена
               |ИЗ
               | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
               |ГДЕ
               | РеализацияТоваровУслугТовары.Ссылка = &Ссылка";


РезультатЗапроса = Запрос.Выполнить().Выбрать();

Таблица = Новый COMОбъект("Excel.Application");
Таблица.WorkBooks.Open("d:\temp\шаблоны\спецификация\Спец01.xltx");
Лист = Таблица.WorkSheets(1);

// заменяем переменную значением, но хотелось бы это делать не указывая конкретную ячейку, а производя поиск переменных по листу
Лист.Cells(1,1).Value = СтрЗаменить(Лист.Cells(1,1).Value, "[ИмяКонтрагента]", "ООО Рога и копыта");

Н    = 0;
Стр = 4;

Пока РезультатЗапроса.Следующий() Цикл

Лист.Cells(Стр + Н, 1).Value = Н+1;
Лист.Cells(Стр + Н, 2).Value = "" + РезультатЗапроса.Номенклатура;
Лист.Cells(Стр + Н, 3).Value = "" + РезультатЗапроса.Цена;
Лист.Cells(Стр + Н, 4).Value = "" + РезультатЗапроса.Количество;

Лист.Cells(Стр + Н-1, 5).Formula = "=C4*D4";
Лист.Cells(Стр + Н-1, 6).Formula = "=E4*0,1";
Лист.Cells(Стр + Н-1, 7).Formula = "=E4+F4";

Н = Н + 1;

КонецЦикла;

Таблица.Visible = Истина;


При этом программа ругается на формулы, где идет перемножение на число (E4*0,1), хотя в exel проблем нет. При заполнении пишет "Ошибка при установке значения атрибута контекста (Formula): произошла исключительная ситуация (0x800a03ec)".
Возникает вопрос, как добавить рамку для каждой новой строки в номенклатуре? И как сделать выравнивание внутри рамки? Как сдивгать те строки, которые идут после таблицы (количество строк заранее ведь неизвестно)?

Как искать переменные и заменять их? В word был метод range(), а в excel он работает как-то по-другому. Времени разбираться катастрофически нету(
И как, с помощью универсальных механизмов (это для УТ) получить руководителя и гл. буха?

Прошу не ругаться на чайника и помочь, не успеваю напрочь.
Заранее спасибо!

Myti

Range("E4").Select
ActiveCell.FormulaR1C1 = "=R[-1]C*0.1"
--а вообще,открывай эксель,влючай макрос на запись,производи нужные действия,стопари макрос,и жми на его редактирование,там буит код

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск