Изменить уникальный идентификатор у элемента справочника
По теме из базы знаний
- Rocket Launcher 7.7. Свертка базы 1С 7.7. Перенос справочников и документов 7.7
- Подключение к 1С 7.7 через внешний источник данных, работа со справочниками 7.7 (на примере справочника клиенты)
- Синхронизация справочников или импорт данных через HTTP-сервис
- Архив элементов
- Блокировка элементов справочников от изменений
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
можно
ГУИДВидНоменклатуры = Новый УникальныйИдентификатор();
ВидНоменклатурыСсылка = Справочники.ВидыНоменклатуры.ПолучитьСсылку(ГУИДВидНоменклатуры);
ВидНоменклатурыОбъект = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
ВидНоменклатурыОбъект.УстановитьСсылкуНового(ВидНоменклатурыСсылка);
ВидНоменклатурыОбъект.Наименование = "тест";
ВидНоменклатурыОбъект.Записать();
возможно настроена синхронизация между базами
Изменить вряд ли получится даже программно
можно
ГУИДВидНоменклатуры = Новый УникальныйИдентификатор();
ВидНоменклатурыСсылка = Справочники.ВидыНоменклатуры.ПолучитьСсылку(ГУИДВидНоменклатуры);
ВидНоменклатурыОбъект = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
ВидНоменклатурыОбъект.УстановитьСсылкуНового(ВидНоменклатурыСсылка);
ВидНоменклатурыОбъект.Наименование = "тест";
ВидНоменклатурыОбъект.Записать();
В смысле на нужный? Чем Вам может не угодить назначенный?)
возможно настроена синхронизация между базами
(3)Это для нового УстановитьСсылкуНового работает. Неправ?
(1) Приблизительно вот такой процедуркой если Это БСП
(1) Приблизительно вот такой процедуркой если Это БСП
&НаСервереБезКонтекста
Процедура ЗаменитьСсылкуНаСервере(Ссылка,УИД)
Об = Ссылка.ПолучитьОбъект();
НовОб = Об.Скопировать();
НовОб.УстановитьСсылкуНового(УИД);
НовОб.ОбменДанными.Загрузка = Истина;
НовОб.Записать();
ПарыЗамен = Новый Соответствие;
ПарыЗамен.Вставить(Ссылка,НовОб.Ссылка);
ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, Новый Структура("СпособУдаления,ЗаменаПарыВТранзакции","Непосредственно",Истина));
КонецПроцедуры
Показать
(22)Не, Ну. Одинэсина думает о Нас. Подводных камней не обнаружил. Пользовался многократно в условиях, когда филиалов просто выше крыши. Правда я на всякий случай а Параметрах указывал "ПометкаУдаления"
И дале если НайтиПСссылкам пусто, то удалял. Непосредственное удаление побоялся использовать
И дале если НайтиПСссылкам пусто, то удалял. Непосредственное удаление побоялся использовать
(15)Жеж можно дополнить
Но. Узел обмета должен быть не пустым
Ссылка = BasePriemnik.Справочники.НужныйСправочник.ПолучитьСсылку(GUIDSprIstochnika);
Если Ссылка.Пустая() Или Ссылка.ПолучитьОбъект() = Неопределено Тогда
//Ищем в регистре СоответствияОбъектовИнформационныхБаз
//Если Не нашли, то ищем по полям поиска запросом, ну там код, наименование
//Нашли пишем в регистр Не нашли создаем, Результат поиска и создание записываем в регистр соответствия
КонецЕсли;
Но. Узел обмета должен быть не пустым
(26), для данного случая нужно всегда проверять наличие кода или номера. Тем более у некоторых видов объектов может быть отключен код в конфигурации и будет ошибка при его получении. Так же, нужно учитывать, что процент битых ссылок может быть минимален, а проверка будет выполняться все время. А ссылка всегда есть, это раз, и представление ссылки получает система быстро всегда. Проверено на на многих типовых конфигурациях. Я знаю о чем говорю так как в моих коммерческих продуктах я всегда замеряю производительность и данный код всегда оптимален по скорости.
(27) Мы говорим о надежности, а не быстродействии. Оно может с космической скорость проверять неправильно, или медленно, но верно.
Для формирования представления платформа делает запрос к объекту по тем полям, которые указаны в модуле менеджера в событии ОбработкаПолученияПолейПредставления, т.е. в теории может быть запрос больше, чем из 1 поля. Представление кэшируется, но не думаю, что в этом случае этот кэш как-то полезен.
Не нравится код, в запросе доступно все то же поле Представление, которое при битой ссылке будет равно NULL, которое легко сравнить в любых языках.
Для формирования представления платформа делает запрос к объекту по тем полям, которые указаны в модуле менеджера в событии ОбработкаПолученияПолейПредставления, т.е. в теории может быть запрос больше, чем из 1 поля. Представление кэшируется, но не думаю, что в этом случае этот кэш как-то полезен.
Не нравится код, в запросе доступно все то же поле Представление, которое при битой ссылке будет равно NULL, которое легко сравнить в любых языках.
Прикрепленные файлы:
Изментить нельзя.
Создать новый элемент с правильным ГУУИД, потом через обработку замены значений - заменить неправильный на правильный.
Неправильный гуид после этого пометить на удаление и удалить с контролем ссылочной
Создать новый элемент с правильным ГУУИД, потом через обработку замены значений - заменить неправильный на правильный.
Неправильный гуид после этого пометить на удаление и удалить с контролем ссылочной
Ещё один способ: На мой взгляд самый удобный и без подводных камней. Без навыков программирования 1С.
1. В любом случае замена на прямую УИДа нет.
2. Выгружаем необходимый нам объект путем выгрузки/загрузки данных xml или json, при помощи всем известных обработок.
3. Далее открываем выгруженный файл. Находим в нем строку с УИД по типу ( "UID":"b2a59ee6-fefc-11ea-b679-3c970e327c26" ). И меняем в нем строку УИД на наш необходимый УИД. "b2a59ee6-fefc-11ea-b679-3c970e327c26". И сохраняем файл.
4. Загружаем наш измененный файл в нашу БД.
5. Старый объект метим на удаление и удаляем его с помощью замены ссылок на новый созданный нами объект, используя штатную обработку удаления объектов из базы.
1. В любом случае замена на прямую УИДа нет.
2. Выгружаем необходимый нам объект путем выгрузки/загрузки данных xml или json, при помощи всем известных обработок.
3. Далее открываем выгруженный файл. Находим в нем строку с УИД по типу ( "UID":"b2a59ee6-fefc-11ea-b679-3c970e327c26" ). И меняем в нем строку УИД на наш необходимый УИД. "b2a59ee6-fefc-11ea-b679-3c970e327c26". И сохраняем файл.
4. Загружаем наш измененный файл в нашу БД.
5. Старый объект метим на удаление и удаляем его с помощью замены ссылок на новый созданный нами объект, используя штатную обработку удаления объектов из базы.
(28) , запрос к полю Представление и то что выполняет 1С за кадром в случае с ссылкой одно и тоже. В запросе это виртуальное поле, его платформа генерирует само. В плане представления - битая ссылка всегда будет <Объект не найден>, чтоб не было прописано в полях представления или в обработчиках его формирования. А скорость как раз всегда важна.
(29) Посмотри в 28 скрин. Специально платформу с en запустил и показал, что <Объект не найден> не всегда в представлении при битой ссылке, могут быть вариации, которые вам все сломают. Я предложил решение, которое работает в 100% с тем же самым представлением, которое предлагали использовать, которое "одно и то же" в объектной модели и в запросе.
(32) , не всегда код БСП работает быстро, даже не так - часто он работает не быстро. А так же ему свойственно меняться, что приводит к переработке всего, что использовало данный код. Поэтому предпочитаю все делать свое - всегда есть уверенность, что будет работать, даже если конфа не на БСП)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот