Имя: Пароль:
1C
1С v8
Битые ссылки в таблице Изменения регистра накопления
,
0 kdenis
 
09.09.21
12:02
Доброго дня!

УТ 10.3, есть обмены по правилам с другими конфигурациями.

При загрузке dt из файловой базы в PostgreSQL получил ошибку: "Попытка вставки неуникального значения в уникальный индекс:".
Причину ошибки нашел.
В таблице "РегистрНакопления.РасчетыСКонтрагентами.Изменения" есть одинаковые записи. Но записи эти с битыми ссылками.

https://ibb.co/4jqgTGK

Посоветуйте, как удалить эти записи так, чтобы не испортить обмен. Обмен актуальный.

Читал про "УдалитьРегистрациюИзменений(<Узлы>, <Данные>)". Но нечего передавать в параметр "Данные".
1 DrShad
 
09.09.21
12:17
объект метаданных передавай
2 Галахад
 
гуру
09.09.21
12:17
Если нужных для регистра РасчетыСКонтрагентами нет, то можно так: Метаданные.РегистрыНакопления.РасчетыСКонтрагентами
3 Михаил Козлов
 
09.09.21
12:19
(1)+ Или все изменения грохнуть. В УТ 10.3 вроде была смотрелка изменений в узле с возможностью удалить выборочно.
4 youalex
 
09.09.21
13:04
Значением данного параметра может быть объект метаданных, объект, представляющий данные, хранимые в базе данных, такой как документ, элемент справочника, счет бухгалтерского учета, менеджер записи константы, набор записей регистра и т. п.,

Набор с отборами по ключевым полям таблицы изменений  
по идее если сделать УдалитьРегистрациюИзменений(), а потом ЗарегистрироватьИзменения() тем же набором - останется одна запись
5 kdenis
 
09.09.21
13:18
Пока проверяю "В УТ 10.3 вроде была смотрелка изменений в узле с возможностью удалить выборочно."
Очень долго открывает список изменений.

Если не получится, буду экспериментировать с "УдалитьРегистрациюИзменений(<Узлы>, <Данные>)".
Пока до конца не понимаю как она работает:
- Если, как в (1) и (2), передать "Метаданные.РегистрыНакопления.РасчетыСКонтрагентами", видимо удаляются все зарегистрированные изменения. Как это повлияет на работу обмена?
- (4) Записей в регистре нет, есть только в таблице изменений регистра. Ссылки битые, набор записей не передать. Если я правильно понял о чем Вы.
6 Многолетний Апельсин
 
09.09.21
13:27
(5) Такой вариант не работает?

Запрос = новый Запрос("ВЫБРАТЬ
|    РасчетыСКлиентамиИзменения.Регистратор КАК Регистратор
|ИЗ
|    РегистрНакопления.РасчетыСКлиентами.Изменения КАК РасчетыСКлиентамиИзменения
|ГДЕ
|    РасчетыСКлиентамиИзменения.Регистратор.Дата ЕСТЬ NULL");

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    
    НЗ = РегистрыНакопления.РасчетыСКлиентами.СоздатьНаборЗаписей();
    НЗ.Отбор.Регистратор.Установить(Выборка.Регистратор);
    
    ПланыОбмена.УдалитьРегистрациюИзменений(Узел,НЗ);               
КонецЦикла;
7 youalex
 
09.09.21
13:27
(5) передаешь пустой набор, главное - отборы.
Ссылки на значения отборов у тебя же есть в таблице регистрации, и что что они битые, не пустые же)
8 youalex
 
09.09.21
13:31
(7) То что они битые - это кстати нормально для регистрации, может означать, что Регистратор в Источнике удален, и наборы по нему нужно передать в Приемник (а так как записей нет - уйдут пустые наборы, но с отбором, и очистятся в Приемнике). А если ты сейчас здесь удалишь, есть риск что в Приемнике они останутся болтаться уже в таблице данных, с битыми ссылками, да
9 kdenis
 
09.09.21
13:35
(6) Сразу попробовал - пусто.
(7), (8) Идея понятна. Если с ручной чисткой не осилю, попробую так.

Пока всем спасибо.
10 Serg_1960
 
09.09.21
14:07
(0) Так называемые "битые" ссылки, сами по себе, не мешают ни индексированию, ни обмену, ни работе с записями регистра и регистрации изменений. Если это не РИБ обмен, то этих записей не должно быть.
11 Ёпрст
 
09.09.21
22:55
(6) в УдалитьРегистрациюИзменений нужно передать прочитанный набор
12 Ёпрст
 
09.09.21
22:58
+ 11

  
    НЗ = РегистрыНакопления.РасчетыСКлиентами.СоздатьНаборЗаписей();
    НЗ.Отбор.Регистратор.Установить(Выборка.Регистратор);
    НЗ.Прочитать();
    ПланыОбмена.УдалитьРегистрациюИзменений(Узел,НЗ);  
13 kdenis
 
13.09.21
09:52
Спасибо всем. Победил.

(6) Невнимательно прочитал сначала.

В итоге так и сделал. Запросом получил дубли, потом УдалитьРегистрациюИзменений() и ЗарегистрироватьИзменения().
Передавал наборы с отбором по регистратору.
14 kdenis
 
13.09.21
09:56
(3) Смотрелка есть, но пользоваться ей для анализа регистров неудобно: раскрывается список в котором 300 000 строк "Набор записей". Чтобы найти нужную запись, надо раскрывать каждую строку.
15 TormozIT
 
гуру
13.09.21
10:49
Мощная смотрелка и изменялка регистрации на узлах есть в ИР. А в старых конфах на обычных формах вообще грех - не использовать ИР.
http://devtool1c.ucoz.ru/index/redaktor_izmenenij_na_uzle/0-30