Пометки сортировки и отбора в справочниках, и их влияние на структуру базы данных 1С   

Как известно, для реквизитов справочников возможно установление пометки «Сортировка» и пометки «Отбор». Пометка «Сортировка» служит для возможности использования методов НайтиПоРеквизиту() и ВыбратьЭлементыПоРеквизиту(). Пометка «Отбор» служит для возможности установления отбора или закладок отбора в форме списка справочника. Отбор может быть установлен как интерактивно пользователем, так и программно.

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