![]() |
![]() |
![]() |
|
Как быстрее получить список незадействованных элементов Справочника? | ☑ | ||
---|---|---|---|---|
0
ХолодныйМен
21.10.04
✎
11:36
|
Как быстрее получить список незадействованных элементов Справочника, который использован в одном из измерений некоторого регистра? Сам написал код, но что-то он мне не очень нравиться. Есть идеи (или может готовые решения)?
//Код: ТЗВсехИспользованныхСпр = СоздатьОбъект("ТаблицаЗначений"); ТЗПустыхСпр = СоздатьОбъект("ТаблицаЗначений"); ТЗПустыхСпр.НоваяКолонка("Номенклатура"); Запрос1 = СоздатьОбъект("Запрос"); ТекстЗапроса1 = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать Все; |Спр = Регистр.НужныйРегистр.Номенклатура; |Группировка Спр Без Групп; |" ; ТекстЗапроса2 = "//{{ЗАПРОС(Сформировать) |СпрНом = Справочник.Номенклатура.ТекущийЭлемент; |Группировка СпрНом упорядочить по СпрНом.Код Без Групп; |" ; Если Запрос1.Выполнить(ТекстЗапроса1) = 0 Тогда Возврат; КонецЕсли; Запрос1.Выгрузить(ТЗВсехИспользованныхСпр); Если Запрос1.Выполнить(ТекстЗапроса2) = 0 Тогда Возврат; КонецЕсли; Пока Запрос1.Группировка(1) = 1 Цикл НайденнаяСтрока = 0; Если ТЗВсехИспользованныхСпр.НайтиЗначение(Запрос1.СпрНом,НайденнаяСтрока,"Спр") = 0 Тогда ТЗПустыхСпр.НоваяСтрока(); ТЗПустыхСпр.Номенклатура = Запрос1.СпрНом; КонецЕсли; КонецЦикла; ТЗВсехИспользованныхСпр.Очистить(); |
|||
1
Последний Будда
21.10.04
✎
11:40
|
А чем найтиСссылки() не подходит?
|
|||
2
big
21.10.04
✎
11:42
|
ИМХО используй НайтиСсылки()
Инфа из ЖКК: НайтиСсылки(<?>,); Синтаксис: НайтиСсылки(<Объекты>,<Ссылки>) Назначение: Находит ссылки на объекты, переданные в списке значений. Параметры: <Объекты> - конкретное значение искомого объекта или значение типа ''СписокЗначений'', в котором данной процедуре передаются объекты, по которым надо найти ссылки. <Ссылки> - идентификатор объекта типа ''ТаблицаЗначений'', в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. объект на который ссылаются; 2. объект, который содержит ссылку; 3. комментарий к ссылке. |
|||
3
ХолодныйМен
21.10.04
✎
11:50
|
Не думаю что НайтиСсылки() - потому как необходимо найти не ссылки на объект, а все объекты на которые нет ссылок, причем нет ссылок только в определенном регистре.
|
|||
4
big
21.10.04
✎
12:15
|
Пардон - невнимательно прочитал.
Стоит ли через запрос делать обход справочника, чтобы его опять весь проити? При обычном переборе не сравнивал время работы? |
|||
5
Evgeniya
21.10.04
✎
12:23
|
Есть "Универсальная обработка: Пометка на удаление неиспользуемых объектов"
OBJDEL.ert, может она тебе подойдет |
|||
6
ХолодныйМен
21.10.04
✎
15:31
|
(5)Спасибо за предложение по использованию OBJDEL.ert, но как оказалось в ней опять же применен метод "НайтиСсылки()", что не лучшим образом сказывается на скорости поиска пустых объектов.
Протестил. Параметры тестирования: 1С SQl 21, база DBF, справочник примерно из 5000 объектов, тестовая машина: АтлонМобайл1800+/512Mb. Универсальная обработка от 23 до 26 секунд на поиск. Моя обработка от 3 до 4 секунд. Думаю не стоит говорить что варианты с "НайтиСсылки()" можно уже не предлагать. (4) Да действительно писал-писал и дописался... ведь действительно можно отказаться от второго запроса, а просто обойти справочник обычным способом. Пойду попробую... |
|||
7
ХолодныйМен
21.10.04
✎
15:37
|
(5)Боюсь показался вам, через чур груб, поэтому еще раз скажу спасибо, - вы напоминили мне что есть на дисках итс всякие интересноти, про которые я уже стал забывать, спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |