1с7 Поиск и пометка на удаление зависимостей группы справочника Номенклатура

Новая тема
Показывать по сообщений
"Данные в .dbf<br>Комплексная конфигурация "Бухгалтерия+Торговля+Склад+Зарплата+Кадры", редакция 4.5<br><br>Помогите, пожалуйста, создать внешнюю обработку поиска зависимостей выбранной группы справочника Номенклатуры и их помечания на удаление.<br><br>Моя только помечает/удаляет без учёта зависимостей:<br><br><br>СпрНом=СоздатьОбъект("Справочник.Номенклатура");<br>Удал1= ВыбНоменклатура; //Реквезит диалога формы типа Справочник.Номенклатура<br><br>СпрНом.ВыбратьЭлементы(); <br>Пока СпрНом.ПолучитьЭлемент(0) = 1 Цикл<br>  Если СпрНом.ТекущийЭлемент() = Удал1 Тогда <br><br>    Сообщить ("удаляем: " + СпрНом.Наименование);<br>    СпрНом.Удалить(0);<br><br>  КонецЕсли;<br>КонецЦикла;"
По-моему, согласно кода у вас должен пометиться Выбранная группа и соответственно все, что в ней находится, так что получается, что все правильно.<br>В общем не ясно - а в чем вопрос?
"У этой группы могут иметься зависимости (например: Справочник.Единицы , какие-либо непроведённые документы и т.д.) из-за чего Операция "Удаление помеченных объектов" не захочет удалять .<br><br>P.S. Если в коде изменить на<br><br>СпрНом.Удалить(1);<br><br>то группа сразу удалиться , но неизвестно что станет с этими зависимостями."
Системную процедуру "НайтиСсылки()" нужно использовать.
"Универсально - вам уже ответили.<br>В принципе, раз вы удаляете номенклатуру, но и какие справочники зависят знаете, а следавательно можете просто перебрать. Вот только я бы изменил в таком случае ваш код так:<br>СпрНом=СоздатьОбъект("Справочник.Номенклатура");<br>СпрНом.Использоватьродителя (ВыбНоменклатура);<br>СпрНом.ВыбратьЭлементы(); <br>Пока СпрНом.ПолучитьЭлемент(0) = 1 Цикл<br>   Если СпрНом.ЭтоГруппа() = 0 Тогда<br>     УдалитьЗависимые (СпрНом.ТекущийЭлемент());<br>   КонецЕсли;<br>   Сообщить ("удаляем: " + СпрНом.Наименование);<br>   СпрНом.Удалить(0);<br>КонецЦикла;"
"В комплексной все это делается очень просто.<br>Во первых, там есть Сервис-Дополнительные возможности-Групповая обработка номенклатуры. С помощью этой штуки уже думать не надо, надо только пользоваться.<br>Если же хочется именно программно, то тоже за нас уже все придумали. Если посмотреть в глобальный модуль, то там мы видим глПриУдаленииЭлемента(), в которой описаны все проверки "зависимостей" и с помощью этой штуки можно реализовать то что вам надо.<br>Чуток модернизируем алгоритм, предложенный BelikovS и получаем рабочий код:<br><br>СпрНом=СоздатьОбъект("Справочник.Номенклатура");<br>СпрНом.Использоватьродителя (ВыбНоменклатура);<br>СпрНом.ВыбратьЭлементы(); <br>Пока СпрНом.ПолучитьЭлемент(1) = 1 Цикл<br>     Сообщить ("удаляем: " + СпрНом.Наименование);     <br>     Если СпрНом.ЭтоГруппа() = 0 Тогда<br>          Если глПриУдаленииЭлемента(СпрНом.ТекущийЭлемент(), 0, 0, 0) = 1 Тогда<br>               СпрНом.Удалить(0);<br>          КонецЕсли;<br>     Иначе<br>          СпрНом.Удалить(0);<br>     КонецЕсли;<br>КонецЦикла;"
"А как реализовать вашу процедуру<br>УдалитьЗависимые (СпрНом.ТекущийЭлемент());<br><br><br>Разместил на форме таблицу и добавил код а как обработать его не знаю:<br><br>//ТабЗнач - таблица значений в форме<br>НайтиСсылки(СпрНом.ТекущийЭлемент(),ТабЗнач);<br><br><br>Код предлеженный Thorvardr (08.12.2009 16:51) просто помечает все элементы в группе, не затрагивая сами группы"
"> Код предлеженный Thorvardr (08.12.2009 16:51) просто помечает все элементы в группе, не затрагивая сами группы<br>Как это не затрагивая?<br><br>    Если СпрНом.ЭтоГруппа() = 0 Тогда<br>....<br>    Иначе<br>         СпрНом.Удалить(0);   //Здесь группа и она помечается на удаление<br>    КонецЕсли;"
я так и не понял, что надо сделать в задаче
Знаю. Я тоже так считаю.<br>Счас посмотрел и определил что был обман зрения - непометилась только сама папка "ВыбНоменклатура" а всё что внутри - помечает.
Читают тему
(гостей: 1)

Быстрый переход