Обмен данными между сеансами #804167


#0 by held88
Добрый день! Задача следующая. Есть оборудование подключенное к компьютеру по ком-порту. Есть два сеанса 1С которые должны видеть данные с порта. Чтобы получить данные туда нужно отправить команду. Если речь идет об одном сеансе то без проблем. Но вот как реализовать данную задачу для нескольких пользователей одновременно? На ум пришло два решения. 1. Написать сервер оборудования, к которому будет по TCP подключатся каждый клиент и читать с него данные. (появляется в промежутке стороняя программа, которую писать не хотелось бы). 2. Запустить опрос оборудования в регламентном задании, а ответ ложить в регистр сведений. Но тоже ряд вопросов. Первый: как обработать внешнее событие в регламентном задании. Потому что команды на оборудование посылаются компонентой, она же в случае ответа инициирует внешнее событие, не важно будь то прямое соединение с ком-портом или с сервером оборудования по TCP. Далее не будет ли замедляться сильно работа 1С если запись в данный регистр будет происходить раз в 0.1 секунду? Далее выключении последнего сеанса можно проверить наличие записей и почистить регистр. Как можно решить данную задачу?
#1 by Aleksey
зачем второму сеансу знать что получил первый?
#2 by held88
Потому что оборудование подключенное к ком порту может выполнять одновременно два разных действия, но одно и тоже не может. И второй сеанс должен знать не начал ли какую то операцию первый сеанс и если начал когда.
#3 by dezss
ИМХО, только писать в промежуточную таблицу (РС, Документ, что-то еще). Одновременно подключаться к одному ком-порту из разных сеансов нельзя же. Если кто-то уже данные прочитал, то другой их уже не увидит.
#4 by held88
Ну да. Это понятно. Тогда вопрос как обработать ВнешнееСобытие на вызванную процедуру из Регламентного задания? В таком случае можно записать в регистр сведений данные. А документ не подойдет. Они же одновременно его открыть и работать с ним не смогут.
#5 by dezss
изменять не смогут, а посмотреть смогут.
#6 by held88
Возможно ли обработать внешнее событие регламентным заданием?
#7 by dezss
а...ты про это... так какая нафиг разница...ты в рег. задании слушаешь порт, если что-то появилось, то читаешь и пишешь куда тебе надо. Что РС, что документ, у него будет какое-то время жизни-актуальности. В любом случае, создавать новые/изменять должен один процесс, а остальные только читать.
#8 by mehfk
Пиши свою внешнюю прогу, которая будет писать в свою БД, а уже из этой БП 1с-ка будет читать.
#9 by Aleksey
Т.е. весь сыр бор только из-за того что нельзя одновременно опрашивать устройство?
#10 by Aleksey
Т.е. вопрос только в регламентном задании которое читает данные + варианты решения из соседней темы
#11 by Tateossian
КОМ-порт по своей природе может работать только на одном канале. Это типичный паттерн Медиатор: имеется один "контроллер" и множество взаимодействующих объектов.
#12 by Serg_1960
Принцип чёрного ящика: есть вход и выход, что внутри - неважно. Все сеансы пишут во "вход" (например в регистр сведений), записывая при этом уникальный номер к записи; регламентное задание читает "вход", отрабатывает задачу и пишет на "выход" (в регистр, может быть в тот-же самый), не забывая указывать уникальный номер записи и стирает запись по номеру на "входе"; сеансы, записав во "вход", ожидают появление на "выходе" ответа по уникальному номеру; читают его и стирают запись. Ну вот как-то так, особо не задумываясь.
#13 by held88
Вопрос не в этом. Вопрос как передать данные между сеансами.
#14 by mistеr
Через константу, например.
#15 by Tateossian
Для этого есть база данных. Пиши туда. Это место, где все сеансы обмениваются информацией.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С