Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 02:40

УТ 11: При выделении множества строк невозможно отменить выделение одной

Автор PavelVaskan, 06 фев 2019, 14:37

0 Пользователей и 1 гость просматривают эту тему.

PavelVaskan

Конфигурация УТ 11 для Балтии.

Задача:
В табличной части списка Номенклатура на выделении Ctrl не работает для снятия выделения. Скажем, список товара или счетов, надо выбрать несколько определенных позиций, зажимаем Ctrl и тыкаем куда надо, а если надо убрать выделение, повторный клик ничего не дает, просто позиционируется в ячейку.

То есть, при нажатой клавише Ctrl и выделении множества строк невозможно отменить выделение одной повторным нажатием.

ВЫЯВЛЕНА ЗАКОНОМЕРНОСТЬ: если процедура ПриАктивизацииСтроки() списка или табличного поля на форме использует вызов сервера (если хоть где-то в ней вызывается сервер), то отмена выделения при нажатой клавише Ctrl и повторном клике на такую строку НЕ ПРОИСХОДИТ.

ВОПРОС НАЧАЛЬСТВА: Может быть, проблему можно устранить как-то общим методом или способом?

К сожалению, в конфигурации УТ 11 для Балтии очень во многих процедурах ПриАктивизацииСтроки() списка или табличного поля на формах используется вызов сервера, теперь это переделать без потери функциональности сложно или даже практически невозможно.

Буду благодарен за любую помощь - м.б. есть какие-то настройки элементов формы, элемента строки, которые можно использовать для положительного результата? Как добиться снятия выделения строки при нажатой клавише Ctrl и повторном клике?

LexaK

странно, только что попробовал, (если у формы/таблицы РежимВыделения = Множественный)   выделил несколько строк, с шифтом
первую и 10-ю, потом нажал CTRL и кликнул по выделенной отменилось выделение именно одной строки
если помогло нажмите: Спасибо!

PavelVaskan

Цитата: LexaK от 06 фев 2019, 14:48
странно, только что попробовал, (если у формы/таблицы РежимВыделения = Множественный)   выделил несколько строк, с шифтом
первую и 10-ю, потом нажал CTRL и кликнул по выделенной отменилось выделение именно одной строки

А в процедуре ПриАктивизацииСтроки() у Вас при этом что?.. Добавьте туда вызов серверного метода - чтобы считывал код номенклатуры или номер документа на сервере, например - какой-нибудь сущности, что у нас в строке таблицы.

Я же говорю: если процедура ПриАктивизацииСтроки() остутствует или в ней нет вызова сервера, всё работает... Если вызывать сервер ПриАктивизацииСтроки() - не работает!
Добавлено: 06 фев 2019, 15:16


Я про считывание данных сущности из таблицы на сервере в процедуре ПриАктивизацииСтроки() для примера - понятно, что считывать данные лучше в другом месте.

Речь о том, что если в процедуре ПриАктивизацииСтроки() абы какой, любой вызов сервера, то не работает.

У меня в конфигурации порядка 50 таких мест и таких процедур ПриАктивизацииСтроки() с преразличнейшими вызовами серверных методов. Их переделать, так, чтобы без вызова сервера было - сложно...

LexaK

может что-то и слетает, мне не удалось найти такого примера, все события при активизации строки, вызывали клиента
попробуйте допилить, у вас же есть список выделенных строк, в событии при активизации сделайте нужные действия с ним и все дела.
если помогло нажмите: Спасибо!

antoneus

А какая версия платформы? У меня, например, в СП написано

ПриАктивизацииСтроки (OnActivateRow)
Синтаксис:

ПриАктивизацииСтроки()
Описание:

Вызывается при активизации строки таблицы.
Примечание:

В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.

UPD: хотя, воткнул в обработчик вызов серверной процедуры - снятие выделения с Ctrl работает.

PavelVaskan

Цитата: antoneus от 06 фев 2019, 16:15
А какая версия платформы? У меня, например, в СП написано

ПриАктивизацииСтроки (OnActivateRow)
Синтаксис:

ПриАктивизацииСтроки()
Описание:

Вызывается при активизации строки таблицы.
Примечание:

В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.

UPD: хотя, воткнул в обработчик вызов серверной процедуры - снятие выделения с Ctrl работает.

Спасибо!

Версия платформы: 1С:Предприятие 8.3 (8.3.12.1685)
Добавлено: 06 фев 2019, 16:44


Посмотрел поиском: в конфигурации 307 процедур ПриАктивизацииСтроки(), во многих из них другими программистами используются серверные методы...

Всё что остаётся - доложить о ситуации начальству...

Если всё исправлять (и возможно ли это - без потери функциональности исправляемых мест?), то это долго, не одна неделя...
Добавлено: 06 фев 2019, 16:53


Цитата: LexaK от 06 фев 2019, 16:10
может что-то и слетает, мне не удалось найти такого примера, все события при активизации строки, вызывали клиента
попробуйте допилить, у вас же есть список выделенных строк, в событии при активизации сделайте нужные действия с ним и все дела.

Что за список выделенных строк? Какой это параметр? Конкретнее? как с ним работать???
Добавлено: 06 фев 2019, 17:00


Цитата: antoneus от 06 фев 2019, 16:15
У меня, например, в СП написано:

ПриАктивизацииСтроки (OnActivateRow)
Синтаксис:

ПриАктивизацииСтроки()
Описание:

Вызывается при активизации строки таблицы.
Примечание:

В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.


ВНИМАНИЕ, ВОПРОС: оно в древних (первых) версиях 8-й платформы 1С так и работало (так и было оговорено - чтобы сервер при аткивизации строки не вызвать) или эта особенность появилась позже?

То есть - всегда так работало или со временем появилось?
Добавлено: 06 фев 2019, 17:48


Цитата: LexaK от 06 фев 2019, 16:10
может что-то и слетает, мне не удалось найти такого примера, все события при активизации строки, вызывали клиента
попробуйте допилить, у вас же есть список выделенных строк, в событии при активизации сделайте нужные действия с ним и все дела.

УРА !!!  НАШЁЛ:

ТаблицаФормы (FormTable)
ВыделенныеСтроки (SelectedRows)
Использование:

Только чтение.
Описание:

Тип: Массив.
Содержит массив идентификаторов выделенных строк.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
См. также:

Расширение таблицы формы для динамического списка
Расширение таблицы формы для таблицы значений
ТаблицаФормы, метод ДанныеСтроки
ДанныеФормыКоллекция, метод НайтиПоИдентификатору
ДанныеФормыДерево, метод НайтиПоИдентификатору
ДанныеФормыСтруктураСКоллекцией, метод НайтиПоИдентификатору
Добавлено: 07 фев 2019, 14:37


ИТОГО РЕШЕНИЕ:

В общем клиентском модуле делаем процедуру (в данном случае - в общем модуле РаботаСДиалогамиКлиент):


Процедура ОткорректироватьВыделениеСтрок(ПредыдущееКоличествоВыделенныхСтрок, МассивВыделенныеСтроки, ТекущаяСтрока) Экспорт
   
   Если ПредыдущееКоличествоВыделенныхСтрок = МассивВыделенныеСтроки.Количество() Тогда
      
      МассивВыделенныеСтроки.Удалить(МассивВыделенныеСтроки.Найти(ТекущаяСтрока));   
      
   КонецЕсли;
   
   ПредыдущееКоличествоВыделенныхСтрок = МассивВыделенныеСтроки.Количество();
   
КонецПроцедуры



В модуле формы, содержащей процедуру таблицы формы ПриАктивизацииСтроки() вставляем:

1. Вверху, в разделе объявления переменных:

&НаКлиенте
Перем ПредыдущееКоличествоВыделенныхСтрок;


2. в процедуре ПриОткрытии():

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   
   ПредыдущееКоличествоВыделенныхСтрок = 0;
   
   ..........
   
КонецПроцедуры


3. в процедуре [...]ПриАктивизацииСтроки():

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
      
   ....
   
        // вызвов сервера
   локальнаяНаСеревереПолучитьЗначениеРеквизитов(СтрокаТаблицыНоменклатуры.Ссылка);

      // вызов нашей процедуры коррекции выделения строк       РаботаСДиалогамиКлиент.ОткорректироватьВыделениеСтрок(ПредыдущееКоличествоВыделенныхСтрок, Элемент.ВыделенныеСтроки, Элемент.ТекущаяСтрока);

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


И ВСЁ РАБОТАЕТ, НЕСМОТРЯ НА НЕРЕКОМЕНДУЕМЫЕ СЕРВЕРНЫЕ ВЫЗОВЫ ВНУТРИ ПриАктивизацииСтроки() !!!  :befhbt: :zebzdr:

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск