Получить свойство по значению в строкеТалицыЗначения 1С

1. TariK 21.02.24 20:35 Сейчас в теме
Всем привет!
На картинке строка таблицы значения из ТЗ.
Задача получить свойство по значению.
То есть, зная значение(переменная, которая "приехала" из другого источника) "8", надо получить "к5".

Если кому интересно задача в целом, для чего это надо, поясняю: надо построить логическую цепочку, например есть переменная (везде ТИП "Строка") с значением "6". Потом надо найти в СтрокеТЗ на картинке Значение "6", от него получить Свойство "к3". Далее зная свойство "к3", нужные мне значения другого свойства равняется "к6"(далее по тоже логике к9, к12, к15... - через цифру 3). А из к6 получить нужное мне значение это не проблема - СтрокаДанных.к6
Прикрепленные файлы:
Найденные решения
11. TariK 28.02.24 14:20 Сейчас в теме
В общем справился сам, если кому пригодиться, буду только рад:
Процедура Шляпа ()
     МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
КонецПроцедуры

&НаСервереБезКонтекста
Функция  НайтиВМассивеСтруктур (Массив, КлючСтруктуры) Экспорт
	
	Результат = Неопределено;
	Для Каждого ЭлементМассива Из Массив Цикл
		Если ЗначениеЗаполнено(Неопределено) Тогда Прервать; КонецЕсли;
		Если ТипЗнч(ЭлементМассива) = Тип("Структура") Тогда
			Для Каждого ЭлементСтруктуры Из ЭлементМассива Цикл
				Если ЭлементСтруктуры.Значение = КлючСтруктуры  Тогда
					ИскомоеЗначение = ЭлементСтруктуры.Ключ; 
					Результат = ЭлементМассива;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;	
	Возврат Результат;	
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 22.02.24 08:07 Сейчас в теме
(1)Если значения в колонке ТЗ уникальные то методом Найти(Значение, "Колонка") получить строку и из строки получить значение колонки "Свойство".

Чем соответствие не устроило для решения задачи?
3. TariK 22.02.24 13:59 Сейчас в теме
(2) Не подходит этот метод.

Найти ()
Возвращаемое значение:
Тип: СтрокаТаблицыЗначений, Неопределено.
Строка, в которой содержится искомое значение.

На картинке уже найденная СтрокаТаблицыЗначений, в которой есть нужное значение.
Мне уже в этой самой СтрокаТаблицыЗначений по Значению "6", надо получить "СтрокаДанных.к6".
4. nomad_irk 76 22.02.24 14:20 Сейчас в теме
(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[ИмяКолонки];
КонецЕсли;
Показать
5. TariK 22.02.24 15:26 Сейчас в теме
(4) В моей ситуации, колонок (к1, к2, к3...кN) может быть всегда разное количество.
Да и если бы я знал заранее что СтрокаДанных.к6 = Значению "9", тогда соответствие можно использовать.
Повторюсь, я не знаю количество колонок, не знаю какие другие значения могут быть кроме одного. Вот по этому значению, мне надо найти какая СтрокаДанных.к_ будет.

Есть мысль выгрузить СтрокаТаблицыЗначений в массив и там поискать как-то.
6. nomad_irk 76 22.02.24 15:45 Сейчас в теме
(5)Тогда проще будет тупо циклом по колонкам искать значение

Что-то вроде этого:

ИменаКолонокТЗ2 = "";
Сч = 1;
Для Каждого Колонка ИЗ ТЗ2.Колонки Цикл

     ИменаКолонокТЗ2 = ИменаКолонокТЗ2 + Колонка.Имя + ?(Сч < ТЗ2.Колонки.Количество(), ",", "");
     Сч = Сч  + 1;

КонецЦикла

Для Каждого Стр ИЗ ТЗ1 Цикл

       СтрокаТЗ2 = ТЗ2.Найти(Стр.Значение, ИменаКолонокТЗ2);
       Для Каждого Колонка ИЗ ТЗ2.Колонки Цикл
              Если ТЗ2[Колонка.Имя] = Стр.Значение;
                    //делаем, что нужно
                   Прервать;
             КонецЕсли;
       КонецЦикла;

КонецЦикла;
Показать
7. TariK 22.02.24 15:59 Сейчас в теме
(6) ТЗ2 - моя таблица значений.
ТЗ1 - это какая таблица значений?
8. nomad_irk 76 22.02.24 16:01 Сейчас в теме
(7)Какая-то исходная, в которой есть пересекающиеся значения со значениями в ТЗ2.
Ну или что у вас является источником значений, которые вы планируете искать в любой строке ТЗ2?
9. TariK 22.02.24 16:20 Сейчас в теме
(8)
Какая-то исходная, в которой есть пересекающиеся значения со значениями

такой таблицы нет, но ее можно сделать, загнать туда значение по которому будем искать?
10. TariK 22.02.24 19:29 Сейчас в теме
(8) Спасибо за уделенное время, но это не работает.
12. TariK 28.02.24 14:22 Сейчас в теме
(8) Спасибо за помощь, решение сам нашел. См. ниже если интересно
11. TariK 28.02.24 14:20 Сейчас в теме
В общем справился сам, если кому пригодиться, буду только рад:
Процедура Шляпа ()
     МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
КонецПроцедуры

&НаСервереБезКонтекста
Функция  НайтиВМассивеСтруктур (Массив, КлючСтруктуры) Экспорт
	
	Результат = Неопределено;
	Для Каждого ЭлементМассива Из Массив Цикл
		Если ЗначениеЗаполнено(Неопределено) Тогда Прервать; КонецЕсли;
		Если ТипЗнч(ЭлементМассива) = Тип("Структура") Тогда
			Для Каждого ЭлементСтруктуры Из ЭлементМассива Цикл
				Если ЭлементСтруктуры.Значение = КлючСтруктуры  Тогда
					ИскомоеЗначение = ЭлементСтруктуры.Ключ; 
					Результат = ЭлементМассива;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;	
	Возврат Результат;	
КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот