Имя: Пароль:
1C
1С v8
Изменить реквизиты дочерних контрагентов
0 evgenius-inc
 
18.07.14
13:55
Всем привет!
Есть Справочник Контрагенты. Необходимо чтобы при изменении реквизита основнойМенеджер Головного контрагента, менялся ОсновнойМенеджер и в дочерних контрагентах.

Делаю так
Функция ПолучитьДочернихКонтрагентов(Контрагент)
      Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    Контрагенты.ГоловнойКонтрагент КАК Контрагент
|ПОМЕСТИТЬ Голова
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    Контрагенты.Ссылка = &Контрагент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Контрагенты.Ссылка КАК Ссылка,
|    Голова.Контрагент
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты,
|    Голова КАК Голова
|ГДЕ
|    Контрагенты.Ссылка.ГоловнойКонтрагент В (Голова.Контрагент)
|    И Контрагенты.ГоловнойКонтрагент <> Контрагенты.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    Контрагенты.Ссылка,
|    Голова.Контрагент
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты,
|    Голова КАК Голова
|ГДЕ
|    Контрагенты.Ссылка В (Голова.Контрагент)
|";
Запрос.УстановитьПараметр("Контрагент",    Контрагент);     //Контрагенты
РезультатЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Возврат РезультатЗапроса;

Процедура ПриЗаписи(Отказ)
Если ГоловнойКонтрагент <> Ссылка Тогда
            Контр = Ссылка.ПолучитьОбъект();
            Контр.ОсновнойМенеджер = ГоловнойКонтрагент.ОсновнойМенеджер;
            
            Записать();            
КонецЕсли;


Но при записи получается рекурсия и все уходит в бесконечность.
Как можно избавиться от этого?
1 vicof
 
18.07.14
13:58
выборку по шагам обойти, обмен данными.загрузка=истина
2 evgenius-inc
 
18.07.14
14:06
up
3 mehfk
 
18.07.14
14:10
Это зачем?
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    Контрагенты.Ссылка,
|    Голова.Контрагент
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты,
|    Голова КАК Голова
|ГДЕ
|    Контрагенты.Ссылка В (Голова.Контрагент)

С вас 500 рублей
4 evgenius-inc
 
18.07.14
14:25
(3)Чтобы и сам головной контрагент попадал в список

Прошу прощения код процедуры При Записи не тот вставил:

Процедура ПриЗаписи(Отказ)
Контр = ПолучитьДочернихКонтрагентов(Ссылка);
Для Каждого стр ИЗ Контр Цикл
Если стр.Ссылка<>стр.Ссылка.ГоловнойКонтрагент Тогда
    КонтрагентОбъект = стр.Ссылка.ПолучитьОбъект();
    КонтрагентОбъект.ОсновнойМенеджер = стр.Ссылка.ГоловнойКонтрагент.ОсновнойМенеджер ;
КонтрагентОбъект.Записать();

КонецЦикла;
КонецПроцедуры


(3)Пятихатку-то за что?
5 mehfk
 
18.07.14
14:33
>> Чтобы и сам головной контрагент попадал в список
>> Контр = ПолучитьДочернихКонтрагентов(Ссылка);
>> стр.Ссылка<>стр.Ссылка.ГоловнойКонтрагент
бу-га-га
6 evgenius-inc
 
18.07.14
15:00
(5) Да без разницы, даже и без условия - все равно рекурсия
7 evgenius-inc
 
18.07.14
15:08
Ну все-таки, как быть?