Каталог решений - Формирование отчетов по обязательному медицинскому страхованию на СКД. Написание запроса по ОМС. Вычисление кода региона субъекта РФ в запросе.

Формирование отчетов по обязательному медицинскому страхованию на СКД. Написание запроса по ОМС. Вычисление кода региона субъекта РФ в запросе.

Формирование отчетов по обязательному медицинскому страхованию на СКД. Написание запроса по ОМС. Вычисление кода региона субъекта РФ в запросе.

В наличии

В данной статье рассматриваются основные этапы построения запроса, который позволял бы формировать два вида отчета по ОМС:
1) отчет по принятым в организацию сотрудникам, подлежащим ОМС и
2) отчет по уволенным сотрудникам, подлежащим исключению из числа ОМС.

Прилагаемый файл — настройка для типовой обработки "Консоль отчетов" типовой конфигурации "1С:ЗиУП."

Категория:

Описание

*ОМС – обязательное медицинское страхование

Благодарности:

— Р.С.В.

— Armando //sale.itcity.ru/profile/16019/

 

Постановка задачи.

Разработать запрос, который бы позволял формировать 2 вида отчета: 

1)                 отчет  по принятым сотрудникам, подлежащим ОМС; причем должно учитываться 2 момента:

1.2)            в отчет  по принятым сотрудникам, подлежащим ОМС, не должны попадать сотрудники, уволенные в периоде формирования отчета;

1.2) в отчет  по принятым сотрудникам, подлежащим ОМС, не должны попадать сотрудники, имеющие на дату отчета действующие полисы ОМС;

2)                 отчет  по уволенным сотрудникам, подлежащим исключению из числа ОМС.

 

Отчет должен иметь следующие настройки:

1)      даты «С» и «ПО» формирования отчета;

2)      «организация» – по какому юр. лицу будет формироваться отчет;

3)      «ПарамИсключениеПоПрописке» — если этот параметр равен строке ”Ростов”, то в отчет не должны попадать сотрудники, которые прописаны в Ростове.

4)      «ПринятыеУволенные» — текстовый параметр, который может принимать значения «Принятые» или «Уволенные», в зависимости от этого параметра строится либо отчет по принятым, либо по уволенным.

 Ключевые прикладные объекты метаданных, таблицы которых будут участвовать в запросе:

1)      регистр сведений РаботникиОрганизаций (с недавних пор у него синоним «Кадровая история сотрудников (по юрлицам)»).

2)      справочник «МедицинскиеСтраховыеПолисы»

3)      регистр сведений  ФИОФизЛиц, а точнее виртуальную таблицу «ФИОФизЛицСрезПоследних» – без нее не обходится ни один запрос и ни одна печатная форма, формируемые для кадров. Частенько даже опытные специалисты под полем «ФИО» подразумевают «Сотрудник.Наименование», что не правильно (некоторым просто лень добавить еще одну таблицу в запрос). В больших организациях это может обернуться конфузами в случаях, когда сотрудницы выходят замуж и меняют фамилию, а потом разводятся и снова меняют фамилию, а потом снова выходят и т.д. Обязательно стоит задавать параметры виртуальной таблицы, например, так:

РегистрСведений.ФИОФизЛиц.СрезПоследних( &ПарамКонПериода,  ФизЛицо В

                                                                              (ВЫБРАТЬ ВТ.Физлицо

                                                                              ИЗ ВТ_ПринятыеУволенныеЗаПериод КАК ВТ))

КАК ФИОФизЛицСрезПоследних

В идеале, если параметры заданы по всем измерениям виртуальной таблицы.

 

4)      справочник  ФизическиеЛица. Многие специалисты получают, например, дату рождения физ лица так: «Штатники.Сотрудник.ФизЛицо.ДатаРождения», что сильно проигрывает в производительности правильному варианту: «ФизЛицо.ДатаРождения». Т.е. три точки и более в получении поля – это бэдово. Причем, для клиент серверного варианта такой запрос может вызвать ошибку выполнения, если количество точек более 4 (точно не помню).  Лучше левом соединением присоединять нужную таблицу, а уж из нее получать необходимые поля. 

5)      виртуальная таблица регистра сведений ГражданствоФизЛицСрезПоследних – получим гражданство. Не забудем указать параметры виртуальной таблицы, например, так:

РегистрСведений.ГражданствоФизЛиц.СрезПоследних( &ПарамКонПериода, ФизЛицо В

                                                      (ВЫБРАТЬ ВТ.Физлицо

                                                      ИЗ ВТ_ПринятыеУволенныеЗаПериод КАК ВТ))

 КАК ГражданствоФизЛицСрезПоследних

6)      виртуальная таблица регистра сведений ПаспортныеДанныеФизЛицСрезПоследних – получим серию и номер паспорта гражданина РФ. Не забудем указать параметры виртуальной таблицы.

7)      реальная таблица «КонтактнаяИнформация» — получим юридический адрес физ. лица. При этом лучше переименовать таблицу «КонтактнаяИнформация» в «КонтактнаяИнформация_ЮрАдресФизЛица». Мне категорически не нравится когда,  многие прославленные специалисты переименовывают таблицы, давая им следующие имена «ФЛнеУ5» или «ЗТХ_4» или «КрупныеКлиенты». Нужно обязательно сохранять в названии таблицы «подсказку» — откуда она берется. На закладке «Связи» эту таблиц можно присоединить например так:

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация_ЮрАдресФизЛица

                ПО ВТ_ПринятыеУволенныеЗаПериод.Физлицо = КонтактнаяИнформация_ЮрАдресФизЛица.Объект

                               И (КонтактнаяИнформация_ЮрАдресФизЛица.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресФизЛица))

8)      прочие таблицы, необходимые для получения полей отчета.

 

 

Основная идея построения запроса, структура пакетов

 

1 пакет запрос. Закладка «Дополнительно», создание временной таблицы ВТ_ПринятыеУволенныеЗаПериод

Основная сложность заключается в том, что нужно одним запросом, не собирая его через текстовые куски, описать получение полей для 2 разных отчетов: по принятым и уволенным. 

Для реализации подобно функционала в первом пакете получим записи реальной таблицы РС «РаботникиОрганизация», и в зависимости от входного значения «ПринятыеУволенные» будем получать записи за период только принятых или только уволенных сотрудников.

1 пакет нам понадобится для написания  во 2 пакете конструкций вида:

ФизЛицо В

                (ВЫБРАТЬ

                                ВТ.Физлицо

                ИЗ

                                ВТ_ПринятыеУволенныеЗаПериод КАК ВТ)

 

Таблица:

— РС РаботникиОрганизаций

Поля:      

— РаботникиОрганизаций.Сотрудник

— РаботникиОрганизаций.Сотрудник.ФизЛицо (это поле нужно проиндексировать)

— РаботникиОрганизаций.Регистратор               

Условия:

1) ограничение на период

ВЫБОР
 КОГДА &ПринятыеУволенные = «Принятые»
  ТОГДА РаботникиОрганизаций.Период МЕЖДУ &ПарамНачПериода И &ПарамКонПериода
 КОГДА &ПринятыеУволенные = «Уволенные»
  ТОГДА ДОБАВИТЬКДАТЕ(РаботникиОрганизаций.Период, ДЕНЬ, -1) МЕЖДУ &ПарамНачПериода И &ПарамКонПериода
КОНЕЦ

2) отбор по организации

РаботникиОрганизаций.Организация = &ПарамОрганизация

3) отбор штатников:

РаботникиОрганизаций.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор) И

РаботникиОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)

4) когда формируем списки принятых сотрудников, учтем, что сотрудник может быть принят по срочному договору, и что дата окончания договора может быть ранее, чем дата конца формирования отчета; когда формируем списки уволенных сотрудников это безразлично

ВЫБОР

                КОГДА &ПринятыеУволенные = «Принятые»

                                ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)

                                                               И ВЫБОР

                                                                              КОГДА РаботникиОрганизаций.ПериодЗавершения МЕЖДУ &ПарамНачПериода И &ПарамКонПериода

                                                                                                             И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

                                                                                              ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения

                                                                              ИНАЧЕ РаботникиОрганизаций.ПричинаИзмененияСостояния

                                                               КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)

                КОГДА &ПринятыеУволенные = «Уволенные»

                                ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)

КОНЕЦ

5) когда формируем списки принятых сотрудников, учтем, что принятый сотрудник может быть уволен в том же  интервале, за который формируют отчет, поэтому нужно проверять чтобы принятый сотрудник не попал в списки уволенных за этот же временной интервал; когда формируем списки уволенных сотрудников это безразлично

ВЫБОР
 КОГДА &ПринятыеУволенные = «Принятые»
  ТОГДА (НЕ РаботникиОрганизаций.Сотрудник В
     (ВЫБРАТЬ
      РаботникиОрганизаций.Сотрудник КАК Сотрудник
     ИЗ
      РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
     ГДЕ
      ДОБАВИТЬКДАТЕ(РаботникиОрганизаций.Период, ДЕНЬ, -1) МЕЖДУ &ПарамНачПериода И &ПарамКонПериода
      И РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
      И РаботникиОрганизаций.Организация = &ПарамОрганизация
      И РаботникиОрганизаций.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
      И РаботникиОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)))
 КОГДА &ПринятыеУволенные = «Уволенные»
  ТОГДА ИСТИНА
КОНЕЦ

2 пакет запрос. Закладка «Дополнительно», создание временной таблицы ВТ_Результат

В этом пакете мы к временной таблице ВТ_ПринятыеУволенныеЗаПериод левым соединением будет нанизывать таблицы ФИОФизЛицСрезПоследних, МедицинскиеСтраховыеПолисы, ПаспортныеДанныеФизЛицСрезПоследних и др.

На закладке «Условия» для решения задачи о том, что в отчет не должны попадать сотрудники, которые прописаны, например, в Ростове,  напишем:

 (НЕ ЕСТЬNULL(КонтактнаяИнформация_ЮрАдресФизЛица.Представление, «адрес прописки не указан») ПОДОБНО  & ПарамИсключениеПоПрописке)

 

Так как в отчет  по принятым сотрудникам, подлежащим ОМС, не должны попадать сотрудники, имеющие на дату отчета действующие полисы ОМС, то на закладке «Условия» напишем:

ВЫБОР

                КОГДА &ПринятыеУволенные = «Уволенные»

                                ТОГДА ИСТИНА

                КОГДА &ПринятыеУволенные = «Принятые»

                                ТОГДА ВЫБОР

                                                                КОГДА МедицинскиеСтраховыеПолисы.ДатаОкончанияПолиса > &ПарамКонПериода

                                                                              ТОГДА ЛОЖЬ

                                                               ИНАЧЕ ИСТИНА

                                               КОНЕЦ

КОНЕЦ

 

3 пакет запрос.

Этот пакет в принципе не нужен. Тут ничего не вычисляем и не соединяем. Мы просто выбираем временную таблицу «ВТ_Результат» из 2 пакета и все ее поля. Но все же этот пакет удобен на для отладки. Например, хотим мы посмотреть, что получается в результате выполнения 1 пакета – удаляем из таблиц «ВТ_Результат», выбираем временную таблицу «ВТ_ПринятыеУволенныеЗаПериод» и все ее поля. Все – готово.

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

 

История изменений:

07.06.2010 — текст запроса был изменен после рекомендаций Armando, более доходчиво написано для чего нужет 1 пакет-запрос.

08.06.2010 — в первом пакете измен текст условия на периоды

has been added to your cart:
Оформление заказа