Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 авг 2022, 09:05

Нужен совет эксперта

Автор Oldman06, 18 ноя 2017, 12:10

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

Oldman06

Приветствую. Сейчас начал разрабатывать систему электронной очереди для своей конфы, для медицинского центра. С самим "киоском" проблем нет, сейчас пишу прогу на C# которая будет взаимодействовать с клиентом с одной стороны, и с 1С через ее web-сервисы с другой. Тут все ясно. Проблема в следующем: будет еще информационное табло для пациентов, которое будет отображать состояние очереди по кабинетам. Оно должно управляться из 1С. После того как пациент поставлен в очередь, он продвигается по ней, по кабинетам (это профосмотры) по мере того, как врачи отмечают прохождение пациента по своей специальности. Первая проблема: с программой организующей работу табло нужно общаться через сокеты (другого варианта я не вижу, так как работа в рилтайме и различные выгрузки-загрузки не подойдут). Делать это, по всей видимости, должен 1С сервер получая события от клиентов (врачей), или через регламентные задания (убирать зависшие номера по таймауту, если клиент взял номер и ушел). Тут пара проблем: нужна внешняя компонента для 1С сокет клиент, которая будет работать на linux-сервере. Я такую не нашел. Ну, допустим, я ее напишу (хотя под linux я еще никогда не писал). И вторая, самая важная проблема: Серверные процедуры и функции не работают же сами по себе, они работают в контексте вызовов клиента или регламентных заданий. Соответственно, я не могу просто подключить внешнюю компоненту на сервере для использования ее всеми клиентами. Получается что при событии от клиента (врача) я должен загрузить эту внешнюю компоненту (в контексте серверного сеанса клиента), подключиться к табло и сбросить на него информацию по текущему состоянию очереди. И я не представляю, как это будет работать, если это будут делать несколько клиентов (врачей) и подчас почти одновременно. Может я как-то не так понимаю архитектуру сервера 1С, и можно как-то создать одно подключение внешней компоненты и разделенный доступ к ней? Или вообще, это как-то по другому организовать?

Геннадий на Оби

Цитата: Oldman06 от 18 ноя 2017, 12:10сейчас пишу прогу на C# которая будет взаимодействовать с клиентом с одной стороны, и с 1С через ее web-сервисы с другой. Тут все ясно
Сможете конкретизировать про web-сервисы 1С, чтоб и другим было ясно?

Oldman06

Цитата: Геннадий ОбьГЭС от 18 ноя 2017, 15:38
Цитата: Oldman06 от 18 ноя 2017, 12:10сейчас пишу прогу на C# которая будет взаимодействовать с клиентом с одной стороны, и с 1С через ее web-сервисы с другой. Тут все ясно
Сможете конкретизировать про web-сервисы 1С, чтоб и другим было ясно?
Прога на "киоске" взаимодействует с клиентом: он сканирует штрихкод с бланка профосмотра, или вводит номер своего телефона, прога обращается к веб-сервису базы 1С, чтобы получить данные профосмотра (если был отсканирован штрихкод) и если в данный момент идет профосмотр, предлагает встать в очередь на прохождение, распечатывает талон. Если введен телефон, то если клиент с таким номером будет найден в базе, то из веб сервиса получаются данные этого клиента и его текущего профосмотра, прога авторизует его по СМС (чтобы убедиться, что это именно  этот человек) и далее все так же, как со сканированием бланка. Если человек берет талон, то прога опять обращается к веб-сервису 1С, и 1С ставит его в очередь. Это уже реализовано на тестовом стенде и работает. В этом проблем нет. Проблема в обратном взаимодействии 1С с информационным табло.

Геннадий на Оби

Цитата: Oldman06 от 18 ноя 2017, 16:30прога обращается к веб-сервису базы 1С
Какому веб-сервису базы какой конфигурации 1С?

Oldman06

Цитата: Геннадий ОбьГЭС от 18 ноя 2017, 16:35
Цитата: Oldman06 от 18 ноя 2017, 16:30прога обращается к веб-сервису базы 1С
Какому веб-сервису базы какой конфигурации 1С?
Да какая, в данном контексте, разница? Все мед. учреждение работает на одной базе (конфа на основе БСП + библиотека подключаемого оборудования полностью спроектирована мной). В ней работают все: врачи ведут медицинскую документацию, медицинские карты, менеджеры проводят реализацию услуг и взаиморасчеты, call-центр ведет запись на приемы и планирование приемов и профосмотров, лаборатория проводит исследования (в конфе интегрируется лабораторное оборудование) и т.д. И веб-сервис, соответственно, тоже самописный, реализован в этой конфе.

Геннадий на Оби

Цитата: Oldman06 от 18 ноя 2017, 16:30
В этом проблем нет. Проблема в обратном взаимодействии 1С с информационным табло.
Вы задаете вопрос про то, что не даёте абсолютно никакой информации

Если есть веб-сервис 1С, то должен быть и веб-сервер, на котором публикуется веб-сервис, что как-то совершенно отсутствует в описаниях

А так, конечно - "Да какая, в данном контексте, разница?" - непонятно, что за веб-сервис непонятно на чём, через что, как и в каком контексте

Oldman06

Цитата: Геннадий ОбьГЭС от 18 ноя 2017, 16:57
Цитата: Oldman06 от 18 ноя 2017, 16:30
В этом проблем нет. Проблема в обратном взаимодействии 1С с информационным табло.
Вы задаете вопрос про то, что не даёте абсолютно никакой информации

Если есть веб-сервис 1С, то должен быть и веб-сервер, на котором публикуется веб-сервис, что как-то совершенно отсутствует в описаниях

А так, конечно - "Да какая, в данном контексте, разница?" - непонятно, что за веб-сервис непонятно на чём, через что, как и в каком контексте
Я же сказал, что с этим проблем нет. Все ЭТО работает. И веб-сервер, конечно же, есть. Стоит на отдельном сервере, на нем опубликована веб-служба, да и с самой базой можно через него работать через браузер. Это призказка и к проблеме отношения не имеет. У меня вопрос про взаимодействие 1С с информационным табло.

Геннадий на Оби

Цитата: Oldman06 от 18 ноя 2017, 12:10
Приветствую. Сейчас начал разрабатывать систему электронной очереди для своей конфы, для медицинского центра. С самим "киоском" проблем нет, сейчас пишу прогу на C# которая будет взаимодействовать с клиентом с одной стороны, и с 1С через ее web-сервисы с другой. Тут все ясно. Проблема в следующем: будет еще информационное табло для пациентов, которое будет отображать состояние очереди по кабинетам. Оно должно управляться из 1С
"управляться из 1С" - это же не значит, что напрямую 

Цитата: Oldman06 от 18 ноя 2017, 12:10Делать это, по всей видимости, должен 1С сервер получая события от клиентов (врачей)
это ещё почему?
То, что управляет табло и будет это делать

Цитата: Oldman06 от 18 ноя 2017, 12:10Серверные процедуры и функции не работают же сами по себе, они работают в контексте вызовов клиента или регламентных заданий.
Вы ж написали, что нет вообще никаких проблем с веб-сервисами 1С, а у них вообще нет никакого контекста


Цитата: Oldman06 от 18 ноя 2017, 12:10
нужна внешняя компонента для 1С сокет клиент, которая будет работать на linux-сервере. Я такую не нашел. Ну, допустим, я ее напишу (хотя под linux я еще никогда не писал)
это плохая идея
Внешние компоненты на  linux-сервере - это нехоженная целина 

Цитата: Oldman06 от 18 ноя 2017, 12:10что при событии от клиента (врача) я должен загрузить эту внешнюю компоненту (в контексте серверного сеанса клиента)
ВК же не загружаются, а предварительно регистрируются-устанавливаются в ОС, а (при начале работы базы 1С) к базе 1С подключаются из базы 1С, а загружаются они в ОС и средствами ОС

Они ж внешние, и вообще-то прямого отношения к работе приложений 1С не имеют, обмениваются данными с приложнеиям 1С взаимно, что-то туда, что-то оттуда с одной и с другой стороны, многие со многими




Oldman06

Хотел процитировать, но лучше объясню в общих словах :)
Первая мысль, когда я собрался делать эту систему, что табло так же будет работать через веб-сервис: Веб-страница со скриптами будет дергать веб-сервис, он будет дергать базу и т.д. А теперь, почему я от этой мысли сразу отказался. Чтобы эффективно и вовремя отображать актуальную информацию нужно дергать веб-сервис, а соответственно и базу 1С, как минимум раз в 5 секунд. Представьте, раз в 5 секунд, веб-сервис дергает базу 1С и та делает выборку из базы данных (данные очереди хранятся в регистре сведений), даже если данные за это время не поменялись. Серверу 1С больше заняться, что ли нечем? Даже если в базе использовать флаг изменения данных (чтобы уменьшить нагрузку) и проверять только его, то его тоже нужно хранить как часть данных в базе данных (в константе, или регистре сведений), так как другого варианта межсеансовых связей нет. Короче, эффективность данного подхода около-нулевая. Да, так работают все веб-приложения, потому, что у них нет другого варианта: веб-сервер может только отвечать на запросы клиентов, сам он соединения не инициирует. Но здесь другой случай: у меня 1 сервер и 1 клиент в одной сети. Самое эффективное это 1С взаимодействовать с табло только тогда, когда данные были изменены.
И насчет того, что веб-сервис не создает контекста - спорное утверждение. Что в данном случае считать контекстом? Веб-сервис также устанавливает соединение с базой, в конфе есть модуль внешнего соединения в котором можно инициализировать переменные. Вопрос только в том, сколько будет существовать это соединение. Я, честно говоря, не очень в курсе в этом вопросе.

Геннадий на Оби

Цитата: Oldman06 от 19 ноя 2017, 09:47
Хотел процитировать, но лучше объясню в общих словах :)
Первая мысль, когда я собрался делать эту систему, что табло так же будет работать через веб-сервис: Веб-страница со скриптами будет дергать веб-сервис, он будет дергать базу и т.д.
Я веб-сервис всегда понимал, как маму, а не как папу

Цитата: Oldman06 от 19 ноя 2017, 09:47А теперь, почему я от этой мысли сразу отказался. Чтобы эффективно и вовремя отображать актуальную информацию нужно дергать веб-сервис, а соответственно и базу 1С, как минимум раз в 5 секунд. Представьте, раз в 5 секунд, веб-сервис дергает базу 1С и та делает выборку из базы данных (данные очереди хранятся в регистре сведений), даже если данные за это время не поменялись. Серверу 1С больше заняться, что ли нечем? Даже если в базе использовать флаг изменения данных (чтобы уменьшить нагрузку) и проверять только его, то его тоже нужно хранить как часть данных в базе данных (в константе, или регистре сведений), так как другого варианта межсеансовых связей нет. Короче, эффективность данного подхода около-нулевая.
Неочевидно, многслойное кэширование, зависит от настроек периодов устаревания данных на серверах и приложениях, играться есть чем

Цитата: Oldman06 от 19 ноя 2017, 09:47Да, так работают все веб-приложения, потому, что у них нет другого варианта: веб-сервер может только отвечать на запросы клиентов, сам он соединения не инициирует. Но здесь другой случай: у меня 1 сервер и 1 клиент в одной сети. Самое эффективное это 1С взаимодействовать с табло только тогда, когда данные были изменены.
И насчет того, что веб-сервис не создает контекста - спорное утверждение. Что в данном случае считать контекстом? Веб-сервис также устанавливает соединение с базой, в конфе есть модуль внешнего соединения в котором можно инициализировать переменные. Вопрос только в том, сколько будет существовать это соединение. Я, честно говоря, не очень в курсе в этом вопросе.
Это вообще оффтоп.
Важнее понимать, что, ориентируясь на линукс (вернее, на что-то, кроме вшитео в Виндоус), у Вас и выбора нет, кроме использования веб-сервисов, с которыми, как  Вы написали у Вас нет проблем

Кстати, щас прям наткнулся на этом форуме

  • Синхронизация данных. Отсутствует пункт "Прямое подключение к программе на этом компьютере"
    https://forum-1c.ru/index.php?topic=68014.msg189873#msg189873
    Цитирую:
    "Как оказалось дело в том, сервер 1с находится на линуксе. Это ответила официальна ТП 1С"
Я, как-то, всегда и думал. С тех времён, когда с этим сталкивался накоротке

ВК - это технология под СОМ, т.е. под Виндовс.
Хотя, можно найти фундаментальные теоретичесие статьи про ВК под Линукс, но это абстактные теории, которые сами в 1С никак не комментируют и не поддерживают


Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск