Имя: Пароль:
1C
1С v8
Интересная задачака 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;
   КонецЦикла;
   
   Возврат Массив;
КонецФункции
Независимо от того, куда вы едете — это в гору и против ветра!