Здравствуйте уважаемые формучане!
Проблема заключается в следующем, есть форма списка (журнал документа) в котором имеется кнопка в командной панели, необходимо изменять ее видимость в зависимости от состояния выделенного документа журнала. Состояние документов журнала хранится в регистре сведений. Все это в принципе реализовано, но имеется неприятная штука. Так как при изменении видимости кнопки "Статусы" форма обращается на сервер и соответственно перерисовывается что вызывает центрирование динамического списка документов на выделенной строке и от этого этот список "скачет". Как решить данную задачу без "скачков"
Пытался найти способ отключения автоцентрирования выделенной строки динамического списка, но так и не нашел.
azamatnadyrkulov,
код выложу чуть позже
Процедура при активизации строки на форме
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
ВыполнитьОбработкуСтроки(Элементы.Список.ТекущаяСтрока, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьОбработкуСтроки(Ссылка, Форма, ИмяГруппыСтатусов = "ФормаУправлениеСтатусами") Экспорт
ТипОбъекта = ПолучитьТипОбъекта(Форма.ИмяФормы);
Если ТипОбъекта = Неопределено Тогда
Возврат;
КонецЕсли;
СуществуютСтатусыПоТипуОбъекта = УправлениеСтатусамиПроцессов.СуществуютСтатусыПоТипуОбъекта(ТипОбъекта);
ГруппаСтатусов = Форма.КоманднаяПанель.ПодчиненныеЭлементы.Найти(ИмяГруппыСтатусов);
Попытка
ТекущийСтатус = УправлениеСтатусамиПроцессов.ПолучитьТекущийСтатус(Ссылка);
ТекущееСостояние= УправлениеСтатусамиПроцессов.ПолучитьТекущееСостояние(Ссылка);
Если ТекущееСостояние = "Отменено" Тогда
НаборПрав = Новый Структура("Редактирование,Завершить,Отменить,Отложить,ШагНазад", Ложь, Ложь, Ложь, Ложь, Ложь);
ГруппаСтатусов.Видимость = Ложь;
Иначе
НаборПрав = УправлениеСтатусамиПроцессов.ПолучитьНаборПрав(ТекущийСтатус);
ГруппаСтатусов.Видимость = Истина;
КонецЕсли;
Попытка
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость = НаборПрав.Завершить;
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтложить.Видимость = НаборПрав.Отложить;
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтменить.Видимость = НаборПрав.Отменить;
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаШагНазад.Видимость = НаборПрав.ШагНазад;
Исключение
Попытка
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость = НаборПрав.Завершить;
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтложить.Видимость = НаборПрав.Отложить;
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаОтменить.Видимость = НаборПрав.Отменить;
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаУправлениеСтатусами1.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаШагНазад.Видимость = НаборПрав.ШагНазад;
Исключение
КонецПопытки;
КонецПопытки;
Исключение
КонецПопытки;
КонецПроцедуры
Какой тип возвращает ПолучитьТипОбъекта() ? Если саму форму на сервер не гоняете, то список не должен перепозиционироваться.
А вообще, раз статусы хранятся в регистре сведений, то я бы изменил сам запрос списка, получал бы нужный статус уже в список и при нажатии на строку устанавливал необходимую видимость, вместо вызова непонятных пяти сторонних процедур. У Вас судя по коду слишком "мудрено" сделано, использование попыток (еще и вложенных) там где это, по логике, не нужно, наталкивает на эту мысль.
Получитьтипобъекта() возвращает строку типа документ.искомыйдокумент
Получитьтипобъекта() возвращает строку типа документ.искомыйдокумент
В том то и проблема что изменение видимости сама обращается на сервер
для прочтения
http://pro1c.org.ua/redirect.php?http://1clancer.ru/article/optimalnoe_izmenenie_vidimosti_elementov_na_upravlyaemoj_forme_1105
Значит просто не дописали СП. Увы.
Ребята выручайте уже 3 день ищу ответ на данный вопрос. может я подхожу не стой стороны к проблеме так как опыт не такой уж и большой в 1С
может что - то еще рассказать о форме в которой я пытаюсь сделать эту видимость
ТекущаяСтрока = Элементы.Список.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость = ТекущаяСтрока.ИмяМоейКолонкиКотороеСодержитСтатус;
// и дальше еще строки для каждой кнопки/группы
КонецЕсли
ТекущаяСтрока = Элементы.Список.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
ГруппаСтатусов.ПодчиненныеЭлементы.ФормаОбработкаИзменениеСтатусаЗавершить.Видимость = ТекущаяСтрока.ИмяМоейКолонкиКотороеСодержитСтатус;
// и дальше еще строки для каждой кнопки/группы
КонецЕсли
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua