Мульти-впр

Автор Smol, 5 октября 2019, 21:53

0 Пользователи и 1 гость просматривают эту тему.

Smol

Если интересно история такова.
Делаю для жены маленькую базу по заполнению и распечатки протоколов обследования, она у меня врач УЗИ. И одна из "фишек" при вводе имени пациента из таблицы (базы) должно подтягиваться данные о предыдущих посещений пациента. Данная формула  мне идеально подходит, но как ведите есть проблема....
На предложения "Почему не делаешь в  Libreoffice Base" - отвечу, делаю в чём хоть чуть- чуть умею. Можно было бы сделать в Excel, я в нем более менее разбираюсь, но её компьютер староват даже для Win7 , а главное не хочу использовать пиратское ПО, когда есть прекрасная альтернатива (стоит Rosa Linux MATE). 

economist

#16
Smol - вы бы показали пример хранения данных предыдущих УЗИ, возможно хватит обычного ВПР, без формул массива, макросов и т.п.

Прелесть того же BASE в том, что о нем можно ничего не знать, кроме как Создать - Подключить - Таблица.
И после этого вы можете в любом документе ODT/ODS/DOC+/XLS+ - по нажатию Ctrl+Shift F4 вытягивать не только данные "прошлого" УЗИ, но и позапрошлых и вообще всех, включая УЗИ родственников. Крутить подобный функционал формулами будет, как правило, сложнее и все это будет легко "ломаемо". Любой случайный однофамилец, исправление опечатки в ФИО - и вот уже формула пасует.  
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bigor

Я сейчас без компьютера, но мне кажется  что формулы привязаны к конкретной строке row()-5. И перенос формулы портит ее
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

rami

Можно написать формулы с "относительными привязками", а заодно диапазон данных сделать именованным:


P.S. просьба, выкладываемым документам не давать одно и то же название, иначе возникает путаница. Желательно именовать так: ИмяДокумента1.ods, ИмяДокумента2.ods, ИмяДокумента3.ods и т.д. С учётом имен документов других пользователей.

Smol

Показывать пока нечего, делаю с ноля ещё ничего не собрано, в один файл. И базы пока нет формы протоколов пока нет..., но кажется я решил проблему через такую конструкцию:
=ЕСЛИОШИБКА(ВПР($D4;ВЫБОР({1;2};$Архив.X5:$Архив.X24;$Архив.B5:$Архив.B24);2;0);"")
Описанной (показанной) в видео на yotube "планета Excel"
https://www.youtube.com/watch?v=INFoqDqkhLk

Smol

Цитата: economist от  7 октября 2019, 12:54Smol - вы бы показали пример хранения данных предыдущих УЗИ, возможно хватит обычного ВПР, без формул массива, макросов и т.п.

Прелесть того же BASE в том, что о нем можно ничего не знать, кроме как Создать - Подключить - Таблица.
И после этого вы можете в любом документе ODT/ODS/DOC+/XLS+ - по нажатию Ctrl+Shift F4 вытягивать не только данные "прошлого" УЗИ, но и позапрошлых и вообще всех, включая УЗИ родственников. Крутить подобный функционал формулами будет, как правило, сложнее и все это будет легко "ломаемо". Любой случайный однофамилец, исправление опечатки в ФИО - и вот уже формула пасует.

Все правильно, но я не знаю BASE, пробовал, но многого не понимаю пока, в последствии буду разбираться с BASE и попробую переделать.
Формулы понятны, я их и использую, но спасибо Всем за помощь, как что-то будет получатся (или не получатся :))то обязательно выложу, может кому пригодиться.

economist

Вот я за 5 минут создал базу данных (ODS), базу-ссылку (ODB), шаблон протокола УЗИ (ODT) которые решают вашу задачу "промышленным" способом, который выдержит 220 х 16 = 3520 записей об УЗИ за год и десятилетие. В ODT шаблоне До и После - показываю как заполняется одним нажатием кнопки данные в полях (вложения). Причем в ODT (DOC) формате можно сделать идеально красивый протокол, с переносами строк и выравниванием, а в Calc это будет мучение без конца. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

#22
А теперь сами файлы. При открытии ODB файла он не найдет ODS (у меня лежал в корне диска E:) поэтому его нужно перевыбрать. Вложения ниже.

Если очень хочется сделать протокол в Calc (ODS) - можно сделать и в нём, но будут отличия при заполнении, например, данных об одном исследовании. Вообще если что-то нужно простое считать, например возраст пациента из его ДР, то это можно сделать и в ODS, и в ODB, и в ODT - все способы равны. Но как только выяснится что нужно в протоколе отображать новые разделы при каких-то обстоятельствах - Writer (ODT) - позволит вам это сделать с помощью целой кучи фишек - Условный текст, Скрытый раздел итд. А в Calc - придется для этого мутить макросы.    

Громаднейший плюс решения на связке ODS+ODB+ODT - это:

1) "промышленый" подход. Такая база данных не умрет от 100-500 тыс строк, т.е. прослужит несколько лет. С нее легко перейти на что угодно без потери старых архивов. В БазаУЗИ.ODS легко затащить старые данные.  

2) вы сможете писать запросы на языке SQL, например иметь для просмотра не всю табличку, а отфильтрованную по любому критерию. Поверьте, когда в таблице будет всего 100 строк - уже будет неудобно с формулами в Calc.

3) SQL-запросы м.б. параметрическими, например ввели первые 3-4 буквы фио - и увидели только их вверху экрана

4) Есть простые и мощные построители отчетов, с графиками и тп.

Все файлы надо кинуть в любое место, открыть ODB и прописать в нем путь к ODS. После этого открываете ODT и пробуете заполнять поля кнопкой после Ctrl+Shift+F4. Саму базу БазаУЗИ.ODS  можно легко дополнять полями, менять их местами итд. Т.е. Протокол можно совершенствовать постепенно. Это всяко лучше чем перебивание старой "рыбы" под каждого нового пациента  

UPD: Еще нужно "зарегистрировать" базу данных, т.е. открыть Libreoffice, далее Сервис - Параметры - Libreoffice Base - Базы данных - Создать - Обзор БазаУЗИ_ODS.odb, иначе её по Ctrl+Shift+F4 не будет видно вверху окна в списке. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Smol

Уважаемый economist Вы абсолютно правы, данный проект нужно делать в базе данных.
Но посмотрите на это с моей стороны:
- Я не программист, я металлург;
- по роду своей деятельности мне приходиться иметь дело с таблицами в Excel, выгрузками из баз данных;
- для облегчения своей работы (обработка и анализ) мне было достаточно возможностей Excel (формулы, макросы, надстройки Power query, pivot)  - данных возможностей мне хватало "за глаза";
- всему, что я знаю - я учился Сам (так сложилось, некому мне было помочь), по форумам видео, книгам (благо этого достаточно в инете);
- повторюсь, я не программист, я не умею "красиво" писать код, не знаю  закономерностей, правил программистов и т. д..., мне это не надо было для работы;
- я исхожу из того что умею (анализировать, обрабатывать, находить закономерности в предоставленных данных) и на этом стою схему данной задачи.
Я понимаю, что это решается BASE и только BASE! т.к. это база данных, но я никогда не сталкивался с такой постановкой задачи (удобный ввод информации и красивый вывод), мне всегда было достаточно получить сведенные таблицы или что-то похожее, поэтому Excel вполне хватало (в офисе никто не понимает, что можно использовать так Excel! и помочь некому).
Пока я не понимаю как использовать ваши файлы (я сделал как Вы написали) мне непонятно почему надо делать так или этак, куда нажимать, чтобы редактировать, как сохранять, как правильно построить форму ввода, куда писать формулы и вообще всё что делает БАЗА ДАННЫХ.
Так что Я сажусь за букварь по базам данных (в свободное время конечно (семья, работа)) и очень надеюсь что сделаю то что хочу используя Ваш труд, как основу. Спасибо.
З.Ы. прикрепил файл который я делаю, там нет почти нечего (все формы не добавлены (их будет 5 шт.), нечего не внесено,  макросы почти не прописаны и т. д.),
я в командировки, жены рядом нет, а в медицине я также не силен. Приеду будем вместе дорабатывать форму протокола, способ ввода и как все это связать и запрограммировать. :)
Всем добра!

Smol

Также, там где Вы делаете за 5 минут, мне потребуются недели и месяцы проб и ошибок.

economist

Smol - о, да мы 100% коллеги! Только я чуть южнее располагаюсь...

Посмотрел ваше вложение - все грамотно, форма ввода, контроль, плоская БД на отдельном листе. Думаю вы легко доведете всё до ума.

Кстати, от вашего листа ARM-V_2.ods - очень легко перейти к моей "схеме" в будущем. Может я сложно объяснил, поэтому подытожу. База данных ODB в моем "решении" - это просто файл-пустышка без самих данных, это лишь ссылка на ODS (им легко м.б. и ваш файл, ведь его структура на листе "Архив" - плоская).
Вы можете вообще не открывать этот ODB-пустышку и не изучать ни BASE, ни SQL.
Вся фишка - в третьем файле (документ Writer, формат ODT), который используется для построения красивых интерактивных документов (с раскрывающимися списками, условиями итп).
Их вполне можно "нарисовать" и в Excel/Calc, но многим не нравятся их особенности - абзац в ячейке не разобъешь при переносе строки на другую страницу, сложно управлять разрывами страниц, текст по правому краю (да по любому) - выравнять идеально не получится, конструировать предложения - сложно, часто концы фраз съедаются криво сделанным автоподбором высоты строк итд. Борьба с этим может стать мучением, а можно просто забить на "красоту".

ODT чем хорош? Тем что всех этих проблем у него нет. А ещё он умеет брать данные из ODS многими путями: Copy/Paste, DDE, OLE, COM, макросом и через Проводник данных. Вот он и есть самый удобный для пользователя. Что-то похожее есть и для Excel (msquery32.exe, power pivot, odbcad32.exe), но мне кажется что OpenOffice|LibreOffice тут уделали мелкомягких, сделав все в одном окне. Искренне желаю вам успеха в начинании!

OFF: Намедни сам проходил УЗИ и сделал хронометраж УЗИ-документооборта в обычной новой поликлинике: экономисты вписывали (в MS Word) мой ФИО, адрес и паспортные данные и две строки из прейскуранта в "типовой" договор целых 5,5 минут. Никакой связи с регистратурой, никакого электронного прейскуранта - все ручками-ручками. Распечатали договор на 3-х стр, я сразу нашел ошибку, еще 2,5 минуты исправляли. УЗИ-диагност после исследования сел за комп, открыл чужое похожее "по органам" исследование в DOC и заменял в нем ФИО и данные еще 12 минут. Итого вышло 20 минут работы за PC. Если бы это было автоматизировано в стиле БД Регистратура -> ODB -> ODT - то ушло бы не более 5 минут.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Smol

Спасибо, коллега!
Да одну из задач я себе поставил максимально ускорить ввод данных и получения распечатанного протокола исследования:
- нажатием на соответствующую иконку на панели инструментов выбирается нужный диапазон для заполнения;
- заполняется несколько полей (переменных), а остальное выбирается из шаблонов констант;
- И все... , после нажатия на клавишу сохранить в архив и распечатать протокол происходит следующее:
данные с формы копируются в архив, с него по номеру заполняется нужный бланк (формулами "ВПР"), далее этот макрос оптимизирует нужные строки, делает перенос текста в них и отдаёт на печать А5 с настройками вместить на 1 лист.
Протокол получается нормально форматирован с любым объёмом текста и протокол готов. На все уходит до 30 сек., а то и быстрее (в зависимости от опыта и умения работать с компом)
несколько других "фишек" исправление ошибок, лишних нажатий и т. д.
Всего этого оператор не видит, для него просто, нажать одну кнопку ввести несколько данных в ячейки в столбик и нажать другую кнопку получив готовый протокол.

Такая задача.
Да когда наберется база я тоже уже думал о переходе куда- то дальше, но это потом, сейчас довести "до ума" нужно это. Отработать технологию, а то что нашел в инете мне не понравилось очень не удобно.
Всем добра!