Имя: Пароль:
1C
1C 7.7
v7: Странное поведение видимости кнопки
,
0 Масянька
 
07.12.17
13:46
День добрый!
Есть документ. В нем есть несколько слоёв (ну, по стандарту - шапка, табличная часть, подвал и пр.). На слое "Табличная часть" есть такая хитрая (я бы назвала другим словом :( ) кнопка... Эта кнопка копирует артикул номенклатуры в буфер обмена. Но эта кнопка должна (!!!) отображаться, если есть артикул номенклатуры.
Итак, слой - кнопка - видимость.
Для установки видимости код:

Функция ИнформацияОбАртикуле()
    
    ИнфоТекст = "";
    
    Если Номенклатура.Выбран() = 0 Тогда
        Форма.кнCopy.Видимость(0);
        Возврат(ИнфоТекст);
    Иначе
        Если (ПустоеЗначение(Номенклатура.АртикулПрайс) = 0) Тогда
            ИнфоТекст = СокрЛП(Номенклатура.АртикулПрайс);
        КонецЕсли;
        Форма.кнCopy.Видимость(1);
        Возврат (ИнфоТекст);
    КонецЕсли;
    
КонецФункции // ИнформацияОбАртикуле

И вылезла интересная фигня:
когда отображена табличная часть и происходит перемещение по таблице - все шикарно - есть кнопка, нет кнопки, есть кнопка... Но - если при наличии кнопки (т. е. есть артикул и кнопка должна быть видна), открыть другой слой (без таб. части) - кнопка остается на форме.
ЧЯДНТ?
Кнопка помещена на слой таблицы.
Спасибо.
1 Ёпрст
 
07.12.17
13:57
проверить, на каком слое кнопка, + посмотреть код при семене закладки, как ты упраяляешь там видимостью слоя
2 aka AMIGO
 
07.12.17
13:57
ИМХО в проц. ПриВыбореЗакладки можно вставить условие по видимости этой кнопки.
3 Ёпрст
 
07.12.17
13:58
и там, при желании, можешь поиграться видимостью чего угодно
4 Злопчинский
 
07.12.17
13:58
Двоечница, что сказать ;-)
5 Slypower
 
07.12.17
13:59
у всех одно и то же решение, самое простое)
6 Масянька
 
07.12.17
13:59
(1) На нужном (в конфигураторе смотрела).
Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
    
    Если НомерЗакладки=1 Тогда
        Форма.ИспользоватьСлой("Шапка,Основной,Подвал");
    Иначе
        ОбновитьНадписи();
        Форма.ИспользоватьСлой("Шапка,ТабличнаяЧасть,Подвал");
    КонецЕсли;        
    УстановкаВидимостиСуммВПодвале();
    
КонецПроцедуры
7 Масянька
 
07.12.17
14:00
(3) А почему? Почему при изменении видимости слой по барабану?
8 Масянька
 
07.12.17
14:00
(4) Отличников не смею отвлекать.
9 Масянька
 
07.12.17
14:00
(5) Какое?
10 aka AMIGO
 
07.12.17
14:01
(7) Вот у меня одно из решений, кнопка не скачет по слоям
https://i.paste.pics/14e8279b82bcbe87a971f765d6d67226.png
11 Масянька
 
07.12.17
14:03
(10) Не, вы мне скажите - почему скачет?
12 aka AMIGO
 
07.12.17
14:03
(11) Скажу: не знаю :)
13 Злопчинский
 
07.12.17
14:04
Вообще сделано излишне
14 Ёпрст
 
07.12.17
14:04
(6) зачет чего,
15 Ёпрст
 
07.12.17
14:05
смотри параметры метода ИспользоватьСлой()
16 Злопчинский
 
07.12.17
14:06
(0) потому что двоечница
И в твоей функции нет анализа на каком ты слое
Оттого что ты переключилась на шапку тч у тебя по прежнему доступна
17 Масянька
 
07.12.17
14:07
(15) Ты будешь смеяться, но ИспользоватьСлой("...", 2) - не помогло.
18 Злопчинский
 
07.12.17
14:07
Сделано плохо
У пользователя дБ стабильность в работе
Кнопку делать видимой или невидимой только при переключении слоя
19 Злопчинский
 
07.12.17
14:08
При нажатии на кнопку смотреть если артикул не задан - сообщать пользователю о невозможности выполнить лействие
20 Злопчинский
 
07.12.17
14:09
При наличии - копировать буфер в
21 Ёпрст
 
07.12.17
14:09
(17) покажи настройку порядка обхода (скриншот), где видно твою кнопку и слой
22 Злопчинский
 
07.12.17
14:10
А то пользователь должен обременяиь себя лишним знанием типа если я хочу скопировать но кнопки нет значит ч номенклатуре нет артикула
23 Злопчинский
 
07.12.17
14:10
Зачем это юзверю?
24 Масянька
 
07.12.17
14:14
25 Ёпрст
 
07.12.17
14:19
(24) вот это окошко покажи:
http://pics.rsh.ru/img/_pkq6qpfd.jpg
26 Ёпрст
 
07.12.17
14:20
Ну и это, турбомд используешь ?
Есть уверенность, что выполняется этот код, а не другой и не другая форма ?
27 Масянька
 
07.12.17
14:21
28 Масянька
 
07.12.17
14:23
+ (27) кнCopy ни в одной другой процедуре/функции не используется. Только тут.
Форма док-та. Одна.
29 Масянька
 
07.12.17
14:23
(27) Нет - про турбомд .
30 Ёпрст
 
07.12.17
14:24
ну, видать под этой кнопкой есть еще, такая же, на другом слое ?
31 Ёпрст
 
07.12.17
14:24
сдвинь её вправо, тоже "появляется"

Чудес то, не бывает.
32 Масянька
 
07.12.17
14:26
(30) http://pastenow.ru/239fea43460e23500ff87333af4f1d4b
Кроме таб. части нет нигде.
33 Масянька
 
07.12.17
14:27
(31) http://pastenow.ru/4774be38d891385f0b70f33c78199757
Теперь она в другом месте :) (в предприятии).
34 Ёпрст
 
07.12.17
14:28
Хотя не, забей.
Видимость кнопки "отменяет" "невидимость" слоя.
Это норма :)
смирись.
воткни условие на видимость кнопки в приВыбореЗакладки
35 Масянька
 
07.12.17
14:28
(34) Я подозревала....
И вот на фига тогда слои?!
36 Сияющий в темноте
 
07.12.17
14:29
(35) Можно кнопку на отдельный слой вынести.
37 Масянька
 
07.12.17
14:30
(36) И смысл?
Нужно отображать кнопку, если есть артикул номенклатуры. А номенклатура - в таб. части.
Игла в яйце - яйцо в ларце...
38 Ёпрст
 
07.12.17
14:36
(35)
чтобы так, делать, например
https://cloud.mail.ru/public/e45818152e72/СмотриСам.ert
39 Масянька
 
07.12.17
14:40
(38) Мужчины вообще нормальными рождаются? :)))))
40 Ёпрст
 
07.12.17
14:41
(39) Чего тебя смутило в показанном примере ?
41 mishaPH
 
модератор
07.12.17
14:47
(0) есть глюк такой, что видимости сбрасываются при переключении слоев. От чего зависит х.з. приходится для этой кнопки отрабатывать видимость при смене слоя.
42 aka AMIGO
 
07.12.17
15:01
(41) ре-мю-зе: Если кнопку не трогать (не играться с видимостью) - она так и будет оставаться на выбранном слое -  в ТабличнойЧасти.
Но если переключать видимость без учета слоя, где она находится - может стать видимой на другом слое.
Причина - особенности платформы 7.7.

ЗЫ. возможно, я прав.

ЗЫЫ. Одно из плохих решений для Масяньки - принудительно давить видимость в 0 при выборе других слоев, кроме ТЧ.
Хорошее решение, конечно, подскажут участники ветки.
43 Масянька
 
07.12.17
15:02
44 aka AMIGO
 
07.12.17
15:11
(43) Группа людей со скорбными лицами и музыкальными инструментами.. © ММЖ

Интересно-бы проверить фокус.. переключить слой, когда в ТЧ кнопка не видима, и наоборот, переключится в другой слой когда становится видимой.
Если в 42 написана правда - кнопка в другом слое показываться не будет.
45 Масянька
 
07.12.17
15:18
(42) Не просто прав, а совсем прав :)
Думаю я...
46 Масянька
 
07.12.17
15:20
(44) Если кнопки нет (нет артикула у номенклатуры) - в другом слое норм.
Если кнопка есть (есть артикул у номенклатуры) - в другом слое  тоже кнопка есть.
47 aka AMIGO
 
07.12.17
15:25
(46) Угу, как я и предполагал.. Хоть ничего и не курил.
Рекомендую воспользоваться отвратительным решением из 42. Давить кнопку сразу после оператора:
Процедура ПриВыбореЗакладки(...
  Форма.кнСору.Видимость(0);


Как-то так..
48 Масянька
 
07.12.17
15:27
(47) А как быть с номенклатурой?
49 aka AMIGO
 
07.12.17
15:27
(48) Детка, видимо, лимит понятливости моей на сегодня исчерпан.. :)
50 Сияющий в темноте
 
07.12.17
15:33
Если кнопка на отдельном слое, то мы его показываем, если у номенклатуры есть артикул и всё - в чём проблема отдельного слоя, особенно, если слои можно перечислять в функции видимости - не нужно доп.условий писать.
51 Масянька
 
07.12.17
15:34
(49) Не давится :)

Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
Сообщить("! - " + НомерЗакладки);    
    Если НомерЗакладки=1 Тогда
Сообщить("тут");         
        Форма.кнCopy.Видимость(0);
        Форма.ИспользоватьСлой("Шапка,Основной,Подвал", 2);
    Иначе
        ОбновитьНадписи();
        Форма.ИспользоватьСлой("Шапка,ТабличнаяЧасть,Подвал", 2);
    КонецЕсли;        
    УстановкаВидимостиСуммВПодвале();
    
КонецПроцедуры                                                                  

Если кнопка есть, то после переключение остается.
52 Масянька
 
07.12.17
15:34
(50) Я подумаю...
53 aka AMIGO
 
07.12.17
15:35
(51) А где у тебя условие на номер выбранной закладки?
54 aka AMIGO
 
07.12.17
15:38
...
Сообщить("тут");        
         Форма.кнCopy.Видимость(0);
        Форма.ИспользоватьСлой("Шапка,Основной,Подвал", 2);
    Иначе
        Форма.кнCopy.Видимость(0); //повторить на каждой закладке..

...

У тебя-ж их 5 штук..
55 Масянька
 
07.12.17
15:38
(53) Тут - Если НомерЗакладки=1 Тогда
56 Масянька
 
07.12.17
15:40
ИМХО, собака зарыта тут:

Функция ИнформацияОбАртикуле()
    
    ИнфоТекст = "";
    флКнопка  = 0;

    Если Номенклатура.Выбран() = 1 Тогда
        Если (ПустоеЗначение(Номенклатура.АртикулПрайс) = 0) Тогда
            флКнопка  = 1;
            ИнфоТекст = СокрЛП(Номенклатура.АртикулПрайс);
        КонецЕсли;
    КонецЕсли;

    Форма.кнCopy.Видимость(флКнопка);

    Возврат (ИнфоТекст);
    
КонецФункции // ИнформацияОбАртикуле

Номенклатура-то как была, так и осталась. Несмотря на изменение закладок.
57 Сияющий в темноте
 
07.12.17
16:21
(56) Нужно проверить - видна ли закладка с кнопкой - если нет, то и кнопку показывать не за чем.
58 Масянька
 
07.12.17
16:26
(57) Обошла так:
    Если ((Номенклатура.Выбран() = 1) И (ТекЗакладка = 2)) Тогда
59 Сияющий в темноте
 
07.12.17
16:29
(58) А вообще, у кнопки, кроме видимости есть доступность - в данном случае, когда нет артикула логичнее гасить доступность, чтобы пользователь кнопку видел и понимал, что её нажать нельзя, а если кнопки нет, то он и не поймёт, почему её нет.
60 Масянька
 
07.12.17
16:33
(59) Не-а.
В данном случае, если нет табличной части - нет кнопки.
61 Сияющий в темноте
 
07.12.17
20:27
(60) Тогда ещё проще - табличную часть с кнопкой в один и тот же слой.
62 Злопчинский
 
07.12.17
21:00
Ну тупые...
63 Сияющий в темноте
 
07.12.17
21:16
(62)
Дятлы клювами стучат.
Кнопку видеть не хотят.
А один пришёл такой
И прогнал их всех метлой,
Чтоб такие программисты
Не позорились на мисте,
Ожидая, что народ
Разберёт их г0внокод.
64 Масянька
 
08.12.17
08:49
(61) Я тебя стукну :)
Да, они и так в одном слое.
Как уже сказали умные товарищи выше: видимость кнопки отменяет (по-моему, не отменяет, а имеет высший приоритет) видимость слоя.
65 Сияющий в темноте
 
08.12.17
09:05
слоев,н самом деле,нет
слой-это способ управления видимостью,и,если аы упрпвляете видимостью помимо слоев,то система не помнит видимость каждого элемента на слое
нужно просто,при установке видимости элемента ставить ему не единицу,а видимость слоя,на котором он живет,тогда проблем не будет
66 Масянька
 
08.12.17
09:22
(65) Я не знаю, как это реализовано.
По уму нужно сначала слой, а потом кнопка. В таком случае, если нет слоя - то нет и кнопки.
У как там сделано...
67 Сияющий в темноте
 
08.12.17
09:28
в винде у элементов управления слоев нет,только флаг видимости,отсюда проблемы иирастут
68 Масянька
 
08.12.17
09:31
(67) Может быть...
Но вы (не ты лично :) ) сделали эти слои. Так сделайте нормально (минимум).
69 Злопчинский
 
08.12.17
09:39
(68) что ненормального сделано ив слоях?
70 Сияющий в темноте
 
08.12.17
09:47
там все нормально сделано
берем строку с названиями слоев и устанавливаем видимость одной функцией,а если что-то не устроило,то явно устанавливпем вмдимость элемента,не заботясь о том,на каком он слое
Независимо от того, куда вы едете — это в гору и против ветра!