Заказчиком была поставлена задача загрузки данных из гематологического анализатора MicroCC-20Plus в БИТ.Управление медицинским центром КОРП 2.1.24.25, платформа 8.3.22.1709.
У прибора имеется внешний интерфейс RS-232 для выгрузки данных об исследованиях.
Разработку начал с поиска подходящей внешней компоненты для работы с последовательным портом и, к сожалению, не нашел подходящей.
Было решено использовать драйвер 1C: Сканер штрихкода (NativeApi), т.к. передача данных происходит в одну сторону.
Добавляем сканер в оборудовании:
Выполняем настройку для нужного порта:
Нажимаем тест подключения.
На приборе заходим в результаты, выбираем необходимый анализ и нажимаем Отправить:
Нажимаем Отправить:
В результате мы получаем данные с прибора:
Видим, что данные программа получает частями.
Теперь создадим обработку для парсинга полученных данных.
Создадим обработку, добавим реквизиты:
Ответ - тип Строка неограниченной длины - для получения данных от прибора;
Число - тип Число - для хранения номера исследования;
Дата - тип Дата, состав даты Дата и время - для хранения даты и времени измерения.
Остальные реквизиты соответствуют названиям измеряемых данных, "%" меняем в названии реквизита в "P", "#" не используем, "-" меняем на "_".
Код модуля формы:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ScanData" Тогда
Если ВводДоступен() Тогда
ТипШК = Неопределено;
Объект.Ответ = Объект.Ответ + Параметр[0];
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Истина // ИспользоватьПодключаемоеОборудование Проверка на включенную ФО "Использовать ВО".
И МенеджерОборудованияКлиент.ОбновитьРабочееМестоКлиента() Тогда // Проверка на определенность рабочего места ВО.
ОписаниеОшибки = "";
ПоддерживаемыеТипыВО = Новый Массив();
ПоддерживаемыеТипыВО.Добавить("СканерШтрихкода");
ОповещенияПриПодключении = Новый ОписаниеОповещения("ПодключитьОборудованиеЗавершение", ЭтотОбъект);
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПоТипу(ОповещенияПриПодключении, УникальныйИдентификатор, ПоддерживаемыеТипыВО);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
// Процедура ПодключитьОборудованиеЗавершение.
//
// Параметры:
// РезультатВыполнения - Структура - описание результата.
// Параметры - Произвольный - не используется
//
Процедура ПодключитьОборудованиеЗавершение(РезультатВыполнения, Параметры) Экспорт
Если Не РезультатВыполнения.Результат Тогда
ТекстСообщения = НСтр( "ru = 'При подключении оборудования произошла ошибка:
|""%ОписаниеОшибки%"".'" );
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОписаниеОшибки%" , РезультатВыполнения.ОписаниеОшибки);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПарситьНаСервере()
МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Объект.Ответ, ",", Ложь);
Дата = МассивПодстрок[2];
Год = Лев(Дата,4);
Месяц = Сред(Дата, 6, 2);
День = Прав(Дата, 2);
Время = МассивПодстрок[3];
ВремяРазложенное = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Время, ":", Ложь);
Часы = ВремяРазложенное[0];
Минуты = ВремяРазложенное[1];
Секунды = ВремяРазложенное[2];
Объект.Дата = Дата(Число(Год),Число(Месяц),Число(День), Число(Часы), Число(Минуты), Число(Секунды));
Объект.Номер = Число(МассивПодстрок[1]);
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Для Сч = 4 По МассивПодстрок.ВГраница() Цикл
Параметр = СтрЗаменить(МассивПодстрок[Сч], "%", "P");
Параметр = СтрЗаменить(Параметр, "#", "");
Параметр = СтрЗаменить(Параметр, "-", "_");
Если РеквизитФормыВЗначение("Объект").Метаданные().Реквизиты.Найти(Параметр) <> Неопределено Тогда
Сч = Сч + 1;
Объект[Параметр] = Число(МассивПодстрок[Сч]);
КонецЕсли
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Парсить(Команда)
ПарситьНаСервере();
КонецПроцедуры
Запускаем обработку, нажимаем Отправить на приборе, после получения данных нажимаем Парсить.
Следующим этапом будет создание Шаблона приема и заполнение данных в конфигурации БИТ.Управление медицинским центром КОРП.