Свой поиск по номенклатуре

Иногда хочется использовать типовой метод с небольшой доработкой. Увы, мы не можем залезть в платформу и что-то поменять. Но зато можем полностью переписать типовой метод.

Клиент хотел, чтобы помеченные на удаление товары не участвовали в поиске.

Поэтому пришлось переписать вызов метода НайтиПоНаименованию. Делюсь кодом, может быть тоже когда-нибудь понадобится организовать свой поиск.

И еще — вот почему лучше всегда использовать запросы, чем типовые функции. Потому что на практике часто условия поиска позже уточняются и все равно очень часто приходится менять типовую функцию на запрос.

Функция НайтиТоварПоНаименованию(Наименование, Целиком, Группа = Неопределено) Экспорт
	З = Новый Запрос(
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Т.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Номенклатура КАК Т
	|ГДЕ
	|	&УсловиеНаименования
	|	И НЕ Т.ПометкаУдаления
	|	И &УсловиеГруппы"
	);
	
	Если Целиком Тогда 
		УсловиеНаименования = "Т.Наименование = &Наименование";
	Иначе
		УсловиеНаименования = "ПОДСТРОКА(Т.Наименование, 1, " + XMLСтрока(СтрДлина(Наименование)) + ") = &Наименование";
	КонецЕсли;
	З.УстановитьПараметр("Наименование", Наименование);
	З.Текст = СтрЗаменить(З.Текст, "&УсловиеНаименования", УсловиеНаименования);
	
	Если ЗначениеЗаполнено(Группа) Тогда 
		УсловиеГруппы = "Т.Ссылка В ИЕРАРХИИ(&Группа)";
		З.УстановитьПараметр("Группа", Группа);
	Иначе
		УсловиеГруппы = "Истина";
	КонецЕсли;
	З.Текст = СтрЗаменить(З.Текст, "&УсловиеГруппы", УсловиеГруппы);
	
	Выборка = З.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	КонецЕсли;
	
	Возврат Справочники.Номенклатура.ПустаяСсылка();
КонецФункции

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

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