Имя: Пароль:
1C
 
Медленная перерисовка формы
,
0 Прохожий
 
25.11.22
07:11
Есть Справочник, элементы которого выводятся на форме другого объекта в СписокДинСписок просто запросом с отбором в колонку Ссылка.
Есть на этой форме кнопка УдалитьЭлемент и соответствующая команда. Если строк в списке нет кнопка должна становиться недоступной.
Если на строке Элементы.СписокДинСписокУдалитьФайл.Доступность = НЕ Объект.Ссылка.Пу..... поставить точку останова, то элемент успевает удалиться, а список успевает перерисоваться.
Но в реальном времени условие доступности проверяется раньще чем СписокДинСписок успевает обновиться.
То есть кнопка по прежнему доступна.
Кроме как задержку поставить на ум ничего приличного не приходит.

&НаКлиенте
Процедура УдалитьЭлемент(Команда)

УдалитьНаСервере(Элементы.СписокДинСписок.ТекущиеДанные.Ссылка);        
Элементы.СписокДинСписок.Обновить();
Элементы.СписокДинСписокУдалитьФайл.Доступность = НЕ Объект.Ссылка.Пустая() И НЕ Элементы.СписокДинСписок.ТекущаяСтрока = Неопределено;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура УдалитьНаСервере(Элемент)
    
    Спр = Элемент.ПолучитьОбъект();
    Спр.удалить();
    
КонецПроцедуры


Как дождаться обновления Элементы.СписокДинСписок.Обновить() лучше всего?
1 Прохожий
 
25.11.22
07:21
Беда в том, что Обновить не возвращает по завершении ничего

ТаблицаФормы (FormTable)
Обновить (Refresh)
Синтаксис:
Обновить()
Описание:
Обновляет данные в таблице.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент).
Использование в версии:
Доступен, начиная с версии 8.2.
     Методическая информация
2 АНДР
 
25.11.22
07:23
Замени проверку списка на форме на проверку результата аналогичного запроса в условии видимости.
3 PuhUfa
 
25.11.22
07:39
(0) повесь проверку не в процедуру удаления а в событие ПриИзменении() динамического списка
4 Прохожий
 
25.11.22
07:53
(3) Срабатывает только при интерактивном изменении.
5 Прохожий
 
25.11.22
07:54
(2) Такая мысль была. Но это лишний запрос. А события никакого нет у элемента ПриОкончанииОбновленияМеня() ? типа такого...
6 Прохожий
 
25.11.22
07:55
Или у всей формы типа ФорамПерерисовалась, как модифицированность, только почти наоборот.
7 Прохожий
 
25.11.22
07:56
Или есть такое колдовство - командная панель. Я могу от нее чего-то узнавать в промежутке между отправкой Обновить и событием ПриОкончанииОбновленияЭтойТаблицы()
8 PuhUfa
 
25.11.22
08:22
(4) Если этим списком не слишком активно пользуются, то как вариант можно повесить еще в ПриАктивизацииСтроки
9 asady
 
25.11.22
08:28
(0) проверяй наличие элемента перед удалением - доступность и видимость это уже рюшечки
10 PuhUfa
 
25.11.22
08:46
Вот так вот работает нормально, только что проверил:

&НаСервере
Процедура КомандаУдалитьНаСервере(УдЭлемент)
    УдЭлементОбъект = УдЭлемент.ПолучитьОбъект();
    УдЭлементОбъект.Удалить();
КонецПроцедуры

&НаКлиенте
Процедура КомандаУдалить(Команда)
    КомандаУдалитьНаСервере(Элементы.ДинСписок.ТекущиеДанные.Ссылка);
    Элементы.ДинСписок.Обновить();
    ОбновитьКнопки();
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьКнопки()
    Элементы.КомандаУдалить.Доступность = Элементы.ДинСписок.ТекущиеДанные <>  Неопределено;
КонецПроцедуры
11 Прохожий
 
25.11.22
08:53
(8) Да, этот ответ правильный. Все Спасибо.
12 Прохожий
 
25.11.22
08:56
(10) А так точно не работает. У меня есть кнопка добавить и удалить. Код идентичный. Но на Удалить не успевает. Курьез.
(8) Это правильно и просто.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший