Можно ли сделать, чтобы в историю отборов добавлялся отбор по ссылке?
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Тоже как-то искал, да не нашел возможности программно редактировать историю отборов и список отборов. Но ведь это обычное подменю, поэтому можно туда самому кнопок напихать. Вот что у меня вышло:
мМассивСохраненныхОтборов - это переменная формы, при создании формы инициализирую новым массивом.
ДОБАВЛЕНИЕ ОТБОРА
Процедура ДействияФормыДобавитьОтбор(Кнопка)
мМассивСохраненныхОтборов.Очистить();
СтруктураСохраненногоОтбора = Новый Структура();
СтруктураСохраненногоОтбора.Вставить("Имя", "МойОтбор1");
СтруктураСохраненногоОтбора.Вставить("Представление", "Представление отбора");
МассивОтборов = Новый Массив();
Для Каждого ЭлементОтбора Из ДокументСписок.Отбор Цикл
Если ЭлементОтбора.Использование Тогда
МассивОтборов.Добавить(
Новый Структура("Поле, ВидСравнения, Значение", ЭлементОтбора.Имя, ЭлементОтбора.ВидСравнения, ЭлементОтбора.Значение));
КонецЕсли;
КонецЦикла;
СтруктураСохраненногоОтбора.Вставить("Значение", МассивОтборов);
мМассивСохраненныхОтборов.Добавить(СтруктураСохраненногоОтбора);
СохранитьЗначение("МойОтборище", мМассивСохраненныхОтборов);
КонецПроцедуры
СОЗДАНИЕ КНОПОК
Процедура ПриОткрытии()
ВосстановленноеЗначение = ВосстановитьЗначение("МойОтборище");
Если ВосстановленноеЗначение <> Неопределено Тогда
мМассивСохраненныхОтборов = ВосстановленноеЗначение;
Для Каждого ЭлементОтбора Из мМассивСохраненныхОтборов Цикл
Действие = Новый Действие("ОбработатьОтбор");
ЭлементыФормы.ДействияФормы.Кнопки.Подменю1.Кнопки.Добавить(ЭлементОтбора.Имя, ТипКнопкиКоманднойПанели.Действие, ЭлементОтбора.Представление, Действие);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ОБРАБОТЧИК КНОПКИ
Процедура ОбработатьОтбор(Кнопка)
Для Каждого МойОтбор Из мМассивСохраненныхОтборов Цикл
Если МойОтбор.Имя = Кнопка.Имя Тогда
ЭлементОтбора = МойОтбор.Значение;
Для Каждого ОдинОтбор Из ЭлементОтбора Цикл
ДокументСписок.Отбор[ОдинОтбор.Поле].ВидСравнения = ОдинОтбор.ВидСравнения;
ДокументСписок.Отбор[ОдинОтбор.Поле].Значение = ОдинОтбор.Значение;
ДокументСписок.Отбор[ОдинОтбор.Поле].Использование = Истина;
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Естественно это просто заготовка, в обед делать нечего было )) При добавлении отбора сейчас сделал очистку, потому что фактически надо присваивать каждому отбору свое уникальное наименование + иногда вид сравнения устанавливают с указанием диапазона :) Но идея ясна.
мМассивСохраненныхОтборов - это переменная формы, при создании формы инициализирую новым массивом.
ДОБАВЛЕНИЕ ОТБОРА
Процедура ДействияФормыДобавитьОтбор(Кнопка)
мМассивСохраненныхОтборов.Очистить();
СтруктураСохраненногоОтбора = Новый Структура();
СтруктураСохраненногоОтбора.Вставить("Имя", "МойОтбор1");
СтруктураСохраненногоОтбора.Вставить("Представление", "Представление отбора");
МассивОтборов = Новый Массив();
Для Каждого ЭлементОтбора Из ДокументСписок.Отбор Цикл
Если ЭлементОтбора.Использование Тогда
МассивОтборов.Добавить(
Новый Структура("Поле, ВидСравнения, Значение", ЭлементОтбора.Имя, ЭлементОтбора.ВидСравнения, ЭлементОтбора.Значение));
КонецЕсли;
КонецЦикла;
СтруктураСохраненногоОтбора.Вставить("Значение", МассивОтборов);
мМассивСохраненныхОтборов.Добавить(СтруктураСохраненногоОтбора);
СохранитьЗначение("МойОтборище", мМассивСохраненныхОтборов);
КонецПроцедуры
СОЗДАНИЕ КНОПОК
Процедура ПриОткрытии()
ВосстановленноеЗначение = ВосстановитьЗначение("МойОтборище");
Если ВосстановленноеЗначение <> Неопределено Тогда
мМассивСохраненныхОтборов = ВосстановленноеЗначение;
Для Каждого ЭлементОтбора Из мМассивСохраненныхОтборов Цикл
Действие = Новый Действие("ОбработатьОтбор");
ЭлементыФормы.ДействияФормы.Кнопки.Подменю1.Кнопки.Добавить(ЭлементОтбора.Имя, ТипКнопкиКоманднойПанели.Действие, ЭлементОтбора.Представление, Действие);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ОБРАБОТЧИК КНОПКИ
Процедура ОбработатьОтбор(Кнопка)
Для Каждого МойОтбор Из мМассивСохраненныхОтборов Цикл
Если МойОтбор.Имя = Кнопка.Имя Тогда
ЭлементОтбора = МойОтбор.Значение;
Для Каждого ОдинОтбор Из ЭлементОтбора Цикл
ДокументСписок.Отбор[ОдинОтбор.Поле].ВидСравнения = ОдинОтбор.ВидСравнения;
ДокументСписок.Отбор[ОдинОтбор.Поле].Значение = ОдинОтбор.Значение;
ДокументСписок.Отбор[ОдинОтбор.Поле].Использование = Истина;
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Естественно это просто заготовка, в обед делать нечего было )) При добавлении отбора сейчас сделал очистку, потому что фактически надо присваивать каждому отбору свое уникальное наименование + иногда вид сравнения устанавливают с указанием диапазона :) Но идея ясна.
Да зачем мне твоих 6 m$? У меян своих до фига.
Autoit - это прога для посылки горячих клавиш приложению. SendKey также можно юзать, я как-то юзал.
Единственно, есть ли горячие клавиши для вызова отбора или нужно семь стрелок посылать, вот в чем вопрос!
Autoit - это прога для посылки горячих клавиш приложению. SendKey также можно юзать, я как-то юзал.
Единственно, есть ли горячие клавиши для вызова отбора или нужно семь стрелок посылать, вот в чем вопрос!
Таки да, возможно, вот на примере номенклатуры. Догадались, как можно использовать?
Вещь наикрутейшая, если не догадались, ждите скоро мою статью на эту тему.
Вещь наикрутейшая, если не догадались, ждите скоро мою статью на эту тему.
СохранитьОтбор("Справочник", "Справочники", "Номенклатура", Массив);
Функция СохранитьОтбор(КлассЕЧ, КлассМЧ, Вид, МассивСсылок, ВидФормы = "ФормаВыбора") Экспорт
Менеджер = Вычислить(КлассМЧ +"." + Вид);
//Используем гарантированно имеющуюся в конфигурации форму констант
Если ВидФормы = "ФормаВыбора" Тогда
Ф = Менеджер.ПолучитьФормуВыбора(,, Новый УникальныйИдентификатор());
Иначе
Ф = Менеджер.ПолучитьФормуСписка(,, Новый УникальныйИдентификатор());
КонецЕсли;
Для Каждого Эл Из Ф.ЭлементыФормы Цикл
Попытка
Эл.Видимость = ложь;
Исключение КонецПопытки;
КонецЦикла;
//Ищем табличное поле
ИскомыйТип = Тип(КлассЕЧ + "Список." + Вид);
Для Каждого Эл Из Ф.ЭлементыФормы Цикл
Попытка
Если Эл.ТипЗначения.СодержитТип(ИскомыйТип) тогда
ТабличноеПоле = Эл;
Прервать;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
////Добавляем табличное поле
//ТабличноеПоле = Ф.ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), СтрЗаменить("_" + Новый УникальныйИдентификатор(), "-", ""), истина);
//ТабличноеПоле.Верх = 0;
//ТабличноеПоле.Ширина = 200;
//ТабличноеПоле.Высота = 200;
////В табличное поле выводим список объектов - документов или справочников
//М= Новый Массив();
//М.Добавить(Тип(КлассЕЧ + "Список." + Вид));
//ОТ = Новый ОписаниеТипов(М);
//ТабличноеПоле.ТипЗначения = ОТ;
//ТабличноеПоле.СоздатьКолонки();
//Устанавливаем отбор, чтобы потом его сохранить
СписокОтбора = Новый СписокЗначений();
//СписокСсылок.ЗагрузитьЗначения(МассивСсылок);
//ТабличноеПоле.Значение.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
//ТабличноеПоле.Значение.Отбор.Ссылка.Использование = истина;
//ТабличноеПоле.Значение.Отбор.Ссылка.Значение = СписокСсылок;
//ТабличноеПоле.НастройкаОтбора.Ссылка.Доступность = истина;
Для Каждого Эл Из МассивСсылок Цикл
СписокОтбора.Добавить(Эл.Код);
КонецЦикла;
ТабличноеПоле.Значение.Отбор.Код.ВидСравнения = ВидСравнения.ВСписке;
ТабличноеПоле.Значение.Отбор.Код.Использование = истина;
ТабличноеПоле.Значение.Отбор.Код.Значение = СписокОтбора;
ТабличноеПоле.НастройкаОтбора.Код.Доступность = истина;
//Добавляем командную панель
КоманднаяПанель = Ф.ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), СтрЗаменить("_" + Новый УникальныйИдентификатор(), "-", ""), истина);
КоманднаяПанель.ИсточникДействий = ТабличноеПоле;
КоманднаяПанель.Автозаполнение = истина;
//Находим у командной панели действие "Установить отбор и сортировку списка"
Действие = Неопределено;
Для Каждого Кнопка ИЗ КоманднаяПанель.Кнопки Цикл
Если Найти(Строка(Кнопка.Действие), "Установить отбор и сортировку списка") <> 0 Тогда
Действие = Кнопка.Действие;
Прервать;
КонецЕсли;
КонецЦикла;
//Добавляем кнопку с вышенайденным действием
Кнопка = Ф.ЭлементыФормы.Добавить(Тип("Кнопка"), СтрЗаменить("_" + Новый УникальныйИдентификатор(), "-", ""), истина);
Кнопка.ИсточникДействий = ТабличноеПоле;
Кнопка.УстановитьДействие("Нажатие", Действие);
Кнопка.Верх = 200;
Кнопка.Ширина = 10;
Кнопка.Высота = 10;
//Делаем текущим элементом кнопку и открываем форму
Ф.ТекущийЭлемент = Кнопка;
Ф.Открыть();
//Посылаем щелчок по кнопке, закрытие отбора и закрытие этой формы
wsh = Новый COMОбъект("WScript.Shell");
wsh.SendKeys("{ENTER}^{ENTER}^{F4}");
//wsh.SendKeys("{ENTER}^{ENTER}");
КонецФункции
Показать
Не знаю пригодится или нет, но по-момеу можно зайти и с другой строны.
На изменения отбора пользователем инетерактивно можно повестить обработку события, которое будут записывать данные в специальный массив. Программно записать в массив тоже пролемы нет. Останется подменить выбор истории на форме что бы показывалась не стандартная история - а нужный нам массив (я думаю это не сложно).
Насколько помню обработчик на отбор вешатеся так:
Процедура ПриСменеОтбора(ПутьКДанным)
сообщить("Иземнен отбор");
КонецПроцедуры
Процедура ПриОткрытии()
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор","ПриСменеОтбора",истина)
КонецПроцедуры
А, решение с wsh = Новый COMОбъект("WScript.Shell"); - это здорово. :)
Если получится узнать какое там посылается событие, то можно еще попробовать с командой Оповестить(<ИмяЭтогоСобытия>,,<Список>).
На изменения отбора пользователем инетерактивно можно повестить обработку события, которое будут записывать данные в специальный массив. Программно записать в массив тоже пролемы нет. Останется подменить выбор истории на форме что бы показывалась не стандартная история - а нужный нам массив (я думаю это не сложно).
Насколько помню обработчик на отбор вешатеся так:
Процедура ПриСменеОтбора(ПутьКДанным)
сообщить("Иземнен отбор");
КонецПроцедуры
Процедура ПриОткрытии()
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор","ПриСменеОтбора",истина)
КонецПроцедуры
А, решение с wsh = Новый COMОбъект("WScript.Shell"); - это здорово. :)
Если получится узнать какое там посылается событие, то можно еще попробовать с командой Оповестить(<ИмяЭтогоСобытия>,,<Список>).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот