Как пройтись по всем реквизитам (в том числе в ТЧ)произвольного документа или справочника в цикле
Что написать чтобы взлетело?
Не работает конкретно ОбъектБД[Реквизит.Имя].
Процедура ТыкНаСервере(ОбъектБД)
МетаданныеОбъектБД = Метаданные.НайтиПоТипу(ТипЗнч(ОбъектБД));
Для Каждого Реквизит Из МетаданныеОбъектБД.Реквизиты Цикл
Сообщить(Реквизит + " = " + ОбъектБД[Реквизит.Имя]);
КонецЦикла;
КонецПроцедуры
Не работает конкретно ОбъектБД[Реквизит.Имя].
По теме из базы знаний
- Интеграция сценарного тестирования в процесс разработки
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Разработка и сценарное тестирование с Vanessa-ADD. Концепция, теория и сквозной пример создания сценария
- Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
Найденные решения
(5) Нет, к реквизиту можно обратиться или через точку, или через квадратные скобки. Так что вот такой код точно сработает для ссылочных типов:
Важно обращаться именно к свойству Имя
Для Каждого Реквизит Из ОбъектБД.Метаданные().Реквизиты Цикл
Сообщить(Реквизит.Имя + " = " + ОбъектБД[Реквизит.Имя]);
КонецЦикла;
Важно обращаться именно к свойству Имя
(10) все просто.
Сообщить(Реквизит + " = " + ОбъектБД[Реквизит.Имя]);
Знак "+" может быть использован как в сложении, так и в конкатенации строк.
Реквизит это не строка. Платформа пытается привести к числу. Тоже не получается. Вот и ошибка: "Преобразование значения к типу Число не может быть выполнено"
Когда ставим "" + Реквизит, то уже объект Реквизит платформой неявно приводится к строке. Вот и отрабатывает.
Или сразу указываем "Реквизит.Имя". Это уже строка и конкатенация строк отрабатывает штатно.
Сообщить(Реквизит + " = " + ОбъектБД[Реквизит.Имя]);
Знак "+" может быть использован как в сложении, так и в конкатенации строк.
Реквизит это не строка. Платформа пытается привести к числу. Тоже не получается. Вот и ошибка: "Преобразование значения к типу Число не может быть выполнено"
Когда ставим "" + Реквизит, то уже объект Реквизит платформой неявно приводится к строке. Вот и отрабатывает.
Или сразу указываем "Реквизит.Имя". Это уже строка и конкатенация строк отрабатывает штатно.
(10)
Следите за пальцами
Реквизит - тип ОбъектМетаданных
"" + Реквизит - тип Строка, т.к при сложении все преобразуется к типу первого слагаемого
Реквизит.Имя - тип Строка
А сложение Реквизит + " = " выдаст ошибку, т.к. к объекту метаданных ничего прибавить нельзя
Следите за пальцами
Реквизит - тип ОбъектМетаданных
"" + Реквизит - тип Строка, т.к при сложении все преобразуется к типу первого слагаемого
Реквизит.Имя - тип Строка
А сложение Реквизит + " = " выдаст ошибку, т.к. к объекту метаданных ничего прибавить нельзя
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Чет я запутался. Вы сообщение не правили? а то я увидел у вас ОбъектБД[Реквизит.Индекс] - Пишет. Поле объекта не обнаружено. И этот вариант не катит тоже.
Я так понимаю к реквизиту конкретного объекта можно обратиться только по индексу. Если вообще возможно. Просто к объекту метаданных можно так обращаться.
Пример из книги:
листинг 3.17. Использование итератора «Для Каждого»
Сообщение = Новый СообщениеПользователю;
Для Каждого Справочник из Метаданные.Справочники Цикл
Сообщение.Текст = Символы.ПС + Справочник.ПолноеИмя();
Сообщение.Сообщить();
МенеджерСправочника = Справочники[Справочник.Имя];
Выборка = МенеджерСправочника.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение.Текст = Выборка.Наименование;
Сообщение.Сообщить();
КонецЦикла;
КонецЦикла;
Я так понимаю к реквизиту конкретного объекта можно обратиться только по индексу. Если вообще возможно. Просто к объекту метаданных можно так обращаться.
Пример из книги:
листинг 3.17. Использование итератора «Для Каждого»
Сообщение = Новый СообщениеПользователю;
Для Каждого Справочник из Метаданные.Справочники Цикл
Сообщение.Текст = Символы.ПС + Справочник.ПолноеИмя();
Сообщение.Сообщить();
МенеджерСправочника = Справочники[Справочник.Имя];
Выборка = МенеджерСправочника.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение.Текст = Выборка.Наименование;
Сообщение.Сообщить();
КонецЦикла;
КонецЦикла;
(5) Нет, к реквизиту можно обратиться или через точку, или через квадратные скобки. Так что вот такой код точно сработает для ссылочных типов:
Важно обращаться именно к свойству Имя
Для Каждого Реквизит Из ОбъектБД.Метаданные().Реквизиты Цикл
Сообщить(Реквизит.Имя + " = " + ОбъектБД[Реквизит.Имя]);
КонецЦикла;
Важно обращаться именно к свойству Имя
(10) все просто.
Сообщить(Реквизит + " = " + ОбъектБД[Реквизит.Имя]);
Знак "+" может быть использован как в сложении, так и в конкатенации строк.
Реквизит это не строка. Платформа пытается привести к числу. Тоже не получается. Вот и ошибка: "Преобразование значения к типу Число не может быть выполнено"
Когда ставим "" + Реквизит, то уже объект Реквизит платформой неявно приводится к строке. Вот и отрабатывает.
Или сразу указываем "Реквизит.Имя". Это уже строка и конкатенация строк отрабатывает штатно.
Сообщить(Реквизит + " = " + ОбъектБД[Реквизит.Имя]);
Знак "+" может быть использован как в сложении, так и в конкатенации строк.
Реквизит это не строка. Платформа пытается привести к числу. Тоже не получается. Вот и ошибка: "Преобразование значения к типу Число не может быть выполнено"
Когда ставим "" + Реквизит, то уже объект Реквизит платформой неявно приводится к строке. Вот и отрабатывает.
Или сразу указываем "Реквизит.Имя". Это уже строка и конкатенация строк отрабатывает штатно.
(10)
Следите за пальцами
Реквизит - тип ОбъектМетаданных
"" + Реквизит - тип Строка, т.к при сложении все преобразуется к типу первого слагаемого
Реквизит.Имя - тип Строка
А сложение Реквизит + " = " выдаст ошибку, т.к. к объекту метаданных ничего прибавить нельзя
Следите за пальцами
Реквизит - тип ОбъектМетаданных
"" + Реквизит - тип Строка, т.к при сложении все преобразуется к типу первого слагаемого
Реквизит.Имя - тип Строка
А сложение Реквизит + " = " выдаст ошибку, т.к. к объекту метаданных ничего прибавить нельзя
"вончо" написал. даже работает)
Процедура ТыкНаСервере(ОбъектБД)
МетаданныеОбъектБД = Метаданные.НайтиПоТипу(ТипЗнч(ОбъектБД));
Для Каждого Реквизит Из МетаданныеОбъектБД.Реквизиты Цикл
Сообщить(""+Реквизит + " = " + ОбъектБД[Реквизит.Имя]);
КонецЦикла;
Для Каждого ТЧ Из ОбъектБД.Метаданные().ТабличныеЧасти Цикл
Сообщить(""+ТЧ);
НомерСтроки = 1;
Для Каждого Строка Из ОбъектБД[ТЧ.Имя] Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Сообщить("Строка номер " + НомерСтроки + " " + Реквизит + " = " + Строка[Реквизит.Имя]);
КонецЦикла;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот