Удаление записи регистра накопления

1. veyrence 03.06.12 11:23 Сейчас в теме
Нужно удалить запись из регистра накопления Товары на складах, в котором значение поля Регистратор заполнено <Объект не найден>. Как правильно указать Регистратор в отборе?
В обработке пишу:

НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(<Объект не найден> (55:98180080485e404011e1981c0af3e8ae));
НаборЗаписей.Прочитать();
Запись=НаборЗаписей(0);
НаборЗаписей.Удалить(Запись);
НаборЗаписей.Записать();
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Alex_E 2364 03.06.12 12:43 Сейчас в теме
(1) veyrence, Выяснять причину таких записей нудно, хотя интересно откуда они взялись.
А очистить регистр от них можно попробовать так - Сделать Тестирование и исправление, с установленными переключателями Создавать объекты. Создадутся регистраторы - документы какого-то вида (те что являются регистраторами для нужного регистра), по этим документам можно сделать запрос и получить их список. По этому списку сделать запрос к регистру, и удалить то что нужно. Воде должно получиться.
4. sai_NT 03.06.12 13:11 Сейчас в теме
(3) Alex_E, получить список регистраторов с не найденным объектом можно и без тестирования и исправления.
kitaevay; +1 Ответить
5. Alex_E 2364 03.06.12 13:24 Сейчас в теме
(4) sai_NT, Жизнь иногда проще, чем нам кажется :-)
6. bforce 482 04.06.12 09:48 Сейчас в теме
(1) veyrence, а зачем писать код?
Тестирование и исправление. Очищать ссылки - удалять объекты. И от "битых" записей в регистре не останется и следа.

Можно перед этим сделать без исправления, чтобы посмотреть, какие объекты будут затронуты.
simuljakr; DanBlackmore; +2 1 Ответить
7. Поручик 4683 04.06.12 10:21 Сейчас в теме
wolder; bozhkov-alex; AskezaMax; Светлый ум; heavymetal; insurgut; Созинов; dreddkill; Tavalik; getup2010; +10 Ответить
2. sai_NT 03.06.12 12:02 Сейчас в теме
Для начала нужно определиться с типом регистратора (что это за документ).
После получить функцией ЗначениеВСтрокуВнутр (с переданной в нее пустой ссылкой на найденный тип документа) строку вида: {"#",13dbeddc-bc26-44b9-9e58-ce22c562e271,356:00000000000000000000000000000000}.
Далее вместо 356:00000000000000000000000000000000 вставляем 55:98180080485e404011e1981c0af3e8ae и то что получилось скармливаем функции ЗначениеИзСтрокиВнутр - это и будет ссылка на твой не найденный регистратор.
Ну а потом уже так (код удалит всез аписи по несуществующему регистратору! я так понял, что именно это и нужно):
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Установить(РегистраторСсылка); 
НаборЗаписей.Записать();
Vida; Najly; dhonid@yandex.ru; korpas; miralisssa; Vampeg; perepetulichka; AvalonE2008; teriban; +9 Ответить
15. JM_1C 09.02.24 15:56 Сейчас в теме
(2)
{"#",13dbeddc-bc26-44b9-9e58-ce22c562e271,

Что это за рандомный набор символов?
8. kitaevay 37 19.06.15 11:58 Сейчас в теме
Тестирование и исправление - это очень стрёмная идея в принципе. Эта штука сработает по всем объектам, в том числе может и где то там, где не стоило бы.

Более того - это лишнее. Можно ведь просто получить запросом эти объекты без этого и поправить их сразу.

Получается не сложный код:
	//ГлавныйУзелОбмена = ПланыОбмена.ГлавныйУзел();
	//Если ГлавныйУзелОбмена = Неопределено Тогда	Возврат; КонецЕсли;// мы в главной базе

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


PS В моём случае в узел магазина Розницы попали остатки других магазинов, из-за этого не адекватно показывались остатки этих других магазинов.
Так же зачистке мешала дата запрета редактирования. В приложенном коде закомментированы соответствующие участки кода. В случае РИБ предварительно надо было остановить продажи, выполнить обмен.

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

Процедура ВосстановитьДатыЗапрета(ТЗ) Экспорт
	НЗ = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей();
	НЗ.Загрузить(ТЗ);
	НЗ.Записать();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПоМагазину.Ссылка
	|ИЗ
	|	ПланОбмена.ПоМагазину КАК ПоМагазину
	|ГДЕ
	|	НЕ ПоМагазину.ЭтотУзел";
	РезультатУзлы = Запрос.Выполнить();
	
	Узлы = РезультатУзлы.Выгрузить().ВыгрузитьКолонку("Ссылка");
	
	ПланыОбмена.УдалитьРегистрациюИзменений(Узлы, Метаданные.РегистрыСведений.ДатыЗапретаИзменения);
КонецПроцедуры
Показать
sersuol; Anosov_EP; Pavel_Dv; korpas; krovohlebka; Vampeg; opx; markela; +8 Ответить
9. Alex_E 2364 19.06.15 15:11 Сейчас в теме
(8) kitaevay,
Тестирование и исправление - это очень стрёмная идея в принципе. Эта штука сработает по всем объектам, в том числе может и где то там, где не стоило бы.
- ТИИ, вообще то, штатный инструмент, а не стрёмная идея, и при правильном использовании даёт правильный результат. Как минимум проверить результат на копии предварительно можно всегда.
Стесняюсь спросить, какие объекты вы имели ввиду под
и где то там, где не стоило бы.
.?
14. pentanom 25 29.09.20 10:14 Сейчас в теме
(8)Ваш вариант работает, но довольно долго. Как бы ускорить этот процесс?
В моем случае есть только одна запись, которую нужно оставить. Мне бы разом удалить все записи, а потом восстановить перепроведением документов.
10. alexandrit 29.12.15 19:27 Сейчас в теме
Кто может помочь?
У нас есть центральная база и риб по магазину. При их обмене центральная база ругается:

Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Запись не верна! Не совпадает активность записей (Регистр накопления: Товары на складах; Номер строки: 2)
Чтение данных из файла обмена завершено с ошибками!

и больше не загружает документы с перефирийной базы.

Кто может нам помочь убрать эту ошибку?
11. dicus 29.01.16 12:15 Сейчас в теме
Если проблема актуальна.
Запросом вытягиваем все "битые" ссылки, и потом по одному вырезаем.

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

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

        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

          Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); 
          Набор.Отбор.Регистратор.Установить(ВыборкаДетальныеЗаписи.Регистратор); 
          Набор.Записать(); 
          ОбработкаПрерыванияПользователя(); 
 
        КонецЦикла;
Показать
Nest2008; baracuda; AlexeyPapanov; Vampeg; +4 Ответить
13. baracuda 2 28.05.19 13:19 Сейчас в теме
(11)
Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(ВыборкаДетальныеЗаписи.Регистратор); Набор.Записать(); ОбработкаПрерыванияПользователя();



Спасибо помогло,
ОбработкаПрерыванияПользователя() правда не понял, для чего тут.
12. ccserg 64 26.01.17 16:00 Сейчас в теме
актуальная проблема:
есть запись с датой , больше ничего нет
отбор по регистратору не выполняется ,
алгоритм такой же

Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Движения БСО)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот