Программное добавление в форму подбора: полей Поиска по цене и Фильтрации товара без остатков (Расширение конфигурации)

Публикация № 712740

Программирование - Работа с интерфейсом

Расширение Система компоновки данных СКД подбор товара Розница РМК по цене остатки нулевые

0
Стандартный подбор заточен под работу со сканером ШК(штрих-кодов) и не очень удобен для ручного ввода товара в чек, что актуально для небольших магазинчиков с широким ассортиментом мелкого товара, на который и ШК некуда поставить. Приходится часто открывать форму расширенного поиска и совершать массу лишних действий. Данная доработка направлена на исключение лишних телодвижений при фильтрации товара по цене и скрытия товара без остатков.

Готового решения не нашел, поэтому решил допилить самостоятельно.

Расширение сделано для конфигурации "Розница для Беларуси, редакция 2.2".

Часть материала взята отсюда //infostart.ru/public/122253/ часть не помню откуда, остальное сам.

Добавляем Расширение конфигурации.

В него копируем интересующую нас форму подбора и создаем процедуру при Открытии в которой указываем вызов процедуры для создания поля формы:

Процедура РасшРМКпоискПоЦене_ПриОткрытииПосле(Отказ)
	СоздатьПолеНаСервере(); 
КонецПроцедуры

Добавляем саму процедуру создания поля:

Процедура СоздатьПолеНаСервере()
	//Добавляем реквизит
	нРеквизиты = Новый Массив;
	КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный);
	РеквизитПоиск = Новый РеквизитФормы("ПоискПоЦене", Новый ОписаниеТипов("Число",КвалификаторыЧисла), , "Поиск по цене", Истина);
    нРеквизиты.Добавить(РеквизитПоиск); 
	ИзменитьРеквизиты(нРеквизиты); 	
	//Добавляем поле ввода
	Элемент = ЭтаФорма.Элементы.Добавить("ПоискПоЦене", Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаПоиска);
	Элемент.Вид = ВидПоляФормы.ПолеВвода;
	Элемент.ПутьКДанным = "ПоискПоЦене";  
	Элемент.Заголовок="Найти по цене";
	Элемент.Подсказка="(для отключения введите '0' и [Enter])";
	Элемент.УстановитьДействие("ПриИзменении", "НайтиПоЦене");  
КонецПроцедуры    

Процедура, отключающая отбор

если он уже использовался ранее

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

и установки отбора заново

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

Затем собственно саму процедуру, установленную для поля ПриИзменении:

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

Аналогично поступаем с отключением нулевых остатков.

создаем:

Процедура СоздатьПолеНаСервере()
	//Добавляем реквизит 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	РеквизитФлаг = Новый РеквизитФормы("НольНеПоказывать", Новый ОписаниеТипов("Булево"), , "Ноль не показывать", Истина);
	нРеквизиты.Добавить(РеквизитФлаг); 	
	ИзменитьРеквизиты(нРеквизиты);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//Добавляем флажок
	Флаг = ЭтаФорма.Элементы.Добавить("НольНеПоказывать", Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаПоиска);
	Флаг.Вид = ВидПоляФормы.ПолеФлажка;
	Флаг.ПутьКДанным = "НольНеПоказывать";  
	Флаг.Заголовок="Только с остатками";
	Флаг.Подсказка="(для услуг отключить)";  
	Флаг.УстановитьДействие("ПриИзменении", "СкрытьНулевыеОстатки");
КонецПроцедуры    

и дописываем процедуру действия ПриИзменении:

Процедура СкрытьНулевыеОстатки()  
	ПолеПоиска = "";  
	ЕстьОтбор = Истина;  
	ДоступноеПоле = КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ОстатокПоМагазину").Поле; 
	ВС = ВидСравненияКомпоновкиДанных.Больше;
	Исп=ЭтаФорма.НольНеПоказывать;
	ОтключитьОтборПоПолюКомпоновки(ДоступноеПоле);  
	УстановитьОтборПоПолюКомпоновки(ДоступноеПоле,0,ВС,Исп);	
	ВыполнитьРасширенныйПоискПоСКД(); 
КонецПроцедуры   

Добавляем в ПриОткрытии:

Процедура РасшРМКпоискПоЦене_ПриОткрытииПосле(Отказ)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	ЭтаФорма.НольНеПоказывать=Истина;//если чаще подбор услуг то не надо
	СкрытьНулевыеОстатки();
КонецПроцедуры

P.S. Если кому очень надо вышлю на e-mail, Viber. Skype или Почтой :-), напишите в комментах или в личку куда!?

0

Скачать файлы

Наименование Файл Версия Размер
Программное добавление в форму подбора: полей Поиска по цене и Фильтрации товара без остатков (Расширение конфигурации).:
.cfe 78,33Kb
10.03.18
1
.cfe 78,33Kb 1 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. borlog 1 10.03.18 15:05 Сейчас в теме
Добавил квалификатор числа, в поле ПоискПоЦене, так как в версиях 1с отличных от 8.3.10.2580, невозможно было искать товар с ценой меньше 1 (точнее можно, но задом наперед: 12-> ,12 -> 0,12).
КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный);
РеквизитПоиск = Новый РеквизитФормы("ПоискПоЦене", Новый ОписаниеТипов("Число",КвалификаторыЧисла), , "Поиск по цене", Истина);
Оставьте свое сообщение