Как известно, для реквизитов справочников возможно установление пометки «Сортировка » и пометки «Отбор ». Пометка «Сортировка » служит для возможности использования методов НайтиПоРеквизиту () и ВыбратьЭлементыПоРеквизиту () . Пометка «Отбор » служит для возможности установления отбора или закладок отбора в форме списка справочника. Отбор может быть установлен как интерактивно пользователем, так и программно.
Сейчас мы рассмотрим, как эти пометки влияют на структуру базы данных. Для этого мы будем смотреть файл 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 возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").
|