Как получитьNavigationLink() в управляемом приложении и веб-клиенте

В платформе 1С изначально заложены достаточные возможности для работы с объектами конфигурации, но зачастую из-за отсутствия необходимых знаний программисты пишут неоптимальный код и замедляют работу программы, например, когда есть необходимость получить ссылку на объект до его записи. Оптимальным подходом к решению проблемы является использование метода «УстановитьСсылкуНового()».

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

Как получить уникальный идентификатор из ссылки? При помощи свойства ссылки УникальныйИдентификатор(). Пример 1:

Реализация = Документы. РеализацияТоваровУслуг. НайтиПоНомеру();

УИН = Реализация. УникальныйИдентификатор();

Результат = Запрос. Выполнить(). Выгрузить();

Каждого Стр из Результат
УИН = Стр. Ссылка. УникальныйИдентификатор();

//Далее ваш код по обработке уникального идентификатора
;

Уникальный идентификатор в 1С 8 имеет тип УникальныйИдентификатор, но его можно преобразовать и в строковое значение(получится строка вот такого вида: 9712e912-d0b9-11e1-b37b-0050568458ce).

Поступление = Документы. ПоступлениеТоваровУслуг. НайтиПоНомеру();

УИН = (Поступление. УникальныйИдентификатор());

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

Пример 4 (Здесь УИН — значение типа УникальныйИдентификатор):

Номенклатура = Справочники. Номенклатура. ПолучитьСсылку(УИН);

Пример 5(Здесь СтрокаУИН — переменная со строковым значением уникального идентификатора):

Номенклатура = Справочники. Номенклатура. ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИН));

47.

slazzy

Сейчас в теме

Пример привычной записи:

Вы не правы, это не привычная запись это ошибочная запись. В любом мало-мальски адекватном курсе или книге по 1с обязательно рассматривается подобный вопрос и это не какое-то ноу-хау, его в принципе используют повсеместно. В интернете полно примеров работы с этим «методом», если можно так сказать 🙂 удивило, что основы разработки выдаются за нечто новое и особенное.

PiccaHut001, утверждение заслуживающее увольнения, ничего личного.

Что до типовых, то метод используется и используется много где. К примеру в БСП(а она сейчас во всех типовых). Метод используется в подсистеме присоединенных файлов. Это АБСОЛЮТНО ТИПОВОЙ СПОСОБ РЕШЕНИЯ ЗАПИСИ СВЯЗАННЫХ ОБЪЕКТОВ. И никак иначе. Удивляет почему на автора накинулись.

Другой вопрос, что вот конкретно в типовых конкретно в контрагентах и договорах это не используется, потому что сама работа в типовой конфе организована по-другому. Вы сначала создаете контрагента, потом договор. Нету физически ситуации, когда вы из интерфейса делаете запись одновременно двух связанных объектов, это прерогатива обменов и загрузок. Но и в типовых это встречается, к примеру зашел в БП 3.0,
Вот кусок кода запись контрагента + контактное лицо,

Если ДополнительныеСвойства. Свойство(«ДанныеКонтактногоЛица»)
И ТипЗнч(ДополнительныеСвойства. ДанныеКонтактногоЛица) = Тип(«Структура») Тогда

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

ОсновноеКонтактноеЛицо = КонтактноеЛицо. Ссылка;

КонецЕсли;

(40) insurgut, всё не совсем так. Конкретно в 1С ситуация с битыми ссылками нормальна в определенных условиях, например в РИБ это вообще в норме вещей. Не надо быть столь категоричным. Другой вопрос, что такая запись и правда имеет смысл в транзации, и обычно так и делается.

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

Ссылка СправочникиКонтрагентыПустаяСсылка
//Это новый контрагент
Иначе
//Это ранее записанный контрагент

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

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

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

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

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

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

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

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

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

Читайте также:  Регистрация ИП в ФСС в качестве работодателя список документов 2021

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

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

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

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

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

МЗСтатус ПеречисленияСтатусыДокументовПоступленияОригиналПолучен
МЗЗаписать

9.

lefthander

Сейчас в теме

получить ссылку на новый документ?

Пока объект не записан( новый) ссылки у него нет. Запишите — будет ссылка.

2.

ImHunter

Сейчас в теме

В открывающуюся форму передать обработчик ОписаниеОповещенияОЗакрытии. В параметрах этого обработчика поместить ссылку на созданный документ. После закрытия формы нового документа, во владельце сработает обработчик — в нем будет помещенная ссылка.

3.

tristarr1

Сейчас в теме

Спасибо. Однако, я же написал что в некоторых случаях перед открытием основной формы документа, открывается формы выбора операции, тогда обработчик закрытия срабатывает при закрытии формы выбора операции и форма документа открывается уже без этого обработчика.

4.

soft_wind

Сейчас в теме

попробуйте может так пройдет

в форме обработке, в обработчике события в форму Владелец можно писать в реквизиты

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ЭтаФорма. ВладелецФормы. РеквизитДокумент = ВашаССылка;
ПередЗакрытиемНаСервере();
КонецПроцедуры

5.

tristarr1

Сейчас в теме

Спасибо.
Желательно универсальное решение. В том решении что вы предлагаете придется переписать формы всех документов типовой конфигурации. Так можно сделать, но хотелось бы более красивое решение.

Можно было бы переопределить событие формы, но я не могу со 100% гарантией сказать что перед закрытием в типовых формах нет каких-то важных событий.

6.

soft_wind

Сейчас в теме

тогда так, во всех типовых формах есть вызов процедуры общего модуля
вот в этой одной процедуре и сделайте переброску значения в форму владелец

7.

tristarr1

Сейчас в теме

такое решение имеет место быть, однако для разных форм используются разные общие модули, что опять же ведет к изменению большого числа общих модулей или написания расширения к ним.

8.

Aitbay

Сейчас в теме

из формы которая вызывает создание документа

p/s/ не проверял
но как вариант тогда будет известен Гуид и через xmlЗначение можно получить ссылку

Форма = ПолучитьФорму(«НужнаяФорма»,ПараметрыФормы);
Форма. Записать();
Форма. Открыть();
НоваяСсылка = Форма. Объект. Ссылка;

Такой вариант может быть подойдет?

11.

tristarr1

Сейчас в теме

Всем спасибо за ответы.
Решил задачу с помощью события формы «Обработка записи нового».
При записи нового объекта в форму — владельца передается ссылка на него в этот обработчик.
Ветку закрываю.

Программное открытие форм в управляемом приложении 1С значительно отличается от их открытия в обычном приложении. Рассмотрим для начала старый метод. Он заключается в получении формы и ее последующем открытии в обычном или модальном режиме (при открытии в модальном режиме форма блокирует работу программы).

Это самый медленный метод открытия форм. Тем не менее, он позволяет программно обработать форму перед открытием. Для обработки код нужно немного изменить:

ФормаПолучитьФорму
//Тут выполняем действия с формой
ФормаОткрыть

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

Как открыть форму объекта в управляемом приложении, если есть ссылка на него.

В этом случае все предельно просто.

Как открыть форму выбора и получить потом выбранное значение.

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

В результате выполнения функции откроется форма выбора по умолчанию для объекта указанного типа.

РезВвестиЗначениеЗначение ОписаниеТипов

Предыдущие способы позволяли открывать только формы, установленные для объектов по умолчанию (форму объекта или форму выбора). Если нужно открыть произвольную форму, то можно воспользоваться функцией ОткрытьФорму().

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

Как открыть форму существующего объекта

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

КомандаКоманда
Параметрновый структура
ПараметрВставить НайтиС
ОткрытьФормуПараметр

Как открыть форму нового объекта

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

Как открыть форму нового объекта и заполнить ее на основании чего-либо

Нужно передать параметр Основание, значением которого будет являться ссылка на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

КомандаКоманда
Параметрновый структура
ПараметрВставить СсылкаНаСчетПокупателю
ОткрытьФорму Параметр

В этом примере будет создан документ Реализация товаров и услуг и заполнен на основании счета на оплату покупателю, ссылка на который была передана.

Как открыть форму и задать на ней отбор

Отбор на формах 1С может быть простым и сложным. Простой отбор предусматривает выражения типа Организация = ООО «Рога и копыта». Сложный отбор предполагает и другие типы сравнения, например, В списке. В данной статье рассмотрим организацию простого отбора, а сложному будет посвящена отдельная статья.

Читайте также:  Полная трансформация

Чтобы организовать простой отбор, нужно передать в открываемую форму параметр с ключом Отбор, значением будет являться структура, в которой ключ — имя поля динамического списка, а значение — искомые данные.

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура.

Отборновый Структура
ОтборВставить СсылкаНаНоменклатуру

Как открыть форму записи регистра сведений

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

ПараметрыКлючановый Структура
ПараметрыКлючаВставить СсылкаНаНоменклатуру
ПараметрыКлючаВставить СсылкаНаТипЦен
ПараметрыКлючаВставить Дата

МассивКлюча Массив
МассивКлючаДобавитьПараметрыКлюча

КлючЗаписи Новый МассивКлюча

Вариант 1: ОкноКлиентскогоПриложения (ClientApplicationWindow)
ПолучитьНавигационнуюСсылку (GetURL)
Синтаксис:

Код 1C v 8.х

Возвращаемое значение:
Тип: Строка.
Описание: Получает навигационную ссылку в формате 1С:Предприятия на текущую форму.
Доступность: Тонкий клиент, веб-клиент, толстый клиент, внешнее соединение.

Вариант 2: Глобальный контекст (Global context)
ПолучитьНавигационнуюСсылку (GetURL)
Синтаксис:

Код 1C v 8.2 УП

// Адрес объекта
Адрес1 = ПолучитьНавигационнуюСсылку(Объект. Ссылка);

// Адрес реквизита объекта
Адрес2 = ПолучитьНавигационнуюСсылку(Объект. Ссылка, «Реквизит1»);

// Адрес реквизита табличной части объекта
Адрес3 = ПолучитьНавигационнуюСсылку(Объект. Ссылка, «ТабличнаяЧасть1. Реквизит1», 10);

// ПолучитьНавигационнуюСсылку на форму обработки
сс=ПОлучитьНавигационнуюСсылку(Обработки. Обработка1. ПолучитьФорму(«Форма1»));
// «e1cib/app/Обработка. Обработка1»

Получить навигационную ссылку для константы?
Вопрос: В конфигурации есть константа с типом ХранилищеЗначения для хранения изображения. Пытаюсь реализовать Загрузку и Выгрузку изображения: СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Константы. Логотип. Получить());
где СсылкаНаКартинку — реквизит формы с типом строка, а на форме есть элемент, у которого путь к данным = СсылкаНаКартинку
Возможно ли реализовать отображение картинки таким образом, или стоит хранить картинку где-либо еще?
Ответ:
Навигационную ссылку на константу получить не получится(
Получится только так:

СсылкаНаКартинку = ПоместитьВоВременноеХранилище(Константы. Логотип. Получить(). Получить(),УникальныйИдентификатор);

т.е. в процедуру ПриСозданииНаСервере поместить картинку во временное хранилище и она там сидит пока закроете форму

Есть форма списка справочника «Сотрудники».
В нем есть реквизит «Фото», который имеет тип «СправочникСсылка. ХранилищеДополнительнойИнформации» (справочник «ХранилищеДополнительнойИнформации» по структуре полностью совпадает анологичным справочником в 1С 8.1).
В реквизиты формы списка добавил «АдресКартинки» тип «строка», в элементы добавил поле «Картинка» (вид — поле картинки) с путем к данным «АдресКартинки». Как вывести Картинку?

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
СотрудникСсылка = Элементы. Список. ТекущиеДанные. Ссылка; //в форме списка должен быть такой элемент — Ссылка
Показатькартинку(СотрудникСсылка);
КонецПроцедуры

&НаСервере
Процедура ПоказатьКартинку (СотрудникСсылка)
АдресКартинки = ПолучитьНавигационнуюСсылку(СотрудникСсылка. Фото, «Хранилище»);
КонецПроцедуры

«Хранилище» — это «стандартный» реквизит справочника «ХранилищеДополнительнойИнформации».

Имеется регистр сведений с именем «Изображения» следующей структуры:
Измерения:
— ИдИзображения (тип — уникальный идентификатор);
Реквизиты:
— Изображение (тип — ХранилищеЗначений)
Реализовать возможность записи изображений в него, проблемы не составило. А застрял на получении навигационной ссылки на нужную запись регистра?
Ответ — Для регистра сведений первым параметром должен быть ключ записи, а не ссылка на объект.
Т.е. если есть регистр сведений ХранилищеКартинок с изменением Ном (тип справочник Ном) и ресурс Картинка (тип хранилище значений) — код для получения навигационной ссылки должен быть примерно таким:

Процедура ПриЧтенииНаСервере(ТекущийОбъект)
КлючЗаписиРег = РегистрыСведений. ХранилищеКартинок. СоздатьКлючЗаписи(Новый Структура(«Ном», ТекущийОбъект.ссылка));
Если Не КлючЗаписиРег. Пустой() Тогда
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(КлючЗаписиРег, «Картинка»);
КонецЕсли;
КонецПроцедуры

При использовании в web-клиенте
Стояла следующая задача: отправлять уведомления о изменениях в документах на почту и вкладывать в письмо гиперссылку на измененный документ. База опубликована на web-севере. Полученная в 1С ссылка методом ПолучитьНавигационнуюСсылку() имела следующий вид
https://localhost/#e1cib/data/Документы. Счет?ref=»ab99005056c0000811e00f627bcddd55″

Вложенная в таком виде ссылка не открывала нужный документ, а лишь инициировала переход в базу.
Как оказалось проблема была в следующем, в URL-адресах не должны присутствовать кавычки, их заменяем на %22
https://localhost/#e1cib/data/Документы. Счет?ref=%22ab99005056c0000811e00f627bcddd55%22

8.

djd.sf

Сейчас в теме

а смысл какой? почему без записи?

10.

nodalt

Сейчас в теме

djd.sf, не могу сейчас привести конкретный пример, в

написал по этому поводу.
Давайте остановимся на следующем мотиве: «просто ради общеобразовательных целей» =)
Ну увидел методы, а воспользоваться не получилось — вот и спросил.
Спасибо всем за обсуждение.

12.

AlexO

Сейчас в теме

nodalt,

andrewks,
1C — это не ЯП ООП.
Здесь ссылка имеет одно единственное значение — по ней идентифицируется объект в базе.
Если нет объекта в базе — нет и ссылки на него.
Все остальное — это не ссылка, а игры с цифрами.

sergey198,
не путайте 1сников, ваша «ПолучитьСсылкуНового» получает пустое место, а не ссылку — по ней потом НИЧЕГО не найдешь, если объект не сохранен в базе.

13.

andrewks

Сейчас в теме

AlexO, именно поэтому я специально и писал «ссылка (гуид)», ибо, пока объекта нет в БД, то такая «ссылка» является виртуальной, несуществующей

14.

AlexO

Сейчас в теме

andrewks,
да это вообще не ссылка, даже в ковычках, а пустой набор цифр, ничего не отражающий 🙂

2.

andrewks

Сейчас в теме

Ссылку незаписанного документа никак не получишь. но можно записать документ с определённым сгенерированным гуидом

кстати, а зачем ссылка на объект без его записи? всё равно с этой ссылкой ничего не сделаешь, даже если бы платформа и позволила её получить

5.

Читайте также:  Модифицированное издание

nodalt

Сейчас в теме

11.

djd.sf

Сейчас в теме

ну, тогда смею предположить что-то типа такого(в качестве шутки;))):

/////// Запись объектов

ТекстВопроса= «Сохранить?»;
Ответ = Вопрос((ТекстВопроса), РежимДиалогаВопрос. ДаНет, 0);
Если Ответ = КодВозвратаДиалога. Нет Тогда
ОтменитьТранзакцию();
Возврат;
КонецЕсли;
ЗафиксироватьТранзакцию();
ЗЫ, Но что-то мне кажется, что все это извращение. Если это пакетная запись (и скорее всего на стороне сервера) от клиента мало, что зависит. Объекты по-любому надо записать. Потом их можно удалить. Если же речь об одном объекте, то не проще сначала спросить пользователя, потом записать?

4.

sergey198

Сейчас в теме

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

6.

nodalt

Сейчас в теме

6.

andrewks

Сейчас в теме

А в промежутке между принятием решения нужна ссылка.

если объект не записан в базу, то в промежутке между принятием решения нужен объект, а не ссылка, ибо оперировать можно только с ним (объектом)

9.

andrewks

Сейчас в теме

или, иными словами, ценность полученной т.н. «новой ссылки» (гуида) практически нулевая, за исключением случаев, когда нам нужно создать новый документ с заданной ссылкой (гуидом), или изменить ссылку существующего документа на другую

15.

luckily

Сейчас в теме

Недавно сталкивался с этим. Нужно копать по этой процедуре УстановитьНовыйНомер()

16.

пользователь

Сообщение было скрыто модератором.

17.

lev6975

Сейчас в теме

18.

masterlife3d

Сейчас в теме

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

Как вариант, добавляем проверку реквизита методом СсылкаСуществует() из БСП (или другой по желанию)

И вот теперь для тестирования этой проверки необходимо, чтобы существовал документ с несуществующей ссылкой. Либо ждать, когда он появится, либо сделать самому и протестировать (ясен пень на копии для разработки)

19.

Infector

Сейчас в теме

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

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

Установить ссылку нового это специальный механизм программиста, который позволяет присваивать новому объекту нужную ссылку. В основном это задача обмена, во многих типовых обменах используется синхронизация по UID объекта.
Рассмотрим этот метод на конкретной задаче: «Если в базе в справочнике «номенклатуры» нет объекта с UID = «1014270d-d794-11df-825c-001517542b79», то необходимо его создать с таким же UIDом и присвоить название – «Служебная номенклатура» »

// получаем новый UID объекта
Новый_UID = Новый УникальныйИдентификатор(«1014270d-d794-11df-825c-001517542b79»);
// пытаемся получить объект по UID
НоваяСсылка = Справочники. Номенклатура. ПолучитьСсылку(Новый _UID);
// пытаемся получить объект
НашаНоменклатура = НоваяСсылка. ПолучитьОбъект();
// проверяем есть ли объект
Если НашаНоменклатура = неопределено Тогда
// создаем новый элемент
НашаНоменклатура = Справочники. Номенклатура. СоздатьЭлемент();
// для нового объекта – еще не записанного мы можем присвоить UID
НашаНоменклатура. УстановитьСсылкуНового(НоваяСсылка);
// говорим программе что это загрузка объекта
НашаНоменклатура. ОбменДанными. Загрузка = Истина;
// присваем наименование
НашаНоменклатура. Наименование = «Служебная номенклатура»;
//записываем
НашаНоменклатура. Записать();
КонецЕсли;

Подробнее остановимся на строке

В типовых конфигурациях обычно все служебные программные кода в модулях объектов перед записью заключены в условие «не ОбменДанными. Загрузка». Т.е. если Это загрузка то эти программные кода не выполняются. Если процедура присвоения UIDа не работает, то возможно вам нужно еще выполнить глобальный поиск, чтобы найти сторонние программные строки «УстановитьСсылкуНового» – «камни преткновения»
Источник

Применение метода в 1С 8

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

В таких ситуациях не нужно возмущаться, что импорт данных быстро не работает. Но в платформе 1С есть возможность оптимизировать подобные места и избавиться от двойной записи элементов. Для этого нужно внести правки и добавить в несложный алгоритм использование метода «УстановитьСсылкуНового()»:

Данный метод не применяется в ежедневной работе, поэтому нет ничего странного в том, что многие о нем и не знают. Но в некоторых случаях он может серьезно помочь серверу избежать лишней нагрузки. Это главный повод помнить об этой и множестве других, не слишком часто используемых, возможностях платформы 1С 8.3.

Оцените статью
ФСС Help
Добавить комментарий