gifts2017

Способ удаления движений документа, если сам документ удален, но по нему остались движения с битыми ссылками

Опубликовал roman roman (roman20090626) в раздел Администрирование - Системное

Способ удаления движений документа, если сам документ удален, но по нему остались движения с битыми ссылками

В случае, когда после удаления документа на него остались битые ссылки в движениях по регистрам, нужно:

1. Создать документ такого-же типа и записать его.

2. В Enterprise manager-е заменить идентификатор нового документа на идентификатор удаленного (пример скрипта можно посмотреть здесь).

4. Открыть созданный документ, при открытии появится форма создания нового документа, нужно нажать "Ок", после этого будет создан еще один новый пустой документ.

5. Открыть первый созданный документ.(Если нажать: перейти -> движения документа по регистрам, то увидим все движения удаленного документа).

6. Нужно провести документ и распровести - все движения удаляться.

7. Удалить непосредственно два созданных документа.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Gamm (Gamm) 01.07.09 17:07
Зачем такой сложный алгоритм? Берем ссылку на удаленный объект и записываем пустые наборы записей по всем регистрам.
Вот короткая процедура для очистки произвольного регистра от движений по удаленным объектам.

Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ)
МенеджерРегистра = ТипРегистра[ИмяРегистра];

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


ОбработкаПрерыванияПользователя();
Состояние(""+ТипРегистра+" "+ИмяРегистра);
КонецЦикла;
КонецПроцедуры

2. Ulcer (KapasMordorov) 01.07.09 17:07
Зачем же так сложно-то? А если база файловая?


Для Каждого МетаданныеРегистра Из Метаданные.РегистрыНакопления Цикл
ИмяРегистра = МетаданныеРегистра.Имя;
Сообщить("Регистр накопления = "+ИмяРегистра);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| "+ИмяРегистра+".Регистратор КАК Регистратор
|ИЗ
| РегистрНакопления."+ИмяРегистра+" КАК "+ИмяРегистра+"
|
|ГДЕ "+ИмяРегистра+".Период>=&ДатаНач
|
|УПОРЯДОЧИТЬ ПО
| Регистратор
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбработкаПрерыванияПользователя();
РегистраторНаименование = Строка(Выборка.Регистратор);
Если Найти(РегистраторНаименование,"<Объект не найден>")>0 Тогда
Сообщить(РегистраторНаименование);
КонецЕсли;
КонецЦикла;
КонецЦикла;
3. Ulcer (KapasMordorov) 01.07.09 17:10
уупс, не тот фрагмент вставил.

Для Каждого МетаданныеРегистра Из Метаданные.РегистрыБухгалтерии Цикл
ИмяРегистра = МетаданныеРегистра.Имя;
Сообщить("Регистр бухгалтерии = "+ИмяРегистра);
Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| "+ИмяРегистра+".Регистратор КАК Регистратор
|ИЗ
| РегистрБухгалтерии."+ИмяРегистра+" КАК "+ИмяРегистра+"
|
|ГДЕ "+ИмяРегистра+".Период>=&ДатаНач
|
|УПОРЯДОЧИТЬ ПО
| Регистратор
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбработкаПрерыванияПользователя();
Состояние(Выборка.Регистратор);
РегистраторНаименование = Строка(Выборка.Регистратор);
Если Найти(РегистраторНаименование,"<Объект не найден>")>0 Тогда
Сообщить(РегистраторНаименование);
Набор.Отбор.Регистратор.Значение = Выборка.Регистратор;
Набор.Отбор.Регистратор.Использование = Истина;
Если Удалять Тогда
Набор.Записать();
Иначе
Набор.Прочитать();
Для Каждого Проводка Из Набор Цикл
Сообщить("ДТ "+Проводка.СчетДт+" КТ"+Проводка.СчетКт+" Сумма="+Проводка.Сумма);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
tigra3111; airtau; VEkaterina; +3 Ответить
4. roman roman (roman20090626) 01.07.09 18:32
Во-первых, таким способом можно практически восстановить удаленный документ, а во-вторых это намного проще и быстрее чем писать обработину, которая будет по всем регистрам искать и удалять все записи с битыми ссылками.
5. Ulcer (KapasMordorov) 02.07.09 09:53
Серьёзно?
Вот это вот
""1. Создать документ такого-же типа и записать его.

2. В Enterprise manager-е заменить идентификатор нового документа на идентификатор удаленного (пример скрипта можно посмотреть здесь).
"" и далее по всем пп.
намного проще (С) один раз написанной обработки?
6. Олег Никоноров (nikolega) 15.11.10 18:05
А не проще ли запустить тестирование и исправление с созданием объектов?
И удаляй потом что хочешь ... Только корректно. 8-)
7. Андрей Иванов (Aydrey) 08.11.11 16:05
Большое спасибо. простой и ничего лишнего. спасибо за сэкономленное время.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа