Получение ссылки не записанного объекта 1С
Иногда необходимо получать ссылку нового объекта(например элемента справочника или документа) еще до того как он будет записан. Если попробовать получить его ссылку, через .Ссылка то в результате возвращена она будет пустой, так как ссылка для этого объекта еще не создана.
В такой ситуации нужно создать ссылку нового объекта самостоятельно. Для примера рассмотрим ситуацию когда необходимо получить ссылку нового(еще не записанного) документа Реализация товаров и услуг. Пусть НоваяРеализация — объект нового документа.
Для начала создадим новую ссылку на документ
СсылкаНового = Документы.РеализацияТоваровУслуг.ПолучитьСсылку();
Теперь присвоим ее объекту документа при помощи метода УстановитьСсылкуНового().
НоваяРеализация.УстановитьСсылкуНового(СсылкаНового);
У нового документа реализации появилась ссылка, пока он не записан ее можно получить при помощи метода ПолучитьСсылкуНового().
СсылкаНовойРеализации = НоваяРеализация.ПолучитьСсылкуНового();
УстановитьСсылкуНового в 1С 8.3

Поиск и устранение блокировок. Тонкая настройка СУБД под 1С. Перевод на PostgreSQL. Выбор сервера.
от 15 000 руб.
В платформе 1С изначально заложены достаточные возможности для работы с объектами конфигурации, но зачастую из-за отсутствия необходимых знаний программисты пишут неоптимальный код и замедляют работу программы, например, когда есть необходимость получить ссылку на объект до его записи. Оптимальным подходом к решению проблемы является использование метода «УстановитьСсылкуНового()».
Применение метода в 1С 8.3
Одна из самых распространенных подобных задач – программное создание элементов справочников, имеющих ссылки друг на друга. К примеру, создание контрагентов и их представителей. Чаще всего неопытные программисты сначала записывают элементы справочника, потом размещают ссылки в нужных реквизитах и снова производят запись. При наличии сложных алгоритмов проверок при сохранении элементов справочника эта процедура займет достаточно времени и ресурсов.
В таких ситуациях не нужно возмущаться, что импорт данных быстро не работает. Но в платформе 1С есть возможность оптимизировать подобные места и избавиться от двойной записи элементов. Для этого нужно внести правки и добавить в несложный алгоритм использование метода «УстановитьСсылкуНового()»:
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент(); НовыйКонтрагент.Наименование = "ОАО БАЛТИКА НЕВА";
НовыйКонтрагентСсылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор); НовыйКонтрагент.УстановитьСсылкуНового(НовыйКонтрагентСсылка);
НовыйПредставитель = Справочники.Представители.СоздатьЭлемент(); НовыйПредставитель.ОбменДанными.Загрузка = Истина; НовыйПредставитель.Наименование = "Сергей"; НовыйПредставитель.Компания = НовыйКонтрагентСсылка; НовыйПредставитель.Записать();
НовыйКонтрагент.Представитель = НовыйПредставитель.Ссылка; НовыйКонтрагент.Записать();
Данный метод не применяется в ежедневной работе, поэтому нет ничего странного в том, что многие о нем и не знают. Но в некоторых случаях он может серьезно помочь серверу избежать лишней нагрузки. Это главный повод помнить об этой и множестве других, не слишком часто используемых, возможностях платформы 1С 8.3.
1с установитьссылкунового как использовать
Ключевые слова: Запись, Справочник, ЭтоНовый, Новый, УстановитьСсылкуНового, ПолучитьСсылкуНового
Допустим, у нас есть переменная Контрагент типа СправочникОбъект.Контрагенты.
И нам необходимо обратиться к ссылке на этого контрагента с учетом того, что это может быть новый объект, и ссылка в таком случае будет пустой. В такой ситуации можно использовать следующий код:
Если Контрагент.ЭтоНовый() Тогда // Получаем возможно уже установленную ранее ссылку нового СсылкаНаОбъект = Контрагент.ПолучитьСсылкуНового(); Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда // Если ссылка нового пустая, то запрашиваем ее у менеджера и устанавливаем СсылкаНаОбъект = Справочники.Контрагенты.ПолучитьСсылку(); Контрагент.УстановитьСсылкуНового(СсылкаНаОбъект); КонецЕсли; Иначе СсылкаНаОбъект = Контрагент.Ссылка; КонецЕсли;
УстановитьСсылкуНового

Установить ссылку нового это специальный механизм программиста, который позволяет присваивать новому объекту нужную ссылку. В основном это задача обмена, во многих типовых обменах используется синхронизация по UID объекта.
Рассмотрим этот метод на конкретной задаче: «Если в базе в справочнике «номенклатуры» нет объекта с UID = «1014270d-d794-11df-825c-001517542b79», то необходимо его создать с таким же UIDом и присвоить название – «Служебная номенклатура» »
Код 1C v 8.х
// получаем новый UID объекта
Новый_UID = Новый УникальныйИдентификатор(«1014270d-d794-11df-825c-001517542b79»);
// пытаемся получить объект по UID
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый _UID);
// пытаемся получить объект
НашаНоменклатура = НоваяСсылка.ПолучитьОбъект();
// проверяем есть ли объект
Если НашаНоменклатура = неопределено Тогда
// создаем новый элемент
НашаНоменклатура = Справочники. Номенклатура.СоздатьЭлемент();
// для нового объекта – еще не записанного мы можем присвоить UID
НашаНоменклатура.УстановитьСсылкуНового(НоваяСсылка);
// говорим программе что это загрузка объекта
НашаНоменклатура.ОбменДанными.Загрузка = Истина;
// присваем наименование
НашаНоменклатура.Наименование = «Служебная номенклатура»;
//записываем
НашаНоменклатура.Записать();
КонецЕсли;
Подробнее остановимся на строке Код 1C v 8.х
НашаНоменклатура.ОбменДанными.Загрузка = Истина;
В типовых конфигурациях обычно все служебные программные кода в модулях объектов перед записью заключены в условие «не ОбменДанными.Загрузка». Т.е. если Это загрузка то эти программные кода не выполняются. Если процедура присвоения UIDа не работает, то возможно вам нужно еще выполнить глобальный поиск, чтобы найти сторонние программные строки «УстановитьСсылкуНового» – «камни преткновения»
Источник
Битая ссылка, , Уникальный Идентификатор, GUID
Разместил: E_Migachev Версии: | 8.x | Дата: 19.04.2011 Прочитано: 57736

Возможно, вас также заинтересует
Похожие FAQ
Автоматизация обмена данных используя обработку «Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку » Универсальный обмен данными в формате XML» В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки » Универсальный обме Автоматическая выгрузка загрузка данных используя регламентное задание 16
Для обмена данными между программами необходимо сделать следующее: 1. При помощи Конвертации Данных создать правила выгрузки данных 2. Нужно чтобы в конфигурации была обработка УниверсальныйОбменДаннымиXML , желательно последней версии! (При помо Альтернативный перенос остатков между 7.7 и 8.1 (обработкой с ИТС ЗагрузкаДанныхИзТаблДокум) 2
Нашел альтернативный, практически моментальный способ переноса остатков между семерой и восьмерой (так и между восмерками). Не требуется никаких дополнительных усилий, программирования, писания обработок и т.д. и т.п. На ИТС есть обработка под наз Битая ссылка, , Уникальный Идентификатор, GUID 74
Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: Объект не найден (84:bf5600145e3710ab11dda4c605dbe824) . https://helpf.pro/uploads/img/_1-46z7I4U7Ww.png В Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; КоличествоКолонокДанных=ФайлХЛС.ActiveSheet Посмотреть все результаты поиска похожих
Еще в этой же категории
Полнотекстовый поиск в 1С (что это и пример использования) 27
Полнотекстовый поиск — позволит найти текстовую информацию, размещенную практически в любом месте используемой конфигурации. При этом искать нужные данные можно либо по всей конфигурации в целом, либо сузив область поиска до нескольких объектов Формат, функция форматирования значений 21
//Функция формирует удобное для чтения представление значений. // Примеры форматирования чисел ЗначФормат = Формат(123456.789, » ЧЦ=10; ЧДЦ=2″ ); // ЗначФормат = » 123 456,79″ ЗначФормат = Формат(123456.789, » ЧГ=0; ЧДЦ=2″ ); // Знач Обработчики событий при записи объектов. Зачем и что за чем? 19
Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа. Именно такое сложное чувство непонимания МоментВремени, получение остатков до и после проведения 12
» Момент времени» — виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя дату и ССЫЛКУ НА ДОКУМЕНТ) В 7.7 было понятие ПозицияДокумента, а в 8.x Момент времени Для получения Остатков, Движений: М Как получить уникальный идентификатор объекта, GUID? 10
GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификатор Посмотреть все в категории Встроенные Функции