Имя: Пароль:
1C
1С v8
УФ ПриАктивизацииСтроки Нежелательное автосворачивание
0 QbeeQ
 
29.10.12
01:00
Здравствуйте!
Управляемая форма, на ней таблица, контекстное меню таблицы дополнено своими пунктами.
При активизации строки, в зависимости от значений в текущей строке, переключаю доступность пункта меню.
Таблица при этом ведёт себя неадекватно: Сворачивает все группировки, кроме текущей. Меня это не устраивает.
Если закоментировать код управления доступности, то странный глюк пропадает.
Подскажите, пожалуйста, как выйти из ситуации.
1 Команданте
 
29.10.12
01:42
// Переменные формы
&НаКлиенте
Перем СписокТекСтрока;

// Процедуры формы
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
   
   Если Элементы.Список.ТекущаяСтрока = СписокТекСтрока Тогда
       Возврат;
   КонецЕсли;    
   
   СписокТекСтрока = Элементы.Список.ТекущаяСтрока;
   
   СписокПриАктивизацииСтрокиСервер();
   
КонецПроцедуры
2 Команданте
 
29.10.12
01:44
юзаем матан, юзаем, ребятки
3 QbeeQ
 
29.10.12
01:50
(1) Вы внимательно прочли стартовое сообщение?
1. Мне не нужно вызывать сервер, я изменяю интерфейс, а он на клиенте
2. Проверять сменилась строка или нет, мне тоже не нужно, глюк проявляется если ткнуть на переход на строку с группировкой со строки с данными и наоборот
4 Команданте
 
29.10.12
01:52
(3) бебебе бобобо бубаба бубубу
луза
5 QbeeQ
 
29.10.12
02:08
Не указал, вдруг важно:
Платформа: 8.2.16.368
Конфа: сам пишу
6 QbeeQ
 
29.10.12
08:19
UP! Пользуясь случаем, прошу прощения за мои опечатки и за неадекватное поведение некоторых участников обсуждения
7 QbeeQ
 
29.10.12
08:57
Всплывай, тема, всплывай. Вопрос всё ещё актуален
8 Defender aka LINN
 
29.10.12
08:59
(0) Нам кода долго ждать?
9 cw014
 
29.10.12
09:01
(8) Вечно
10 QbeeQ
 
29.10.12
09:07

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
   Если Элементы.КнопкаИстория.Пометка Тогда
       ДоступностьЭлементов = Ложь;
   Иначе
       ДоступностьЭлементов = Не ТипЗнч(Элемент.ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка")
   КонецЕсли;
   Если ДоступностьЭлементов Тогда
       ДоступностьВыдачиИзделия = Элемент.ТекущиеДанные.СтатусЗаказа=ПредопределенноеЗначение("Справочник.Статусы.Готов");
   Иначе
       ДоступностьВыдачиИзделия = ДоступностьЭлементов;
   КонецЕсли;
   // ПодменюСменитьИсполнителя и МенюВыдатьИзделие - кнопки контекстного меню таблицы
   // КнопкаВыдатьИзделие - Кнопка командной панели таблицы
   Элементы.ПодменюСменитьИсполнителя.Доступность = ДоступностьЭлементов; // Вот эта строка вызывает глюк
   Элементы.МенюВыдатьИзделие.Доступность = ДоступностьВыдачиИзделия; // Эта тоже
   Элементы.КнопкаВыдатьИзделие.Доступность = ДоступностьВыдачиИзделия; // А эта нет
КонецПроцедуры
11 olegves
 
29.10.12
09:16
(10) посмотри, если на эти строки есть серверный вызов - то здесь и собака закопана
ПриАктивацииСтроки контекстный серверный вызов нельзя делать
12 Defender aka LINN
 
29.10.12
09:33
(10) А если попробовать не дергать сервер при каждом клике мышью, м?
13 Defender aka LINN
 
29.10.12
09:33
(11) Что значит "если"? Он там прямым текстом нарисован.
14 QbeeQ
 
29.10.12
09:37
(11),(12) Я, видимо, ещё не проснулся и понимаю плохо. Объясните где я дёргаю сервер? Я же изменяю свойства элемента интерфейса - Доступность.
15 vmv
 
29.10.12
09:39
(0) в обработчиках активизации нельзя вызывать серверные методы, читай сп
16 Defender aka LINN
 
29.10.12
09:40
(14) Изучи все используемые тобой методы под лупой в СП.
17 vmv
 
29.10.12
09:40
ПредопределенноеЗначение() может вызывать сервер
18 QbeeQ
 
29.10.12
09:42
Если вот эти строки закоментировать, то глюка не проявляется:

   Элементы.ПодменюСменитьИсполнителя.Доступность = ДоступностьЭлементов;
    Элементы.МенюВыдатьИзделие.Доступность = ДоступностьВыдачиИзделия;

ПредопределенноеЗначение() не влияет
19 QbeeQ
 
29.10.12
09:52
Так, новые сведения, на появление глюка влияет только изменение доступности подменю, т.е эта строчка:

Элементы.ПодменюСменитьИсполнителя.Доступность = ДоступностьЭлементов;


С этой строки обвинения сняты:

Элементы.МенюВыдатьИзделие.Доступность = ДоступностьВыдачиИзделия;
20 QbeeQ
 
29.10.12
09:57
Чтобы наконец отпали все предположения о причастности вызова сервера переписал процедуру так:

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
   Элементы.ПодменюСменитьИсполнителя.Доступность = Не ТипЗнч(Элемент.ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка");
КонецПроцедуры
21 QbeeQ
 
29.10.12
09:57
+(20) Глюк на месте
22 hhhh
 
29.10.12
10:09
(20) ну можно забить на это меню. Пусть всегда доступно. Вряд ли пользователи полезут менять этого исполнителя, у них и без этого много дел.
23 QbeeQ
 
29.10.12
10:12
(22) Как раз в этом меню почти вся работа :)
24 QbeeQ
 
29.10.12
10:47
Не тонуть!
25 hhhh
 
29.10.12
10:54
(24) просто вы занимаетесь странным. то есть пишете программу не нормальным путем, а через задницу.

То есть ваша задача: поизучать типовые конфигурации, БСП, книжки почитать, а потом уже за серьезные вещи браться.
26 Buster007
 
29.10.12
10:54
С доступностью вообще беда... у меня, например, из-за доступности в ТЧ какое-то левое поведение было, у тебя тут.
Мб баг...
Попробуй видимость поменять, может не будет такой ерунды.
27 Buster007
 
29.10.12
10:55
+(26) либо в процедурах, которые вызываются из подменю, добавить условия.
28 QbeeQ
 
29.10.12
11:10
(25) Вот уже вторая тема, в которой мне говорят, что я что-то делаю "методологически неверно". Что же такого необычного в том, что я хочу сделать недоступным элемент диалога? Если это "серьезная вещь", то что же тогда простая?
(26) С видимости я начинал, поведение аналогичное
(27) Да, пожалуй, пока обход проблемы только такой, хоть и некрасиво.
В залючении у меня просьба: кто-нибудь из франчей, проверьте у себя подобное поведение в 8.2 и 8.3. Если баг подтвердится напишите 1Сам багрепорт
29 QbeeQ
 
29.10.12
15:34
Неожиданно нашел решение. Совершенно вылетело из головы, что можно управлять видимостью или доступностью не подменю, а его пунктами.

Для Каждого ПунктМеню Из Элементы.ПодменюСменитьИсполнителя.ПодчиненныеЭлементы Цикл
   ПунктМеню.Доступность = ДоступностьЭлементов;
КонецЦикла;
30 olegves
 
29.10.12
15:46
(29) логично, поскольку при этом форме на надо перерисовываться, а значит и не надо вместе с контекстом отправляться на сервер
31 5 Элемент
 
29.10.12
15:51
(30) логично для эсника, но для остальных никак не обычно
32 5 Элемент
 
29.10.12
15:52
*не логично
33 QbeeQ
 
29.10.12
15:55
(31) Для 1Сника тоже необычно, так как меняю доступность позиции контекстного меню, которого в данный момент ещё не нарисовано. Зачем просить сервер его перерисовать?
34 5 Элемент
 
29.10.12
16:00
(33) параметры меню уже прописаны на клиенте, сервер нужен чтобы их поменять.