gifts2017

Нечеткий поиск и пересорт в документах реализации.

Опубликовал владимир демченко (jour) в раздел Обработки - Обработка документов

Данная обработка ищет реализацию с отрицательными движениями и дает возможность заменить номенклатуру на похожий по наименованию аналог.
Есть функция подключения к семерочной базе и получения ее текущих остатков для сравнения.

Назначение обработки: Найти документы с отрицательными движениями за период, подобрать из доступных в наличии остатков похожую по наименованию номенклатуру и выполнить замену в документах реализации.

Процент соответствия задается пользователем;

Количество для замены можно редактировать вручную;

Заменять можно на несколько из подобных;

При больших обьемах есть возможность предварительно заполнить все таблицы, быстренько проставить галочки и уйти на обед.

 

Поиск работает по очень простому принципу - разбивает наименование на массив строк, отсеивает незначительные кусочки (для ускорения) и передает в запрос параметром для ПОДОБНО.

При желании можно апгрейдить алгоритм составления массива поиска, текст запроса конструируется динамически.

 

Код поиска:

ИскомыеСлова = ПараметрыПоиска(ТекНоменклатура);
СписокСубконто = Новый СписокЗначений;
СписокСубконто.Добавить(ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура"));
ТекстЗапроса = "";
ТекстЗапроса = ТекстЗапроса + 
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
| ХозрасчетныйОстатки.КоличествоОстаток
|ПОМЕСТИТЬ Остатки
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет, &ВидыСубконто, ) КАК ХозрасчетныйОстатки
|ГДЕ
| ХозрасчетныйОстатки.КоличествоОстаток > 0
|;
|////////////////////////////////////////////////////////////////////////////////
|";
Для Каждого Строка Из ИскомыеСлова Цикл
i = Строка.ПолучитьИдентификатор();
ТекстЗапроса = ТекстЗапроса + 
"ВЫБРАТЬ
| Остатки.Номенклатура,
| Остатки.КоличествоОстаток,
| 1 КАК Совпадений
|";
Если i = 0 Тогда
ТекстЗапроса = ТекстЗапроса + 
"ПОМЕСТИТЬ Найдено
|";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + 
"ИЗ
| Остатки КАК Остатки
|ГДЕ
| Остатки.Номенклатура.Наименование ПОДОБНО &Наименование"+i+"
|";
Если ИскомыеСлова.Количество()>i+1 Тогда
ТекстЗапроса = ТекстЗапроса + 
"ОБЪЕДИНИТЬ ВСЕ
|";
Иначе
ТекстЗапроса = ТекстЗапроса +
"; 
|";
КонецЕсли;
КонецЦикла;

ТекстЗапроса = ТекстЗапроса + 
"ВЫБРАТЬ
| Найдено.Номенклатура КАК Номенклатура,
| Найдено.КоличествоОстаток КАК Остаток,
| СУММА(Найдено.Совпадений) КАК Совпадений
|ПОМЕСТИТЬ Итоговая
|ИЗ
| Найдено КАК Найдено
|
|СГРУППИРОВАТЬ ПО
| Найдено.Номенклатура,
| Найдено.КоличествоОстаток
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Итоговая.Номенклатура,
| Итоговая.Остаток КАК Остаток,
| Итоговая.Совпадений КАК Совпадений,
| 100 / &КлючевыхСлов * Итоговая.Совпадений КАК Процент
|ИЗ
| Итоговая КАК Итоговая
|ГДЕ
| 100 / &КлючевыхСлов * Итоговая.Совпадений >= &МинПроцент
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫРАЗИТЬ(&Номенклатура КАК Справочник.Номенклатура),
| СУММА(0),
| СУММА(0),
| МАКСИМУМ(100)
|ИЗ
| Итоговая КАК Итоговая
|ГДЕ
| 100 / &КлючевыхСлов * Итоговая.Совпадений >= &МинПроцент
|
|УПОРЯДОЧИТЬ ПО
| Процент УБЫВ,
| Остаток";

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

Для Каждого Строка Из ИскомыеСлова Цикл
i = Строка.ПолучитьИдентификатор();
Запрос.УстановитьПараметр("Наименование"+i,"%"+Строка.Значение+"%"); 
КонецЦикла;

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

Наименование Файл Версия Размер
Пересорт. Подбор и замена отрицательных движений в реализации на похожие 8
.epf 19,95Kb
26.01.16
8
.epf 19,95Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа