Имя: Пароль:
1C
1С v8
Не удаётся программно измент владельца элемента справочника
0 NikePopov
 
01.02.13
10:52
Доброго всем дня.

Столкнулся с проблемой:
БГУ 8(1.0.15.4), требуется массово изменить организацию для ЦМО(владелец справочника ЦМО - Организации). Код простой:

Процедура ИзменитьОрганизациюЭлемента(Элемент)
   Если НЕ Элемент.Пустая() Тогда
       ОбъектЭлемента = Элемент.ПолучитьОбъект();
       ОбъектЭлемента.Владелец = Организация;
       Попытка
           ОбъектЭлемента.Записать();
           Сообщить("Элемент справочника """ + Элемент.Метаданные().Синоним  + """ удачно записан(""" + Элемент.Наименование + """)");
       Исключение
           Сообщить("Элемент справочника """ + Элемент.Метаданные().Синоним  + """ не удалось записать(""" + Элемент.Наименование + """)");
           Сообщить(ОписаниеОшибки());
       КонецПопытки;
   КонецЕсли;
КонецПроцедуры

Но вход процедуры подаётся элемент справочника "ЦМО". Организация - реквизит Обработки. Но при выполнении такой незамысловатой операции Получаю такое сообщение:
{ВнешняяОбработка.ИзменитьВладельцевЦМОИСотрудников.МодульОбъекта(6)}: Ошибка при вызове метода контекста (Записать): Значение поля "Владелец" не заполнено или заполнено неверно

Сразу исключаю варианты:
1. Организация - 100% заполненный реквизит.
2. Элемент - не пустой элемент справочника ЦМО(у которого Владелец - Справочник "Организации").

Перед "Записать()" останавливался в отладчике значение "Владелец" изменено на нужную мне.

Есть у кого-нибудь идеи? Я все свои исчерпал.
1 salvator
 
01.02.13
10:53
Ссылку точно пихаешь? Не объект?
2 NikePopov
 
01.02.13
10:54
Да, точно. "СправочникСсылка.Организации"
3 Godofsin
 
01.02.13
10:54
(0) Ну и как, скажи мне, у тебя ошибка выходит, если ты запись в попытку запихал?
4 Godofsin
 
01.02.13
10:55
а все, туплю =)
5 Godofsin
 
01.02.13
10:57
проверь отладчиком перед записью, что у тебя во Владелец
6 salvator
 
01.02.13
10:57
(5) В (0) написано, что все ок
7 NikePopov
 
01.02.13
10:59
Забыл написать. В Процедуре "ПередЗаписью" в модуле объекта Справочника "ЦМО" никаких подвохов нет. Там нет проверки.
8 NikePopov
 
01.02.13
11:00
Там есть проверки, но на другие реквизиты
9 NikePopov
 
01.02.13
11:00
Вообщем "ПередЗаписью" Отказ = Ложь, что хорошо
10 NikePopov
 
01.02.13
11:01
И чтобы задачка была ещё интереснее, Групповая обработка объектов возвращает тот же результат.
11 salvator
 
01.02.13
11:02
А нужно изменить принципиально этой обработкой? Групповое изменение спр и док не катит?
12 salvator
 
01.02.13
11:02
(10) Опередил. Ха, прикольно.
13 NikePopov
 
01.02.13
11:02
(11) Не забываю написать (10). С неё то всё и началось.
14 НЕА123
 
01.02.13
11:02
(10)
ПриЗаписи() Отказ = Ложь
?
15 NikePopov
 
01.02.13
11:02
Тьфу, то есть забываю
16 NikePopov
 
01.02.13
11:03
(14) Да.
17 BlackJack
 
01.02.13
11:04
В отладчике по F11 до самого конца правильный владелец? Может какая-то подписка на события портит?
18 NikePopov
 
01.02.13
11:05
Само БГУ без подвохов. Самая обычная, не включена возможность изменений.
19 NikePopov
 
01.02.13
11:06
(17)Проходил. Нет. Он переходит(подписка на событие "ПередЗаписьюЭлементаСправочника"), но там в первом же "Если" выходит из процедуры без каких-либо изменений.
20 Godofsin
 
01.02.13
11:07
чудеса, чо. А создай еще одного и попробуй ему владельца сменить
21 BlackJack
 
01.02.13
11:07
В свойствах реквизита никаких условий не наложено?
22 NikePopov
 
01.02.13
11:10
(20) С новым Элементом(Только что созданным и записанным) отработал корректно - заменил владельца.
23 NikePopov
 
01.02.13
11:10
(21) Проверка на заполненное значение - но это условие выполняется.
24 Godofsin
 
01.02.13
11:11
(22) ТиИ?
25 cw014
 
01.02.13
11:13
Попробуй Объект.ОбменДанными.Загрузка = Истина;
26 NikePopov
 
01.02.13
11:14
(25) Благодарю. Странно, что не удалось отследить отладчиком где он на это натыкается. Теперь отлично работает. Всем огромное спасибо.
27 Мимо Проходил
 
01.02.13
11:15
Проверь, нет ли проверки на наличие движений по данному элементу перед записью.
28 NikePopov
 
01.02.13
11:16
(27) Это уже вторая часть работы.
29 Мимо Проходил
 
01.02.13
11:18
Это из модуля справочника "ДоговорыКонтрагентов" БП

Процедура ПередЗаписью(Отказ)

   Если ОбменДанными.Загрузка Тогда
       Возврат;
   КонецЕсли;
   
   ПроверитьПередЗаписью(Отказ, Истина);

КонецПроцедуры // ПередЗаписью()
30 BlackJack
 
01.02.13
11:44
(25) Понятно, что так скорее всего заработает. Но корректно ли это будет? Всё таки где-то проверка есть и она не проходит.
31 lordmb
 
01.02.13
12:08
(30) Подписка на событие
32 NikePopov
 
01.02.13
17:27
(30) Это понятно. В целом конечно требуется искать "корень зла", но для текущей задачи это не обязательно. В данном случае МОЛы были перегружены из другой программы с одной организацией. Требуется раскидать их по некому принципу по нужным. Учёта никакого нет не текущий момент. Все попутные справочники переходят в организацию вместе с ЦМО.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс