Получение значения реквизита по его имени #117490


#0 by Beduir
Здравствуйте! Есть ссылка на Справочник.ТекущийЭлемент и есть имя реквизита в строке. Как можно получить значение реквизита по его имени для этого элемента. Спасибо.
#1 by Скользящий
Лучше код покажи.
#2 by Алгоритм
ПолучитьАтрибут(<?>); Синтаксис: ПолучитьАтрибут(<ИмяРеквизита>) Назначение: Получить значение реквизита по имени идентификатора. Возвращает значение реквизита. Параметры: <ИмяРеквизита> - строковое выражение, содержащее имя реквизита, как оно задано в конфигураторе.
#2 by ДенисЧ
ПолучитьАтрибут
#4 by Beduir
Нравится мне этот форум. Всегда такие оперативные ответы. :) По результатам запроса, у меня строится отчет, в котором должны быть все реквизиты. Т.к. в запросе нельзя указать, чтобы выбирать все подряд, я в одном месте подглядел, и сделал так: |ТекущийЭлемент = Справочник.МойСправочник.ТекущийЭлемент; Следовательно при обработке результатов запроса, у меня есть только ссылка на текущий элемент (Запрос.ТекущийЭлемент), но нет ссылки на справочник. Потому применить ПолучитьАтрибут не получится. Как тут лучше сделать? Можно конечно я что-то не так понимаю, но в 1С я программирую совсем недавно.
#5 by Guk
Не то что бы что-то не так, ты напрочь не понимаешь...
#6 by Zmich
"Т.к. в запросе нельзя указать, чтобы выбирать все подряд..." Это еще почему? Кажись, нельзя в запросе выбрать только строки неограниченной длины...
#7 by Beduir
2Guk: Возможно, в 1С все сильно оличается от других языков. А что не так? ТекстЗапроса = "//{{ЗАПРОС(Запрос)
#8 by Beduir
Zmich Да, это мне и мещает, мне они тоже нужны в результатах.
#9 by Guk
Ты хочешь сказать, что то что ты написал в вообще может запуститься без ошибки?...
#10 by Zmich
Допустим, Комментарий - реквизит спр-ка, строка неограниченной длины. Доступ к нему получишь так (после выполнения запроса): Запрос.ТекущийЭлемент.Комментарий
#11 by Zmich
Мда, чо-то и впрямь ошибок дофига...
#13 by Beduir
Не знаю. Я не пробовал. Я поливину вырезал из всего кода, чтобы форум не загромождать. Мой оригниальный код работает. Ну комментарий мне не нужен. Нужны другие ревизиты, имена которые я заранее не знаю. А где хоть ошибки, чтобы мне знать?
#14 by Zmich
1). В запросе после ТекущийЭлемент не надо ставить "" 2). Объявлена группировка Код, но что такое Код - в запросе не указано. 3). Пишется Наименование = "1". Первая кавычка будет интерпретироваться как окончание текста запроса. 4). Не поставлена точка с запятой после строчки с условием в запросе.
#15 by Козёл
Покажи весь код запроса. Очень интересно.
#16 by Beduir
В оригинале у меня этих ошибок нет. Это я тут их в спешке на лепил (писав код на память).
#17 by Zmich
Ну так дай код не на память. И что значит - "...Нужны другие ревизиты, имена которые я заранее не знаю."? Справочник-то ты знаешь, значит, знаешь и его реквизиты. А вообще всё это фигня какая-то.
#18 by Козёл
Автор, с таким твоим подходом я не понимаю, почему Змичь ещё с тобой общается. Тему ф топку.
#19 by Beduir
Список реквизитов определяет пользовать и добавляет их в таблицу значений. После выполнения запроса, все эти реквизиты из списка должы выводится в отчет. Потом я заранее и не знаю, какие будут выбраны.
#20 by Козёл
АВТОР, ЧЕТАЙ НАДПЕСИ ВО ВТАРОМ ПОСТЕ и покаж код в конце концов.
#21 by Guk
Если список реквизитов есть в ТЗ, то почему ты их не знаешь?...
#22 by Beduir
Допустим, имя реквизита "Адрес" (строка неограниченной длины), находится в ТЗ.Реквизит. Как теперь выудить значение этого реквизита из результатов запроса для каждого элемента? Я не понял, как это использовать.
#23 by Zmich
Ну например, так:
#24 by Guk
Строишь динамический запрос. На этапе формирования текста запроса через метаданные проверяешь, если строка неограниченной длины, то в запрос не включаешь. Все остальные реквизиты включаешь в запрос по именам. Далее на этапе обхода запроса опять же проверяешь тип реквизита из ТЗ, если неогр. длины, то Запрос.ТекущийЭлемент.ПолучитьАтрибут("РекНеогрДлины"), если нормальный реквизит, то Запрос.ПолучитьАтрибут("НормальныйРек"). ЗЫ: как вариант...
#26 by Beduir
Да это подойдет. Я думал так сделать, но подумал, что будет неправильным вызывать поиска элемента в справочнике (хоть и по ключевому полю) при обработке каждой "строки" запроса. А почему нельзя использовать для всех реквизитов Запрос.ТекущийЭлемент.ПолучитьАтрибут, не включая их в запрос?
#27 by Guk
Если тебе не важна скорость и трафик, то можно. Я стараюсь по максимуму использовать локальную выборку запроса...
#28 by Директор PR отдела
В Тупой код. В Умный код.
#29 by Zmich
Да блин, я не претендую на какую-то эстетику. Согласен, что в идея лучше. Просто похоже, что автору в будут не понятны такие выражения, как "Проверяешь через метаданные", "Строишь динамический запрос" и т.п.
#30 by Директор PR отдела
Даже если не понятны, объясни мне зачем использовать НайтиЭлемент. Только как идиоту, у меня нет высшего образования.
#31 by Beduir
Я конечно в 1С новичок, но я не идиот. Я пробовал использовать Запрос.ТекущийЭлемент.ПолучитьАтрибут, но у меня не заработал. Я подумал, что делаю что-то не то, но видимо просто где-то было ошибка. Но мне все равно не понятно, почему для нормальных реквизитов нужно использовать Запрос.ПолучитьАтрибут("НормальныйРек"), а с неограниченной Запрос.ТекущийЭлемент.ПолучитьАтрибут. Почему нельзя сразу для всех использовать Запрос.ТекущийЭлемент.ПолучитьАтрибут? Объясните мне, чтобы понять.
#32 by Zmich
. НайтиЭлемент, согласен, зря включил. Это я недавно делал в одном запросе для того, чтобы изменить элементы справочника (т.е. затем делал Записать - тут без НайтиЭлемент никак не получится). На автомате записал эту фигню и сюда.
#33 by Zmich
. Я не говорю, что ты идиот. Просто тебе нужно сперва понять преимущество запросов перед конструкцией типа ВыбратьЭлементы, ПолучитьЭлемент и т.п.
#34 by Guk
Запрос возвращает клиенту выборку на локальную машину. Чем больше реквизитов в этой выборке, тем быстрее будет обработка результатов запроса, т.к. понятно что работать с данными на локальной машине быстрее, чем с данными лежащими в сети. Запрос.ТекущийЭлемент возвращает тебе фактически ссылку на элемент справочника, но не на его реквизиты. Когда ты делаешь Запрос.ТекущийЭлемент.ПолучитьАтрибут, то 1С обращается за конкретным значением реквизита на сервер. Наверное ты понимаешь, что это медленнее...
#35 by Beduir
Преимущество я понимаю, это в 1С я новичок, в некоторых других языках у меня уже есть достаточно большой опыт. И что такое "Строишь динамический запрос", я тоже понимаю. :) Спасибо, теперь понятно. Буду смотреть, почему у меня не работало.
#36 by Beduir
Сразу вопрос в тему. Когда мне выдавались ошибки, что в запросе не могут быть строки неограниченной длины, я думал может обойдусь и без них. Но не понял, как определить, что длина не ограничена. Вот собственно и вопрос, как это определить? Может для нее атрибут ".длина" принмает какое-либо специфическое значение?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С