' Name: DetectDuplicateItems '//////////////////////////////////////////// ' CopyRight By WedMC 'Скрипт поиска элементов темы, пространственно дублирующих друг-друга 'запускается нажатием на кнопку в ГИП Вида 'на событие Click этой кнопки необходимо назначить этот скрипт '//////////////////////////////////////////// 'чтобы обработать результаты работы скрипта, создайте поле идентификаторов: 'создайте поле типа Number(16,0), сделайте его активным и снимите выделение с таблицы 'в калькуляторе поля наберите строку "rec+1" 'нажмите кнопку "OK" 'итогом работы скрипта является поле "SAME_AS"("такой-же как"), содержащее в себе идентификатор дублирующего элемента 'если значение этого поля не равно 0, то данный элемент таблицы имеет дубликат с идентификатором, равным значению поля '//////////////////////////////////////////// 'НАЧАЛО ПРОГРАММЫ 'работаем с первой активной темой вида theTheme = av.GetActiveDoc.GetActiveThemes.Get(0) theFtab = theTheme.GetFtab 'начало редактирования таблицы theFtab.SetEditable(true) 'ищем поле "SAME_AS" err_fld = theFtab.FindField("SAME_AS") 'если его нет - создаем и добавляем в таблицу if (err_fld = nil) then err_fld = Field.Make("SAME_AS",#FIELD_DECIMAL,16,0) theFtab.AddFields({err_fld}) end 'определяем поле "Shape" sField = theFtab.FindField("Shape") 'определяем число строк в таблице recCou= theFtab.GetNumRecords.AsString 'инициализируем счетчик ошибок errCou = 0 'для всех записей в таблице for each rec in 0..(theFtab.GetNumRecords-1) 'рапорт о процессе работы System.BasicEcho("record #"++rec.Asstring++"of"++recCou,TRUE) 'текущий шейп sh = theFtab.ReturnValue(sField,rec) 'выборка в таблице по текущему шейпу theFTab.SelectByShapes ({sh}, #VTAB_SELTYPE_NEW) 'для всех выбранных элементов for each r in theFtab.GetSelection 'если это не он сам if (r<>rec) then 'и если такой-же как и текущий if (theFtab.ReturnValue(sField,r) = sh) then 'увеличиваем счетчик ошибок errCou = errCou+1 'заносим значение id дубликата в поле "SAME_AS" theFtab.SetValue(err_fld,r,rec+1) end end end end 'конец редактирования таблицы theFtab.SetEditable(false) 'рапорт о конце работы MsgBox.Info(errCou.AsString++"duplicated ithems found","") 'КОНЕЦ ПРОГРАММЫ