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

Новая тема
Показывать по 10 20 40 сообщений
"Данные в .dbf
Комплексная конфигурация "Бухгалтерия+Торговля+Склад+Зарплата+Кадры", редакция 4.5

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

Моя только помечает/удаляет без учёта зависимостей:


СпрНом=СоздатьОбъект("Справочник.Номенклатура");
Удал1= ВыбНоменклатура; //Реквезит диалога формы типа Справочник.Номенклатура

СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент(0) = 1 Цикл
 Если СпрНом.ТекущийЭлемент() = Удал1 Тогда

   Сообщить ("удаляем: " + СпрНом.Наименование);
   СпрНом.Удалить(0);

 КонецЕсли;
КонецЦикла;"
По-моему, согласно кода у вас должен пометиться Выбранная группа и соответственно все, что в ней находится, так что получается, что все правильно.
В общем не ясно - а в чем вопрос?
"У этой группы могут иметься зависимости (например: Справочник.Единицы , какие-либо непроведённые документы и т.д.) из-за чего Операция "Удаление помеченных объектов" не захочет удалять .

P.S. Если в коде изменить на

СпрНом.Удалить(1);

то группа сразу удалиться , но неизвестно что станет с этими зависимостями."
Системную процедуру "НайтиСсылки()" нужно использовать.
"Универсально - вам уже ответили.
В принципе, раз вы удаляете номенклатуру, но и какие справочники зависят знаете, а следавательно можете просто перебрать. Вот только я бы изменил в таком случае ваш код так:
СпрНом=СоздатьОбъект("Справочник.Номенклатура");
СпрНом.Использоватьродителя (ВыбНоменклатура);
СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент(0) = 1 Цикл
  Если СпрНом.ЭтоГруппа() = 0 Тогда
    УдалитьЗависимые (СпрНом.ТекущийЭлемент());
  КонецЕсли;
  Сообщить ("удаляем: " + СпрНом.Наименование);
  СпрНом.Удалить(0);
КонецЦикла;"
"В комплексной все это делается очень просто.
Во первых, там есть Сервис-Дополнительные возможности-Групповая обработка номенклатуры. С помощью этой штуки уже думать не надо, надо только пользоваться.
Если же хочется именно программно, то тоже за нас уже все придумали. Если посмотреть в глобальный модуль, то там мы видим глПриУдаленииЭлемента(), в которой описаны все проверки "зависимостей" и с помощью этой штуки можно реализовать то что вам надо.
Чуток модернизируем алгоритм, предложенный BelikovS и получаем рабочий код:

СпрНом=СоздатьОбъект("Справочник.Номенклатура");
СпрНом.Использоватьродителя (ВыбНоменклатура);
СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент(1) = 1 Цикл
    Сообщить ("удаляем: " + СпрНом.Наименование);    
    Если СпрНом.ЭтоГруппа() = 0 Тогда
         Если глПриУдаленииЭлемента(СпрНом.ТекущийЭлемент(), 0, 0, 0) = 1 Тогда
              СпрНом.Удалить(0);
         КонецЕсли;
    Иначе
         СпрНом.Удалить(0);
    КонецЕсли;
КонецЦикла;"
"А как реализовать вашу процедуру
УдалитьЗависимые (СпрНом.ТекущийЭлемент());


Разместил на форме таблицу и добавил код а как обработать его не знаю:

//ТабЗнач - таблица значений в форме
НайтиСсылки(СпрНом.ТекущийЭлемент(),ТабЗнач);


Код предлеженный Thorvardr (08.12.2009 16:51) просто помечает все элементы в группе, не затрагивая сами группы"
"> Код предлеженный Thorvardr (08.12.2009 16:51) просто помечает все элементы в группе, не затрагивая сами группы
Как это не затрагивая?

   Если СпрНом.ЭтоГруппа() = 0 Тогда
....
   Иначе
        СпрНом.Удалить(0);   //Здесь группа и она помечается на удаление
   КонецЕсли;"
я так и не понял, что надо сделать в задаче
Знаю. Я тоже так считаю.
Счас посмотрел и определил что был обман зрения - непометилась только сама папка "ВыбНоменклатура" а всё что внутри - помечает.
Читают тему
(гостей: 1)

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