|
Как известно, для реквизитов справочников возможно установление пометки «Сортировка» и пометки «Отбор». Пометка «Сортировка» служит для возможности использования методов НайтиПоРеквизиту() и ВыбратьЭлементыПоРеквизиту(). Пометка «Отбор» служит для возможности установления отбора или закладок отбора в форме списка справочника. Отбор может быть установлен как интерактивно пользователем, так и программно.
Сейчас мы рассмотрим, как эти пометки влияют на структуру базы данных. Для этого мы будем смотреть файл 1cv7.dd (1cv7.dds для SQL-версии). В моей тестовой конфигурации в справочнике товаров есть реквизит «ТипВина» с установленной отметкой «Сортировка». Находим в анализируемом файле справочник товаров:
#==TABLE no 75 : Справочник Товары
Далее находим нужный реквизит:
#-----Fields------- # Name |Descr |Type|Length|Precision … F=SP1812 |(P)ТипВина |C |9 |0
Смотрим дальше и находим индексы по данному реквизиту:
#----Indexes------ # Name |Descr |Unique|Indexed fields |Type … I=VI1812 |VI1812 |1 |SP1812,ROW_ID |0 I=VIP1812 |VIP1812 |1 |PARENTID,ISFOLDER,SP1812,ROW_ID |0
Как мы видим 1С создала 2 индекса. Первый (VI182) – для выбора и поиска элементов по реквизиту без учета иерархии, второй (VIP1812) для выбора и поиска элементов по реквизиту с учетом иерархии (с возможностью фильтра по родителю).
Теперь посмотрим, что изменится, если установить пометку отбора.
I=VI1812 |VI1812 |1 |SP1812,DESCR,ROW_ID |0 I=VIP1812 |VIP1812 |1 |PARENTID,ISFOLDER,SP1812,DESCR,ROW_ID |0
Как можно увидеть – названия индексов остались теми же, но теперь в каждый индекс включается наименование. Это по-видимому сделано для возможности быстрого поиска в форме списка справочника, потому что отобранные элементы справочника будут сразу упорядочены по наименованию.
Кроме того, можно сделать следующий вывод – установка пометки «Отбор» для реквизита справочника – влечет за собой резкое увеличение объема индекса из-за включения в индекс наименования (так как обычно наименование имеет большой размер). Для баз SQL это не очень критично, а для баз в формате DBF – это может оказаться критичным.
Так что отсюда мораль – пометки «Сортировка» и тем более «Отбор» можно ставить только при явной в них необходимости.
Для упрощения работы и отслеживания всех пометок отбора и сортировкой можно воспользоваться обработкой. Текст обработки представлен ниже:
//Анализ сортировки и отбора реквизитов справочников.
//(с) www.perlscript.ru
Процедура Сформировать() Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Заголовок"); ВсегоСортировок=0; ВсегоОтборов=0; Для НомСпр=1 по Метаданные.Справочник() Цикл ТекСправочник=Метаданные.Справочник(НомСпр); Колво=0; Для НомРекв=1 по ТекСправочник.Реквизит() Цикл ТекРеквизит=ТекСправочник.Реквизит(НомРекв); Если (ТекРеквизит.Сортировка=1) Или (ТекРеквизит.Отбор=1) Тогда Колво=Колво+1; Если Колво=1 Тогда Таб.ВывестиСекцию("Справочник"); КонецЕсли; Таб.ВывестиСекцию("Реквизит"); ВсегоСортировок=ВсегоСортировок+ТекРеквизит.Сортировка; ВсегоОтборов=ВсегоОтборов+ТекРеквизит.Отбор; КонецЕсли; КонецЦикла; КонецЦикла; Таб.ВывестиСекцию("Итого"); Таб.ПовторятьПриПечатиСтроки(3,3); Таб.Опции(0,0,3,0); Таб.ТолькоПросмотр(1); Таб.Показать(); КонецПроцедуры
Эта обработка доступна в разделе "Скачать".
Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").
|