|
Веб-клиент и 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) я заполняю эту Таблицу значений. После чего вызываю процедуру формирования макета на сервере и там обхожу ее с помощью цикла и заполняю параметры областей макета - после этого возвращаю Табличный документ на Клиента и Вызываю процедуру Показать и вуаля. Все работает! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |