Имя: Пароль:
1C
1С v8
Как удалить записи пер. Рег. Сведений у которого Измерение: <Объект не найден> ?
,
0 vladimir-boy
 
25.03.13
17:18
Есть такой запрос:
ВЫБРАТЬ
   * ИЗ
   РегистрСведений.РасценкиТехнологическихОпераций КАК РасценкиТехнологическихОпераций
ГДЕ
   РасценкиТехнологическихОпераций.ТехнологическаяОперация.Ссылка ЕСТЬ NULL

В результатеЗапроса:
Выходят некоторые записи у которых измерение "ТехнологическаяОперация"(Справочник) было грохнуто - <Объект не найден> (225:99de0025901805cd11e01e78470e8ce4), причём не понятно почему записи данного Регистра Сведений висят в базе, ведь измерение "ТехнологическаяОперация" идёт с флагом "Ведущее".
Как удалить эти записи???
Спасибо за ответы.
1 Maxus43
 
25.03.13
17:19
так и удаляй, отбор на "<Объект не найден> (225:99de0025901805cd11e01e78470e8ce4" ставь как обычно
2 samozvanec
 
25.03.13
17:20
(0) ТИИ-очищать-удалить пустые
3 vladimir-boy
 
25.03.13
17:20
(1)В том то и дело, что не до пру как поставить отбор "на нечто" ???
4 mikecool
 
25.03.13
17:21
выделить строки - нажать дел ))
5 Лефмихалыч
 
25.03.13
17:21
(0) выбрат эти записи запросом и то,что выберется использовать для отбора
6 vladimir-boy
 
25.03.13
17:21
(2) ТИИ долго, хотя как вариант Да
7 Maxus43
 
25.03.13
17:22
(3) запросом, Где Измерение.Ссылка Есть null например
8 H A D G E H O G s
 
25.03.13
17:23
Неполучица.
9 samozvanec
 
25.03.13
17:23
(7) причем тут нулл?
10 Maxus43
 
25.03.13
17:25
(9) битые ссылки дают null при неявном соединении, как например через точку. так ищут битые ссылки в запросах
11 H A D G E H O G s
 
25.03.13
17:25
(0)

а) Сдедать копию
б)Отловить запрос (0) в профайлере.
в) Заменить Select на delete
г) Profit
12 acsent
 
25.03.13
17:25
(11) нафиг такой геморой?
13 samozvanec
 
25.03.13
17:26
(10) точно)
14 Maxus43
 
25.03.13
17:26
пилять, вы чо усложняете? запросом обычным ищутся битые ссылки легко, и так же легко на них ставится отбор потом и удаляются записи из регистров
15 H A D G E H O G s
 
25.03.13
17:26
(12) Потому что другие варианты 1С отвергнет. Раньше так было.
16 H A D G E H O G s
 
25.03.13
17:26
(14) Неудаляются.
17 Maxus43
 
25.03.13
17:27
(16) я недавно удалял. на 8.2.15, всё норм
18 Maxus43
 
25.03.13
17:27
на непериодическом независимом регистре. С другими проблем тоже не вижу
19 acsent
 
25.03.13
17:27
запись = РегистрыСведений....СоздатьМенеджерЗаписи();
ЗаполнитиьЗначенияСвойств(Запись,Выборка)
Запись.Удалить()
20 H A D G E H O G s
 
25.03.13
17:32
Ну значит стар стал, битых ссылок боюсь, девок не порчу, нетленки не пишу.
21 Лефмихалыч
 
25.03.13
17:33
(15) у меня где-то даже обработка есть, которой в любых регистрах можно крошить записи с битыми ссылками
22 Maxus43
 
25.03.13
17:36
(20) я тоже не молод, но даже на 8.0 было именно так, всегда так было) не помню я чтоб 1с отвергала такой нежный подход
23 vladimir-boy
 
25.03.13
17:40
(19) пытался да и другими способами, но результат пока нулевой, но я ещё не сдался
24 Maxus43
 
25.03.13
17:43
(23) всё ж сказали подробно вроде, или что?
25 vladimir-boy
 
25.03.13
17:43
+(19) НЕ СРАБАТЫВАЕТ, к сожаленью:

МойЗапрос = Новый Запрос();
   МойЗапрос.Текст="ВЫБРАТЬ
   |    РасценкиТехнологическихОпераций.ТехнологическаяОперация                    
   |ИЗ
   |    РегистрСведений.РасценкиТехнологическихОпераций КАК РасценкиТехнологическихОпераций
   |ГДЕ
   |    РасценкиТехнологическихОпераций.ТехнологическаяОперация.Ссылка ЕСТЬ NULL ";
   
   МойЗапросРезультат = МойЗапрос.Выполнить();
   МойЗапросРезультатВыборка = МойЗапросРезультат.Выбрать();
   ТабличноеПоле1= МойЗапросРезультат.Выгрузить();
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
   
   Запись= РегистрыСведений.РасценкиТехнологическихОпераций.СоздатьМенеджерЗаписи();
   
   ЗаполнитьЗначенияСвойств(Запись, МойЗапросРезультатВыборка);
   Запись.Удалить();


Записи остаются. Упс.
26 acsent
 
25.03.13
17:47
а где обход выборки то?
27 vladimir-boy
 
25.03.13
17:49
(26) С таким кодом вообще ошибка вываливается:

{Форма.ФормаОтчета.Форма(1326)}: Поле объекта недоступно для записи (ТехнологическаяОперация)
       МойРегистрРасценкиТехОпераций.Отбор.ТехнологическаяОперация = МойЗапросРезультатВыборка.ТехнологическаяОперацияСсылка;

Код:

МойЗапрос = Новый Запрос();
   МойЗапрос.Текст="ВЫБРАТЬ
   |    РасценкиТехнологическихОпераций.ТехнологическаяОперация.Ссылка                    
   |ИЗ
   |    РегистрСведений.РасценкиТехнологическихОпераций КАК РасценкиТехнологическихОпераций
   |ГДЕ
   |    РасценкиТехнологическихОпераций.ТехнологическаяОперация.Ссылка ЕСТЬ NULL ";
   
   МойЗапросРезультат = МойЗапрос.Выполнить();
   МойЗапросРезультатВыборка = МойЗапросРезультат.Выбрать();
   ТабличноеПоле1= МойЗапросРезультат.Выгрузить();
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
   
   
   МойЗапросРезультатВыборка = МойЗапросРезультат.Выбрать();
   
   Пока МойЗапросРезультатВыборка.Следующий() Цикл
       МойРегистрРасценкиТехОпераций = РегистрыСведений.РасценкиТехнологическихОпераций.СоздатьНаборЗаписей();
       МойРегистрРасценкиТехОпераций.Отбор.ТехнологическаяОперация = МойЗапросРезультатВыборка.ТехнологическаяОперацияСсылка;
       МойРегистрРасценкиТехОпераций.Записать();
       
   КонецЦикла;
28 acsent
 
25.03.13
17:50
(27) тебе прям до последнего разжовывать чтоли?
29 vladimir-boy
 
25.03.13
17:52
(28) Да буду стараться сам, спасибо огромное итак, сообщу обязательно если у меня получится
30 GANR
 
25.03.13
17:54
У самого возникает инстинктивное желание SQL припахивать всюду где не лень (11), но надо по православному (19).

Я склоняюсь к чему-то ещё более православному варианту - восстановить несуществующие объекты, на которые имеются ссылки в РС.

Для этого можно воспользоваться типовой обработкой  ВыгрузкаЗагрузкаДанныхXML.epf http://its.1c.ru/db/metod81#content:4126:1. Отобрал в архивной копии базы "битые" объекты, выгрузил в xml, загрузил в целевую базу - всё... и кодить не надо.

По сути ВыгрузкаЗагрузкаДанныхXML.epf реализует такой алгоритм:

GUID_ПотерянногоЭлемента = Новый УникальныйИдентификатор("6ce92cb6-6d92-11e0-afc8-003048f27c5f");
Ссылка_ПотерянногоЭлемента = Справочники.ТвойСправочник.ПолучитьСсылку(GUID_ПотерянногоЭлемента);
ОбъектПоСсылке = Справочники.ТвойСправочник.СоздатьЭлемент();
ОбъектПоСсылке.УстанвитьСсылкуНового(Ссылка_ПотерянногоЭлемента);
31 vladimir-boy
 
25.03.13
17:58
(31)Спасибо! Вот это очень интересное решение путём восстановления объекта измерения, опробую такой вариант обязательно.
32 alexei366
 
25.03.13
18:15
Да хз, измерение как понимаю ссылка на спр какойто, ну так и сделать запрос по регистру с левым соединением на таблице справочника, и в условии ЕСТЬNULL на колонку таблицы справочника к примеру на туже самую ссылку. И вернет тебе запрос все измерения коих нет в справочнике уже, ну а дальше удаляй
33 vladimir-boy
 
25.03.13
18:21
(32) Найти не вопрос, а удалить балалайка: только кажется что можно на раз-два
34 GANR
 
25.03.13
18:25
(31) А чтобы узнать, какие элементы в копии соответствуют "битым" ссылкам (GUIDы-то в "битой" базе есть) http://ximage.ru/data/imgs/1364221484.jpg
35 Reset
 
25.03.13
18:30
(33) Удаляется элементарно, на раз-два. Другое дело, что ты пока не освоил работу с даже элементарными механизмами платформы - выбороками из запроса, записями рс, наборами.
36 vladimir-boy
 
25.03.13
18:38
(35) maybe , но поверь что вариант только прокатит(сдаётся мне), который предложил GANR
Предложи реальный код, пожалуйста
37 Reset
 
25.03.13
18:44
(36) Что предлагать? Ответ на вопрос в сабже дан в посте (1).
Писать за тебя код не буду, уж извини. +1 к(28).

GANR то же говорит дело, но это уже вопрос подхода в конкретном случае.
38 vladimir-boy
 
25.03.13
18:45
(37) Пробовал Как в (1) но ругается ошибкой, что не понимает
39 Reset
 
25.03.13
18:46
Я бы делал (это уже выходит за рамки заданного вопроса) сначала поиск ссылок по базе, если есть ссылки в других местах, кроме РС, то "восстанавливал" бы объект. Иначе удадял из регистра.
40 Reset
 
25.03.13
18:47
(38) Это ты не понимаешь, повторюсь.
Ладно, ушел, чтоб "не троллить"
41 Reset
 
25.03.13
18:48
в (19) расшифровка (1)
42 vladimir-boy
 
25.03.13
18:52
(41) Ок. Намёк понятен. Буду биться как рыба об лёд, но попытаюсь достичь результата!
43 GANR
 
29.03.13
18:51
44 GANR
 
29.03.13
18:52
Функция UUIDToGUID(UUID) Экспорт
   Возврат Прав(UUID, 8) + "-" + Сред(UUID, 21, 4) + "-" + Сред(UUID, 17, 4) + "-" + Лев(UUID, 4) + "-" + Сред(UUID, 5, 12);
КонецФункции


Функция GUIDToUUID(GUID) Экспорт
   Возврат Сред(GUID, 20, 4) + Прав(GUID, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Лев(GUID, 8);
КонецФункции
45 fisher
 
29.03.13
18:55
ИМХО, самый простой способ - оживить регистраторов по битым ссылкам и тут же их грохнуть вместе с записями.
46 Reset
 
29.03.13
19:08
(45)  у него вроде на справочник(ТехнологическаяОперация) "висит" ссылка, а не на регистратор.
Хотя согласен, если этот регистр таки подчинен регистратору, тогда правильней, действительно, в документе проставить правильное значение(выбрать существующий элемент) и перепровести. Или восстановить элемент справочника по ссылке. А не удалять часть движений документа.
Впрочем, это укладывается в (39) ;)
47 GANR
 
29.03.13
19:23
На примере (0):

1. Строчка в ТИИ <Объект не найден> (225:99de0025901805cd11e01e78470e8ce4)
2. UUID: 99de0025901805cd11e01e78470e8ce4
3. GUID: 470e8ce4-1e78-11e0-99de-0025901805cd

Вот по п.3 и надо вычислить живую Ссылку в копии (34) и скормить (30).
48 Reset
 
29.03.13
19:28
(47) Если по примеру (0), у него уже есть готовая ссылка как результат запроса и преобразования представления уида туда-сюда не нужны.
49 Reset
 
29.03.13
19:29
то есть в (30) можно сразу к четвертой строке приступать
ОбъектПоСсылке.УстанвитьСсылкуНового(Ссылка_ПотерянногоЭлемента_ПолученнаяИзЗапроса);
50 fisher
 
29.03.13
19:30
(46) Без разницы. Измерение-то ведущее. Если создать элемент справочника по битой ссылке и тут же его грохнуть - всё будет в ажуре.
51 Reset
 
29.03.13
19:31
(50) Собственно, не возражаю, если других ссылок, кроме как в РС нету. А если нету то почему просто не грохнуть :) без разницы в общем
52 GANR
 
29.03.13
19:31
(48) О! запрос. Тогда БитаяСсылка.УникальныйИдентификатор() Ищем в копии базы по (34), ВыгрузкаЗагрузкаДанныхXML.epf
53 Reset
 
29.03.13
19:32
а если есть регистратор то возражаю. Но тогад и ссылка будет в документе
54 Reset
 
29.03.13
19:33
Я думаю мы тут зря решаем вопрос, авто то ушел 4 дня назад :)
55 Reset
 
29.03.13
19:33
автор*
56 GANR
 
29.03.13
19:51
(54) а это  н а м  пригодится полюбому
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан