Имя: Пароль:
1C
1С v8
Заменить договоры в документах
0 Godofsin
 
27.09.11
07:15
Задача: с определенного числа нужно заменить договоры во всех последующих документах на такие же договоры, только с галочкой "вести по документам расчета". То есть был у нас договор "Основной", мы его копируем, в копии ставим галочку, в наименование старого добавляем что-нибудь типа "(старый)" и подменяем его во всех док-ах на новый. Проблема: в силу малых знаний 1с8 не знаю как выбрать все доки, где используется реквизит "договор", при чем, ессесно, он еще и в табличной части может быть. Мой вариант: тупо составить список доков(вручную) и обрабатывать каждый вид отдельно, ну или сгруппировать, где реквизит используется в табл. части, а где на форме. Подскажите более грамотное решение.
1 Рэйв
 
27.09.11
07:19
Запрос=Новый Запрос;
Запрос.Текст="Выбрать Док.ссылка ИЗ Документ.ИмяДок КАК Док ГДЕ Док.Договор=&Старый";

Запрос.УстановитьПараметр("Старый",СсылкаНаДоговор);

Это для шапки.
Для Таб части исправь только

ИЗ Документ.ИмяДок
на
ИЗ Документ.ИмяДок.ИмяТабЧасти
2 Godofsin
 
27.09.11
07:28
(1) Ну так то да. Но ведь в "ДокИмя" нужно подставить имя документа, так же как и имя таб. части в ИмяТабЧасти. А как сделать автоматическое определение этих имен? Ну то есть какой-нибудь запрос, который бы определил что в этих и в этих документах реквизит "договор" используется в шапке, а вот в этих и этих - в табл. части. А я бы потом просто подставлял бы найденные имена в запрос :)
3 catena
 
27.09.11
07:38
Как-то так
   Для ш=0 по Метаданные.Документы.Количество()-1 Цикл
       МетаданныеДок = Метаданные.Документы[ш];
       Для о=0 по МетаданныеДок.Реквизиты.Количество()-1 Цикл
           МетаданныеРеквизит = МетаданныеДок.Реквизиты[о];
           Если МетаданныеРеквизит.Тип = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКОнтрагентов") Тогда
               Сообщить(""+МетаданныеДок+" - "+МетаданныеРеквизит.Имя);
           КонецЕсли;    
       КонецЦикла;    
       Для к=0 по МетаданныеДок.ТабличныеЧасти.Количество()-1 Цикл
           ТекТЧ = МетаданныеДок.ТабличныеЧасти[к];
           Для л=0 по ТекТЧ.Реквизиты.Количество()-1 Цикл
               ТекТЧРеквизит=ТекТЧ.Реквизиты[л];
               Если ТекТЧРеквизит.Тип = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКОнтрагентов") Тогда
                   Сообщить(""+МетаданныеДок+" - ТЧ - "+ТекТЧ.Имя+" - "+ТекТЧРеквизит.Имя);
               КонецЕсли;    
               
           КонецЦикла;    
       КонецЦикла;    
   КонецЦикла;
4 Godofsin
 
27.09.11
07:48
(3) Огромное спасибо!
p.s. милое фото =)
5 zak555
 
27.09.11
08:07
(4) в 8.2.14 появились ещё и общие реквизиты
Основная теорема систематики: Новые системы плодят новые проблемы.