Цитата(Lunatik_5 @ 03.11.16, 9:26)
Добавить не так то и просто
Мне кажется что Вы себе усложняете жизнь. Приведу кусок кода, может поймете:
//======================================================================
Функция ВернутьБезЛишнихПробелов(прСтрока)
лпСтрока = СокрЛП(прСтрока);
Пока Найти(лпСтрока," ") > 0 Цикл
лпСтрока = СтрЗаменить(лпСтрока," "," ");
КонецЦикла;
Возврат лпСтрока;
КонецФункции // ВернутьБезЛишнихПробелов
//======================================================================
Процедура УстановитьМаксДлинуВМассив(прМассив,прЗначение,прНомер)
лпСтрДлина = СтрДлина(прЗначение);
лпСтрДлина = ?(лпСтрДлина = 0,1,лпСтрДлина);
лпРазмерМассива = прМассив.РазмерСписка();
Если лпРазмерМассива >= прНомер Тогда
лпДлина = прМассив.ПолучитьЗначение(прНомер);
лпСтрДина = Макс(лпСтрДлина,лпДлина);
прМассив.УстановитьЗначение(прНомер,лпСтрДина);
Иначе
прМассив.ДобавитьЗначение(лпСтрДлина);
КонецЕсли;
КонецПроцедуры // УстановитьШиринуКолонокТаблЗнач
//======================================================================
Процедура УстановитьПараметрыКолонкиШирина(прМассив,прТаблЗнач)
лпКолКолонок = прТаблЗнач.КоличествоКолонок();
Для лпСч = 1 По лпКолКолонок Цикл
лпДлина = прМассив.ПолучитьЗначение(лпСч);
лпДлина = ?(лпДлина > 10,10,лпДлина);
прТаблЗнач.УстановитьПараметрыКолонки(лпСч,,,,,лпДлина);
КонецЦикла;
КонецПроцедуры // УстановитьПараметрыКолонкиШирина
//======================================================================
Функция ПрочитатьXLSФайлVBA(прФайл)
Перем WB;
лпФайл = Нрег(СокрЛП(прФайл));
Excel = СоздатьОбъект("Excel.Application");
WB=Excel.Workbooks.Open(лпФайл);
лпТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
scr=СоздатьОбъект("MSScriptControl.ScriptControl");
scr.language="javascript";
scr.timeout=-1;
scr.addobject("WS",WB.Worksheets(1));
arr = scr.eval("new VBArray(WS.UsedRange.Value)");
WB.Close(0);
лпСтроки = arr.ubound(1);
лпКолонки = arr.ubound(2);
лпТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
Для лпКолонка = 1 по лпКолонки Цикл
лпТаблЗнач.НоваяКолонка();
КонецЦикла;
Состояние("Чтение файла xls...");
лпСчСтрок = 0; лпРазмерФайла = лпСтроки;
лпМассив = СоздатьОбъект("СписокЗначений");
Для лпСчСтрок = arr.lbound(2) По arr.ubound(1) Цикл
Если лпСчСтрок > лпРазмерФайла Тогда
Прервать;
КонецЕсли;
лпТаблЗнач.НоваяСтрока();
Для лпСчКолонок = arr.lbound(1) По arr.ubound(2) Цикл
лпЗначение = ВернутьБезЛишнихПробелов(arr.getItem(лпСчСтрок,лпСчКолонок));
лпТаблЗнач.УстановитьЗначение(лпСчСтрок,лпСчКолонок,лпЗначение);
УстановитьМаксДлинуВМассив(лпМассив,лпЗначение,лпСчКолонок)
КонецЦикла;
Если (лпСчСтрок % 100 = 0) Тогда
Состояние("Обработано строк: "+лпСчСтрок+" из: "+лпРазмерФайла);
КонецЕсли;
КонецЦикла;
УстановитьПараметрыКолонкиШирина(лпМассив,лпТаблЗнач);
Excel.Quit();
scr = 0; arr = 0;
Возврат лпТаблЗнач;
КонецФункции // ПрочитатьXLSФайлVBA(прФайл)
На выходе у Вас получается Таблица значений, ее можете вогнать в глобальную переменную.
Смысл в том, что в работаем только с объектами 1 С. После вывода на экран можете работать с глобальными и предопределенными во время заполнения объектами/процедурами (с глобальными только до тех пор пока открыта форма отчета).
Т.е. фактически получаем то что Вы хотите:
Цитата(Lunatik_5 @ 31.10.16, 23:08)
1. Есть excel файлы информация в которых может меняться. Есть пользователи которые не занимаются этими файлами и вообще не знают где они находятся, но им нужно сформировать печать, где часть информации это данные из 1с, а другая часть это excel файл. Все это вывести при нажатии кнопки печать в стандартную привычную таблицу, которую потом можно распечатать.Одной секцией я вывожу информацию из 1с, а затем следующей хотел через ole объект вывести информацию из excel файла.
Почему предлагаю Таблицу значений, думаю понятно: сможете в ней искать все что Вам необходимо (коды номенклатуры, названия - если не будете пробелы убирать см. функцию ВернутьБезЛишнихПробелов())
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)