Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Видимость элементов командной панели в управляемых формах
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
azamatnadyrkulov
Здравствуйте уважаемые формучане!
Проблема заключается в следующем, есть форма списка (журнал документа) в котором имеется кнопка в командной панели, необходимо изменять ее видимость в зависимости от состояния выделенного документа журнала. Состояние документов журнала хранится в регистре сведений. Все это в принципе реализовано, но имеется неприятная штука. Так как при изменении видимости кнопки "Статусы" форма обращается на сервер и соответственно перерисовывается что вызывает центрирование динамического списка документов на выделенной строке и от этого этот список "скачет". Как решить данную задачу без "скачков"

Пытался найти способ отключения автоцентрирования выделенной строки динамического списка, но так и не нашел.

azamatnadyrkulov,
код выложу чуть позже

Процедура при активизации строки на форме
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)

    ВыполнитьОбработкуСтроки(Элементы.Список.ТекущаяСтрока, ЭтаФорма);

        
КонецПроцедуры


Процедура ВыполнитьОбработкуСтроки
&НаКлиенте
Процедура ВыполнитьОбработкуСтроки(Ссылка, Форма, ИмяГруппыСтатусов = "ФормаУправлениеСтатусами") Экспорт
    ТипОбъекта = ПолучитьТипОбъекта(Форма.ИмяФормы);
    Если ТипОбъекта = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    СуществуютСтатусыПоТипуОбъекта     = УправлениеСтатусамиПроцессов.СуществуютСтатусыПоТипуОбъекта(ТипОбъекта);
    ГруппаСтатусов                     = Форма.КоманднаяПанель.ПодчиненныеЭлементы.Найти(ИмяГруппыСтатусов);
    Попытка
        ТекущийСтатус     = УправлениеСтатусамиПроцессов.ПолучитьТекущийСтатус(Ссылка);
        ТекущееСостояние= УправлениеСтатусамиПроцессов.ПолучитьТекущееСостояние(Ссылка);
        Если ТекущееСостояние = "Отменено" Тогда
            НаборПрав                     = Новый Структура("Редактирование,Завершить,Отменить,Отложить,ШагНазад", Ложь, Ложь, Ложь, Ложь, Ложь);
            ГруппаСтатусов.Видимость     = Ложь;
        Иначе
            НаборПрав                     = УправлениеСтатусамиПроцессов.ПолучитьНаборПрав(ТекущийСтатус);
            ГруппаСтатусов.Видимость     = Истина;
        КонецЕсли;
        
        Попытка
            ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость     = НаборПрав.Завершить;
            ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтложить.Видимость     = НаборПрав.Отложить;
            ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтменить.Видимость     = НаборПрав.Отменить;
            ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаШагНазад.Видимость     = НаборПрав.ШагНазад;
        Исключение
            Попытка
                ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость     = НаборПрав.Завершить;
                ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтложить.Видимость     = НаборПрав.Отложить;
                ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтменить.Видимость     = НаборПрав.Отменить;
                ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаШагНазад.Видимость     = НаборПрав.ШагНазад;
            Исключение
            
            КонецПопытки;    
            
        КонецПопытки;    
    Исключение
        
    КонецПопытки;
КонецПроцедуры
logist
Какой тип возвращает ПолучитьТипОбъекта() ? Если саму форму на сервер не гоняете, то список не должен перепозиционироваться.
А вообще, раз статусы хранятся в регистре сведений, то я бы изменил сам запрос списка, получал бы нужный статус уже в список и при нажатии на строку устанавливал необходимую видимость, вместо вызова непонятных пяти сторонних процедур. У Вас судя по коду слишком "мудрено" сделано, использование попыток (еще и вложенных) там где это, по логике, не нужно, наталкивает на эту мысль.
azamatnadyrkulov
Получитьтипобъекта() возвращает строку типа документ.искомыйдокумент

Получитьтипобъекта() возвращает строку типа документ.искомыйдокумент

В том то и проблема что изменение видимости сама обращается на сервер
sava1
для прочтения
необходимо зарегистрироваться для просмотра ссылки
logist
Цитата(azamatnadyrkulov @ 19.12.14, 15:42) необходимо зарегистрироваться для просмотра ссылки
В том то и проблема что изменение видимости сама обращается на сервер

Ну, так перепишите все это, что бы все было в запросе списка, и тогда не надо будет обращаться к серверу даже в самой форме.
azamatnadyrkulov
Цитата(sava1 @ 19.12.14, 20:00) необходимо зарегистрироваться для просмотра ссылки
для прочтения
необходимо зарегистрироваться для просмотра ссылки


Большое спасибо это уже читал там метод вкладок страниц

Цитата(logist @ 19.12.14, 20:01) необходимо зарегистрироваться для просмотра ссылки
Ну, так перепишите все это, что бы все было в запросе списка, и тогда не надо будет обращаться к серверу даже в самой форме.


можете подробнее объяснить что значит чтобы все былов запросе
динамический список не имеет запроса он обращается на прямую к документу
Petre
Цитата(azamatnadyrkulov @ 19.12.14, 16:47) необходимо зарегистрироваться для просмотра ссылки
динамический список не имеет запроса он обращается на прямую к документу

Динамический список построен на СКД и использует либо дефолтовый запрос при указании объекта, либо произвольный запрос.
azamatnadyrkulov
Цитата(Petre @ 19.12.14, 21:06) необходимо зарегистрироваться для просмотра ссылки
Динамический список построен на СКД и использует либо дефолтовый запрос при указании объекта, либо произвольный запрос.


спасибо буду знать
но все же как изменять видимость кнопки не обращаясь на сервер
если использовать элементы.моякнопка.видимость - срабатывает перерисовка

даже если я получу статус в списке запросом
мне ведь нужно менять видимость кнопки которая находится на командной панели в зависимости от статуса выделенной строки
Petre
Цитата(azamatnadyrkulov @ 19.12.14, 17:15) необходимо зарегистрироваться для просмотра ссылки
но все же как изменять видимость кнопки не обращаясь на сервер

Обратиться к фирме 1с и попросить ее убрать обращение на сервер при изменении свойства "видимость".

Попробуйте "доступность". В СП по поводу изменения этого свойства у кнопки ничего не сказано на счет обращения на сервер.
azamatnadyrkulov
Цитата(Petre @ 19.12.14, 21:27) необходимо зарегистрироваться для просмотра ссылки
Попробуйте "доступность". В СП по поводу изменения этого свойства у кнопки ничего не сказано на счет обращения на сервер.


большое спасибо пробовал но почему то сервер вызывается даже при изменении доступности, хоть и про доступность пишут что она не должна вызывать сервер
Petre
Значит просто не дописали СП. Увы.
azamatnadyrkulov
Ребята выручайте уже 3 день ищу ответ на данный вопрос. может я подхожу не стой стороны к проблеме так как опыт не такой уж и большой в 1С

может что - то еще рассказать о форме в которой я пытаюсь сделать эту видимость
logist
Цитата(azamatnadyrkulov @ 19.12.14, 17:15) необходимо зарегистрироваться для просмотра ссылки
даже если я получу статус в списке запросом
мне ведь нужно менять видимость кнопки которая находится на командной панели в зависимости от статуса выделенной строки

Если Вы получите статус в запросе динамического списка, то он у вас будет как бы колонкой этого списка (не видимой) и когда происходит ПриАктивизацииСтроки то это значение находится в строке списка
Элементы.Список.ТекущиеДанные.ИмяМоейКолонкиКотороеСодержитСтатус
Судя по запросу выше, таких колонок у вас должно быть 5, 4 на каждое право и одна на ТекущийСтатус, соответственно дальше вы пишите в этом же событии примерно такой код
ТекущаяСтрока = Элементы.Список.ТекущиеДанные;
Если ТекущаяСтрока  <> Неопределено Тогда
  ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость = ТекущаяСтрока.ИмяМоейКолонкиКотороеСодержитСтатус;
  // и дальше еще строки для каждой кнопки/группы
КонецЕсли

Запрос формируете таким образом, что он в ИмяМоейКолонкиКотороеСодержитСтатус помещал нужный вам вариант булево.
azamatnadyrkulov
Цитата(logist @ 19.12.14, 23:36) необходимо зарегистрироваться для просмотра ссылки
Если Вы получите статус в запросе динамического списка, то он у вас будет как бы колонкой этого списка (не видимой) и когда происходит ПриАктивизацииСтроки то это значение находится в строке списка
Элементы.Список.ТекущиеДанные.ИмяМоейКолонкиКотороеСодержитСтатус
Судя по запросу выше, таких колонок у вас должно быть 5, 4 на каждое право и одна на ТекущийСтатус, соответственно дальше вы пишите в этом же событии примерно такой код
ТекущаяСтрока = Элементы.Список.ТекущиеДанные;
Если ТекущаяСтрока  <> Неопределено Тогда
  ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость = ТекущаяСтрока.ИмяМоейКолонкиКотороеСодержитСтатус;
  // и дальше еще строки для каждой кнопки/группы
КонецЕсли

Запрос формируете таким образом, что он в ИмяМоейКолонкиКотороеСодержитСтатус помещал нужный вам вариант булево.


спасибо буду пробовать, извините за пробел были дела
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.