Загрузка данных
Результат = Новый Структура;
Результат.Вставить("Ссылка");
Результат.Вставить("СтруктурноеПодразделение");
Результат.Вставить("СтруктурноеПодразделениеOID");
Результат.Вставить("Должность");
Результат.Вставить("Специальность");
Результат = ЭМД_Сотрудник_НовыйМеханизм(ДокументСсылка);
Если Результат.Ссылка = Неопределено Тогда
Результат = ЭМД_Сотрудник_СтарыйМеханизм(ДокументСсылка);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЭМД_Сотрудник_НовыйМеханизм(ДокументСсылка)
Перем Выборка, Запрос, ОшибкаЗаполнения, РезультатЗапроса, ТекстОшибкаЗаполнения;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| _ИМЦ_СЭМД_Врачи.Ссылка КАК Ссылка,
| _ИМЦ_СЭМД_Врачи.ПодразделениеФРМО КАК СтруктурноеПодразделение,
| _ИМЦ_СЭМД_Врачи.ПодразделениеФРМО.КодМинздрава КАК СтруктурноеПодразделениеOID,
| _ИМЦ_СЭМД_Врачи.ДолжностьЛЛО КАК Должность,
| _ИМЦ_СЭМД_Врачи.СпециальностьЛЛО КАК Специальность
|ИЗ
| Документ._ИМЦ_Рецепт КАК МедицинскийДокумент
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений._ИМЦ_РаботникиОрганизаций КАК _ИМЦ_РаботникиОрганизаций
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ИМЦ_СЭМД_Врачи КАК _ИМЦ_СЭМД_Врачи
| ПО _ИМЦ_РаботникиОрганизаций.Сотрудник = _ИМЦ_СЭМД_Врачи.СсылкаОснование
| И _ИМЦ_РаботникиОрганизаций.Идентификатор = _ИМЦ_СЭМД_Врачи.Идентификатор
| ПО МедицинскийДокумент.Врач = _ИМЦ_РаботникиОрганизаций.Сотрудник
| И (МедицинскийДокумент.Дата МЕЖДУ _ИМЦ_РаботникиОрганизаций.Период И ВЫБОР
| КОГДА _ИМЦ_РаботникиОрганизаций.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ДАТАВРЕМЯ(3999, 1, 1)
| ИНАЧЕ _ИМЦ_РаботникиОрганизаций.ДействуетДо
| КОНЕЦ)
| И (МедицинскийДокумент.Ссылка = &Ссылка)
| И МедицинскийДокумент.СтруктурноеПодразделениеМО = _ИМЦ_РаботникиОрганизаций.Подразделение
| И МедицинскийДокумент.ВрачДолжность = _ИМЦ_РаботникиОрганизаций.Должность
| И (_ИМЦ_РаботникиОрганизаций.Идентификатор <> """")";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(Результат, Выборка);
Иначе
ТекстОшибкаЗаполнения = НСтр("ru='ОшибкаСЭМД. Для сотрудника ""%1"" не найдена соответствующая запись в справочнике
|_ИМЦ_СЭМД_Врачи по новому механизму'", "ru");
ОшибкаЗаполнения = СтрШаблон(ТекстОшибкаЗаполнения, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "Врач"));
ЗаписьЖурналаРегистрации("СЭМД", УровеньЖурналаРегистрации.Ошибка, , , ОшибкаЗаполнения);
//ВызватьИсключение ОшибкаЗаполнения;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЭМД_Сотрудник_СтарыйМеханизм(ДокументСсылка)
Перем Выборка, Запрос, ОшибкаЗаполнения, РезультатЗапроса, ТекстОшибкаЗаполнения;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| _ИМЦ_СЭМД_Врачи.Ссылка КАК Ссылка,
| _ИМЦ_СЭМД_Врачи.ПодразделениеФРМО КАК СтруктурноеПодразделение,
| _ИМЦ_СЭМД_Врачи.ПодразделениеФРМО.КодМинздрава КАК СтруктурноеПодразделениеOID,
| МедицинскийДокумент.ВрачДолжность КАК Должность,
| МедицинскийДокумент.ВрачСпециальность КАК Специальность
|ИЗ
| Документ._ИМЦ_Рецепт КАК МедицинскийДокумент
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ИМЦ_СЭМД_Врачи КАК _ИМЦ_СЭМД_Врачи
| ПО МедицинскийДокумент.Врач = _ИМЦ_СЭМД_Врачи.СсылкаОснование
| И (_ИМЦ_СЭМД_Врачи.Актуальный)
| И МедицинскийДокумент.ВрачДолжность.Должность_ФНСИ_1002 = _ИМЦ_СЭМД_Врачи.Должность.ID
// в яо специальность в рецепте больше не используется
// | И МедицинскийДокумент.ВрачСпециальность.КодМинздрава = _ИМЦ_СЭМД_Врачи.Специальность.ID
| И МедицинскийДокумент.СтруктурноеПодразделениеФРМО = _ИМЦ_СЭМД_Врачи.ПодразделениеФРМО
| И (НЕ _ИМЦ_СЭМД_Врачи.ПометкаУдаления)
|ГДЕ
| МедицинскийДокумент.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(Результат, Выборка);
Иначе
ТекстОшибкаЗаполнения = НСтр("ru='ОшибкаСЭМД. Для сотрудника ""%1"" не найдена соответствующая запись в справочнике _ИМЦ_СЭМД_Врачи'", "ru");
ОшибкаЗаполнения = СтрШаблон(ТекстОшибкаЗаполнения, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "Врач"));
ЗаписьЖурналаРегистрации("СЭМД", УровеньЖурналаРегистрации.Ошибка, , , ОшибкаЗаполнения);
//ВызватьИсключение ОшибкаЗаполнения;
КонецЕсли;
Возврат Результат;
КонецФункции