Имя: Пароль:
1C
 
Битые записи в регистре сведений/накопления с пустой ссылкой на регистратор
,
0 erdos
 
21.10.09
20:25
Добрый день.
После объединения конфигурации в регистре сведений и в регистре накопления появилось по одной битой записи.

Вот их описание:
- пустая ссылка на регистратор (регистратора нет, а записи подченены регистратору и удаляются регистратором)
- данные пустые
- в периодическом регистре сведений - период равен "01.01.1900 0:00:00",
- значок записи регистра сведения - серая диаграмма, вместо голубой
- в регистре накопления активность равно "Ложь"
- значок записи регистра накопления - серый кругляшек, вместо красного кругляшка

Попытался провести от Тестировани и исправление ИБ с удаление/востановлением объектов.
Выходит сообщение:
"Тестирование начато
Проверка логической целостности. РегистрСведений.ОстаткиТоплива 01.01.1900 0:00:00:
   Не определена ссылка
Проверка логической целостности. РегистрНакопления.ПутевыеЛисты :0
   Не определена ссылка
Тестирование закончено"
Но битые записи не удалены, и объекты для битых ссылок не созданы.

Как решать такую проблему?
1 ТелепатБот
 
гуру
21.10.09
20:25
2 erdos
 
21.10.09
20:32
Спасибо ТелепатБот. Оперативно работает :)
3 Ygich
 
21.10.09
21:07
база самописка? попробуй полное перепроведение. попробуй отменить проведение всех документов регистраторов этого регистра и ТиИ. если остались битые записи то удали их программно. или просто программно удали записи с пустым регистратором.
4 Ygich
 
21.10.09
21:08
еще неплохо было бы вычислить причину ошибки. надо проверить модули проведения доков а может быть регистр редактировался программно некорректной обработкой
5 erdos
 
21.10.09
21:32
База самописная. Очень простая. битых записей немного всего две.
После ТиИ - битые записи вместо "битых ссылок" теперь имеютт "пустыми ссылки".

Воспользовался обработкой из "Книга знаний: Пустые ссылки"

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

Выводит:
"{Форма.Форма(35)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Путевые листы)
       НЗ.Записать();
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Путевые листы)"

Получается для записей с "пустыми" ссылками нужен другой способ удаления в отличии от записей с "битыми" ссылками.
Возникает вопрос: как удалить запись регистра, в которой регистратор - "пустая ссылка"?
6 Secret
 
21.10.09
21:52
7 erdos
 
21.10.09
22:21
(6) не помогает.
8 erdos
 
21.10.09
22:23
Пришел к такому коду:

НЗ = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Установить(Документы.ПутевыеЛисты.ПустаяСсылка());
НЗ.Записать(ИСТИНА);

При выполнении "НЗ.Записать(ИСТИНА)" выдает ошибку
"{Форма.Форма(40)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Путевые листы)
       НЗ.Записать(ИСТИНА);
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Путевые листы)"
9 hhhh
 
21.10.09
22:38
(8) ТИИ попробуй
10 erdos
 
21.10.09
22:42
Уже пробывал. выбирал режим исправления. С удалением. И с созданием новых объектов.
Каждый раз выводит.

"Тестирование начато
Проверка логической целостности. РегистрСведений.ОстаткиТоплива 01.01.1900 0:00:00:
  Не определена ссылка
Проверка логической целостности. РегистрНакопления.ПутевыеЛисты :0
  Не определена ссылка
Тестирование закончено"

В регистре остается пустая запись. Поле регистратор - ПУСТАЯ ССЫЛКА.

НЗ = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Установить(Документы.ПутевыеЛисты.ПустаяСсылка());
НЗ.Прочитать();
Сообщить(НЗ.Количество());

выводит "1"
Как удалить эту запись? Регистр накопления подчинен регистратору, а регистратор у той записи пустая ссылка.
11 erdos
 
21.10.09
22:57
Запрос = Новый Запрос(
   "ВЫБРАТЬ
   | Регистр.Регистратор
   |ИЗ
   | РегистрНакопления." + ИмяРегистра + " КАК Регистр
   |ГДЕ
   | Регистр.Регистратор.Номер ЕСТЬ NULL
   |
   |СГРУППИРОВАТЬ ПО
   | Регистр.Регистратор");
Выборка = Запрос.Выполнить().Выбрать();
Сообщить(Выборка.Регистратор.УникальныйИдентификатор());

Выводит "00000000-0000-0000-0000-000000000000"

т.е. Это запись с пустой ссылкой.
Как удалить эту запись?
12 Ygich
 
21.10.09
23:04
(11) удали реестр. заново создай. и перепроведи все.
13 erdos
 
21.10.09
23:16
Что такое реестр и как его удалить?
14 erdos
 
21.10.09
23:17
В конфигурации удалить регистр?
15 Ygich
 
21.10.09
23:18
бр... регистр с неудаляемой записью. потом сохрани ИБ. потом создай его заново со всеми регистраторами. перепроведи документы.
16 Ygich
 
21.10.09
23:18
(14) да
17 Ygich
 
21.10.09
23:19
это конечно как удаление аппендицита тупым зазубренным топором, но сработает
18 erdos
 
21.10.09
23:23
Помогло. Спасибо Ygich!
AdBlock убивает бесплатный контент. 1Сергей