Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 14:52

Документ ссылается сам на себя?..

Автор Leviathan, 28 сен 2011, 21:56

0 Пользователей и 1 гость просматривают эту тему.

Leviathan

Всем привет!

Пытаюсь в обработке удалять объекты. Столкнулся с непонятным - документы (например, РеализацияТоваровУслуг) ссылаются сами на себя. То есть вызываю НайтиПоСсылкам, и получаю НайтиПоСсылкам.Количество()=1.

При этом на инфостарте например есть обработка "УдалениеПомеченныхОбъектов82", где реализовано именно так:
         МассивКУдалению.Добавить(стр.ссылка);
         Если НайтиПоСсылкам(МассивКУдалению).Количество() = 0 тогда
            Сообщить(стр.ссылка);
            стр.ссылка.ПолучитьОбъект().Удалить();
            КолУд = КолУд + 1;
         КонецЕсли;

И вроде все довольны, все работает. В чем же дело?..

has

В итоге находит одну ссылку на этот эе объект? Покажи код.

Leviathan

Примерно так:


КолУд = 0;
Для i = 0 по МассивКУдалению.Количество()-1 Цикл
Объект = МассивКУдалению[i];
Мас = Новый Массив();
Мас.Добавить(Объект);
Если НайтиПоСсылкам(Мас).Количество() = 0 тогда
Сообщить("   ссылок нет, удаляем");
Объект.ПолучитьОбъект().Удалить();
КолУд = КолУд + 1;
Иначе
Сообщить("   УДАЛИТЬ НЕЛЬЗЯ!");
КонецЕсли;
КонецЦикла;

has

Ну и че содержится в таблице значений, которую возвращает метод НайтиПоСсылкам()?

Leviathan

Ссылка на этот же самый документ! Реализация товаров и услуг такая-то.
Да и собственно, если в интерфейсе открыть сам документ и посмотреть его структуру подчиненности - там опять же в окошке одна ссылка - на этот же самый документ!

Если что, версия 8.2 , 2.0.

AntonB

А если найти такой документ и попробовать его удалить обычной обработкой удаления - удалит?
У меня тоже сам документ присутствует в этом списке, но это ничуть не мешает его удалить.
Более того - при удалении пишет, например, что на объект найдено 4 ссылки, из них
Удаляемых: 4  Неудаляемых: 0
При этом ставит зеленую галочку - что готов удалить
Предлагаю полный ИТ сервис небольшой организации в Москве (приходящий сисадмин+1С7.7,1С8.x)

Leviathan

Да, обычной обработкой удалит.
Мне просто странно, что условие НайтиПоСсылкам.Количество()=0 не является достаточной проверкой допустимости/не допустимости удаления. Придется еще дописывать что ссылка должна быть не равна самой себе...

Ну ладно, все понятно, всем спасибо!

AntonB

Думаю, в стандартной обработке удаления логика более сложная.
Видимо, ссылки на объект более сложно анализируются, причем, скорее всего, рекуррентно.
И какие-то объекты удаляются по ссылкам вместе с удаляемым объектом.
Предлагаю полный ИТ сервис небольшой организации в Москве (приходящий сисадмин+1С7.7,1С8.x)

Leviathan

В стандартной обработке - да, сложнее. Там задумка такая - можно удалить, если все ссылки тоже помечены на удаление. И тогда, когда мы нажимаем "Удалить", 1С блокирует базу и не отпускает ее, пока все не сотрет.

Это эффективно по скорости, но не всегда приемлимо - мне нужно удалить более 500 тысяч объектов, поэтому решил удалять их в фоновом режиме без блокировки. Одна из обработок, которая так умеет, вот: http://infostart.ru/public/74177/
Оттуда я и стырил логику, а она глючная, судя по всему :-D

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск