Имя: Пароль:
1C
1С v8
ПараметрыМакетаТабличногоДокумента
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));
        Если тПараметр <>"" Тогда
            Попытка
                СтруктураПараметров.Вставить(тПараметр,"");
            Исключение
                Сообщить("В шаблоне "+ОбластьТекст+" ошибка: "+ОписаниеОшибки());
            КонецПопытки;    
        КонецЕсли;
        тПоз = Найти(тШаблон,"[");
    КонецЦикла;
КонецПроцедуры
AdBlock убивает бесплатный контент. 1Сергей