Имя: Пароль:
1C
1C 7.7
v7: Вопрос по работе с объектом "Таблица"
, ,
0 AlexS1C
 
06.05.13
19:40
Может кто знает, есть ли какая внеш. компонента, что бы создать программно шаблон объекта «Таблица», а потом его уже заполнять. Штатными средствами этого сделать нельзя(((!  Создать программного шаблон помогло бы повысить скорость формирования таблицы для универсальных отчетов! Исключив к примеру дополнительный цикл по колонкам: Таб.ПрисоеденитьСекцию(«Строка|Колонка»).
1 КапЛей
 
06.05.13
19:46
а зачем?
2 Ork
 
06.05.13
19:53
(0) Пользуя "область" вместо "секция" вполне можно обойтись вообще без шаблона/макета. И будет вам полностью программное заполнение, оформление и проТчая радости.
3 vcv
 
07.05.13
09:59
По заполнению отчета быстрее его выводить в стиле 1С8. То есть перед циклом вывода строк получить секцию, при выводе заполнять её значениями и выводить.

СекцияСтроки = Таб.ПолучитьСекцию("Строка");
Пока ... Цикл
 СекцияСтроки.Сумма = ...
 Таб.ВывестиСекцию(СекцияСтроки);
КонецЦикла;

Заодно, бонусом, в замере производительности в отладчике увидишь всё. А то, если в ячейке таблицы написать выражение, например, Номенклатура.ПечНаименование, в отладчике эту строку не увидишь, а обращение к справочнику при выводе каждой строки отчета получишь. И соответствующие тормоза.
4 AlexS1C
 
07.05.13
13:17
(2) Если имеешь ввиду такое заполнение:
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Текст = Значение;
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Расшифровка(Значение, 0);
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).РамкаОбвести(3, 0, 3, 0);
То в нем большой минус по производительности! Как то годик назад помню тестил что быстрей работает вывод через шаблон или без него! Оказалось шаблон в разы давал большу скорость выполнения!Хотя сам думал что без шаблона будет быстрей, оказалось все наоборот! Поэтому было бы здорово создать шаблон  программно!
5 AlexS1C
 
07.05.13
13:18
(3) Это интересный способ! Надо будет его по тестировать! Спасибо за подсказку!!!
6 AlexS1C
 
07.05.13
15:51
(3) Да этот метод работает в раза 2  быстрее! Кстати еще по тестировал, еще более быстрый нашел на 30-40 %! На основании (3):
СекцияСтроки = Таб.ПолучитьСекцию("Строка|Колонка");
ОбластьСекции = СекцияСтроки.область(1,1,1,1); //- если секция с одной ячейкой
Пока ... Цикл
 ОбластьСекции.Текст = ...
 Таб.ВывестиСекцию(СекцияСтроки);
КонецЦикла;
Скорость чуть выше + ни надо создавать именованную область!
7 Mikeware
 
07.05.13
15:53
белорусам отсыпали восклицательных знаков...
8 NS
 
07.05.13
15:56
(0) Вообще-то программно создать шаблон можно.
9 AlexS1C
 
07.05.13
16:04
(8) Как?
10 NS
 
07.05.13
16:05
(9) Таб.записать(,0);
11 Chum
 
07.05.13
16:07
>Штатными средствами этого сделать нельзя

схерали?

Загрузить(<?>);
Синтаксис:
Загрузить(<СписокЗначений>)
Назначение:
Загружает значения и имена для всех предназначенных для ввода ячеек таблицы из объекта типа ''Список значений'', причем представление списка значений становится именем ячейки, а значение записи становится значением ячейки.
Параметры:
<СписокЗначений> - идентификатор объекта типа ''Список значений'', откуда загружаются парами значения и имена для всех предназначенных для ввода ячеек.
12 AlexS1C
 
07.05.13
16:23
(10) Просто сохранить таблицу. При чем тут шаблон? Создать программно шаблон я имею ввиду, создать секции и т.д.
13 AlexS1C
 
07.05.13
16:25
(11) Это только в режиме ввода данных
14 NS
 
07.05.13
16:30
(12) А нафига? Есть же методы области таблицы.
15 AlexS1C
 
07.05.13
16:55
(14) Через области, если имеется ввиду типа как тут(4)! То работает медленей, чем через шаблон! Да и вообще вопрос не актуален, меня вполне устраивает так (6)!
16 AlexS1C
 
07.05.13
16:56
Всем спасибо за участие! Хотя если у кого еще есть идеи то всегда пожалуйста!)))
17 trad
 
07.05.13
17:02
(0) есть ВК tabledoc.dll
Там новые секции в макете создавать нельзя, но можно изменять существующие секции макета, что в принципе соответствует поставленной задаче - избавиться от ПрисоеденитьСекцию.

вот такой демонстрационный код:

   Таб = СоздатьОбъект("Таблица");
   Мен = СоздатьОбъект("МенеджерТабличногоДокумента");
   Мен.УстановитьТаблицу(Таб);
   
   СекцияМакета = Мен.ПолучитьСекциюМакета("Секция_1"); //секция макета без расчета формул
   Область = СекцияМакета.Область(1,1);
   Область.ФорматДанных(3);
   Область.Текст = "[i*2]";
   Область = СекцияМакета.Область(1,2);
   Область.ФорматДанных(1);
   Область.Текст = "i";
   Область = СекцияМакета.Область(1,3);
   Область.ФорматДанных(2);
   Область.Текст = "текст";
   
   Для i=1 По 100 Цикл
       Таб.ВывестиСекцию(СекцияМакета.ВычислитьСекцию()); //вывод рассчитанной области
   КонецЦикла;
   
   Таб.Показать();
18 AlexS1C
 
07.05.13
20:44
(17) Спасибо за совет.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.