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