Имя: Пароль:
1C
 
Как сделать одну командую панель для нескольких таблиц на управляемой форме?
,
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 таблиц, т.к. задача узкая и другим не будет интересна. Поэтому я только потрачу свое время и подставлюсь под критику в плане "у тебя неправильная задача".

Я описал конкретную проблему и попросил совета в выборе оптимального способа решения. Способ решения я нашел с помощью данных здесь советов. Всем спасибо за помощь.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.