1с установитьссылкунового не работает

УстановитьСсылкуНового не работает

Текст = ПодключеннаяИБ.string(ПодклДокумент.ref.УникальныйИдентификатор());
КлючУникальности = новый УникальныйИдентификатор(Текст);
ТекСсылка = ТипДокумента.ПолучитьСсылку(КлючУникальности));
НовыйДок = ТипДокумента.СоздатьДокумент();
НовыйДок.УстановитьСсылкуНового(ТекСсылка);
;сообщить(«НовыйДок.получитьссылкунового() = » + НовыйДок.получитьссылкунового());
;сообщить(«ПодклДокумент.УникальныйИдентификатор()) = » + ПодключеннаяИБ.string(ПодклДокумент.ref.УникальныйИдентификатор()));
НовыйДок.Записать();
;сообщить(«записан документ с уникальнымидентификатором = » + НовыйДок.ссылка.уникальныйидентификатор());
;Сообщить(«» + ТипДокумента.ПолучитьСсылку(КлючУникальности).ПолучитьОбъект());

НовыйДок.получитьссылкунового() = (37:a35548f3962946314732d5138994c3f5)
ПодклДокумент.УникальныйИдентификатор()) = 8994c3f5-d513-4732-a355-48f396294631
записан документ с уникальнымидентификатором = 7123649e-0de9-4330-a21b-6555a6499a26
неопределено

То есть ссылка после записи не равна той, которую я устанавливаю до записи.

Что я делаю не так?

Может конечно я не совсем точно выразился.
Суть:
Создаю документ, на основании взятого из другой базы уникального Идентификатора. Записываю документ, НО после записи он имеет другой уникальный идентификатор.
соответственно конструкция
ТипДокумента.ПолучитьСсылку(КлючУникальности).ПолучитьОбъект()
возращает «неопределено» вместо только что созданного документа.

Источник

УстановитьСсылкуНового() не работает

ДокументГуид = Новый УникальныйИдентификатор(ДокументГуидСтрока);
ДокументПоГуиду = Документы[Тип].ПолучитьСсылку(ДокументГуид);
ТекущийДокумент = Документы[Тип].СоздатьДокумент();
ТекущийДокумент.УстановитьСсылкуНового(ДокументПоГуиду);

после чего ТекущийДокумент.Ссылка.УникальныйИдентификатор() остается все таким же нулевым

ПолучитьСсылкуНового()
Возвращаемое значение:
Тип: ДокументСсылка. .
Описание:
Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом
УстановитьСсылкуНового значение ссылки.

Что тут не понятного?

Хотя может погорячился, я обмены через кд делаю и там с этим сталкиваюсь. Буквально в прошлом месяце пришлось попотеть придумывая как из 7-ки загружать в 8-ке и подсунуть ему свой гуид без правки обработки загрузки

Сейчас проверил на типовой бп на документах и справочниках. 1С только на справочнике сотруднике подменил гуид на свой, в остальных случаях гуид не менял

Справочники
3a1b8a23-c1c1-11e8-8464-00268332bca9
Контрагенты
3a1b8a27-c1c1-11e8-8464-00268332bca9
СтруктураПредприятия

Документы
ВводОстатков
3a1b8a30-c1c1-11e8-8464-00268332bca9
ВнутреннееПотреблениеТоваров
3a1b8a31-c1c1-11e8-8464-00268332bca9

p.S. Часть документов и справочников пропущены так как при записи ругались на незаполненые реквизиты

(65) Запустил поиск по БП3.0.64 текста «»СсылкаНового»», нашлось 3 строки. 2 связаны с (58). Ещё одна связана с справочником пользователи, как понял пользователь «по умолчанию» создается с фикс. ид:

Источник

УстановитьСсылкуНового или Как восстановить ссылку на объект

Каким-то образом был удален объект из базы. Цель Восстановить по » (124:820694de80c8cdb911e4ed4b0f3b6683)»
Собственно Сабж. Вероятно я некорректно передаю ГУИД объекту. Причина в том что Документ создаю. Но как была ссылка в других доках на него » (124:820694de80c8cdb911e4ed4b0f3b6683)», так и осталась. Подскажите братцы в чем моя проблема в данном случае?

ИначеЕсли ТипОбъекта = «Документ» Тогда
ОбъектСсылка = Документы[ИмяОбъекта].СоздатьДокумент();
ОбъектСсылка.УстановитьСсылкуНового(Документы[ИмяОбъекта].ПолучитьСсылку(УникальныйИд));
КонецЕсли;
попытка
ОбъектСсылка.ОбменДанными.Загрузка=Истина;
КонецПопытки;
Форма = ОбъектСсылка.ПолучитьФорму(«Документ.ОтчетОРозничныхПродажах.ФормаОбъекта»);
Форма.Открыть();

Нет, всё далеко не так, понимаю что делаю по аналогии с обычными формами. Но все же: 1) Создаю документ, 2) Присваиваю ему ГУДИ при помощи «УстановитьСсылкуНового()», 3) Открываю форму для редактирования и записи. Так вот я так понимаю что на УФ, ГУИД присваивается в момент записи? Как логически это обойти?

Пытался ПолучитьОбъект(), а затем записать(), Но Увы получать пока нечего же. Вот как бы вы эту ситуацию обошли?)

(4) В любом случае необходимо обработать обязательные реквизиты и корректно заполнить документ. Меня интересовал другой вопрос. И я разобрался. Дело в том что Если я записываю до Назначения ОбменДанными.Загрузка = Истина То программа игнорирует все что я стараюсь сделать и назначает свой ГУИД. Помогла запись объекта и установка даты после ОбменДанными.Загрузка = Истина.

Как имея тип объекта корректно передать сюда форму??

Ну хотя идея наверное ясна.. просто передам попробую передать вот так насколько жизненна будет идея?)

(11) Gонимаю, естественно. Я из этой записи при помощи нехитрого кода получаю ГУИД. Суть то ведь ясна. Код ниже прилагаю если кому пригодится.

(15) Вот как присваиваю ГУИД вновь созданному объекту

Источник

УстановитьСсылкуНового() или «как узнать ссылку на объект до записи»

Многие знают, что любому объекту ссылочного типа в 1С ссылка присваивается при записи в базу данных. То есть, если объект новый, то реквизит Ссылка у него пустой. Кстати, это один из способов узнать, работает пользователь с новым, только что созданным объектом, или же открыл уже существующий.

При записи объекта устанавливается случайная ссылка, так что предугадать ее у вас вряд ли получится. Тем не менее, существуют ситуации, когда полезно и даже необходимо знать ссылку на объект еще до записи этого объекта в базу. Приведем несколько примеров:

  1. При обмене данными необходимо программно создать некоторые записи в регистрах, включающие ссылку на объект обмена. При этом в базе-источнике таких регистров нет. Пример такой задачи мы подробно рассмотрим ниже.
  2. При оптимизации работы программного кода. Например, нужно программно создать контрагента, его договор и установить этот договор как Основной. Если идти классическим путем, то нужно сначала создать и записать элемент справочника Контрагенты, пройдя при этом все процедуры записи (а это может занять значительное время). Далее, нужно создать элемент справочника ДоговорыКонтрагентов, установив в качестве Владельца ссылку на контрагента. И наконец, получив заново объект элемента справочника Контрагенты, заполнить там реквизит ОсновнойДоговор и записать его, пройдя заново все процедуры записи.
    Эту процедуру можно ускорить, зная заранее ссылку на еще не созданный ДоговорКонтрагента. В этом случае уже не требуется два раза получать и записывать Контрагента.

Как узнать ссылку на объект до его записи

  1. Сгенерировать уникальный идентификатор объекта.
  2. Зарезервировать ссылку по уникальному идентификатору
  3. Установить зарезервированную ссылку для нового объекта.

//Создаем уникальный идентификатор
УИД = новый УникальныйИдентификатор ;

//Создаем ссылку по этому идентификатору. Для этого нужно знать тип объекта
НоваяСсылка = Справочники . Контрагенты . ПолучитьСсылку ( УИД ) ;

//Устанавливаем ссылку для нового объекта
СправочникОбъект . УстановитьСсылкуНового ( НоваяСсылка ) ;

После этого объект можно записать. Будет установлена заранее известная ссылка.

Особенности получения ссылок на новые объекты при обмене данными

Рассмотрим, как получить ссылку на незаписанный объект на примере следующей задачи:

При обмене данными между двумя базами передается документ приобретения товаров. В базе источнике есть реквизит с типом Булево, показывающий получение оригиналов документов от поставщика. В базе-приемнике отметка о получении оригиналов реализована через регистр сведений с измерением — ссылкой на документ и ресурсом — ссылкой на перечисление.

Для решения этой задачи будет использоваться обработчик ПослеЗагрузки в правилах конвертации документа приобретения. Реквизит ОригиналыПолучены будет передаваться в виде параметра.

Код будет выглядеть так:

ОригиналыПолучены = ПараметрыОбъекта [ «ОригиналыПолучены» ] ;

Если ОригиналыПолучены Тогда

//Если записывается новый объект, создадим его ссылку
//В противном случае используем найденную
Если НЕ ОбъектНайден Тогда
СсылкаДокумента = Документы . ПоступлениеТоваровУслуг . ПолучитьСсылку ( новый УникальныйИдентификатор ) ;
Объект . УстановитьСсылкуНового ( СсылкаДокумента ) ;
Иначе
СсылкаДокумента = Ссылка ;
КонецЕсли ;

МЗ = РегистрыСведений . СтатусыДокументов . СоздатьМенеджерЗаписи ( ) ;
МЗ . Организация = Объект . Организация ;

//Устанавливаем в записи регистра сведений ссылку, полученную для еще не записанного объекта
МЗ . Документ = СсылкаДокумента ;

МЗ . Статус = Перечисления . СтатусыДокументовПоступления . ОригиналПолучен ;
МЗ . Записать ( ) ;
КонецЕсли ;

ВАЖНО. Если в обмене участвуют другие объекты, имеющие ссылки на наш документ приобретения товаров (например, счета-фактуры), то в них вы скорее всего получите , т.к. мы заменили ссылку на документ. Для того чтобы этого избежать, нужно в правилах конвертации документа на вкладке Настройки установить флаг Не запоминать выгруженные объекты. При использовании этого флага система не будет сохранять документы в специальной таблице кеширования, а каждый раз будет подбирать ссылку этого объекта заново, уже с учетом внесенных нами изменений.

УстановитьСсылкуНового() или «как узнать ссылку на объект до записи» : 2 комментария

а как быть если нужно создать с тем же УИД, как и в исходной базе, как этот самый УИД получить?

УИД объекта можно получить с помощью функции УникальныйИдентификатор()
Чтобы задать объекту конкретный УИД нужно сделать так:

Новый_UID = Новый УникальныйИдентификатор(«1014270d-d794-11df-825c-001517542b78»);
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый _UID);
НашаНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НашаНоменклатура.УстановитьСсылкуНового(НоваяСсылка);

Если нужно заменить УИД уже существующего объекта, то все равно создают новый объект — копию существующего, а потом выполняют поиск и замену ссылок по всей базе. Есть такая обработка даже. Если этого не сделать, получите везде вместо ссылки на объект с новым УИД .

Только при обмене не обязательно делать одинаковые УИД в базах. Сопоставление объектов происходит через регистр сведений Соответствия объектов информационных баз.

Источник

как установить ссылку нового?

Код в управляемой форме:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Ключ.Пустая() Тогда

УИД = Новый УникальныйИдентификатор;
СсылкаНового = Документы.ФормированиеЗадач.ПолучитьСсылку(УИД);
ДокументФормированиеЗадач = ДанныеФормыВЗначение(Объект, Тип(«ДокументОбъект.ФормированиеЗадач»));
ДокументФормированиеЗадач.УстановитьСсылкуНового(СсылкаНового);
ЗначениеВДанныеФормы(ДокументФормированиеЗадач, Объект);

Не срабатывает, при записи формирует другую ссылку.

Синтаксис:
ПолучитьСсылкуНового()
Возвращаемое значение:
Тип: ДокументСсылка.
Описание:
Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом УстановитьСсылкуНового значение ссылки.

Доступность:
Сервер, толстый клиент, внешнее соединение.
См. также:
ДокументМенеджер, метод ПолучитьСсылку

(5) Не совсем понятно, какие могут быть исключения при загрузке из произвольного XML-файла. А загрузка с идентификаторами даже из 8.1 работает на ура.

Но, в свете (5), на правах тыканья пальцем в небо, для (0): проверь неинтерактивное создание с твоей ссылкой. Если всё норм, то стоит посмотреть на саму форму — может, Параметры.Ключ сразу задать, например?

Ключ формы — это идентификатор основного реквизита формы. По логике — это должен быть УИД основного реквизита, в данном случае, элемента справочника.
Параметры формы доступны на чтение/запись, это структура. Не в курсе, касается ли это Параметры.Ключ, но не вижу причин, почему нет.

TitanLuchs, наверное, глубже копал, хочется его мнение услышать.

например вот УИДЫ, которые по коду в (0) генерятся, т.е. в форме:
f7a0fa12-3774-46d0-b230-5aa25e42468a
abefebd7-79f3-4dd0-9b36-d5df851d9fd2
b97d7f22-fc09-4148-845c-987499bb7e7b
207f5797-8d1e-4a1e-b5f7-c9409793fbdc

а вот примеры уже после записи объектов:
ee3c0e75-e584-11de-af44-001e379f1bef
ee3c0e76-e584-11de-af44-001e379f1bef
ee3c0e77-e584-11de-af44-001e379f1bef

Источник

Читайте также:  Как настроить наушники j437
Оцените статью