Имя: Пароль:
1C
1С v8
ШМД, динамическое наблюдение, динамические данные
0 DosBot
 
10.04.17
11:44
Конфигурация: Медицина. Больница, редакция 1.3 (1.3.1.1)
Для отображения ШМД используется стандартный ТабличныйВизуализатор CDA.

Пытаюсь реализовать ШМД следующего вида:
К массажисту курсами приходит пациент. При каждом посещении отмечаются данные:
- Номер процедуры;
- Дата процедуры
- Время массажа
- Вид массажа
- и т.д.

На выходе необходимо получить печатную форму, где в шапке - общая инфа. (ФИО пациента, дата рождения и т.п.), а далее список ВСЕХ посещений и инфы по ним.

Каждое посещение фиксируется отдельным МД (где предлагается выбор: новый курс или продолжить старый)

Если при формировании документа всё хранить в ТаблицеЗначений, то
естественно при нажатии на "Документ готов" инфа запишится в тело документа в виде xml-структуры и в дальнейшем, при открытии этого МД будет показывать хистори из неё (на момент записи документа).

Собственно, проблема только в одном: как без извращений и костылей можно при формировании МД часть данных, касающихся всего курса в целом, выводить НЕ по данным записанным в теле xml, а какими-то своими актуальными данными? Была идея поиграться с
ШаблоныМедицинскихДокументовПоликлиникаКлиент.ПолучитьТелоМД(...)

Ну или другой вариант: сделать свою кнопку печать которая и будет делать всё как надо, но при этом:
а) Если Документ готов = Истина, тогда не выводить как для прочих форм "печатную форму" при открытии МД, а всегда показывать форму его редактирования (вне зависимости от статуса готов/не готов);
б) по-человечески интегрировать свою кнопку печати, с учётом что в стандартной форме - Печать она тоже есть...

Кто как реализовывал курсовое лечение вообще? :)
1 DosBot
 
10.04.17
13:14
Up
2 DosBot
 
11.04.17
06:27
ещё раз UP
3 Cyberhawk
 
11.04.17
07:01
Много букв, ты в картинках и пократче
4 Мимохожий Однако
 
11.04.17
07:02
(0) Храни в реквизитах, в табличной части. Таблица значений для другого.
5 DosBot
 
11.04.17
07:41
(3) Пример. Пациенту назначили 5 курсов общего массажа.
Он приходит на приём, врач отмечает (каждое посещение отдельным мед. документом):

Дата посещения Номер посещения Время массажа Вид массажа
01.04.2017     1               11-00         дифферен-ый
02.04.2017     2               08-00         дифферен-ый
03.04.2017     3               13-00         дифферен-ый
04.04.2017     4               13-00         дифферен-ый
05.04.2017     5               10-00         дифферен-ый

(4) Эмм. Прошу учесть особенность конфы - это её философия: по-умолчанию все реквизиты формы сохраняются автоматом в xml-структуру при записи (можно явно указать какие сохранять, какие нет).

Т.е. в случае с первым посещением запишется:
Дата посещения Номер посещения Время массажа Вид массажа
01.04.2017     1               11-00         дифферен-ый

При втором:
01.04.2017     1               11-00         дифферен-ый
02.04.2017     2               08-00         дифферен-ый

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

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

Кто работал с данной конфой вообще? Как-то реализовывали "курсовое лечение"?? Т.е. случаи, когда часть данных берётся из xml-тела документа, а часть - необходимо подтягивать из БД и как-то подсовывать стандартному механизму формирования таб. документа.
6 Мимохожий Однако
 
11.04.17
07:58
(5) на какой платформе сделано? Какое отношение эта конфигурация имеет отношение к 1С?
7 Мимохожий Однако
 
11.04.17
07:59
для чего используется xml-структура?
8 DosBot
 
11.04.17
08:31
(6) Общая инфа про конфу: http://solutions.1c.ru/catalog/hospital/features

(7) Касаемо сабжа - есть такое понятие как медицинский документ.
Смысл примерно в следующем: есть разные варианты мед. документов - состав их реквизитов различен (приём терапевта, УЗИ брюшной полости и т.п. - разнообразный набор данных).
Содержимое документа заполняется с помощью внешней обработки, которая крепится в справочник "Шаблоны медицинских документов". При работе с документом открывается форма этой самой обработки, заполняется, данные сохраняются в виде XML-структуры, где запоминается вся инфа: анамнез, жалобы и проч. (всё, что врач обычно пишет неразборчивым подчерком в поликлинике).

Затем, у мед. документа есть понятие "состояния". Если он "готов", то вместо формы где мы все реквизиты заполняем вылазиет табличный документ на печать - данные тянет из той самой xml-структуры, без оглядки, что какие-то данные вообще нужно брать из БД :)
9 Мимохожий Однако
 
11.04.17
09:02
(8) Если доступен конфигуратор, то начни с изучения справочника "Шаблоны медицинских документов" через отладчик. Больше и не посоветуешь. Полагаю, эта конфигурацию пока еще экзотика.
10 Cyberhawk
 
11.04.17
18:29
Разрабы конфы походу решили отмочить финт ушами и не хранить свойства объектов в реквизитах объектов метаданных, а типа динамически каждый раз строят форму объекта, а значения свойств (реквизты) хранят в сериализованном виде
11 H A D G E H O G s
 
11.04.17
18:40
Охеренно, я щетаю.
Автор, ты осторожней там.
https://ru.wikipedia.org/wiki/Therac-25
12 DosBot
 
12.04.17
15:29
(10) Да. В итоге, например, для связи медицинских документов в рамках одного курса пришлось допиливать, т.к. не вариант хранить ДокументОснование в xml-структуре... :)

(11) Гыгыгы :)
13 DosBot
 
13.04.17
07:13
В общем решил проблему. И даже без извращений :)

Чтобы при формировании медицинского документа выводить на печать свои динамические данные (любую инфу из БД, как в случае с обычной печатной формой) необходимо доработать "Визуализатор":

1) Сохранить обработку конфигурации ТабличныйВизуализатор во внешнюю;
2) Добавить в её Макет свои области. Например:
МояОбластьШапка и МояОбластьСтрока
3) Прописать в МОДУЛЕ ОБЪЕКТА этой обработки ЭКСПОРТНЫЕ Функции с именем области:

МояОбластьСтрока(Область, Документ, СсылкаМД, Параметры = Неопределено)  Экспорт

4) Прописать алгоритм получения данных и вывода в таб. документ. Примерно так:

    ...
    ТабДок_ = Новый ТабличныйДокумент();
    МояТЗ = ПолучитьМоюТаблицуДанных();
    
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("МояОбластьШапка");
    ТабДок_.Вывести(ОбластьШапка);
    
    Для каждого ТекСтрока Из МояТЗ Цикл
        ОбластьСтрока = Макет.ПолучитьОбласть("МояОбластьСтрока");
        ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
        ТабДок_.Вывести(ОбластьСтрока);
    КонецЦикла;

    Возврат ТабДок_;

5) При желании можно помедитировать над функцией общего модуля:
ВизуализаторCDA.СформироватьТабличныйДокумент()