Имя: Пароль:
1C
1С v8
Как точечно почистить мусор в таблице Изменения регистра сведений?
, ,
0 palpetrovich
 
29.10.21
10:31
Такая вот ситуация:

ВЫБРАТЬ ПервоначальныеСведения.ОсновноеСредство
ИЗ    РегистрСведений.ПервоначальныеСведения КАК ПервоначальныеСведения
ГДЕ
ПервоначальныеСведения.ОсновноеСредство = &ОсновноеСредство
// результат пустой
;
ВЫБРАТЬ ПервоначальныеСведенияИзменения.ОсновноеСредство
ИЗ    РегистрСведений.ПервоначальныеСведения.Изменения КАК ПервоначальныеСведенияИзменения
ГДЕ
ПервоначальныеСведенияИзменения.ОсновноеСредство = &ОсновноеСредство
// результат - с десяток записей

Таких "Основных Средств" в РегистрСведений.ПервоначальныеСведения.Изменения - с десяток
Можно эти изменения как-то зачистить не зачищая при этом другие, нормальные, если можно так выразится, изменения?
1 Ёпрст
 
29.10.21
10:33
(29) можно чистить всё что угодно. Отбери все записи, создай набор записей, установи отбор по значениям из запроса, прочитай набор, удали регистрацию для узла, подсунув узел и этот набор
2 palpetrovich
 
29.10.21
10:56
(1) а как отобрать-то? если " результат пустой " ?
3 palpetrovich
 
29.10.21
11:01
может так?
НаборЗаписей.Отбор.ОсновноеСредство.Установить(Неопределено, Истина);
4 palpetrovich
 
29.10.21
11:05
+ (3) не, не получилось. не ругнулось но и ничего не изменилось
5 Галахад
 
гуру
29.10.21
11:06
Хм. А присоединить слева к таблице изменений таблицу регистра где ПервоначальныеСведения.ОсновноеСредство есть null
6 palpetrovich
 
29.10.21
11:06
+(4)  на всякий случай - делал так
        НаборЗаписей = РегистрыСведений.ПервоначальныеСведения.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.ОсновноеСредство.Установить(Неопределено, Истина);
        НаборЗаписей.Прочитать();
        ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, НаборЗаписей);
7 palpetrovich
 
29.10.21
11:09
(5) так и находил этот мусор собсвенно
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПервоначальныеСведенияИзменения.ОсновноеСредство КАК ОсновноеСредствоИзменения,
    ПервоначальныеСведения.ОсновноеСредство КАК ОсновноеСредство
ИЗ
    РегистрСведений.ПервоначальныеСведения.Изменения КАК ПервоначальныеСведенияИзменения
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведения КАК ПервоначальныеСведения
        ПО ПервоначальныеСведенияИзменения.ОсновноеСредство = ПервоначальныеСведения.ОсновноеСредство
ГДЕ
    ПервоначальныеСведения.ОсновноеСредство ЕСТЬ NULL
// рез: ОсновноеСредствоИзменения - есть, ОсновноеСредство - пусто
8 palpetrovich
 
29.10.21
11:15
попробовал так
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПервоначальныеСведенияИзменения.ОсновноеСредство КАК ОсновноеСредство
ИЗ
    РегистрСведений.ПервоначальныеСведения.Изменения КАК ПервоначальныеСведенияИзменения
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведения КАК ПервоначальныеСведения
        ПО ПервоначальныеСведенияИзменения.ОсновноеСредство = ПервоначальныеСведения.ОсновноеСредство
ГДЕ
    ПервоначальныеСведения.ОсновноеСредство ЕСТЬ NULL

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

результат ожидаемо нулевой :(
9 Галахад
 
гуру
29.10.21
11:24
А забэкапить нужные и убить всё? А потом разбэкапить?
10 palpetrovich
 
29.10.21
11:28
(9) идет постоянный обмен с другой базой, потому и хотелось-бы "точечно"
если ничего не придумаем - то при первой остановке на внедрение доработок - так и будет :)
11 Обработка
 
29.10.21
11:33
Буквально на днях чистил изменения РС и при этом удялял сами записи тоже.

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

    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    РС.Период,
    |    РС.ЗаказНаПеремещение
    |ИЗ
    |    РегистрСведений.СтатусыДоставкиТоваров КАК РС
    |ГДЕ
    |    РС.Период <= &Период";
    
    Запрос.УстановитьПараметр("Период",ДатаДо);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();    
        
    Пока Выборка.Следующий() Цикл
        ДатаРаб = Выборка.Период;
        
        Пока Истина Цикл
            Попытка //На случай блокировки.
                НаборЗаписей = РегистрыСведений.СтатусыДоставкиТоваров.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Период.Установить(ДатаРаб);
                НаборЗаписей.Отбор.ЗаказНаПеремещение.Установить(Выборка.ЗаказНаПеремещение);
               // НаборЗаписей.Отбор.Период.Использование = Истина;
                НаборЗаписей.Записать(ИСТИНА);
                Для каждого стр из ТаблицаЗначений Цикл
                    ПланыОбмена.УдалитьРегистрациюИзменений(стр.Узел,НаборЗаписей);
                КонецЦикла;
                Прервать;
            Исключение
                //Можно добавить прерывание по количеству попыток    
            КонецПопытки;
        КонецЦикла;
        //Прервать;
    КонецЦикла;
12 Обработка
 
29.10.21
11:35
Вот еще:

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

    КонецЦикла;
13 Галахад
 
гуру
29.10.21
11:37
(10) Ну, как вариант.
Создать набор.
Удалить в таблице изменений.
Удалить набор.
Удалить удаление в таблице изменений. :-)
14 Ёпрст
 
29.10.21
11:50
(8) Какие измерения есть в РС ? Он периодический ?
пихать в набор надо период, если последнее
15 palpetrovich
 
29.10.21
11:51
(13) т.е. создать отсутствующую запись в РС по данным Изменений, а потом все грохнуть... вариант :)
16 Ёпрст
 
29.10.21
11:52
+
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПервоначальныеСведенияИзменения.ОсновноеСредство КАК ОсновноеСредство,
ПервоначальныеСведенияИзменения.Узел как Узел
ИЗ
    РегистрСведений.ПервоначальныеСведения.Изменения КАК ПервоначальныеСведенияИзменения
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведения КАК ПервоначальныеСведения
        ПО ПервоначальныеСведенияИзменения.ОсновноеСредство = ПервоначальныеСведения.ОсновноеСредство
ГДЕ
    ПервоначальныеСведения.ОсновноеСредство ЕСТЬ NULL

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        НаборЗаписей = РегистрыСведений.ПервоначальныеСведения.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.ОсновноеСредство.Установить(Выборка.ОсновноеСредство);
        НаборЗаписей.Прочитать();
        ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Узел, НаборЗаписей);
    КонецЦикла;
17 Ёпрст
 
29.10.21
11:53
ну и период воткнуть/регистратор, если периодический/подчинен регистратору
18 Ёпрст
 
29.10.21
11:53
(15) не надо этого денлать, всё и так оработает
19 Ёпрст
 
29.10.21
11:54
покажи картинку с конструктора запроса для таблички изменений этого регистра (все поля) и картинку Рс, какие там измерения есть
20 youalex
 
29.10.21
11:56
(14) Если основной отбор по периоду точнее
21 Ёпрст
 
29.10.21
12:04
Короче, в отбор набора пихай все поля с таблички изменений
22 palpetrovich
 
29.10.21
12:04
(19) измерение одно, рс непереодический и незавсимый
(16) не сильно отличается от (8) - разве нет?
23 Ёпрст
 
29.10.21
12:09
(22) хз для какого узла ты в (8) пытался удалять регистрацию
24 Ёпрст
 
29.10.21
12:13
Проверь (16), это 150% рабочий код
25 palpetrovich
 
29.10.21
12:18
(24) насчет узла - понял, но в принципе - такие записи надо грохнуть независимо от узла
спасибо, проверю чуть позже. конфигуратор отобрали злые дядьки :)
Ошибка? Это не ошибка, это системная функция.