1с7 Поиск и пометка на удаление зависимостей группы справочника Номенклатура
Показывать по
сообщений
- 1
- 2
08.12.2009
11:59
#1
"Данные в .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>КонецЦикла;"
08.12.2009
12:32
#2
По-моему, согласно кода у вас должен пометиться Выбранная группа и соответственно все, что в ней находится, так что получается, что все правильно.<br>В общем не ясно - а в чем вопрос?
08.12.2009
12:44
#3
"У этой группы могут иметься зависимости (например: Справочник.Единицы , какие-либо непроведённые документы и т.д.) из-за чего Операция "Удаление помеченных объектов" не захочет удалять .<br><br>P.S. Если в коде изменить на<br><br>СпрНом.Удалить(1);<br><br>то группа сразу удалиться , но неизвестно что станет с этими зависимостями."
08.12.2009
13:08
#5
"Универсально - вам уже ответили.<br>В принципе, раз вы удаляете номенклатуру, но и какие справочники зависят знаете, а следавательно можете просто перебрать. Вот только я бы изменил в таком случае ваш код так:<br>СпрНом=СоздатьОбъект("Справочник.Номенклатура");<br>СпрНом.Использоватьродителя (ВыбНоменклатура);<br>СпрНом.ВыбратьЭлементы(); <br>Пока СпрНом.ПолучитьЭлемент(0) = 1 Цикл<br> Если СпрНом.ЭтоГруппа() = 0 Тогда<br> УдалитьЗависимые (СпрНом.ТекущийЭлемент());<br> КонецЕсли;<br> Сообщить ("удаляем: " + СпрНом.Наименование);<br> СпрНом.Удалить(0);<br>КонецЦикла;"
08.12.2009
16:51
#6
"В комплексной все это делается очень просто.<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>КонецЦикла;"
09.12.2009
12:46
#7
"А как реализовать вашу процедуру<br>УдалитьЗависимые (СпрНом.ТекущийЭлемент());<br><br><br>Разместил на форме таблицу и добавил код а как обработать его не знаю:<br><br>//ТабЗнач - таблица значений в форме<br>НайтиСсылки(СпрНом.ТекущийЭлемент(),ТабЗнач);<br><br><br>Код предлеженный Thorvardr (08.12.2009 16:51) просто помечает все элементы в группе, не затрагивая сами группы"
09.12.2009
13:40
#8
"> Код предлеженный Thorvardr (08.12.2009 16:51) просто помечает все элементы в группе, не затрагивая сами группы<br>Как это не затрагивая?<br><br> Если СпрНом.ЭтоГруппа() = 0 Тогда<br>....<br> Иначе<br> СпрНом.Удалить(0); //Здесь группа и она помечается на удаление<br> КонецЕсли;"
- 1
- 2
Читают тему
(гостей: 1)