1С 8.3 Получить список параметров табличного документа (программно)
Данные > Примеры кода 1С > 1С 8.3 Табличный документ / Макет
Перейти в основной раздел:
Программно получить список параметров табличного документа в 1С 8.3:
Функция ПолучитьПараметрыТабличногоДокумента(ТабличныйДокумент)
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ТабличныйДокумент);
ИменаПараметров = Новый Соответствие;
Для Каждого ДанныеСтрок Из ОбъектXDTO.rowsItem Цикл
Для Каждого Колонка Из ДанныеСтрок.row.c Цикл
ИмяПараметра = Колонка.c.parameter;
Если ИмяПараметра <> Неопределено Тогда
ИменаПараметров.Вставить(ИмяПараметра);
КонецЕсли;
Если Колонка.c.f > 0 Тогда
Формат = ОбъектXDTO.format[Колонка.c.f - 1];
Если Формат.fillType = ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда
Для Каждого Содержание Из Колонка.c.tl.item Цикл
ПараметрыШаблона = ПараметрыШаблона(Содержание.content);
Для Каждого ИмяПараметра Из ПараметрыШаблона Цикл
ИменаПараметров.Вставить(ИмяПараметра);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Результат = Новый Соответствие;
Для Каждого КлючИЗначение Из ИменаПараметров Цикл
Результат[КлючИЗначение.Ключ] = ТабличныйДокумент.Параметры[КлючИЗначение.Ключ];
КонецЦикла;
Возврат Результат;
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ТабличныйДокумент);
ИменаПараметров = Новый Соответствие;
Для Каждого ДанныеСтрок Из ОбъектXDTO.rowsItem Цикл
Для Каждого Колонка Из ДанныеСтрок.row.c Цикл
ИмяПараметра = Колонка.c.parameter;
Если ИмяПараметра <> Неопределено Тогда
ИменаПараметров.Вставить(ИмяПараметра);
КонецЕсли;
Если Колонка.c.f > 0 Тогда
Формат = ОбъектXDTO.format[Колонка.c.f - 1];
Если Формат.fillType = ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда
Для Каждого Содержание Из Колонка.c.tl.item Цикл
ПараметрыШаблона = ПараметрыШаблона(Содержание.content);
Для Каждого ИмяПараметра Из ПараметрыШаблона Цикл
ИменаПараметров.Вставить(ИмяПараметра);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Результат = Новый Соответствие;
Для Каждого КлючИЗначение Из ИменаПараметров Цикл
Результат[КлючИЗначение.Ключ] = ТабличныйДокумент.Параметры[КлючИЗначение.Ключ];
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПараметрыШаблона(Знач Строка)
Результат = Новый Массив;
Пока Истина Цикл
Начало = Найти(Строка, "[");
Если Начало = 0 Тогда
Прервать;
КонецЕсли;
Конец = Найти(Строка, "]");
Если Конец = 0 Тогда
Прервать;
КонецЕсли;
ИмяПараметра = Сред(Строка, Начало + 1, Конец - Начало - 1);
Если Не ПустаяСтрока(ИмяПараметра) Тогда
Результат.Добавить(ИмяПараметра);
КонецЕсли;
Строка = Сред(Строка, Конец + 1);
КонецЦикла;
Возврат Результат;
КонецФункции
// Имена параметров могут содержать пробел, поэтому использование структуры может вызвать ошибку.
Получить список параметров табличного документа с помощью RegExp в 1С 8.3.23:
Функция ПолучитьПараметрыТабличногоДокументаRegExp(ТабличныйДокумент)
//Макет - ТабличныйДокумент или область табличного документа
//Превращаем в 1С-ную кашу:
Стр = ЗначениеВСтрокуВнутр(Макет);
ПараметрыСтруктура = Новый Структура;
//это для обычных параметров
Результат = СтрНайтиВсеПоРегулярномуВыражению(Стр, "\[([^\]]+)\]", Истина, Истина);
Для Каждого Элемент Из Результат Цикл
Значение = Элемент.ПолучитьГруппы()[0].Значение;
ПараметрыСтруктура.Вставить(Значение, Макет.Параметры[Значение]);
КонецЦикла;
//это для шаблонов и форматрованных строк
Результат = СтрНайтиВсеПоРегулярномуВыражению(Стр, "\{\s*\""\"",\s*\""([^\""]+)\""\s*\}", Истина, Истина);
Для Каждого Элемент Из Результат Цикл
Значение = Элемент.ПолучитьГруппы()[0].Значение;
ПараметрыСтруктура.Вставить(Значение, Макет.Параметры[Значение]);
КонецЦикла;
Возврат Результат;
КонецФункции
//Макет - ТабличныйДокумент или область табличного документа
//Превращаем в 1С-ную кашу:
Стр = ЗначениеВСтрокуВнутр(Макет);
ПараметрыСтруктура = Новый Структура;
//это для обычных параметров
Результат = СтрНайтиВсеПоРегулярномуВыражению(Стр, "\[([^\]]+)\]", Истина, Истина);
Для Каждого Элемент Из Результат Цикл
Значение = Элемент.ПолучитьГруппы()[0].Значение;
ПараметрыСтруктура.Вставить(Значение, Макет.Параметры[Значение]);
КонецЦикла;
//это для шаблонов и форматрованных строк
Результат = СтрНайтиВсеПоРегулярномуВыражению(Стр, "\{\s*\""\"",\s*\""([^\""]+)\""\s*\}", Истина, Истина);
Для Каждого Элемент Из Результат Цикл
Значение = Элемент.ПолучитьГруппы()[0].Значение;
ПараметрыСтруктура.Вставить(Значение, Макет.Параметры[Значение]);
КонецЦикла;
Возврат Результат;
КонецФункции
Оригинал статьи: https://infostart.ru/1c/articles/2179573/
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник