Имя: Пароль:
1C
1С v8
Изменить элемент справочника через COM
,
0 al_zzz
 
14.03.13
13:13
Подскажите, хочу изменить элемент справочника другой базы:
{1c}ГУИДСТРОКОЙ = Соединение.Справочники[Структура.Вид].НайтиПоНаименованию(Наименование).УникальныйИдентификатор();
           УдаленноеФЛ = Соединение.Справочники[Структура.Вид].ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",ГУИДСТРОКОЙ));
УдаленноеФЛ = УдаленноеФЛ.ПолучитьОбъект();
УдаленноеФЛ.Наименование = Name1;
УдаленноеФЛ.Записать();
{/1c}
Пишет "Произошла исключительная ситуация: Код не уникален!"
ЧЯДНТ?
1 Волшебник
 
14.03.13
13:14
вызови УдаленноеФЛ.УстановитьНовыйКод()
2 al_zzz
 
14.03.13
13:15
(1) Выходит, нельзя через ком записать существующий элемент с тем же кодом?
3 Галахад
 
гуру
14.03.13
13:16
"существующий элемент" ссылка-ото новая.
4 Волшебник
 
14.03.13
13:16
(2) Можно, но у тебя там дубли кодов в справочнике.
И не путай GUID с кодом.

Если дубли разрешаешь, то сделай ещё УдаленноеФЛ.ОбменДанными.Загрузка = Истина;
5 ptiz
 
14.03.13
13:22
(0) Странный алгоритм.
Ищем на наименованию элемент, из него берем ГУИД, потом по ГУИД находим этот же элемент. Нафейхоа еще по ГУИДу искать?
6 Torquader
 
14.03.13
13:24
Я бы ещё сказал, что строка идентификатора из другой базы получается через Соединение.String(Соединение.Справочники[Структура.Вид].НайтиПоНаименованию(Наименование).УникальныйИдентификатор()),
а то есть вероятность, что идентификатор получается неправильный.
Второй вопрос - зачем сначала найти ссылку (в удалённой базе), потом преобразовать её в иднетификатор и строку (в удалённой базе), а потом опять получать ссылку из идентификатора и создавать объект.
СсылкаТам=Соединение.правочники[Структура.Вид].НайтиПоНаименованию(Наименование);
Если СсылкаТам=НЕПРЕДЕЛЕНО Тогда
Сообщить("Там его нет");
Иначе
ОбъектТам=СсылкаТам.ПолучитьОбъект();
ОбъектТам.Наименование=НашеИмя;
ОбъектТам.Записать();
КонецЕсли;

Есть подозрение, что у вас создаётся новый GUID, так как вы его неправильно передали - а новый GUID - это новый объект.
(Хотя в этом случае ПолучитьОбъект() возвращает НЕОПРЕДЕЛЕНО)
7 Рэйв
 
14.03.13
13:26
Соединение.Справочники[Структура.Вид].НайтиПоНаименованию(Наименование)


уже дает тебе искомую ссылку, нафиг еще мудритшь с гуидом?
8 Галахад
 
гуру
14.03.13
13:29
Похоже ссылки восстанавливает. Из копии.
9 al_zzz
 
14.03.13
13:29
(7) Уже попробовал использовать просто:
{1c}УдаленноеФЛ = Соединение.Справочники[Структура.Вид].НайтиПоНаименованию(Наименование);{/1c} - всё равно ругается на уникальность кода
10 Рэйв
 
14.03.13
13:31
(9)Уникальность  - это уже другая песня..Тебе ж сказали сделать

.УстановитьНовыйКод()

перед записью
11 Рэйв
 
14.03.13
13:33
Причем после найтиПоНаименованию недурно было бы написать

//---
Если УдаленноеФЛ.Пустая() Тогда
  Сообщить("Не нашли по "+Наименование);
  Возврат;
КонецЕсли;
12 al_zzz
 
14.03.13
13:37
А как сделать, чтоб код у данного элемента не менялся при перезаписи? Или никак?
13 ptiz
 
14.03.13
13:46
(12) уже сказали: .ОбменДанными.Загрузка=Истина
14 Рэйв
 
14.03.13
13:46
(12)А он при перезаписи и не будет менятья если ты его специально не поменяешь