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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

создаем:

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

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

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

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

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

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

1 Comment

  1. borlog

    Добавил квалификатор числа, в поле ПоискПоЦене, так как в версиях 1с отличных от 8.3.10.2580, невозможно было искать товар с ценой меньше 1 (точнее можно, но задом наперед: 12-> ,12 -> 0,12).

    КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный);

    РеквизитПоиск = Новый РеквизитФормы(«ПоискПоЦене», Новый ОписаниеТипов(«Число»,КвалификаторыЧисла), , «Поиск по цене», Истина);

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *