Имя: Пароль:
1C
1С v8
Веб-клиент и Excel
,
0 Alever
 
18.07.13
13:40
Ранее уже тема поднималась, но ответа так и не нашел:
&НаКлиенте
Процедура Загрузить(Команда)
   
   НомерЛиста =1;    
   Колонка = 1;

   Эксель = Новый COMОбъект("Excel.Application");
   Эксель.Visible = 0;
   Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
   Лист = Книга.WorkSheets(НомерЛиста);
   
   ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
   
   Если Объект.СтрокаДоКоторойЗагружать = 999 Тогда
       ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
   Иначе
       ВсегоСтрок = Объект.СтрокаДоКоторойЗагружать;
   КонецЕсли;

   ТабДокумент = Новый ТабличныйДокумент();
   ТабДокумент = ПолучитьМакетНаСервере();

                   
   Для Строка = Объект.СтрокаСКоторойЗагружать по ВсегоСтрок Цикл

//И ВОТ ТУТ Я ВСТРЯЛ - не знаю что делать и как получить значение и правильно ли я делаю?
   //    //ТабДокумент.Вывести(ТабДокумент.ОбластьПробела);
   //    //Ячейка = СокрЛП(Лист.Cells(Строка,Колонка).Value);
   //    НоваяСтрока.НомерПП = СокрЛП(Лист.Cells(Строка,Колонка).Value);
   //    НоваяСтрока.ФИОПолучателя = СокрЛП(Лист.Cells(Строка,Колонка+1).Value);
   //    //ИндексОПС =  СокрЛП(Лист.Cells(Строка,Колонка+2).Value);
   //    //АдресМестаНазначения = СокрЛП(Лист.Cells(Строка,Колонка+3).Value);
   //    //НомерШПИ =  СокрЛП(Лист.Cells(Строка,Колонка+4).Value);
   //    //СуммаПрописью = СокрЛП(Лист.Cells(Строка,Колонка+6).Value);
   //    //
   //    //ТабДокумент.ОбластьМакета.Параметры.ФИОПолучателя = ФИОПолучателя;
   //    //ТабДокумент.ОбластьМакета.Параметры.ИндексОПС = ИндексОПС;
   //    //ТабДокумент.ОбластьМакета.Параметры.АдресМестаНазначения = АдресМестаНазначения;
   //    //ТабДокумент.ОбластьМакета.Параметры.НомерШПИ = НомерШПИ;
   //    //ТабДокумент.ОбластьМакета.Параметры.СуммаПрописью = ЧислоПрописью(СуммаПрописью, "L=ru_RU");//, ПараметрПрописиНаКазахском);//ЧислоПрописью(СуммаПрописью, "L=kk_KZ", ПараметрПрописиНаКазахском);
   //    //
   //    
   //    //ТабДокумент.Вывести(ТабДокумент.ОбластьМакета);
   //    //ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

   КонецЦикла;
   
   Эксель.Workbooks.Close();
   Эксель.Quit();
   Эксель = Неопределено;

   ТабДокумент.Показать("Печать по установленному шаблону");
   
КонецПроцедуры


&НаСервере
Функция ПолучитьМакетНаСервере()
   
   ТабДокумент = Новый ТабличныйДокумент();  
   
   Макет = Обработки.ПечатьПоШаблону.ПолучитьМакет("ПечатьПоШаблону");
   ОбластьМакета  = Макет.ПолучитьОбласть("Шапка");
   ОбластьПробела = Макет.ПолучитьОбласть("Пробел");
   
   ТабДокумент.ОтображатьСетку = Ложь;
   ТабДокумент.ТолькоПросмотр = Истина;
   ТабДокумент.ОтображатьЗаголовки = Ложь;

   Возврат ТабДокумент;
   
КонецФункции
1 hhhh
 
18.07.13
13:52
не путай табдокумент с макетом

надо

ОбластьМакета.Параметры.ФИОПолучателя = ФИОПолучателя;

и ТабДокумент.Вывести(ОбластьМакета);
2 Alever
 
18.07.13
13:56
это надо на Клиенте уже делать? То есть на сервере получать не табличный документ а макет?
3 hhhh
 
18.07.13
13:58
(2) ну а сам как думаешь? Ну ведь бред:

ТабДокумент.ОбластьМакета
4 Alever
 
18.07.13
13:59
спасибо! сейчас буду пробовать!
5 Alever
 
18.07.13
14:06
не получается - ТабДокумент.Вывести(ОбластьМакета) - пишет {Обработка.ПечатьПоШаблону.Форма.ФормаУправляемая.Форма(27,22)}: Переменная не определена (ОбластьПробела)
   ТабДокумент.Вывести(<<?>>ОбластьПробела); (Проверка: Тонкий клиент)

Получается я на Сервере получаю Табличный документ и все его области.. а заполнение и вывод областей должен происходить уже НаКлиенте.
6 EvgeniuXP
 
18.07.13
14:11
на клиент уже готовый идет таб док.
7 EvgeniuXP
 
18.07.13
14:11
ты клиента собрался грузить по формированию областей твоего таб дока?
8 Alever
 
18.07.13
14:13
у меня не получается по другому. мне либо нужно на сервер тащить COMОбъект - который не тащиться..либо же заполнять при переборе строк. А перебрать строки и поместить их в таблицу значений я не могу - так как ТаблицаЗначений отсутствует наКлиенте вообще. вот и приходиться извращаться..
9 sam_pfr
 
18.07.13
14:19
А через ПоместитьФайл прочитать на сервере из временного хранилища и заполнить макет. Только нужно будет установленный Эксель на сервере.
10 EvgeniuXP
 
18.07.13
14:20
(8) как это отсутствует? А ЗначяениеВДанныеФормы(ТЗ, РеквизитТЗ) :)
11 Alever
 
18.07.13
14:20
Пробовал. Там тоже отсутствует возможность помещения во временное хранилище COMОбъектов ((
12 Alever
 
18.07.13
14:21
По поводу  А ЗначяениеВДанныеФормы(ТЗ, РеквизитТЗ) :) - не пробовал..
13 EvgeniuXP
 
18.07.13
14:22
Block1-132-part1-main - перенести ТЗ на форму.
14 Alever
 
18.07.13
14:22
попробую отпишусь.
15 Alever
 
18.07.13
14:24
не получиться:
ЗначениеВДанныеФормы - Доступность: Сервер, толстый клиент.
16 EvgeniuXP
 
18.07.13
14:26
(15) так на сервере и вызывай эту процедуру, она тебе и заполнит реквизит на форме с типом (ТаблицаЗначений).
17 Alever
 
18.07.13
14:32
У меня объект есть только на клиенте и я его никуда передать не могу.
   НомерЛиста =1;    
   Колонка = 1;

   Эксель = Новый COMОбъект("Excel.Application");
   Эксель.Visible = 0;
   Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
   Лист = Книга.WorkSheets(НомерЛиста);
   

А на Сервере он не создается - ошибку выдает в барузере
18 EvgeniuXP
 
18.07.13
14:35
так и обратная есть функция ДанныеФормыВЗначение()
19 EvgeniuXP
 
18.07.13
14:37
у тебя какая-то каша с клиент сервером...
20 Alever
 
18.07.13
14:39
Согласен что ситуация запутанная и может я что то не догоняю но вот что получается:
Я создаю объект екселя на клиенте и передать его не могу, но мне надо заполнить по нему данные.
21 Alever
 
18.07.13
14:39
и вывести это все на печать
22 EvgeniuXP
 
18.07.13
14:43
23 EvgeniuXP
 
18.07.13
14:50
Для расширения кругозора: таблица значений имеет тип "ДанныеФормыКоллекция" на клиенте и там тоже есть функция Добавить :)
24 Alever
 
18.07.13
15:01
ПОЛУЧИЛОСЬ!!! )) спасибо всем .
Решение оказалось очень простым. Поскольку создать объект удается, но передать его на сервер нет возможности, то надо по идее заполнять все данные этого объекта в тот объект который возможно передать..или в тот который будет ВСЮДУ виден.. так вот что я сделал - вернее мне подсказали - создать на форме этой обработки ТАБЛИЦУ ЗНАЧЕНИЙ - и на клиенте перебирая по строчно COMобъект (файл EXCEL) я заполняю эту Таблицу значений. После чего вызываю процедуру формирования макета на сервере и там обхожу ее с помощью цикла и заполняю параметры областей макета - после этого возвращаю Табличный документ на Клиента и Вызываю процедуру Показать и вуаля. Все работает!