|
ПараметрыМакетаТабличногоДокумента | ☑ | ||
---|---|---|---|---|
0
CTmuB
27.01.15
✎
12:28
|
Доброго времени суток
есть переменная типа Тип("ПараметрыМакетаТабличногоДокумента") "Для Каждого Из" получает значения всех параметров Вопрос в том как получить имена этих самых параметров По сути нужна коллекция {ИмяПараметра, ЗначениеПараметра} |
|||
1
LehhaK
27.01.15
✎
12:43
|
В итераторе разве не хранится имя параметра?
|
|||
2
CTmuB
27.01.15
✎
12:46
|
(1) нет (((
получает только ЗначениеПараметра |
|||
3
CTmuB
27.01.15
✎
12:46
|
и индекс
|
|||
4
CTmuB
27.01.15
✎
12:47
|
(3) в смысле по индексу можно получить значение, но как получить имя этого самого параметра?
|
|||
5
Ёпрст
27.01.15
✎
12:54
|
(4) никак не получить, смирись
|
|||
6
CTmuB
27.01.15
✎
13:16
|
нельзя "смирись"
надо чесать правой ногой левое ухо :-( |
|||
7
Психотерапевта Вызыва
27.01.15
✎
13:31
|
(0) даю наводку
<SpreadsheetDocument xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <languageSettings> <currentLanguage>ru</currentLanguage> <defaultLanguage>ru</defaultLanguage> <languageInfo> <id>ru</id> <code>Русский</code> <description>Русский</description> </languageInfo> </languageSettings> <columns> <size>1</size> </columns> <rowsItem> <index>0</index> <row> <c> <c> <f>1</f> <parameter>Параметр1</parameter> </c> </c> </row> </rowsItem> <templateMode>true</templateMode> <defaultFormatIndex>2</defaultFormatIndex> <height>1</height> <vgRows>1</vgRows> <format> <fillType>Parameter</fillType> </format> <format> <width>72</width> </format> </SpreadsheetDocument> |
|||
8
CTmuB
27.01.15
✎
13:56
|
(7) есть область макета и все её параметры
табличного документа ещё нет ((( |
|||
9
Психотерапевта Вызыва
27.01.15
✎
13:58
|
(8) а Сообщить(""+ТипЗнч(ТвояОбластьМакета));
что пишет? |
|||
10
CTmuB
27.01.15
✎
14:07
|
ну оно то да...
но если в документе пара сотен строк и каждую выгружать в файл а потом его парсить.... пользователи неправильно поймут |
|||
11
Психотерапевта Вызыва
27.01.15
✎
14:08
|
(10) зачем выгружать в файл?
|
|||
12
CTmuB
27.01.15
✎
14:09
|
(11) а как тогда получить SpreadsheetDocument
|
|||
13
CTmuB
27.01.15
✎
14:10
|
(7) ну или наводку уточните
|
|||
14
Психотерапевта Вызыва
27.01.15
✎
14:11
|
(12) например так
Макет = тОбъект.ПолучитьМакет("Макет"); СтрМакета = Макет.ПолучитьОбласть("СтрМакета"); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтрМакета); тСтр = ЗаписьXML.Закрыть(); Сообщить(тСтр); |
|||
15
CTmuB
27.01.15
✎
14:16
|
(14) спасибо, попробую поковырять
|
|||
16
CTmuB
27.01.15
✎
14:18
|
хотя бред получается : получить параметр по имени можно а получить имена параметров нельзя...
|
|||
17
Ёпрст
27.01.15
✎
14:20
|
(14) не выйдет же, не сериализуется область макета..
|
|||
18
Ёпрст
27.01.15
✎
14:21
|
максимум, так выйдет:
Макет = тОбъект.ПолучитьМакет("Макет"); СтрМакета = Макет.ПолучитьОбласть("СтрМакета"); Сообщить(ЗначениеВСтрокуВнутр(СтрМакета)); и далее парсить на вхождение "{24," там ужо будут имена параметра и расшифровки |
|||
19
Психотерапевта Вызыва
27.01.15
✎
14:23
|
(17) пробовал? запусти этот код на простейшем макете
|
|||
20
Ёпрст
27.01.15
✎
14:24
|
(19) конечно
|
|||
21
Психотерапевта Вызыва
27.01.15
✎
14:24
|
(20) и что? не сообшил ничего?
|
|||
22
Ёпрст
27.01.15
✎
14:26
|
ну и..если бы область сериализовалась, то проще было бы писать просто
Сообщить(XMLСтрока (СтрМакета)) НО, это тоже не работает |
|||
23
Ёпрст
27.01.15
✎
14:26
|
(21) Почему ? Сообщил ошибку - неверный параметр 2
|
|||
24
Ёпрст
27.01.15
✎
14:26
|
вот в этом методе СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтрМакета);
|
|||
25
Психотерапевта Вызыва
27.01.15
✎
14:27
|
(23) а мне представляешь ничего такого не выдает
Только XML из (7) |
|||
26
CTmuB
27.01.15
✎
14:30
|
(17) вышло
|
|||
27
Ёпрст
27.01.15
✎
14:30
|
(25) может быть, я на 8.1 проверил
|
|||
28
CTmuB
27.01.15
✎
14:31
|
(27) 8,2
|
|||
29
Ёпрст
27.01.15
✎
14:31
|
ща, посмотрим, че там в 8.2 и 8.3
|
|||
30
Ёпрст
27.01.15
✎
14:34
|
да, на 8.3 работает
|
|||
31
Ёпрст
27.01.15
✎
14:35
|
ну и ладно, всё равно , через ж..у
Могли бы и имена элементам коллекции в свойсто добавить |
|||
32
НЕА123
27.01.15
✎
14:35
|
ОбластьЯчеекТабличногоДокумента (SpreadsheetDocumentRange)
Параметр (Parameter) Использование: Чтение и запись. Описание: Тип: Строка. Имя параметра, используемого при выводе области. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. |
|||
33
Ёпрст
27.01.15
✎
14:41
|
(32) и ?
|
|||
34
Психотерапевта Вызыва
27.01.15
✎
14:48
|
(33) он намекает на это:
Для каждого Область из СтрМакета.Области Цикл Сообщить("Область ="+Область.Параметр); КонецЦикла; |
|||
35
Ёпрст
27.01.15
✎
14:59
|
(34) И ?
|
|||
36
Психотерапевта Вызыва
27.01.15
✎
15:06
|
(34) и вот
Функция ПолучитьПараметрыОбласти(ОбластьТД) СтруктураПараметров = Новый Структура; Если ТипЗнч(ОбластьТД)<>Тип("ТабличныйДокумент") Тогда возврат СтруктураПараметров; КонецЕсли; Для каждого Область из ОбластьТД.Области Цикл Если Область.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Параметр ИЛИ Область.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда СтруктураПараметров.Вставить(Область.Параметр,""); КонецЕсли; КонецЦикла; Возврат СтруктураПараметров; КонецФункции |
|||
37
Ёпрст
27.01.15
✎
15:09
|
(36) и.. не работает
|
|||
38
Психотерапевта Вызыва
27.01.15
✎
15:10
|
(37) а у меня работает.
|
|||
39
Психотерапевта Вызыва
27.01.15
✎
15:11
|
Макет = тОбъект.ПолучитьМакет("Макет");
СтрМакета = Макет.ПолучитьОбласть("СтрМакета"); ПараметрыТД = ПолучитьПараметрыОбласти(СтрМакета); Для каждого параметр из ПараметрыТД Цикл Сообщить(""+Параметр.Ключ+" = "+Параметр.Значение); КонецЦикла; |
|||
40
Ёпрст
27.01.15
✎
15:11
|
(38)
Макет = ПолучитьМакет("Макет"); ТабДок = Новый ТабличныйДокумент; Секция = Макет.ПолучитьОбласть("Строка"); Для каждого Область из Секция.Области Цикл Сообщить("Область ="+Область.Параметр); КонецЦикла; тут дырка от бублика |
|||
41
Психотерапевта Вызыва
27.01.15
✎
15:13
|
(40) а у меня выдает
Параметр1 = |
|||
42
Ёпрст
27.01.15
✎
15:14
|
(41) 8.3 ничего не выдает..
|
|||
43
Ёпрст
27.01.15
✎
15:15
|
если пихать целиуом твой код - пустая структура соответственно возвращается
|
|||
44
Психотерапевта Вызыва
27.01.15
✎
15:16
|
(43) ну так это ТС и требовалось а значения параметров он уже и сам как-нить установит - имена-то теперь у него есть в виде структуры
|
|||
45
Психотерапевта Вызыва
27.01.15
✎
15:18
|
(44) ну ты наверное в своем тестовом макете какой-нибудь тестовый параметр сделал наверное или нет?
|
|||
46
Психотерапевта Вызыва
27.01.15
✎
15:18
|
(45)->(42)
|
|||
47
Ёпрст
27.01.15
✎
15:19
|
Посмотрел на 8.2 - выдает ТОЛЬКО первый параметр из секции..
|
|||
48
Ёпрст
27.01.15
✎
15:20
|
(45) нет. Все параметры как Параметр или Шаблон
|
|||
49
Ёпрст
27.01.15
✎
15:20
|
в 8.3 - пофик, там всегда пусто, в 8.2 возвращает имя только первого параметра.
|
|||
50
Ёпрст
27.01.15
✎
15:21
|
в 8.1 тоже ничего не возвращает
|
|||
51
Ёпрст
27.01.15
✎
15:23
|
Добавь в свой макет еще ячейку с параметром и всё, болт
|
|||
52
Ёпрст
27.01.15
✎
15:26
|
Более того, твой код в 8.2 берет значение параметра только из первой ячейки в области
|
|||
53
Ёпрст
27.01.15
✎
15:26
|
Ну и для 8.1 и 8.3.. не работает, никак
:) |
|||
54
Психотерапевта Вызыва
27.01.15
✎
15:35
|
(52) ты прав код кривой
вот поправил Функция ПолучитьПараметрыОбласти(ОбластьТД) СтруктураПараметров = Новый Структура; Если ТипЗнч(ОбластьТД)<>Тип("ТабличныйДокумент") Тогда возврат СтруктураПараметров; КонецЕсли; ШиринаТаб = ОбластьТД.ШиринаТаблицы; ВысотаТаб = ОбластьТД.ВысотаТаблицы; Для стр=1 по высотаТаб Цикл Для кол=1 по ШиринаТаб Цикл Область = ОбластьТД.Область(стр,кол); Если Область.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Параметр ИЛИ Область.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда СтруктураПараметров.Вставить(Область.Параметр,""); КонецЕсли; КонецЦикла; КонецЦикла; Возврат СтруктураПараметров; КонецФункции |
|||
55
НЕА123
27.01.15
✎
15:43
|
(54)
ну вот... все за ТС сделал. |
|||
56
Ёпрст
27.01.15
✎
15:49
|
(54) так работает, вот только в структуру помещать не стоит, ибо ежели в параметре будет типа
[Вася] - будет облом с именем структуры |
|||
57
Ёпрст
27.01.15
✎
15:49
|
на 8.1 тоже заработало
|
|||
58
Психотерапевта Вызыва
27.01.15
✎
15:50
|
(56) вроде параметры проходят проверку на допустимость наименования в качестве ключа и записать параметр в именем [Вася] просто нельзя
|
|||
59
Ёпрст
27.01.15
✎
15:51
|
(58) в Шаблон же можно
|
|||
60
karabas11
27.01.15
✎
16:09
|
А если 2 параметра в шаблоне?
|
|||
61
Ёпрст
27.01.15
✎
16:10
|
(60) а пофик, это потом по скобкам отпарсить можно будет
|
|||
62
Психотерапевта Вызыва
27.01.15
✎
16:19
|
(59) и опять ты прав
поправил опять Функция ПолучитьПараметрыОбласти(ОбластьТД) СтруктураПараметров = Новый Структура; Если ТипЗнч(ОбластьТД)<>Тип("ТабличныйДокумент") Тогда возврат СтруктураПараметров; КонецЕсли; ШиринаТаб = ОбластьТД.ШиринаТаблицы; ВысотаТаб = ОбластьТД.ВысотаТаблицы; Для стр=1 по высотаТаб Цикл Для кол=1 по ШиринаТаб Цикл Область = ОбластьТД.Область(стр,кол); Если Область.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Параметр Тогда СтруктураПараметров.Вставить(Область.Параметр,""); ИначеЕсли Область.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда ДобавитьПараметрыИзШаблона(СтруктураПараметров,Область.Текст); КонецЕсли; КонецЦикла; КонецЦикла; Возврат СтруктураПараметров; КонецФункции Процедура ДобавитьПараметрыИзШаблона(СтруктураПараметров,ОбластьТекст) тШаблон = ОбластьТекст; тПоз = Найти(тШаблон,"["); Пока тПоз>0 Цикл тШаблон = Сред(тШаблон,тПоз+1); тПоз = Найти(тШаблон,"]"); Если тПоз=0 Тогда Прервать; КонецЕсли; тПараметр = СокрЛП(Лев(тШаблон,тПоз-1)); Если тПараметр <>"" Тогда Попытка СтруктураПараметров.Вставить(тПараметр,""); Исключение Сообщить("В шаблоне "+ОбластьТекст+" ошибка: "+ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
63
Психотерапевта Вызыва
27.01.15
✎
16:21
|
(62)+ пропустил строчку кода
Процедура ДобавитьПараметрыИзШаблона(СтруктураПараметров,ОбластьТекст) тШаблон = ОбластьТекст; тПоз = Найти(тШаблон,"["); Пока тПоз>0 Цикл тШаблон = Сред(тШаблон,тПоз+1); тПоз = Найти(тШаблон,"]"); Если тПоз=0 Тогда Прервать; КонецЕсли; тПараметр = СокрЛП(Лев(тШаблон,тПоз-1)); Если тПараметр <>"" Тогда Попытка СтруктураПараметров.Вставить(тПараметр,""); Исключение Сообщить("В шаблоне "+ОбластьТекст+" ошибка: "+ОписаниеОшибки()); КонецПопытки; КонецЕсли; тПоз = Найти(тШаблон,"["); КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |