|   |   | 
| 
 | Как сделать одну командую панель для нескольких таблиц на управляемой форме? | ☑ | ||
|---|---|---|---|---|
| 0
    
        TormozIT гуру 02.09.17✎ 10:49 | 
        Имею управляемую форму, в которой есть много реквизитов типа ТаблицаЗначений, создаваемых во время выполнения. Каждая таблица выведена на свою страницу. Над группой страниц расположена командная панель с общими командами для всех таблиц. Часть из этих команд - системные (добавить строку, удалить строки и т.д.). При активизации страницы таблицы командная панель должна направлять свои действия на соответствующую таблицу формы. Свойство "Источник команд" командной панели доступно только в режиме разработки и его нет в объектной модели.
 Как решить такую задачу? | |||
| 1
    
        mistеr 02.09.17✎ 11:04 | 
        Вижу два решения:
 1) размножить панели, нестандартные действия добавлять программно 2) прописать все вручную Я бы выбрал второе. | |||
| 2
    
        TormozIT гуру 02.09.17✎ 11:09 | 
        (1) Поясни "прописать все вручную"     | |||
| 3
    
        TormozIT гуру 02.09.17✎ 11:10 | 
        (1) В "размножить панели" имелось ввиду "размножить командные панели"?     | |||
| 4
    
        mistеr 02.09.17✎ 11:14 | 
        (2) Кнопки с обработчиками, выполняющими соответствующие действия для текущей таблицы.
 (3) Да | |||
| 5
    
        TormozIT гуру 02.09.17✎ 11:19 | 
        По варианту 2 предлагается все стандартные действия для таблицы формы реализовать самому? Если так, то такой вариант очень затратный, т.к. требуется высокая универсальность.     | |||
| 6
    
        Franchiser 02.09.17✎ 11:23 | 
        Очистить источник и добавить свои команды программно     | |||
| 7
    
        TormozIT гуру 02.09.17✎ 11:23 | 
        Вариант с размножением командных панелей понятен и будет работать, но он добавляет очень много лишних кнопок в форму, т.к. (все системные кнопки + мои кнопки) * количество таблиц. Хотелось бы избежать этого.     | |||
| 8
    
        Cyberhawk 02.09.17✎ 13:35 | 
        (7) Можно управлять видимостью групп / команд (кнопок) в зависимости от активной таблицы-страницы     | |||
| 9
    
        mszsuz 02.09.17✎ 14:16 | 
        Нельзя программно добавить кнопки с системными командами
 Выхода два: 1. Нарисовать свои кнопки, для части из них можно засылать в буфер клавиатуры хоткеи соответствующих команд типа: &НаКлиенте Процедура КомандаДобавить(Команда) Если ТипЗнч(ЭтотОбъект.ТекущийЭлемент) = Тип("ТаблицаФормы") Тогда ОбъектShell = Новый COMОбъект("Wscript.Shell"); ОбъектShell.SendKeys("{Insert}"); КонецЕсли; КонецПроцедуры 2. Все-таки отказаться от общей панели сверху и добавить общие команды в командную панель каждой таблицы | |||
| 10
    
        mszsuz 02.09.17✎ 14:34 | 
        3. Сделать доп.тз и вывести на форму только её. При переключении закладок переливать туда данные из соответствующей ТЗ, потом обратно.     | |||
| 11
    
        mistеr 02.09.17✎ 14:46 | 
        (10) Жаль, в 1С нет закладок отдельно от страниц.     | |||
| 12
    
        Cyberhawk 02.09.17✎ 15:22 | 
        (11) А где есть? Покажи на картинке, что хочется     | |||
| 13
    
        TormozIT гуру 02.09.17✎ 15:39 | 
        Если размножать командные панели, то на каждой командной панели будет по 20 кнопок. 50*20 = 1000 лишних элементов формы, каждый из которых имеет много свойств, передаваемых с клиента на сервер и обратно. Это помимо самой немаленькой формы (1500 элементов).     | |||
| 14
    
        TormozIT гуру 02.09.17✎ 16:35 | 
        Вариант с размножением командных панелей работать не будет. Таблицы значений в реквизитах формы добавляются динамически и заранее неизвесты. Поэтому командные панели тоже будут создаваться динамически. А свойство "Источник команд" у командной панели недоступно в объектной модели, т.е. нельзя связать командную панель с добавленной таблицей.     | |||
| 15
    
        TormozIT гуру 02.09.17✎ 16:37 | 
        Через sendkeys вызывать можно лишь часть стандартных команд. Поэтому в итоге остается только самый страшный вариант - создавать аналоги всех стандартных команд, а это - большой и сложный объем кода и интерфейса пользователя.     | |||
| 16
    
        TormozIT гуру 02.09.17✎ 16:51 | 
        (14) Ошибся. Все таки вариант с размножением работать будет. Добавить свои кнопки программно можно в командую панель из свойства "КоманднаяПанель" таблицы формы.     | |||
| 17
    
        mistеr 03.09.17✎ 00:27 | 
        (12) В Visual Studio, Delphi и других средах. Панель с закладками и панель со страницами - это стандартные элементы управления в Windows. Их можно использовать по отдельности, а можно в связке.     | |||
| 18
    
        mistеr 03.09.17✎ 00:48 | 
        (15) Пришла в голову еще одна мысль. Поместить на форму скрытую таблицу и привязать к ней командную панель. Команды перехватывать в обработчиках событий таблицы, ну и делать то же самое с другой таблицей. Конечно, не все можно так перехватить, но хоть что-то.     | |||
| 19
    
        Cyberhawk 03.09.17✎ 08:42 | 
        (17) "Панель с закладками и панель со страницами - это стандартные элементы управления в Windows" // Не понял, чем закладка от страницы отличается?     | |||
| 20
    
        mistеr 03.09.17✎ 09:50 | 
        (19) Неважно. Я нашел то, что хотел в (11) (и что скорее всего делает TormozIT). Это свойство панели РаспределятьПоСтраницам. То есть на панели одна таблица и много закладок, при их переключении загружаем в таблицу нужные данные.     | |||
| 21
    
        mistеr 03.09.17✎ 10:01 | 
        (20) "делает" -> "сделает"     | |||
| 22
    
        Cyberhawk 03.09.17✎ 11:35 | 
        (20) Так что такое "закладки отдельно от страниц"?     | |||
| 23
    
        TormozIT гуру 03.09.17✎ 11:59 | 
        (20) К сожалению, РаспределятьПоСтраницам = Ложь не даст возможность просто сохранять текущую колонку и строку и ширину колонок и т.д. при переключении закладок. Поэтому так я делать точно не буду.
 Пока я сделал вставку моих команд в каждую авто командную панель таблицы при первой активизации страницы. | |||
| 24
    
        Сияющий в темноте 03.09.17✎ 19:16 | 
        (22) есть такой элемент управления,панель закладок,которая никак к страницам не относится,вспомните хотя бы 7.7,там так и было     | |||
| 25
    
        mistеr 03.09.17✎ 19:36 | 
        Я бы еще задумался, а точно ли пользователю нужны 50 таблиц в одной форме.     | |||
| 26
    
        TormozIT гуру 03.09.17✎ 23:06 | 
        (25) А сколько по твоему ему нужно? 46, 41, 37, 32, 26, 20, 19, 7, 3? Это сарказм.     | |||
| 27
    
        mistеr 04.09.17✎ 08:58 | 
        (26) Это опыт.     | |||
| 28
    
        TormozIT гуру 04.09.17✎ 09:08 | 
        (27) Хорошо, что платформу пишут не опираясь на подобный опыт. Решаемая мной задача также требует высокой универсальности. Поэтому в ней такой опыт мало полезен.     | |||
| 29
    
        mistеr 04.09.17✎ 09:14 | 
        (28) Ну поделись своим опытом, нам тоже полезно будет.
 P.S. Не воспринимай мою критику как враждебность. Это скорее любопытство. | |||
| 30
    
        Fedor-1971 04.09.17✎ 10:33 | 
        (20) наверно, имелась в виду "Страница без закладок", т.е. имеем некую группу типа "Страница", которую можно динамически привязывать к разным "закладочным панелям" - функционал отображается и обрабатывается одинаково в разных местах. Как пример Сканы документов - где надо подключаем. По началу,я так воспринимал "Общие формы" - типа в них описываем некий функционал и подключаем куда нам нужно, по факту, назначение оных оказалось несколько иным.
 (28) не горячись так, скоро пользователи захотят сравнить данные из разных таблиц, т.е. увидеть их одновременно рядом и в этом (25) прав - логичнее открыть несколько окон с данными (и переключаться между окнами) чем затолкать их все на одну тормозящую форму. По сути вопроса в (0) - ты просто усложняешь логику обработчиков для одной панели помимо решения проблемы её состава. В (13) вычислено количество кнопок - как только ты их описал на форме и они начинают ездить Сервер-Клиент и обратно так, что оптимизации собственно не получится | |||
| 31
    
        TormozIT гуру 04.09.17✎ 10:43 | 
        Я не хочу делиться опытом про 50 таблиц, т.к. задача узкая и другим не будет интересна. Поэтому я только потрачу свое время и подставлюсь под критику в плане "у тебя неправильная задача".
 Я описал конкретную проблему и попросил совета в выборе оптимального способа решения. Способ решения я нашел с помощью данных здесь советов. Всем спасибо за помощь. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |