Перечисления vis Справочники

Анализировал типовую конфигурацию УТ 11.4.6.188.

В ней 563 перечисления и 340 справочника.

Подыму тему, которую раньше не обсуждали — зачем в конфигурации нужны перечисления?

Ведь часто списки значений могут быть расширены и перечисление может превратиться в справочник.

Помимо этого, справочник проще параметризировать, т.е. указать для значений справочника опции, признаки.

Единственная причина, на мой взгляд, почему существуют перечисления, это то, что они не хранятся в базе данных.

Конечно, база данных из 340 справочников и 1000 справочников — немного разные базы. Особенно файловая база данных может и «устать» от такого количества справочников. Хотя тоже не факт, потому что места они много не занимают, а код оперирует ссылками.

Единственное место, где возможно замедление — это поиск ссылок на объект. Но там тоже анализируются реквизиты, то есть места, где может быть значение искомого типа.

Поэтому у меня есть большой соблазн в разработке F³ отказаться от перечислений в пользу простоты кода. Ну может быть за редким исключением технических перечислений, не описывающих реальную жизнь, а использующихся сугубо внутри конфигурации, например перечисление Булево. Хотя может и не откажусь, надо подумать.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 24

  1. rzd:

    Ты точно знаешь платформу, на которой решил «убивать» типовые?

    Перечисления
    Для каждого перечисления создается таблица (_Enum) с полями:

    _ID — идентификатор элемента перечисления;
    _EnumOrder — числовое значение элемента перечисления.

  2. иzи:

    А где перечисления могут храниться?

    • они не хранятся.

      • иzи:

        Ну тут можно за базу поговорить. У нас есть что-то статическое и динамическое. Статическое — это в коде. Динамическое либо в памяти (и исчезнут, когда процесс закончится), либо на жестком диске (пока живет файл).
        Сценарий. Я создаю в конфигураторе 10 перечислений, сохраняю их и перезапускаю конфигуратор. И вижу все мои 10 перечислений. Вопрос — где они хранятся?

  3. Alexchu:

    Ну, в среднем у перечисления 10-20 значений. Это в БД 5000-10000 записей. Для СУБД типа MS sql или postgre это совсем не очень большой об,ем. По-моему, перечисления- излишняя сущность…

  4. иzи:

    «в метаданных»
    А они где хранятся? В другой БД? В XML или каком-то другом файле?

    • в памяти сервера, там же, где загружается весь код.
      туда он попадает из конфигурации базы данных.

      • иzи:

        Ну в БД получается. Получается и перечисления, и справочники хранятся в БД. Потом когда запускается программа, то что-то загружается сразу в память (все перечисления), что-то только при необходимости (нужный для select или join справочник).
        Тогда что плохого в хранении перечислений в БД? Они простые, изменить их может только программист, соотв-но заморочек на частое перестроение индексов нет. Да даже с lazy загрузкой так делают и не просто БД, а через отдельный serverless сервис.

        • в УТ это 500 лишних таблиц для базы данных. Просто потому, что программистам 1С было лень нормально сделать перечисления.
          сделали бы хотя бы одну таблицу тогда уже.

  5. rzd:

    «аргументы будут» — аргументы были. Ты все пропустил. Конкретно ты не знаешь что под перечисления выделяются таблицы.

    • это лишнее, таблицы для перечислений ненужны. это ненужная нагрузка на базу.

      • rzd:

        Тем не менее факт, что ее знаешь остается. По таблице перечисления кстати можно делать запрос

        • какой вопрос? Для 1сника гланое не знать, а знать где узнать, если что.

          • rzd:

            А не было вопроса. Была констатация факта. Ты утверждал заведомо ложные данные. Если не знал, то зачем пишешь о том, что даже проверить или прочитать не смог?

          • ого. вы не юрист ли случаем?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *