Сообщения от тулбаров теперь транслируются в ПриПолученииКомандыГлавнымОкном()

Автор MWW_Ruza, 24 марта 2024, 00:55

« назад - далее »

MWW_Ruza

Тестовая сборка обновлена.

Сообщения от тулбаров теперь транслируются в ПриПолученииКомандыГлавнымОкном().

Я так понимаю, это "по мотивам моей хотелки" - ?
Что-то я не понял, как это должно работать...
В глобальный модуль, помещаю такую процедуру:

Процедура ПриПолученииКомандыГлавнымОкном(wParam, lParam, ФСО)
   Если wParam = 32890 Тогда
      ФСО = 0;
      Предупреждение("Нажали перенос в другую группу!");
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

В справочнике "Номенклатура" нажимаю "Перенести в группу". Отрабатывает, сообщает мое предупреждение: "Нажали перенос в другую группу!"... Прекрасно... Сюда, я могу запихнуть что хочу - например, вопрос "Перенести <10> выделенных элементов в из группы XXX группу YYY - ?". Но, дальше, при нажатии ОК, появляется стандартное сообщение - "Перенести хлемент ХХХ в группу УУУ - ?"... ФСО = 0 не помогает, СтатусВозврата(0) тоже...
Что я не так делаю? Как правильно подавить стандартное системное сообщение, подменив его на свое?


MWW_Ruza

Аааа... Не заметил это сообщение, точнее, увидел, но не придал значения - по названию, "Проблема с отменой", не понял, что речь идет именно об этой отмене... Думал "сам дурак", немогу в трех строчках кода разобраться, пробовал "и так и этак" результат один...

Тут еще, как я понимаю, кроме подмены месаги, нужно и действие команды прервать...
Из als:
<СтандартнаяОбработка> - флаг стандартной обработки, при установке в ноль, системная обработка сообщения не будет вызвана.
При установке в процедуре статуса возврата в ноль, системная обработка сообщения не будет вызвана.

ФСО, по идее, должен подавлять вывод стандартного сообщения(вопроса?), а СтатусВозврата(0) прерывать стандартное действие совсем...
Иначе, даже если я подменю текст вопроса на свой, а пользователь нажмет в этом диалоге "Нет", то как этот "Нет" передать в команду...
Т.е., если нет в процедуре СтатусВозврата(0), то команда должна отработать штатно, только при выставленном ФСО=0 не выводить текст вопроса/сообщения(мы это можем сами сделать, эмулировав это окошко с вопросом).
А если нужно, что-бы действие не выполнилось - тогда СтатусВозврата(0)...


АЛьФ

Цитата: MWW_Ruza от 24 марта 2024, 10:01Аааа... Не заметил это сообщение, точнее, увидел, но не придал значения - по названию, "Проблема с отменой", не понял, что речь идет именно об этой отмене... Думал "сам дурак", немогу в трех строчках кода разобраться, пробовал "и так и этак" результат один...

Тут еще, как я понимаю, кроме подмены месаги, нужно и действие команды прервать...
Из als:
<СтандартнаяОбработка> - флаг стандартной обработки, при установке в ноль, системная обработка сообщения не будет вызвана.
При установке в процедуре статуса возврата в ноль, системная обработка сообщения не будет вызвана.

ФСО, по идее, должен подавлять вывод стандартного сообщения(вопроса?), а СтатусВозврата(0) прерывать стандартное действие совсем...
Иначе, даже если я подменю текст вопроса на свой, а пользователь нажмет в этом диалоге "Нет", то как этот "Нет" передать в команду...
Т.е., если нет в процедуре СтатусВозврата(0), то команда должна отработать штатно, только при выставленном ФСО=0 не выводить текст вопроса/сообщения(мы это можем сами сделать, эмулировав это окошко с вопросом).
А если нужно, что-бы действие не выполнилось - тогда СтатусВозврата(0)...


На самом деле обработка статуса возврата - это изначальная ошибка. Т.е. была завязка на статус возврата, а потом сделал ФСО, чтобы было единообразно с остальными. Статус возврата оставлен был для совместимости.
В новой обработке команд статус возврата уже не будет учитываться. Так что не надо на него ориентироваться.

Стандартная команда либо выполняется, либо нет. Невозможно сделать, чтобы вопрос не задавался, а обработка была стандартной. Если отменяешь стандартную обработку, то все берешь на себя.

АЛьФ

Переделал сейчас обработку команд от тулбара. Нашел еще, что в модальных окнах обработка не перехватывало.
Попробуй с этой версией посмотреть.

АЛьФ

Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.

АЛьФ


sau

Цитата: АЛьФ от 24 марта 2024, 11:06Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Как раз делал настройку видимости дерева... "Видимость" устанавливается, а вот чтение это свойства всегда пустое.
Интересно установить значение для дерева.
По теме "СУПЕР!!!"

sau

Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии

АЛьФ

Цитата: sau от 24 марта 2024, 16:53Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии

Они и должны быть недоступны в этом случае. Если отключена иерархия, то движок не знает какого родителя или владельца устанавливать для новых элементов.

sau

Цитата: АЛьФ от 24 марта 2024, 17:15
Цитата: sau от 24 марта 2024, 16:53Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии

Они и должны быть недоступны в этом случае. Если отключена иерархия, то движок не знает какого родителя или владельца устанавливать для новых элементов.
Это понятно... Но можно оставить родителя пустым или установить какое-то значение (новый элемент может создаваться в диалоге, т.е. по Insert все рабоает, неплохо бы и из тулбара) , т.е. важно опять же возможность, а что потом решим, т.е. обработка нажатия все равно будет перехвачена

АЛьФ

Цитата: sau от 24 марта 2024, 17:23
Цитата: АЛьФ от 24 марта 2024, 17:15
Цитата: sau от 24 марта 2024, 16:53Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии

Они и должны быть недоступны в этом случае. Если отключена иерархия, то движок не знает какого родителя или владельца устанавливать для новых элементов.
Это понятно... Но можно оставить родителя пустым или установить какое-то значение (новый элемент может создаваться в диалоге, т.е. по Insert все рабоает, неплохо бы и из тулбара) , т.е. важно опять же возможность, а что потом решим, т.е. обработка нажатия все равно будет перехвачена

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

АЛьФ

Цитата: sau от 24 марта 2024, 16:47
Цитата: АЛьФ от 24 марта 2024, 11:06Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Интересно установить значение для дерева.

Сделал установку, но тут вылезла проблема - 1С заполняет это дерево при раскрытии ветки. Очевидно, это сделано для оптимизации построения дерева. Надо бы было копать команду "Найти в дереве", но пока я сделал "в лоб" - при поиске просто раскрываю ветки дерева, а потом их сворачиваю.
Вроде работает, но нарушает свернутость/развернутость дерева. И явно будет тормозить на сложных справочниках.
Буду еще думать как переделать.

sau

Цитата: АЛьФ от 24 марта 2024, 18:53
Цитата: sau от 24 марта 2024, 16:47
Цитата: АЛьФ от 24 марта 2024, 11:06Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Интересно установить значение для дерева.

Сделал установку, но тут вылезла проблема - 1С заполняет это дерево при раскрытии ветки. Очевидно, это сделано для оптимизации построения дерева. Надо бы было копать команду "Найти в дереве", но пока я сделал "в лоб" - при поиске просто раскрываю ветки дерева, а потом их сворачиваю.
Вроде работает, но нарушает свернутость/развернутость дерева. И явно будет тормозить на сложных справочниках.
Буду еще думать как переделать.
Можно дать возможность позиционировать на доступный элемент, т.е. уже развернутый (сформированный 1С), но дать возможность разворачивать группу. Тогда каждый желающий может сам построить поиск элемента по дереву и определить долго это или нет (нужно ему такое или нет)

MWW_Ruza

Да, на новой тестовой сборке, это:

Процедура ПриПолученииКомандыГлавнымОкном(вПарам, иПар, ФСО)
   Если вПарам = 32890 Тогда
      ФСО = 0;
      Если Вопрос("Нажали перенос в другую группу, выполнить?", 4) = 7 Тогда
          СтатусВозврата(0);
      Иначе
          ФСО = 1;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

отрабатывает, если нажать "НЕТ", то без всяких лишних месаг перенос отменяется, все ОК.
А вот если нажать "ДА", то без ФСО = 1 ничего не происходит, процедура не отрабатывает, так же как и при "НЕТ", несмотря на то, что СтатусВозврата(0) при этом не вызываетсся... А в том виде, как процедура выше, перенос происходит, но и стандартная месага при нажатии на ДА вылезает(ФСО то = 1)...
Я это предвидел, поэтому и писал выше, что "хорошо-бы разделить вывод месаги и поведение самой процедуры", если это в принципе возможно...
А если нет, то то надо в любом случае делать ФСО = 0, и переносить "пешком" элементы,  меняя их родителя в цикле.... В принципе - терпимо, можно и так конечно, для моей задачи вполне пойдет. :-)