Всем привет!
Есть Справочник Контрагенты. Необходимо чтобы при изменении реквизита основнойМенеджер Головного контрагента, менялся ОсновнойМенеджер и в дочерних контрагентах.
Делаю так
Функция ПолучитьДочернихКонтрагентов(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Контрагенты.ГоловнойКонтрагент КАК Контрагент
|ПОМЕСТИТЬ Голова
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Ссылка = &Контрагент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Голова.Контрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты,
| Голова КАК Голова
|ГДЕ
| Контрагенты.Ссылка.ГоловнойКонтрагент В (Голова.Контрагент)
| И Контрагенты.ГоловнойКонтрагент <> Контрагенты.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Контрагенты.Ссылка,
| Голова.Контрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты,
| Голова КАК Голова
|ГДЕ
| Контрагенты.Ссылка В (Голова.Контрагент)
|";
Запрос.УстановитьПараметр("Контрагент", Контрагент); //Контрагенты
РезультатЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Возврат РезультатЗапроса;
Процедура ПриЗаписи(Отказ)
Если ГоловнойКонтрагент <> Ссылка Тогда
Контр = Ссылка.ПолучитьОбъект();
Контр.ОсновнойМенеджер = ГоловнойКонтрагент.ОсновнойМенеджер;
Записать();
КонецЕсли;
Но при записи получается рекурсия и все уходит в бесконечность.
Как можно избавиться от этого?
Это зачем?
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Контрагенты.Ссылка,
| Голова.Контрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты,
| Голова КАК Голова
|ГДЕ
| Контрагенты.Ссылка В (Голова.Контрагент)
(3)Чтобы и сам головной контрагент попадал в список
Прошу прощения код процедуры При Записи не тот вставил:
Процедура ПриЗаписи(Отказ)
Контр = ПолучитьДочернихКонтрагентов(Ссылка);
Для Каждого стр ИЗ Контр Цикл
Если стр.Ссылка<>стр.Ссылка.ГоловнойКонтрагент Тогда
КонтрагентОбъект = стр.Ссылка.ПолучитьОбъект();
КонтрагентОбъект.ОсновнойМенеджер = стр.Ссылка.ГоловнойКонтрагент.ОсновнойМенеджер ;
КонтрагентОбъект.Записать();
>> Чтобы и сам головной контрагент попадал в список
>> Контр = ПолучитьДочернихКонтрагентов(Ссылка);
>> стр.Ссылка<>стр.Ссылка.ГоловнойКонтрагент
бу-га-га