![]() |
![]() |
![]() |
|
Как перебрать все данные всех регистров сведений. | ☑ | ||
---|---|---|---|---|
0
AllJoke
24.03.11
✎
17:04
|
День добрый. Вопрос собственно в теме. Делается чито для поиска битых ссылок в значениях того или иного регистра сведений. Т.е есть РегистрыСведений - штук 11, вот все их перебираем, перебираем их измерения, их ресурсы, их реквизиты и ищем ссылку в которой "Объект не найден". Кто нить что нить подобное делал?
|
|||
1
zak555
24.03.11
✎
17:06
|
выборка ?
|
|||
2
tocaelectro
24.03.11
✎
17:07
|
Тестирование и исправление
|
|||
3
AllJoke
24.03.11
✎
17:09
|
(1) В выборке придется явно указывать каждый регистр конфигурации. А я вот такое нашел:
Для Каждого РегистрСведений Из Метаданные.РегистрыСведений Цикл НО!!! Там берутся только объекты, сами данные получить не могу допереть. |
|||
4
AllJoke
24.03.11
✎
17:14
|
ну и что? нет никаких идей???
|
|||
5
YouAreEmpty
24.03.11
✎
17:15
|
(3)Можно сделать программный запрос с объединением данных регистра
|
|||
6
AllJoke
24.03.11
✎
17:16
|
(5) Ого! И каким же это макаром?
|
|||
7
YouAreEmpty
24.03.11
✎
17:18
|
(3) Для лазания конкретно по записями удаления их это тебе нужен объект вида РегистрСведенийНаборЗаписей.ИмяРегистра
|
|||
8
AllJoke
24.03.11
✎
17:19
|
(7) Да это я понимаю. Но как мне получить на каждый регистр сведений вот этот самый НаборЗаписей?
|
|||
9
YouAreEmpty
24.03.11
✎
17:20
|
Обходишь по метаданным регистры сведений и нужные поля добавляешь программно к тексту запроса, используя ключевое слово объединить все. Но это чтобы получить данные для изменения таких данных нужно лазить по наборам записей
|
|||
10
YouAreEmpty
24.03.11
✎
17:21
|
(8) Щас помозгуем:)
|
|||
11
Maxus43
24.03.11
✎
17:21
|
Для Каждого РегистрСведений Из Метаданные.РегистрыСведений Цикл
НаборЗаписеЙ = [РегистрСведений.Имя].СоздатьНаборЗаписей(); НаборЗаписей.Прочитать(); Для каждого ЗапИсь Из НаборЗаписей Цикл ..... типа что-то |
|||
12
YouAreEmpty
24.03.11
✎
17:22
|
Одного не пойму зачем это тебе? или у тебя свойство "Ведущее" не во всех измерениях выставлено?
|
|||
13
Mitriy
24.03.11
✎
17:22
|
(0) на инфост_арте (антимат... гы...) таких обработок вроде полно...
|
|||
14
Mitriy
24.03.11
✎
17:22
|
(12) у него ссылки в ресурсах, видать...
|
|||
15
AllJoke
24.03.11
✎
17:22
|
(9) "Идешь туда не знаю куда, искать то не знаю что" - я нифига не понял. Допустим Начинаю беребирать регистры сведений
Для Каждого РегистрСведений Из Метаданные.РегистрыСведений Цикл Сообщить("!"); Для Каждого Измерения Из РегистрСведений.Измерения Цикл Если Строка(Измерения.Тип) = "Число" ИЛИ Строка(Измерения.Тип) = "Строка" ИЛИ Строка(Измерения.Тип) = "Дата" ИЛИ Строка(Измерения.Тип) = "Булево" Тогда Иначе Сообщить("!!"); КонецЕсли; КонецЦикла; Для Каждого Ресурса Из РегистрСведений.Ресурсы Цикл Если Строка(Ресурса.Тип) = "Число" ИЛИ Строка(Ресурса.Тип) = "Строка" ИЛИ Строка(Ресурса.Тип) = "Дата" ИЛИ Строка(Ресурса.Тип) = "Булево" Тогда Иначе Сообщить("!!"); КонецЕсли; КонецЦикла; КонецЦикла; Вот что то в этом роде. НО!!! Если Измерение имеет тип СправочникСсылка.ФизическиеЛица? Как получить данные? |
|||
16
YouAreEmpty
24.03.11
✎
17:22
|
(11) Тут проблема в том как от метаданных к объекту перейти
|
|||
17
Maxus43
24.03.11
✎
17:23
|
(12) А у тебя во всех это стоит?)
|
|||
18
YouAreEmpty
24.03.11
✎
17:24
|
(15) Ты лучше скажи нам конечную цель такого поиска, так может и решение оптимальней найдем
|
|||
19
Maxus43
24.03.11
✎
17:24
|
(15) Если ТипЗнч(Измерения) = Тип("СправочникСсылка.ФизЛица") Тогда
... |
|||
20
YouAreEmpty
24.03.11
✎
17:25
|
(17) Ну вроде при контроле ссылочной целостности у он не удалит объект если на него есть ссылки даже в регистрах сведений,такая трабла может возникнуть либо при переносе данных либо при непосредственном удалении
|
|||
21
YouAreEmpty
24.03.11
✎
17:26
|
(19) Ага и так для каждого справочника в конфигурации, коих может быть под сотню
|
|||
22
AllJoke
24.03.11
✎
17:28
|
(18) Удалить записи регистров сведений, где ссылка = "Объект не найден".
И потом (11) впихнул этот код, ругается: {Форма.Форма.Форма(170,17)}: Ожидается выражение НаборЗаписей =<<?>> [РегистрСведений.Имя].СоздатьНаборЗаписей(); (Проверка: Толстый клиент (обычное приложение)) |
|||
23
YouAreEmpty
24.03.11
✎
17:29
|
(22) А вас с восьмеркой вообще как?
|
|||
24
AllJoke
24.03.11
✎
17:31
|
(23) Начинания. Но это же он (11) посоветовал.
|
|||
25
YouAreEmpty
24.03.11
✎
17:31
|
Тестирование и исправление по идее само найдет и удалит ссылки на несуществующие объекты, может попробуете на копии прогнать?
|
|||
26
YouAreEmpty
24.03.11
✎
17:32
|
(24) Ну он в виде синтаксического шаблона:). Все таки попробуйте для начала тестирование и исправление, только на копии
|
|||
27
Maxus43
24.03.11
✎
17:33
|
(24) я ж не проверял) как то так должно быть...
(22) v8: Вопрос знатокам. Объект не найден в звпросе! вникни |
|||
28
AllJoke
24.03.11
✎
17:33
|
(25) Блин. А можно не прибегать к ТИИ??? Можно все таки программно, раз уж мы тут программеры.
|
|||
29
МихаилМ
24.03.11
✎
17:33
|
ищите на ин-стрте по "Объект не найден"
там есть обработки борьбы (выявления,удаления) с битыми ссылками |
|||
30
YouAreEmpty
24.03.11
✎
17:33
|
И кстати откуда у вас в базе битые ссылки взялись?
|
|||
31
Maxus43
24.03.11
✎
17:34
|
||||
32
Maxus43
24.03.11
✎
17:37
|
нашёл?
Ниже дана программа для удаления записей регистров, у которых регистратор - битая ссылка, т.е. не существует в базе. Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ) МенеджерРегистра = ТипРегистра[ИмяРегистра]; Запрос = Новый Запрос(" |ВЫБРАТЬ Регистратор |ИЗ "+ТипРегистраЗ+"."+ИмяРегистра+" |ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента"); Запрос.УстановитьПараметр("ПустаяСсылкаДокумента",Неопределено); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Набор = ТипРегистра[ИмяРегистра].СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Выборка.Регистратор); Набор.Записать(); ОбработкаПрерыванияПользователя(); Состояние(""+ТипРегистра+" "+ИмяРегистра); КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) Для Каждого пРегистр из Метаданные.РегистрыСведений Цикл Подчинен = (пРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору); Если Подчинен Тогда УдалениеБитыхСсылок(пРегистр.Имя,РегистрыСведений,"РегистрСведений") КонецЕсли; КонецЦикла; Для Каждого пРегистр из Метаданные.РегистрыБухгалтерии Цикл УдалениеБитыхСсылок(пРегистр.Имя,РегистрыБухгалтерии,"РегистрБухгалтерии") КонецЦикла; Для Каждого пРегистр из Метаданные.РегистрыРасчета Цикл УдалениеБитыхСсылок(пРегистр.Имя,РегистрыРасчета,"РегистрРасчета") КонецЦикла; Для Каждого пРегистр из Метаданные.РегистрыНакопления Цикл УдалениеБитыхСсылок(пРегистр.Имя,РегистрыНакопления,"РегистрНакопления") КонецЦикла; КонецПроцедуры |
|||
33
YouAreEmpty
24.03.11
✎
17:38
|
Можно закрывать:)
|
|||
34
AllJoke
24.03.11
✎
17:38
|
Я все это читал. Там затрагивают регистраторы. А у меня режим записи всех регистров независимый.
|
|||
35
Maxus43
24.03.11
✎
17:39
|
(34) Ну проверяй не регистратор а измерения... Регистратор - такое же поле как и другие
|
|||
36
Alexandr Puzakov
24.03.11
✎
17:46
|
Все просто...
|
|||
37
AllJoke
24.03.11
✎
17:47
|
(36) Ты думаешь? Объясни.
(35) Ладно. Попробую. Уже конец рабочего дня. Отпишуь. |
|||
38
Alexandr Puzakov
24.03.11
✎
17:49
|
(37) я не думаю, я знаю.
|
|||
39
AllJoke
24.03.11
✎
17:57
|
(38) Так поделись опытом.
|
|||
40
PetrVV
24.03.11
✎
17:58
|
http://infostart.ru/public/82878/ - скачай эту обработку, она поможет.
|
|||
41
Alexandr Puzakov
24.03.11
✎
18:07
|
(39) тут ничего сложного нет. Только запросом не пользуйся для получения данных, лучше выборкой. Если регистры большие, то 1Ска может упасть.
Проверить, существует ли такое значение легко: БитаяСсылка = Ложь; Попытка ТекущееЗначение.ПолучитьОбъект(); Исключение БитаяСсылка = Истина; КонецПопытки; Попытка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |