|
Интересная задачака 1с 8.2 | ☑ | ||
---|---|---|---|---|
0
Nesh
13.10.11
✎
19:12
|
Есть два пользователя А и Б. У обоих открыта форма обработки.
Необходимо при нажатии на кнопку пользователем А, у Б кнопка становилась другим цветом (как бы нажата). И когда пользователь Б нажимает на кнопку, то у пользователя А делается аналогичная операция. я пока решил с помощью РС, но можна ли как то решить задачу без запросов к БД и не используя параметры сеанса? |
|||
1
PR
13.10.11
✎
19:13
|
Нет.
|
|||
2
EvgeniuXP
13.10.11
✎
19:13
|
низя
|
|||
3
EvgeniuXP
13.10.11
✎
19:14
|
ой, ухожу
|
|||
4
Nesh
13.10.11
✎
19:15
|
ок, а один и тот же менеджер временных таблиц можно ли как-то использовать в разных сеансах?
|
|||
5
Господин ПЖ
13.10.11
✎
19:15
|
(4) сеанс есть сеанс... он про других ничего не знает
|
|||
6
shuhard
13.10.11
✎
19:15
|
(0)[без запросов к БД и не используя параметры сеанса]
да на здоровье: - через файлы на дисках - через семафоры - через IP оповещения - через WEB сервисы |
|||
7
Nesh
13.10.11
✎
19:17
|
(6) "- через семафоры" - как это сделать в 1с?
|
|||
8
vmv
13.10.11
✎
19:17
|
Обработчики оповещения решают эту задачу, можно еще нарисовать стакан и при нажатии пользователм "А" на кнопку "заполнить" и "Б" он наполняется, а у "А" пустеет
|
|||
9
shuhard
13.10.11
✎
19:19
|
(7) есть масса серверов очередей:
MS, Oracle и т.д. для организации семафоров разной степени извращенности |
|||
10
PR
13.10.11
✎
19:19
|
(8) Правда что ль? :))
|
|||
11
Nesh
13.10.11
✎
19:19
|
(8) было бы не плохо пример такой реализации посмотреть! через обработчики оповещения
|
|||
12
vmv
13.10.11
✎
19:19
|
(6) пиши проще сводное название методов - "через задницу"
|
|||
13
Господин ПЖ
13.10.11
✎
19:20
|
(8) и они будет пахать на модальных диалогах?
|
|||
14
shuhard
13.10.11
✎
19:20
|
(12) я (шепотом) надеялся ,что ТС оценит иронию и успокоиться
|
|||
15
shuhard
13.10.11
✎
19:21
|
(13) сейчас тебя подрежут фоновым заданием
|
|||
16
artbear
13.10.11
✎
19:26
|
(8) В 8-ке обработчики оповещений работают асинхронно.
|
|||
17
artbear
13.10.11
✎
19:26
|
(13) смотри (16)
|
|||
18
artbear
13.10.11
✎
19:30
|
ТС незачет за "задачака" :(
|
|||
19
Nesh
13.10.11
✎
19:32
|
(8) спасибо!
|
|||
20
vde69
13.10.11
✎
19:35
|
http://infostart.ru/public/18951/
собствено через блокировку делается Перем таймаутОбновленияСписка; Процедура ПриОткрытии() // удаляем партии где играли белыми УдалитьВсеПартии (); //подключем обновление ПодключитьОбработчикОжидания("ОбновитьДанные", ТаймаутОбновленияСписка); КонецПроцедуры Процедура ПриЗакрытии() ОтключитьОбработчикОжидания("ОбновитьДанные"); КонецПроцедуры Процедура ОбновитьДанные() // выводим список пользователей которые открыли шахматы // отмечаем все партии которые адресованы нам МассивАктивныхИгроков = ПолучитьМассивАктивныхИгроков(); МассивЗапросовНаИгру = ПолучитьМассивЗапросовНаИгру(); СписокАктивныхИгроков.Очистить(); Для Каждого Эл из МассивАктивныхИгроков Цикл НоваяСтрока = СписокАктивныхИгроков.Добавить(); НоваяСтрока.Игрок = Эл; Если ПолучитьХод(20, 0, Эл, 10) <> "" Тогда // наш запрос приняли, начинаем ТекущийПротивник = Эл; ЦветТекущегоИгрока = 10; ОтключитьОбработчикОжидания("ОбновитьДанные"); Старт = Истина; ЭтаФорма.Закрыть(); ИначеЕсли ПолучитьХод(10, 0, Эл, 10) <> "" Тогда НоваяСтрока.ВызовК = 0; // это наш вызов ИначеЕсли МассивЗапросовНаИгру.Найти(Эл) <> Неопределено Тогда НоваяСтрока.ВызовК = 1; Иначе НоваяСтрока.ВызовК = -1; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ВызватьНажатие(Элемент) НачатьПартиюИгрока (Игрок); КонецПроцедуры Процедура ПринятьВызовНажатие(Элемент) Если не Игрок.Пустая() Тогда ТекущийПротивник = Игрок; ПринятьПартиюИгрока (Игрок); ОтключитьОбработчикОжидания("ОбновитьДанные"); Старт = Истина; ЭтаФорма.Закрыть(); КонецЕсли; КонецПроцедуры Процедура СписокАктивныхИгроковПриАктивизацииСтроки(Элемент) Если ЭлементыФормы.СписокАктивныхИгроков.ТекущаяСтрока <> Неопределено Тогда Игрок = ЭлементыФормы.СписокАктивныхИгроков.ТекущаяСтрока.Игрок; Если ЭлементыФормы.СписокАктивныхИгроков.ТекущаяСтрока.ВызовК = 0 Тогда ЭлементыФормы.Вызвать.Доступность = Ложь; ЭлементыФормы.ПринятьВызов.Доступность = Ложь; ИначеЕсли ЭлементыФормы.СписокАктивныхИгроков.ТекущаяСтрока.ВызовК = 1 Тогда ЭлементыФормы.Вызвать.Доступность = Ложь; ЭлементыФормы.ПринятьВызов.Доступность = Истина; Иначе ЭлементыФормы.Вызвать.Доступность = Истина; ЭлементыФормы.ПринятьВызов.Доступность = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры ТаймаутОбновленияСписка = 1.5; |
|||
21
vde69
13.10.11
✎
19:36
|
забыл самое главное
Функция ПолучитьМассивАктивныхИгроков() Экспорт // формируем список возможного выбора Запрос = Новый Запрос("ВЫБРАТЬ | Игроки.Ссылка |ИЗ | Справочник.Игроки КАК Игроки |ГДЕ | Игроки.Ссылка <> &ТекущийИгрок"); Запрос.УстановитьПараметр("ТекущийИгрок", ТекущийИгрокОбьект.Ссылка); Массив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); е = Массив.Количество(); Пока е > 0 Цикл Объект = Массив[е-1].ПолучитьОбъект(); попытка Объект.Заблокировать(); Массив.Удалить(е-1); Исключение КонецПопытки; Объект = ""; е = е - 1; КонецЦикла; Возврат Массив; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |