Преобразование простого поля в справочное в таблице Интеграла

Рассмотрим такую часто встречающуюся ситуацию, когда нам нужно преобразовать обычное поле в таблице в справочное поле, чтобы мы могли выбирать его значения из списка. Допустим, у нас есть список фильмов, в которых мы хотим вынести имя режиссера в справочник.

Преобразование простого поля в справочное в таблице Интеграла

Здесь больше 20 тысяч фильмов, поэтому руками мы это не сделаем. А также иногда по каким-то причинам мы не можем перезагрузить весь справочник заново, потому что его записи связаны с другими таблицами и нам нужно их все сохранить.

Преобразование простого поля в справочное в таблице Интеграла

Первое что мы сделаем, это создадим отдельно стоящий справочник, загрузив в него все имена режиссеров. Мы идем в меню Запросы и создаем запрос Режиссеры, в который выводим только колонку режиссеров – Director.

Преобразование простого поля в справочное в таблице Интеграла

Нам нужно удалить повторяющиеся записи, поэтому мы ещё раз добавим эту колонку в запрос и применим к ней функцию COUNT – заодно посмотрим сколько фильмов здесь есть у каждого режиссера:

Преобразование простого поля в справочное в таблице Интеграла

Запустим этот отчет и посмотрим на него. Вот он такой длинный и сформировался за пару секунд.

Преобразование простого поля в справочное в таблице Интеграла

Выгрузим его в эксель и посмотрим, сколько в нём уникальных имен, открыв эксель.

Преобразование простого поля в справочное в таблице Интеграла

Здесь больше 8 тысяч имен.

Мы скопируем первую колонку – нам нужны только их имена. Затем пойдем в меню Загрузка и загрузим этот список в новую таблицу, которая будет нашим справочником: вставляем все данные в поле ввода и нажимаем Проверить.

Преобразование простого поля в справочное в таблице Интеграла

В предварительном просмотре мы видим, что имена не уникальны и вообще как-то странно обрезаны.

Преобразование простого поля в справочное в таблице Интеграла

Вероятно, загрузчик решил взять запятую в имени режиссера как разделитель. Хорошо, что мы это заметили. Идем в настройки импорта и зададим другой разделитель – ТАБ.

Преобразование простого поля в справочное в таблице Интеграла

А ещё мы назовем нашу таблицу иначе – Режиссер, потому что Director у нас в системе уже есть.

Теперь нажимаем кнопку Обновить и видим, что все имена стали нормальными:

Преобразование простого поля в справочное в таблице Интеграла

Загружаем все данные в новую таблицу – через несколько секунд всё готово.

Преобразование простого поля в справочное в таблице Интеграла

Каждый режиссер получил свой идентификатор, и мы можем увидеть его в меню Запросы. Давайте откроем запрос Режиссеры, удалим из него старые колонки и добавим новые – имя Режиссера и его идентификатор. Применим функцию Ай-Ди.

Преобразование простого поля в справочное в таблице Интеграла

Мы будем пользоваться этим запросом, чтобы узнать идентификатор режиссера по его имени, поэтому мы поставим фильтр по имени, назовем его Director и возьмем в квадратные скобки.

Обратите внимание – колонку Режиссер нужно скрыть, потому что нам нужна только одна колонка – идентификатор.

Преобразование простого поля в справочное в таблице Интеграла

Запрос как будто сломается, но это не страшно – он просто не знает пока, что такое Director.

Откроем нашу таблицу фильмов и добавим к ней новое поле Режиссер, имя которого мы будем выбирать из списка – укажем, что это будет выбор из справочника, а не просто поле ввода.

Преобразование простого поля в справочное в таблице Интеграла

Теперь в меню Запросы мы создадим новый запрос, назовем его Правка – им мы будем править данные в таблице фильмов.

Преобразование простого поля в справочное в таблице Интеграла

В этот запрос мы добавим нужные нам поля: Director и Режиссер.

Преобразование простого поля в справочное в таблице Интеграла

А ещё мы зададим в формуле поля Director имя – Director и укажем в поле SET – присвоить – название созданного нами ранее запроса Режиссеры. Также мы присвоим пустое значение полю Director – мы сразу очистим его за ненадобностью, когда перенесем имена в наше новое поле.

Преобразование простого поля в справочное в таблице Интеграла

Когда мы запустим этот запрос, то он выберет для каждого имени режиссера строку из новой таблицы запросом Режиссеры и вернет его идентификатор, который будет записан в новую колонку Режиссер - так мы создадим связь фильма с его режиссером.

Давайте его запустим.

Преобразование простого поля в справочное в таблице Интеграла

Этот запрос обработает больше 20 тысяч записей, поэтому его построение займет несколько секунд. В получившемся отчете мы видим, что поле Режиссер будет заполнено идентификатором режиссера, а старое поле будет очищено в каждой записи.

Это всё пока не выполнено, но мы можем проверить, всё ли сделано правильно. Теперь нажимаем Выполнить и немного подождем.

Преобразование простого поля в справочное в таблице Интеграла

Запрос выполнил все эти изменения и показывает нам результат – что выполнено.

Преобразование простого поля в справочное в таблице Интеграла

Теперь в таблице фильмов мы можем увидеть, что колонка режиссеров заполнена как положено, а старая колонка теперь пустая и мы можем её удалить – давайте попробуем.

Преобразование простого поля в справочное в таблице Интеграла

Как видим, поле ещё используется в отчете, который мы создали. Давайте перейдем в него прямо отсюда.

Преобразование простого поля в справочное в таблице Интеграла

Мы удалим этот запрос и тогда сможем удалить и старую ненужную колонку.

Преобразование простого поля в справочное в таблице Интеграла

Идем в таблицу фильмов и пробуем ещё раз – на этот раз колонка будет удалена.

Преобразование простого поля в справочное в таблице Интеграла

Готово – мы получили тот результат, какой хотели. Теперь мы можем переместить новую колонку или переименовать её.

Спасибо!

1 комментарий

Видео-версия статьи теперь доступна в канале конструктора Интеграл
https://www.youtube.com/watch?v=IXROoZSGWb8

1