Имя: Пароль:
1C
1С v8
Удалить элемент регистра накоплений
,
0 AlkisTer
 
05.02.14
15:45
Появилась проблема, говорю обобщенно:

У нас своя программа по обменам РИБ из подчинённой базы справочник(помещения) выгрузился в центральную базу, а потом ошибочно выгрузился в другую подчинённую базу, хотя не должен был (косяк разработчиков).

Ладно бы один только справочник выгрузился, ещё выгрузился ещё и регистр накопления(инвентарь помещения), но выгрузился с ошибкой в результате он выглядит так:

Дата/<Объект не найден>() (Регистратор)/ и далее какой, сколько и где инвентаря стоит.

Проблема в том, что списать его не получается. Удалить тоже, так как при попытке зайти, открывается форма создания Регистра Накопления.

Каким образом можно удалить Регистр Накоплений?
1 Maxus43
 
05.02.14
15:47
запросом получи регистратор этой записи
создай набор записей
навесь на него отбор на регистратор из запроса
запиши пустой набор записей
2 Wobland
 
05.02.14
15:48
у таких регистраторов дата, к примеру, будет нулл
3 Wobland
 
05.02.14
15:49
и пофих, что элементов у регистров не бывает даже в пьяном угаре
4 AlkisTer
 
05.02.14
15:53
(1) Мне это почти не о чём не говорит. Общий смысл я понял, но практической реализации я даже не представляю
5 Maxus43
 
05.02.14
15:53
(3) не скажи, в пьяном угаре и не такое бывает
6 Maxus43
 
05.02.14
15:53
регистр подчинён регистратору я так понял?
7 Wobland
 
05.02.14
15:54
(4) покажи (1) программисту, он сделает
(5) не наливай больше регистрам ;)
8 Wobland
 
05.02.14
15:55
(6) у тебя пьяные регистры накопления отвергают своих регистраторов?
9 Maxus43
 
05.02.14
15:55
вот запрос

ВЫБРАТЬ
    БракВПроизводстве.Регистратор
ИЗ
    РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
ГДЕ
    БракВПроизводстве.Регистратор.Ссылка ЕСТЬ NULL
10 Maxus43
 
05.02.14
15:56
вот код...
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка.Следующий();
РН = РегистрыНакопления.МойРН.СоздатьНаборЗаписей();
РН.ОТбор.Регистратор.Усатновить(Выборка.Регистартор);
РН.Записать();
11 Wobland
 
05.02.14
15:58
(10) повторять, пока не закончатся регистраторы?
12 AlkisTer
 
05.02.14
15:59
Для начала нужно определиться с типом регистратора (что это за документ).
После получить функцией ЗначениеВСтрокуВнутр (с переданной в нее пустой ссылкой на найденный тип документа) строку вида: {"#",13dbeddc-bc26-44b9-9e58-ce22c562e271,356:00000000000000000000000000000000}.
Далее вместо 356:00000000000000000000000000000000 вставляем 55:98180080485e404011e1981c0af3e8ae и то что получилось скармливаем функции ЗначениеИзСтрокиВнутр - это и будет ссылка на твой не найденный регистратор.
Ну а потом уже так (код удалит всез аписи по несуществующему регистратору! я так понял, что именно это и нужно):
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистраторСсылка);
НаборЗаписей.Записать();

Такую фигню я тоже нашёл. Крайне тупой вопрос, где этот код исполнять? Внешняя обработка или что?
13 Maxus43
 
05.02.14
16:00
(12)>>Такую фигню я тоже нашёл
правильно, это фигня
14 grayshadow
 
05.02.14
16:00
тестирование и исправление, ***ть!:)
15 AlkisTer
 
05.02.14
16:00
(7) Если бы я мог, думаешь я бы писал сюда? :)
16 Maxus43
 
05.02.14
16:01
(11) а то, за циклы и т.д. надо уже деньги брать
17 User_Agronom
 
05.02.14
16:02
(14) Это слишком просто!
18 Wobland
 
05.02.14
16:02
(15) ну тогда включай режим разума и перечитывай Максуса43, пока не дойдёт
19 AlkisTer
 
05.02.14
16:02
(14) Она выдает "ошибка в регистре" или что-то подобнее и проходить дальше. Если ты про проверку ссылочной целостности.
20 grayshadow
 
05.02.14
16:05
(19) а ты поставил удалять объекты с битыми данными? (перед этим сделай бэкап!!!)
21 Wobland
 
05.02.14
16:05
(19) а что ещё она умеет?
22 Maxus43
 
05.02.14
16:07
тут нужен точечный удар по базе боевиков, а вы предлагаете всю страну в расход
23 grayshadow
 
05.02.14
16:11
а зачем битые объекты в базе держать? учитывая, что они не имеют отношения к БУ
24 AlkisTer
 
05.02.14
16:12
(22) Я правильно понимаю, что мне надо исправить на объект моей базы?
25 Maxus43
 
05.02.14
16:18
(23) не вижу корреляции между битой ссылкой и видом учета БУ...
(24) естественно. Делай всё на тестовой базе, если на рабочей - сначала без Записать();, убедись что удалять будет то что надо
26 AlkisTer
 
05.02.14
16:23
(25) Понятно, что на тестовой. Ок, попробую.
27 AlkisTer
 
05.02.14
17:07
Проблема всё-таки решается Тестированием и Исправлением объектов. Буду делать так.