Навигация:  МОДУЛЬ "УЧЕТ УСЛУГ" > ИМПОРТ ДАННЫХ МОДУЛЯ "УЧЕТ УСЛУГ" > Общие сведения об импорте данных модуля "Учет услуг" > Конфигурации импорта >

SQL-скрипт (подготовка)

Предыдущая страницаВернуться в начало главыСледующая страница

На вкладке SQL (подготовка) (рис. 14.1.6) в окне Настройка импорта можно указать скрипт инициализации, выполнение которого подготавливает импортируемые данные в таблицах импорта к быстрой обработке и переносу в системные таблицы.

 Рисунок 14.1.6. SQL (подготовка)


Рисунок 14.1.6. SQL (подготовка)

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

Примеры применения скрипта инициализации:

·создание в таблицах импорта отдельных полей для пациентов, прикреплений и медицинских программ, куда будет прописываться признак новой записи (такие записи отсутствуют в базе данных МЕДИАЛОГ по ключам поиска), и их заполнение;

·обновление названий медицинских программ, наборов услуг и прочих справочных данных, для которых уникальным остается код, совпадающий в таблице импорта и в базе данных МЕДИАЛОГ;

·добавление новых медицинских программ, наборов услуг, типов рисков и т.п. в соответствующие справочники;

·добавление новых и обновление существующих условий страхования по медицинcким программам;

·обнуление значений ID в таблицах импорта для подготовки к следующему импорту.

При написании скрипта используется синтаксис языка SQL, в том числе поддерживается использование оператора GO.

Оператор GO всегда должен идти в отдельной строке. Оператор GO поддерживается только в скрипте инициализации.

Пример скрипта инициализации

При импорте прикреплений пациентов скриптом инициализации можно явно указать ID пациента, прописав значение в поле _PATIENTS_ID основной таблицы импорта. В этом случае система при обработке импортируемых данных не будет искать пациентов по ФИО и прочим атрибутам, а сразу использует заданный уникальный номер пациента. Таким образом, время импорта значительно сократится.

 

/* Добавляем поле "Признак существования прикрепления в базе данных МЕДИАЛОГ" в таблицу импорта. */

alter table [dbo].[IMP_INSURANSE] add IS_EXIST int

 

GO

set NOCOUNT on

declare @INSURANSE_ID int

 

exec IMP_FIND_EXIST_PAT

-------------------------ПРОЦЕДУРА. НАЧАЛО ОПИСАНИЯ-------------------------

set ANSI_NULLS on

GO

set QUOTED_IDENTIFIER on

GO

create PROCEDURE [dbo].[IMP_FIND_EXIST_PAT]

as

BEGIN

 set NOCOUNT on

/* Для ускорения импорта прикреплений проставляем безусловный PATIENTS_ID для тех записей, в которых пациент совпадает по признаку [ФИО + номер полиса] с пациентом в базе данных МЕДИАЛОГ. */

 update IMP_INSURANSE

 set PATIENTS_ID = fm_cp.PATIENTS_ID

     from IMP_INSURANSE as imp_i

          inner join PATIENTS as pat

                  on (imp_i.SURNAME = pat.NOM

                      and imp_i.FIRST_NAME = pat.PRENOM

                      and imp_i.SEC_NAME = pat.PATRONYME)

          inner join FM_CLINK_PATIENTS as fm_cp

                  on (fm_cp.PATIENTS_ID = pat.PATIENTS_ID

                      and fm_cp.POLICE = imp_i.POLICY)

/* Для каждой записи о прикреплении пациента в таблице импорта определяем новое прикрепление или нет, определяя соответствие в базе данных МЕДИАЛОГ по коду медицинской программы, полису, дате начала и дате окончания прикрепления. Проставляем признак IMP_INSURANCE.IS_EXIST = 0 для новой записи, IMP_INSURANCE.IS_EXIST = 1 для существующей. При этом учитывается договор, так как может быть случай, когда одно и тоже прикрепление, для одной и той же по коду медпрограммы присутствует в разных договорах. */

 update IMP_INSURANCE

 set IS_EXIST = case when isnull(fm_cp.FM_CLINK_PATIENTS_ID, 0) = 0

                then 0 else 1 end

     from IMP_INSURANCE as imp_i

          left join FM_CONTR as fm_cr

                                      on fm_cr.CODE = imp_i.CONTR_CODE

          left join FM_CLINK as fm_c

                         on (fm_c.CODE = imp_i.CLINK_CODE

                     and fm_c.FM_CONTR_ID = fm_cr.FM_CONTR_ID)

          left join FM_CLINK_PATIENTS as fm_cp

             on (fm_c.FM_CLINK_ID = fm_cp.FM_CLINK_ID

                                              and fm_cp.POLICE = imp_i.POLICY

                                              and fm_cp.DATE_FROM = imp_i.DATE_FRM

                                              and fm_cp.DATE_TO = imp_i.DATE_TO

                    and fm_cp.PATIENTS_ID = imp_i._PATIENTS_ID)

END

-----------------------------ПРОЦЕДУРА. КОНЕЦ ОПИСАНИЯ-------------------