Получить свойство по значению в строкеТалицыЗначения 1С
Всем привет!
На картинке строка таблицы значения из ТЗ.
Задача получить свойство по значению.
То есть, зная значение(переменная, которая "приехала" из другого источника) "8", надо получить "к5".
Если кому интересно задача в целом, для чего это надо, поясняю: надо построить логическую цепочку, например есть переменная (везде ТИП "Строка") с значением "6". Потом надо найти в СтрокеТЗ на картинке Значение "6", от него получить Свойство "к3". Далее зная свойство "к3", нужные мне значения другого свойства равняется "к6"(далее по тоже логике к9, к12, к15... - через цифру 3). А из к6 получить нужное мне значение это не проблема - СтрокаДанных.к6
На картинке строка таблицы значения из ТЗ.
Задача получить свойство по значению.
То есть, зная значение(переменная, которая "приехала" из другого источника) "8", надо получить "к5".
Если кому интересно задача в целом, для чего это надо, поясняю: надо построить логическую цепочку, например есть переменная (везде ТИП "Строка") с значением "6". Потом надо найти в СтрокеТЗ на картинке Значение "6", от него получить Свойство "к3". Далее зная свойство "к3", нужные мне значения другого свойства равняется "к6"(далее по тоже логике к9, к12, к15... - через цифру 3). А из к6 получить нужное мне значение это не проблема - СтрокаДанных.к6
Прикрепленные файлы:
Найденные решения
В общем справился сам, если кому пригодиться, буду только рад:
Процедура Шляпа ()
МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиВМассивеСтруктур (Массив, КлючСтруктуры) Экспорт
Результат = Неопределено;
Для Каждого ЭлементМассива Из Массив Цикл
Если ЗначениеЗаполнено(Неопределено) Тогда Прервать; КонецЕсли;
Если ТипЗнч(ЭлементМассива) = Тип("Структура") Тогда
Для Каждого ЭлементСтруктуры Из ЭлементМассива Цикл
Если ЭлементСтруктуры.Значение = КлючСтруктуры Тогда
ИскомоеЗначение = ЭлементСтруктуры.Ключ;
Результат = ЭлементМассива;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Не подходит этот метод.
Найти ()
Возвращаемое значение:
Тип: СтрокаТаблицыЗначений, Неопределено.
Строка, в которой содержится искомое значение.
На картинке уже найденная СтрокаТаблицыЗначений, в которой есть нужное значение.
Мне уже в этой самой СтрокаТаблицыЗначений по Значению "6", надо получить "СтрокаДанных.к6".
Найти ()
Возвращаемое значение:
Тип: СтрокаТаблицыЗначений, Неопределено.
Строка, в которой содержится искомое значение.
На картинке уже найденная СтрокаТаблицыЗначений, в которой есть нужное значение.
Мне уже в этой самой СтрокаТаблицыЗначений по Значению "6", надо получить "СтрокаДанных.к6".
(3)Это удаление гланд через анус.
Я не знаю, что вы там пытаетесь решить, но в чем проблема сделать что-то вроде такого:
Я не знаю, что вы там пытаетесь решить, но в чем проблема сделать что-то вроде такого:
СоответствиеКолонок = Новый Соответствие;
СоответствиеКолонок.Вставить("1", "К1");
СоответствиеКолонок.Вставить("2", "К10");
СоответствиеКолонок.Вставить("3", "К11");
СоответствиеКолонок.Вставить("4", "К12");
СоответствиеКолонок.Вставить("5", "К2");
СоответствиеКолонок.Вставить("6", "К3");
СоответствиеКолонок.Вставить("7", "К4");
СоответствиеКолонок.Вставить("8", "К5");
СоответствиеКолонок.Вставить("9", "К6");
СоответствиеКолонок.Вставить("10", "К7");
СоответствиеКолонок.Вставить("11", "К8");
СоответствиеКолонок.Вставить("12", "К9");
СтрокаТЗ2 = ТЗ2.Найти(ЗначениеПоиска, "Колонка");
Если НЕ СтрокаТЗ2 = Неопределено Тогда
ИмяКолонки = СоответствиеКолонок.Получить(СтрокаТЗ1.Колонка);
Значение = СтрокаТЗ2[ИмяКолонки];
КонецЕсли;
Показать
(4) В моей ситуации, колонок (к1, к2, к3...кN) может быть всегда разное количество.
Да и если бы я знал заранее что СтрокаДанных.к6 = Значению "9", тогда соответствие можно использовать.
Повторюсь, я не знаю количество колонок, не знаю какие другие значения могут быть кроме одного. Вот по этому значению, мне надо найти какая СтрокаДанных.к_ будет.
Есть мысль выгрузить СтрокаТаблицыЗначений в массив и там поискать как-то.
Да и если бы я знал заранее что СтрокаДанных.к6 = Значению "9", тогда соответствие можно использовать.
Повторюсь, я не знаю количество колонок, не знаю какие другие значения могут быть кроме одного. Вот по этому значению, мне надо найти какая СтрокаДанных.к_ будет.
Есть мысль выгрузить СтрокаТаблицыЗначений в массив и там поискать как-то.
(5)Тогда проще будет тупо циклом по колонкам искать значение
Что-то вроде этого:
Что-то вроде этого:
ИменаКолонокТЗ2 = "";
Сч = 1;
Для Каждого Колонка ИЗ ТЗ2.Колонки Цикл
ИменаКолонокТЗ2 = ИменаКолонокТЗ2 + Колонка.Имя + ?(Сч < ТЗ2.Колонки.Количество(), ",", "");
Сч = Сч + 1;
КонецЦикла
Для Каждого Стр ИЗ ТЗ1 Цикл
СтрокаТЗ2 = ТЗ2.Найти(Стр.Значение, ИменаКолонокТЗ2);
Для Каждого Колонка ИЗ ТЗ2.Колонки Цикл
Если ТЗ2[Колонка.Имя] = Стр.Значение;
//делаем, что нужно
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Показать
В общем справился сам, если кому пригодиться, буду только рад:
Процедура Шляпа ()
МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиВМассивеСтруктур (Массив, КлючСтруктуры) Экспорт
Результат = Неопределено;
Для Каждого ЭлементМассива Из Массив Цикл
Если ЗначениеЗаполнено(Неопределено) Тогда Прервать; КонецЕсли;
Если ТипЗнч(ЭлементМассива) = Тип("Структура") Тогда
Для Каждого ЭлементСтруктуры Из ЭлементМассива Цикл
Если ЭлементСтруктуры.Значение = КлючСтруктуры Тогда
ИскомоеЗначение = ЭлементСтруктуры.Ключ;
Результат = ЭлементМассива;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот