Ничего нового и оригинального не предлагаю, минимум изменений в форму списка общего журнала. Зато пользователям очень удобно: можно открыть общий журнал с отбором по контрагенту, через стандартное меню - второй по складу, третий - по приходным накладным...
Идея такова: Журнал (или любая другая форма) первично открывается из меню. При повторном выборе в меню активизируется уже открытая форма с выполнением процедура модуля формы ПриПовторномОткрытии(). Вот здесь и поработаем...
Процедура ПриПовторномОткрытии()
Если ПустоеЗначение(Форма.Параметр)=1 Тогда // это вызов из меню
СтатусВозврата(0); // отменяем его
ОткрытьФорму("Журнал.ЖурналОбщий.ФормаСписка#"); // и открываем новую форму сами - #
Возврат;
КонецЕсли;
// прочие операторы ПриПовторномОткрытии()
КонецПроцедуры
Можно не изменять модуль, изменить настройку меню, см. комментарий 11 от poppy. Кратче и талантливее.
II. "Гибкие" закладки.
Идея, навеянная подсказкой VasilyKushnir и Фокусником: закладки. Можно, не задумываясь, использовать метод "ЗакладкиОтбора()", однако, повторю свое скромное мнение, он не совсем удобен из-за большого количества значений отбора и, соответственно, появляющихся закладок.
В чем заключается идея:
1. Закладки создавать программно.
2. Использовать историю отборов, и, по мере того, как пользователь будет менять вид и значение отбора, создавать закладки.
Собственно, код в форме списка общего журнала ТиС
Перем ЛокЗакладки; // добавленная нами переменная модуля
//... далее функции и процедуры общего журнала
Процедура ПриУстановкеБыстрогоОтбора() // встроенная процедура, вызывается при смене вида отбора
Перем ТекущДок;
// добавляем в нее наши новые переменные
Перем ТекИмяОтбора;
Перем ТекЗначОтбора;
Перем ТекЗакладка;
Перем ЧтоИщем;
// ... операторы процедуры
// ... добавляем наши строки кода в конец процедуры
ПолучитьОтбор(ТекИмяОтбора,ТекЗначОтбора); // получили отбор
Если Форма.ИспользоватьЗакладки() = 0 Тогда // если первое обращение тогда создаем закладки
Форма.ИспользоватьЗакладки(1);
ЛокЗакладки = СоздатьОбъект("СписокЗначений");
КонецЕсли;
ЧтоИщем = "" + ТекИмяОтбора + РазделительСтрок + ЗначениеВСтрокуВнутр(ТекЗначОтбора);
ТекЗакладка = ЛокЗакладки.НайтиЗначение(ЧтоИщем); // а может закладка уже создана?
Если ТекЗакладка = 0 Тогда
// нет, не создана, добавляем новую
Форма.Закладки.ДобавитьЗначение(ЗначениеВВидеСтроки);
ЛокЗакладки.ДобавитьЗначение(ЧтоИщем,"" + ВидОтбора.ТекущаяСтрока());
ТекЗакладка = Форма.Закладки.РазмерСписка();
КонецЕсли;
Форма.Закладки.ТекущаяСтрока(ТекЗакладка); // визуально делаем закладку активной
КонецПроцедуры // ПриУстановкеБыстрогоОтбора()
Далее нам нужно обработать выбор закладки с помощью предопределенной процедуры ПриВыбореЗакладки()
Допишем ее в модуль.
Процедура ПриВыбореЗакладки(НомЗакладки,ЗначЗакладки)
Перем ТекИмяОтбора;
Перем ТекЗначОтбора;
Перем ТекВидОтбора;
ТекИмяОтбора = ЛокЗакладки.ПолучитьЗначение(НомЗакладки,ТекВидОтбора);
ТекЗначОтбора = ЗначениеИзСтрокиВнутр(СтрПолучитьСтроку(ТекИмяОтбора,2)); // получили значение отбора
ТекИмяОтбора = СтрПолучитьСтроку(ТекИмяОтбора,1); // получили имя отбора
ТекВидОтбора = Число(ТекВидОтбора); // получили номер текущей строки вида отбора
ВидОтбора.ТекущаяСтрока(ТекВидОтбора); // устанавливаем вид отбора на форме
ЗначениеВВидеСтроки = ЗначЗакладки; // устанавливаем текст отбора на форме
// устанавливаем отбор
Если ПустоеЗначение(ТекИмяОтбора) = 1 Тогда
УстановитьОтбор("");
ИначеЕсли ТипЗначенияСтр(ТекЗначОтбора) = "" Тогда
УстановитьОтбор(ТекИмяОтбора,);
Иначе
УстановитьОтбор(ТекИмяОтбора,ТекЗначОтбора);
КонецЕсли;
КонецПроцедуры
И наслаждаемся дальше.
Вступайте в нашу телеграмм-группу Инфостарт