Задача: с определенного числа нужно заменить договоры во всех последующих документах на такие же договоры, только с галочкой "вести по документам расчета". То есть был у нас договор "Основной", мы его копируем, в копии ставим галочку, в наименование старого добавляем что-нибудь типа "(старый)" и подменяем его во всех док-ах на новый. Проблема: в силу малых знаний 1с8 не знаю как выбрать все доки, где используется реквизит "договор", при чем, ессесно, он еще и в табличной части может быть. Мой вариант: тупо составить список доков(вручную) и обрабатывать каждый вид отдельно, ну или сгруппировать, где реквизит используется в табл. части, а где на форме. Подскажите более грамотное решение.
(1) Ну так то да. Но ведь в "ДокИмя" нужно подставить имя документа, так же как и имя таб. части в ИмяТабЧасти. А как сделать автоматическое определение этих имен? Ну то есть какой-нибудь запрос, который бы определил что в этих и в этих документах реквизит "договор" используется в шапке, а вот в этих и этих - в табл. части. А я бы потом просто подставлял бы найденные имена в запрос :)
Как-то так
Для ш=0 по Метаданные.Документы.Количество()-1 Цикл
МетаданныеДок = Метаданные.Документы[ш];
Для о=0 по МетаданныеДок.Реквизиты.Количество()-1 Цикл
МетаданныеРеквизит = МетаданныеДок.Реквизиты[о];
Если МетаданныеРеквизит.Тип = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКОнтрагентов") Тогда
Сообщить(""+МетаданныеДок+" - "+МетаданныеРеквизит.Имя);
КонецЕсли;
КонецЦикла;
Для к=0 по МетаданныеДок.ТабличныеЧасти.Количество()-1 Цикл
ТекТЧ = МетаданныеДок.ТабличныеЧасти[к];
Для л=0 по ТекТЧ.Реквизиты.Количество()-1 Цикл
ТекТЧРеквизит=ТекТЧ.Реквизиты[л];
Если ТекТЧРеквизит.Тип = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКОнтрагентов") Тогда
Сообщить(""+МетаданныеДок+" - ТЧ - "+ТекТЧ.Имя+" - "+ТекТЧРеквизит.Имя);
КонецЕсли;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший