© Сорокин Б.Б. 2016 г.

Сравнение баз данных

На этой страничке хочу подробно остановится на примере основного применения функции ВПР - сравнение баз данных. Надо сказать, что мне по работе это приходится делать постоянно и вот почему.

Необходимость сравнения баз данных

К моему большому сожалению имеющиеся базы данных в составе того или иного программного обеспечения не содержат всех необходимых данных. Как правило, нужные данные разбросаны по нескольким базам не связанным друг с другом. Поэтому, если вы хотите быть готовы положительно ответить на любую фантазию начальника в плане отчетности, настоятельно рекомендую вести собственную базу данных содержащую полный набор необходимых вам данных. Для этого нужно определиться с опорной базой, (т.е. что взять за основу) и дополнительными базами, данные из которых будут добавляться в основную базу.

1. Опорная база данных.

Существует программное обеспечение для отпуска льготных рецептов. Перечень лекарственных препаратов определен приказом МЗ и СР РФ от 10.11.2011 №1340н. Это свежий перечень, до него действовал перечень определенный приказом МЗ и СР РФ № 665 с изменениями. В перечне указаны препараты по международному непатентованному наименованию (МНН), каждому из которых соответствует достаточно большое количество торговых наименований (ТН), которые отличаются производителем, лекарственной формой, дозировкой и т.д. Раз перечень определен, то на основании его в программное обеспечение заложен справочник лекарственных препаратов по торговым наименованиям, соответствующий этому перечню. Справочник достаточно обширный и на сегодняшний день составляет порядка 8000 записей. Каждая запись имеет уникальный идентификатор. Именно этот справочник определяет лекарственные препараты с которыми мы работаем, следовательно, это опорная база данных. Фрагмент справочника представлен на рисунке.

Опорная база данных

2. Дополнительные базы данных.

Кроме данных опорной базы нам необходимы:
- номер фармгруппы лекарственного препарата;
- наименование фармгруппы лекарственного препарата;
- код анатомо-терапевтической классификации;
- наименование анатомо-терапевтической классификации;
- признак лекарственного препарата отпускаемого по решению врачебной комиссии;
- признак жизненно-важного лекарственного препарата;
- цена жизненно-важного лекарственного препарата по реестру цен.

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

На начальном этапе это достаточно трудоемкий процесс, но поверьте мне, оно того стоит. Как говорил один известный персонаж "Лучше день потерять, зато потом за пять минут долететь".

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

Собственная база данных

Однако радоваться рано. Оказывается жизнь не стоит на месте, и опорная база данных постоянно пополняется новыми препаратами. Если вы не будете их добавлять в свою базу, то она очень быстро потеряет актуальность и ваши труды пропадут даром. Что делать? Периодически начинать все с начала, так не хватит никаких сил. Остается один выход надо регулярно добавлять новые препараты в свою базу. Для этого нужно знать, какие новые препараты появились в опорной базе данных, т.е. сравнить собственную базу и опорную. Вот именно это нам и поможет сделать функция ВПР.

Сравнение собственной базы данных c опорной базой данных

Итак имеем опорную базу данных, файл bd_o.xls и собственную базу данных, файл bd_s.xls. Эти базы нужно сравнить. Цель - определить, какие новые лекарственные препараты появились в опорной базе данных. В обоих базах имеется уникальный код лекарственного препарата в столбце "CodeTorg", по нему и будем сравнивать.

Для этого в опорной базе добавим столбец "Отбор" и в нем пропишем формулу:

формула

Смысл формулы состоит в том, что берется значение уникального кода из ячейки A2 опорной базы и ищется такое же значение в соответствующем столбце собственной базы. Если такое значение будет найдено, то функция его и вернет, если нет - функция вернет значение ошибки #Н/Д. Прокопируем, формулу по всем строкам основной базы, потом отсортируем основную базу по столбцу "Отбор" и получим все препараты которых нет в собственной базе данных.

Сравнение баз данных

Теперь осталось только скопировать строки с #Н/Д в собственную базу данных и привязать к ним дополнительные данные.

Копирование в свою базу данных

Делать это надо регулярно, тогда это не потребует много времени и ваша собственная база будет всегда актуальна.

Что делать если основная база данных не содержит поля с уникальным идентификатором? Такое поле необходимо обязательно создать. Лучше всего это сделать на основании данных основной базы, объединив значения полей с помощью функции СЦЕПИТЬ(). Обязательно проверить на уникальность через сводную таблицу и если будут дублирующие строки - удалить.