|
Получить тип объекта из строки вида "Объект не найден" | ☑ | ||
---|---|---|---|---|
0
Franchiser
гуру
11.11.22
✎
18:41
|
Возможно ли получить тип вида "ДокументыСсылка.МойДокумент" ?
|
|||
1
Смотрящий
11.11.22
✎
18:48
|
Да
|
|||
2
Franchiser
гуру
11.11.22
✎
18:49
|
код в студию, в интернете не нашел
|
|||
3
Franchiser
гуру
11.11.22
✎
18:50
|
то что видел: делают перебором менеджера Документов, Справочников и т.д.
|
|||
4
Смотрящий
11.11.22
✎
19:00
|
(3) Дык, перебор же ж. Тип не хранит вид объекта
|
|||
5
Franchiser
гуру
11.11.22
✎
19:11
|
А что тогда значит цифры до двоеточия "55:"?
|
|||
6
Смотрящий
11.11.22
✎
19:22
|
(5) Покажите всю строку. Пжалуйста.
|
|||
7
CepeLLlka
11.11.22
✎
19:28
|
||||
8
Franchiser
гуру
11.11.22
✎
19:48
|
(7) и где там про получение типа?
|
|||
9
Franchiser
гуру
11.11.22
✎
19:49
|
(6)<Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) .
|
|||
10
CepeLLlka
11.11.22
✎
19:52
|
(8)Там предлагается обработка, которая может создать тебе ссылочный объект по "Объект не найден".
Скачиваешь обработку, лезешь под капот, профит! |
|||
11
Franchiser
гуру
11.11.22
✎
19:54
|
У меня уже есть такая обработка. Но если ссылок много то очень долго работает перебор всех типов документов, справочников и т.д. хочу оптимизировать. Так можно тип получить или нет?
|
|||
12
Aleksey
11.11.22
✎
19:55
|
(11) Как думаешь что будет если у разных видов документов/справочников будет одинаковый ГУИД?
|
|||
13
Aleksey
11.11.22
✎
19:56
|
Т.е. в общем случае финт ушами из обработки сработает если нет одинаковых гуид в разных таблицах, ибо ответ на твой вопрос - нет, нельзя получить. Переходите на 7-ку там это реализовано
|
|||
14
Смотрящий
11.11.22
✎
20:16
|
(9) Чет я в чтроке не наблюдаю заявленное "55"
|
|||
15
vde69
11.11.22
✎
20:46
|
84 - это внутренний номер типа, ты сначала можешь создать ссылки всех типов метаданных и создать таблицу соответствия (она для конкретной базы будет уникальной) и уже по этой таблице будешь быстро создавать
|
|||
16
kittystark
11.11.22
✎
22:18
|
вот держи
&НаСервере Функция ПолучитьИзМетаданных_ВидОбъекта( возвращатьТД = ложь ) Соотв_номерИзМетаданных_ВидОбъекта = новый Соответствие; ВеткиМетаданных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( "Документы,Справочники" ); Если возвращатьТД тогда индСтр = 1; ТД = новый ТабличныйДокумент; ТД.Область( индСтр, 1 ).текст = "Метадно"; ТД.Область( индСтр, 2 ).текст = "Вид"; ТД.Область( индСтр, 3 ).текст = "Номер"; КонецЕсли; Для Каждого ВеткаМетаданных из ВеткиМетаданных цикл Для Каждого обж из Метаданные[ВеткаМетаданных] цикл внутр = ЗначениеВСтрокуВнутр( Вычислить("" + ВеткаМетаданных + "." + обж.Имя + ".ПустаяСсылка()") ); видОбъекта = обж.Имя; номерИзМетаданных = RegExpReplace(внутр,".*\,(\d+):00000000000000000000000000000000}","$1"); Соотв_номерИзМетаданных_ВидОбъекта[ номерИзМетаданных ] = "" + ВеткаМетаданных + "." + видОбъекта ; Если возвращатьТД тогда индСтр = индСтр + 1; ТД.Область( индСтр, 1 ).текст = ВеткаМетаданных; ТД.Область( индСтр, 2 ).текст = видОбъекта; ТД.Область( индСтр, 3 ).текст = номерИзМетаданных; ТД.Область( индСтр, 4 ).текст = внутр; КонецЕсли; КонецЦикла; КонецЦикла; Возврат ?( возвращатьТД, ТД, Соотв_номерИзМетаданных_ВидОбъекта ); КонецФункции Function RegExpReplace( str, pattern, replacement, force_empty_str = 0 ) export //если последний параметр не ноль, тогда при отсутствии совпадения по шаблону - будет вернута пустая строка //если же последний параметр опущен, то при отсутствии совпадения по шаблону - будет вернута исходная строка Попытка RegExp = new COMObject("vbscript.regexp"); RegExp.IgnoreCase = true; RegExp.MultiLine = true; RegExp.Global = true; RegExp.Pattern = pattern; if force_empty_str = 0 then return RegExp.Replace(str,replacement); else if RegExp.Test(str) then return RegExp.Replace(str,replacement); else return ""; endIf; endIf; Исключение return ОписаниеОшибки(); КонецПопытки; EndFunction &НаКлиенте Функция структураГУИДов( Объект_не_найден_Стр ) Экспорт номерВидаОбъектаСтр = RegExpReplace( Объект_не_найден_Стр, "^<Объект не найден> \((\d+):(.{32})\)$" , "$1"); ГУИД_БезТирешекСтр = RegExpReplace( Объект_не_найден_Стр, "^<Объект не найден> \((\d+):(.{32})\)$" , "$2"); ГУИД_СТирешкамиСтр = RegExpReplace( ГУИД_БезТирешекСтр, "(.{4})(.{12})(.{4})(.{4})(.{8})" , "$5-$4-$3-$1-$2"); ГУИД_Настоящий = Новый УникальныйИдентификатор( ГУИД_СТирешкамиСтр ); Возврат новый Структура("номерИзМетаданных, ВидОбъекта, ГУИД_БезТирешекСтр, ГУИД_СТирешкамиСтр, ГУИД_Настоящий, ДатаСоздания", номерВидаОбъектаСтр, соотв_номерИзМетаданных_ВидОбъекта[ номерВидаОбъектаСтр ], ГУИД_БезТирешекСтр, ГУИД_СТирешкамиСтр, ГУИД_Настоящий, ДатаСозданияСсылки( ГУИД_СТирешкамиСтр ) ); КонецФункции &НаСервере Процедура ВосстановитьСсылку( структураГУИДов, НовоеЗначение ) менеджерОбъекта = Вычислить(структураГУИДов.ВидОбъекта); Если Найти( структураГУИДов.ВидОбъекта, "Документ" ) = 1 тогда восстанавливаемыйОбъект = менеджерОбъекта.СоздатьДокумент(); восстанавливаемыйОбъект.Дата = структураГУИДов.ДатаСоздания; восстанавливаемыйОбъект.Номер = НовоеЗначение; КонецЕсли; Если Найти( структураГУИДов.ВидОбъекта, "Справочник" ) = 1 тогда восстанавливаемыйОбъект = менеджерОбъекта.СоздатьЭлемент(); восстанавливаемыйОбъект.Наименование = НовоеЗначение; КонецЕсли; восстанавливаемыйОбъект .УстановитьСсылкуНового( менеджерОбъекта.ПолучитьСсылку( структураГУИДов.ГУИД_Настоящий ) ); восстанавливаемыйОбъект.Записать(); КонецПроцедуры |
|||
17
Franchiser
гуру
11.11.22
✎
23:24
|
(14) потому что я уже исправил все ссылки. Прислал пример из интернета.
(15)(16) спасибо, попробую |
|||
18
Franchiser
гуру
11.11.22
✎
23:49
|
(12) гуид уникален в рамках одной таблицы
|
|||
19
TormozIT
гуру
12.11.22
✎
00:39
|
ирОбщий.ПреобразоватьЗначениеИзSDBLЛкс()
|
|||
20
Михаил Козлов
12.11.22
✎
09:08
|
(12) (19)+ Делал обмен так чтобы ГУИД расходной накладной = ГУИД приходной. В рамках одной БД.
|
|||
21
Franchiser
гуру
12.11.22
✎
13:23
|
(19)+
|
|||
22
Franchiser
гуру
12.11.22
✎
13:26
|
(19) а можешь сюда кинуть? у меня ИР только в виде внешних обработок
|
|||
23
Конструктор1С
12.11.22
✎
14:21
|
(11) ну раз получи структуру хранения БД, номера таблиц закешируй в соответствие, потом тупо перебирай свои ссылки
|
|||
24
Franchiser
гуру
12.11.22
✎
14:33
|
(23) а чему там соответствует номер таблицы?
|
|||
25
kittystark
12.11.22
✎
15:41
|
(24) я ж в (16) уже код дал,
см. первую функцию ПолучитьИзМетаданных_ВидОбъекта( возвращатьТД = ложь ) - там ветку "code" нужно развернуть: Соотв_номерИзМетаданных_ВидОбъекта[ номерИзМетаданных ] = "" + ВеткаМетаданных + "." + видОбъекта; уже даже табдок формируется - неужели так трудно... кинь его на форму, или вызови ТД.Показать() - все увидишь |
|||
26
Franchiser
гуру
12.11.22
✎
17:59
|
(25) я на будущее, сейчас не за компом. Что то мне код не очень нравится
|
|||
27
Конструктор1С
12.11.22
✎
18:26
|
(24) <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)
формат этого безобразия <Объект не найден> ([Номер таблицы в струкутре хранения]:[ГУИД]) Документ.ПриходнаяНакладная В структуре хранения _Document45 <Объект не найден> (45:bf5600145e3710ab11dda4c605dbe824) |
|||
28
Aleksey
13.11.22
✎
13:51
|
(17),(20) Я в курсе поэтому и написал, что будет если тупо перебирать все таблички подставлять гуиды и проверять нашли что то или нет. Он найдет первый элемент и прекратит поиск, но не факт что первый будет нужным
|
|||
29
Franchiser
гуру
13.11.22
✎
14:20
|
(28) так почему ты написал "нет, нельзя получить"?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |