|
|
|
Табличный документ. Параметры. Как получить имена параметров? Garykom, Волшебник, lEvGl, DiMel_77, mikecool, TormozIT, Amra, denk32, Chameleon1980, Caesar, kostik79, Anton1307, alex_kld_2024, kubik_live, WB789, Михаил Козлов, zenik, Галахад, Hawk_1c, Timon1405, Буковка, АгентБезопаснойНацио, Ненавижу 1С, Bigbro, toypaul, Гипервизор, lexx0002, Климов Сергей, piter3, 2S, Группа неравнодушных, maxar, dmt, Мультук, Fish, ejikbeznojek, YaFedor, _Batoo, d4rkmesa, RomanYS, LienXo, Fynjy, Хряк, Crusher, Greeen, reloc
| ☑ | ||
|---|---|---|---|---|
|
0
Галахад
гуру
14.11.25
✎
15:45
|
Для каждого Параметр Из Область.Параметры Цикл
... Как тут получить имя Параметра? |
|||
|
1
Волшебник
14.11.25
✎
15:56
|
Предварительно переберите все ячейки от Лево/Вверх до Право/Низ
Для каждой определите свойство Заполнение Если там ТипЗаполненияОбластиТабличногоДокумента.Параметр, то вот он. Если там ТипЗаполненияОбластиТабличногоДокумента.Шаблон, то парсите строку на предмет [параметр] В итоге получите список параметров. |
|||
|
2
TormozIT
гуру
14.11.25
✎
15:55
|
только через сериализацию см. ирОбщий.ПараметрыТабличногоДокументаЛкс
|
|||
|
3
Галахад
гуру
14.11.25
✎
15:56
|
(1) ИИ? ;-) Спасибо!
(2) Спасибо! |
|||
|
4
Волшебник
14.11.25
✎
15:57
|
(3) Нет, это моя гипотеза. Не проверял
|
|||
|
5
Галахад
гуру
14.11.25
✎
15:59
|
(4) Рабочая. Но я думал есть что полегче. ))
|
|||
|
6
Волшебник
14.11.25
✎
16:01
|
(5) Теперь закиньте задачу и идею в промт и доведите до рабочего программного кода
|
|||
|
7
Галахад
гуру
14.11.25
✎
16:02
|
(6) 👌
|
|||
|
8
Волшебник
14.11.25
✎
16:13
|
Можно ещё распарсить MXL, там что-то интересное:
{16,0,
{1,1,
{"ru","текст"}},0},2,0,1,1,
{16,1,{1,1,{"","параметр"}},0},3,0,1,1,
{16,2,{1,1,{"ru","бла-бла [шаблон]"}},0},
ищите строки типа: 1,{"","параметр"} 1,{"ru","шаблон [параметр]"} |
|||
|
10
Волшебник
14.11.25
✎
16:17
|
(2) Тоже интересное решение
|
|||
|
11
Галахад
гуру
14.11.25
✎
16:24
|
(8) 1С-никам наверное все же проще парсить:
ОбластьXML = ОбщегоНазначения.ЗначениеВСтрокуXML(Область) |
|||
|
12
Ненавижу 1С
гуру
14.11.25
✎
17:03
|
ОбщегоНазначенияБЗК.ПараметрыТабличногоДокумента(ТабличныйДокумент)
|
|||
|
13
Галахад
гуру
14.11.25
✎
17:13
|
(12) Отлично! Спасибо!
|
|||
|
14
Волшебник
14.11.25
✎
17:23
|
вот ещё решение https://infostart.ru/1c/articles/1999853/
через ЗначениеВСтрокуВнутр осторожнее с языком "ru" |
|||
|
15
Garykom
гуру
14.11.25
✎
18:36
|
(0) Для какой практической задачи это требуется?
Ни разу с подобной необходимостью (за 20 лет работы с 1С) не сталкивался Даже если писать некую универсальную обработку для модификации табличных документов - зачем там параметры? Там уже работа с ячейками идет напрямую А если мы встраиваемся (например через расширение) в типовое заполнение табдоков - для конкретного макета параметры обычно заранее известны А если неизвестны и надо заменять значение неких параметров - ну так заменяй все (совпадающие по именам) и пофиг Зачем знать есть он в области или нет? |
|||
|
16
Волшебник
14.11.25
✎
18:44
|
(15) пишет какой-то конструктор, понадобилась рефлексия
Может настройка шаблона на уровне Предприятия |
|||
|
17
Волшебник
14.11.25
✎
19:12
|
(5) что же вы такие ленивые...
// Функция возвращает массив уникальных имен параметров в указанной области
// ОбластьТабДок - может быть областью табличного документа или макета
Функция ПолучитьМассивИменПараметров(ОбластьТабДок) Экспорт
МассивИменПараметров = Новый Массив;
// Перебираем все строки и колонки области
Для НомерСтроки = 1 По ОбластьТабДок.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ОбластьТабДок.ШиринаТаблицы Цикл
// Получаем область одной ячейки
Ячейка = ОбластьТабДок.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
// Проверяем тип заполнения ячейки
Если Ячейка.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Параметр Тогда
ИмяПараметра = Ячейка.Параметр;
// Добавляем в массив, если еще нет
Если МассивИменПараметров.Найти(ИмяПараметра) = Неопределено Тогда
МассивИменПараметров.Добавить(ИмяПараметра);
КонецЕсли;
ИначеЕсли Ячейка.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда
// Извлекаем параметры из шаблона
ПараметрыШаблона = ИзвлечьПараметрыИзШаблона(Ячейка.Текст);
Для Каждого Параметр Из ПараметрыШаблона Цикл
Если МассивИменПараметров.Найти(Параметр) = Неопределено Тогда
МассивИменПараметров.Добавить(Параметр);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат МассивИменПараметров;
КонецФункции
// Вспомогательная функция для извлечения параметров из шаблонного текста
Функция ИзвлечьПараметрыИзШаблона(ТекстШаблона)
МассивПараметров = Новый Массив;
НачалоПараметра = 1;
Пока Истина Цикл
// Ищем открывающую скобку [
НачалоПараметра = Найти(ТекстШаблона, "[", НачалоПараметра);
Если НачалоПараметра = 0 Тогда
Прервать;
КонецЕсли;
// Ищем закрывающую скобку ]
КонецПараметра = Найти(ТекстШаблона, "]", НачалоПараметра + 1);
Если КонецПараметра = 0 Тогда
Прервать;
КонецЕсли;
// Извлекаем имя параметра (без скобок)
ИмяПараметра = Сред(ТекстШаблона, НачалоПараметра + 1, КонецПараметра - НачалоПараметра - 1);
МассивПараметров.Добавить(СокрЛП(ИмяПараметра));
НачалоПараметра = КонецПараметра + 1;
КонецЦикла;
Возврат МассивПараметров;
КонецФункции |
|||
|
18
Garykom
гуру
14.11.25
✎
20:26
|
(17) 1. Функцию ИзвлечьПараметрыИзШаблона() пора переписать на регулярки
2. Код ПолучитьМассивИменПараметров() странный, особенно с поиском в массиве для исключения дублей Не проще использовать Структуру? |
|||
|
19
Волшебник
14.11.25
✎
20:27
|
(18) Может Вы сами
|
|||
|
20
Волшебник
14.11.25
✎
20:28
|
(18) Кстати, можно использовать Соответствие
|
|||
|
21
Garykom
гуру
14.11.25
✎
20:30
|
(20) Зачем Соответствие?
Параметры макета вроде как обязаны удовлетворять ключам Структуры |
|||
|
22
lEvGl
гуру
14.11.25
✎
20:37
|
(21) имена параметров не могут же быть одинаковыми? интересно - засунуть в соответствие параметр табдока ключом
зы. методу лет ..дцать |
|||
|
23
Волшебник
14.11.25
✎
21:09
|
(21) Для быстрого поиска по имени.
Ключи соответствия примитивных типов внутренне индексируются |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |