Если реквизит объекта «вытащен» на форму, то реквизит формы можно получить через объект ЭлементыФормы , который содержит коллекцию элементов формы, сканируя ее в цикле:
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
Здесь ДокОбъект.Товары — это табличная часть «Товары» объекта. Далее в цикле табличная часть построчно сканируется!
В каждой итерации цикла можно получить доступ к любому полю строки указав через точку имя этого поля:
Доступ к табличной части формы через ЭлементыФормы
Табличная часть объекта и табличная часть формы объекта — это не одно и то же!
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы :
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Если надо получить значение всех колонок всех строк, то организуем дважды вложенный цикл:
Во внешнем цикле сканируются строки, во внутреннем — колонки:
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
Как перебрать все строки в таблице документа 1С? Без использования запроса.
Как перебрать все строки в таблице документа 1С? Без использования запроса.
Ранее мы выводили данные из табличной части документа при помощи запроса.
В этой статье рассмотрим операторы Цикла.
Циклы применяются для выполнения каких либо повторяющихся действий.
Задача: Требуется перебрать все строки в таблице документа.
1. Перебираем строки с помощью цикла Для каждого.
Записывается:
ТекСтрока — переменная,
КоллекцияСтрок — коллекция значений.
Тогда наш пример запишем так:
ВыбДокумента- реквизит на форме. То есть конкрентный выбранный документ.
Товары — табличная часть выбранного документа.
2. Перебираем строки с помощью цикла Пока.
Записывается:
л — счетчик, который увеличивается на 1.
КолСтрок — максимальное количество итераций.
Тогда наш пример запишем так:
где:
ВыбДокумента- реквизит на форме. То есть конкрентный выбранный документ.
Товары — табличная часть выбранного документа.
3. Перебираем строки с помощью цикла Для.
Записывается:
л — счетчик, увеличивается на 1.
КолСтрок — максимальное количество итераций.
Тогда наш пример запишем так:
Обход строк табличной части проще всего реализуется с помощью цикла Для Каждого СтрокаТЧ Из ТабЧасть Цикл.
При этом переменной цикла будет являться не номер строки, а вся строка как объект. Если нужен еще номер строки, то можно использовать свойство НомерСтроки или добавить переменную и инкрементировать ее в теле цикла.
Есть также возможность использовать обычный цикл Для . По . Цикл, но необходимо помнить, что индекс 1-го элемента коллекции всегда равен 0 (нулю).