Можно ли сделать, чтобы в историю отборов добавлялся отбор по ссылке?

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. fixin 4276 09.12.11 13:41 Сейчас в теме
Если пользователю дать возможность вручную вводить отбор по ссылке, то он заносится в историю отборов.

А если программно назначить отбор, он в историю не заносится. Можно как-то принудительно занести?

И вообще, можно ли программно добавить текущий отбор в историю отборов?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
2. TheGrr 142 09.12.11 15:45 Сейчас в теме
Отправил в личку решение через (_._) =)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TheGrr 142 09.12.11 15:45 Сейчас в теме
Отправил в личку решение через (_._) =)
3. TheGrr 142 09.12.11 16:28 Сейчас в теме
Тоже как-то искал, да не нашел возможности программно редактировать историю отборов и список отборов. Но ведь это обычное подменю, поэтому можно туда самому кнопок напихать. Вот что у меня вышло:

мМассивСохраненныхОтборов - это переменная формы, при создании формы инициализирую новым массивом.

ДОБАВЛЕНИЕ ОТБОРА

Процедура ДействияФормыДобавитьОтбор(Кнопка)

мМассивСохраненныхОтборов.Очистить();

СтруктураСохраненногоОтбора = Новый Структура();
СтруктураСохраненногоОтбора.Вставить("Имя", "МойОтбор1");
СтруктураСохраненногоОтбора.Вставить("Представление", "Представление отбора");

МассивОтборов = Новый Массив();
Для Каждого
ЭлементОтбора Из ДокументСписок.Отбор Цикл
Если
ЭлементОтбора.Использование Тогда
МассивОтборов.Добавить(
Новый
Структура("Поле, ВидСравнения, Значение", ЭлементОтбора.Имя, ЭлементОтбора.ВидСравнения, ЭлементОтбора.Значение));
КонецЕсли;
КонецЦикла;
СтруктураСохраненногоОтбора.Вставить("Значение", МассивОтборов);

мМассивСохраненныхОтборов.Добавить(СтруктураСохраненногоОтбора);

СохранитьЗначение("МойОтборище", мМассивСохраненныхОтборов);
КонецПроцедуры


СОЗДАНИЕ КНОПОК

Процедура ПриОткрытии()

ВосстановленноеЗначение = ВосстановитьЗначение("МойОтборище");
Если
ВосстановленноеЗначение <> Неопределено Тогда
мМассивСохраненныхОтборов = ВосстановленноеЗначение;

Для Каждого
ЭлементОтбора Из мМассивСохраненныхОтборов Цикл
Действие = Новый Действие("ОбработатьОтбор");
ЭлементыФормы.ДействияФормы.Кнопки.Подменю1.Кнопки.Добавить(ЭлементОтбора.Имя, ТипКнопкиКоманднойПанели.Действие, ЭлементОтбора.Представление, Действие);
КонецЦикла;
КонецЕсли;

КонецПроцедуры


ОБРАБОТЧИК КНОПКИ

Процедура ОбработатьОтбор(Кнопка)

Для Каждого
МойОтбор Из мМассивСохраненныхОтборов Цикл
Если
МойОтбор.Имя = Кнопка.Имя Тогда
ЭлементОтбора = МойОтбор.Значение;
Для Каждого
ОдинОтбор Из ЭлементОтбора Цикл
ДокументСписок.Отбор[ОдинОтбор.Поле].ВидСравнения = ОдинОтбор.ВидСравнения;
ДокументСписок.Отбор[ОдинОтбор.Поле].Значение = ОдинОтбор.Значение;
ДокументСписок.Отбор[ОдинОтбор.Поле].Использование = Истина;
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;

КонецПроцедуры


Естественно это просто заготовка, в обед делать нечего было )) При добавлении отбора сейчас сделал очистку, потому что фактически надо присваивать каждому отбору свое уникальное наименование + иногда вид сравнения устанавливают с указанием диапазона :) Но идея ясна.
4. fixin 4276 09.12.11 16:32 Сейчас в теме
(3)нет, мне нужно именно типовую историю заюзать, чтобы не менять конфигурацию....
5. Ish_2 1113 14.01.12 10:12 Сейчас в теме
(4) Слушай , перечислю тебе 6 $m. Если приведешь своё решение. Любое.
6. fixin 4276 14.01.12 19:23 Сейчас в теме
(5) пока только через AutoIT
7. Ish_2 1113 14.01.12 23:55 Сейчас в теме
(6) Что такое AutoIT ? Как я проверю твоё решение ?
Я прижимист и просто так 6 $m перечислять не собираюсь.
8. fixin 4276 15.01.12 10:42 Сейчас в теме
Да зачем мне твоих 6 m$? У меян своих до фига.
Autoit - это прога для посылки горячих клавиш приложению. SendKey также можно юзать, я как-то юзал.
Единственно, есть ли горячие клавиши для вызова отбора или нужно семь стрелок посылать, вот в чем вопрос!
9. fixin 4276 19.01.12 17:35 Сейчас в теме
Таки да, возможно, вот на примере номенклатуры. Догадались, как можно использовать?
Вещь наикрутейшая, если не догадались, ждите скоро мою статью на эту тему.

	
СохранитьОтбор("Справочник", "Справочники", "Номенклатура", Массив);


Функция СохранитьОтбор(КлассЕЧ, КлассМЧ, Вид, МассивСсылок, ВидФормы = "ФормаВыбора") Экспорт
	
	Менеджер = Вычислить(КлассМЧ +"." + Вид);
	//Используем гарантированно имеющуюся в конфигурации форму констант
	Если ВидФормы = "ФормаВыбора" Тогда
		Ф = Менеджер.ПолучитьФормуВыбора(,, Новый УникальныйИдентификатор());
	Иначе
		Ф = Менеджер.ПолучитьФормуСписка(,, Новый УникальныйИдентификатор());
	КонецЕсли;
	Для Каждого Эл Из Ф.ЭлементыФормы Цикл
		Попытка
		Эл.Видимость = ложь;
		Исключение КонецПопытки;
	КонецЦикла;
	
	//Ищем табличное поле
	ИскомыйТип = Тип(КлассЕЧ + "Список." + Вид);
	Для Каждого Эл Из Ф.ЭлементыФормы Цикл
		Попытка
			Если  Эл.ТипЗначения.СодержитТип(ИскомыйТип) тогда
				ТабличноеПоле = Эл;
				Прервать;
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЦикла;
	
	
	////Добавляем табличное поле
	//ТабличноеПоле = Ф.ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), СтрЗаменить("_" + Новый УникальныйИдентификатор(), "-", ""), истина);
	//ТабличноеПоле.Верх = 0;
	//ТабличноеПоле.Ширина = 200;
	//ТабличноеПоле.Высота = 200;
	
	
	////В табличное поле выводим список объектов - документов или справочников
	//М= Новый Массив();
	//М.Добавить(Тип(КлассЕЧ + "Список." + Вид));
	//ОТ = Новый ОписаниеТипов(М);
	//ТабличноеПоле.ТипЗначения = ОТ;
	//ТабличноеПоле.СоздатьКолонки();
	
	//Устанавливаем отбор, чтобы потом его сохранить
	СписокОтбора = Новый СписокЗначений();
	//СписокСсылок.ЗагрузитьЗначения(МассивСсылок);
	//ТабличноеПоле.Значение.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
	//ТабличноеПоле.Значение.Отбор.Ссылка.Использование = истина;
	//ТабличноеПоле.Значение.Отбор.Ссылка.Значение = СписокСсылок;
	//ТабличноеПоле.НастройкаОтбора.Ссылка.Доступность = истина;
	
	
	Для Каждого Эл Из МассивСсылок Цикл
		СписокОтбора.Добавить(Эл.Код);
	КонецЦикла;
	
	ТабличноеПоле.Значение.Отбор.Код.ВидСравнения = ВидСравнения.ВСписке;
	ТабличноеПоле.Значение.Отбор.Код.Использование = истина;
	ТабличноеПоле.Значение.Отбор.Код.Значение = СписокОтбора;
	ТабличноеПоле.НастройкаОтбора.Код.Доступность = истина;

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

	
КонецФункции


Показать
DigitalMan; Ягг; +2 Ответить
10. Ish_2 1113 19.01.12 17:43 Сейчас в теме
11. fixin 4276 19.01.12 18:25 Сейчас в теме
Суппорт, как закрыть эту тему и никому не дать балосов, или как ее сделать бесплатной? Никто не заслужил!
14. support 4453 01.02.12 10:25 Сейчас в теме
(11) fixin, закрывай тему, отдай бабосы любому.
12. Kamikadze 46 20.01.12 01:26 Сейчас в теме
13. Ягг 497 20.01.12 07:24 Сейчас в теме
Не знаю пригодится или нет, но по-момеу можно зайти и с другой строны.

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

Насколько помню обработчик на отбор вешатеся так:

Процедура ПриСменеОтбора(ПутьКДанным)
сообщить("Иземнен отбор");
КонецПроцедуры

Процедура ПриОткрытии()
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор","ПриСменеОтбора",истина)
КонецПроцедуры

А, решение с wsh = Новый COMОбъект("WScript.Shell"); - это здорово. :)
Если получится узнать какое там посылается событие, то можно еще попробовать с командой Оповестить(<ИмяЭтогоСобытия>,,<Список>).
15. fixin 4276 01.02.12 10:48 Сейчас в теме
Решил сам, но отдаю TheGrr за старание.
Можно было бы и суппорту отдать, а он бы их мне перевел.
Но мне пятерки не жалко.
16. TheGrr 142 01.02.12 13:17 Сейчас в теме
17. support 4453 01.02.12 18:52 Сейчас в теме
(15) fixin, нажми на зеленую надпись [отдать деньги и закрыть вопрос]
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот