Related Posts
- Восстановление последовательности документов при закрытии месяца в Бухгалтерия 3.0 не завершается
- Заполнение табличных частей
- Формирование сводных актов выполненных работ
- Ввод поступления в переработку на основании передачи сырья (между организациями)
- Конспект по установке сервера 1С на linux
- Получение имени компьютера и его IP локально и в терминале
Нужная обработка
Сама для себя писала «того же назначения», в ходе последней сложной конвертации данных ничего лишним не показалось – потому попробую описать различия функционала. В качестве стартовой для организации подборов использовала свою же Печать_Справочников (есть в профайле)
1)Тоже использовала компоненту для нечеткого сравнения строк и тоже ReplVal. Только правила ее чуть больше – во-первых, в стандартном виде замена в проводках доступна только при перепроведении – хотя штатно программно можно и без перепроведения — потому сделала птычку «Заменять в операциях без перепроведения». Из того, до чего «должны дойти руки» — оставить от ReplVal только внешнюю оболочку и сделать замену прямыми запросами – чтобы и регистры и периодику без перепроведения. Во-вторых, в ReplVal исправлена «авторская ошибка» — строки 226-227 при должных обстоятельствах «выстреливают» В третьих, добавлена возможность ограничения временного диапазона документов, в которых производится замена.
2)Компонента нечеткого сравнения – замечательно, но иногда работаешь у клиента, и нет возможности ее зарегистрировать. Удобно, когда в этом случае работать все-таки можно, не используя нечеткое сравнение строк, а просто равенство (возможно, с точностью до регистра или до «всех значащих символов»)
3)Удобно, когда сравнение не по одному реквизиту, а возможность одновременного сравнения по нескольким – например, контрагенты являются двойниками, когда у них «УНН равно, наименование похоже», или товары – когда «Штрих коды равны, цены равны, наименования похожи»
4)Удобно ограничить область правильных и область поиска двойников произвольной выборкой или группой или даже признаком «удаленные» или «не удаленные» — это и ускоряет поиск, и делает результат более четким
5) Для поиска по периодическим реквизитам – задавать дату, на которую их сравниваем
6)В компоненте нечеткого сравнения строк есть замечательная возможность использовать Вес чисел – чтобы Масло 100 г и Маслы 100 г были похожи, а Масло 100 г и Масло 200 г — нет
7)В ReplVal – удобнее передавать не одной порцией, а все сразу – актуально, если двойников ОЧЕНЬ много, что бывает после конвертации.
8)После обработки ReplVal можно обучить делать «заменяемое» помеченным на удаление, а с «заменителя» эту пометку снять – мелочь, а приятно
9)Важно иметь возможность не только передать в обработку замены, но и на печать – заменитель и все двойники к нему, с расшифровками. Например, чтобы дать ответственным возможность разобраться с нечеткими случаями. Или распечатать для виновных «рецепт на получение оплеух от начальства».
Уффф….. вспомню еще чего – напишу еще )))
Еще из того, до чего не дошли руки, но нужно будет сделать — автоматически искать двойников в подчиненных справочниках. Например, если Контрагент А — двойник контрагента АА, то все договоры контрагента А считаем двойниками договоров контрагента АА при условии совпадения реквизитов. Иначе бывают проблемы при замене элементов, имеющих подчиненные.
На вид шикарно. Пока потребности нет, но при случае воспользуюсь.
(1)(2) Спасибо за конструктив!!!
(4) Если доработаете ReplVal в нужном направлении — могу поделиться взамен своим готовым проектом )))
А просто так — жаль выкладывать — уж очень большой кусок работы.
Слишком много молчаливых пользователей с нулевым рейтингом — просто качают-качают — и все уходит куда-то «как в черную дыру» — даже без конструктива и без благодарности.
Прикольно!
А с Vista она дружит? Мне выдаёт ошибку всё время «Ошибка при загрузке компоненты каталог базыdllStrMatchStrMatch.dll. Компонента не загружена.» Хотя папка DLL лежит в корне базы =(
До автора наконец дошло, что обработки с закрытым кодом никому не упали ?
Похвально..
На будущее — храните картинки в самом ert-нике, хоть на форме, хоть в мокселе.
(7) зарегистрировать компоненту с админскими правами
Жаль , что для восьмерки такое творчество ненужно и бесполезно.
Наличие полнотекстового поиска ( поиск и отбор объектов во всей конфигурации) отбивает охоту у энтузиастов и любителей ВК.
Каким образом(10)
(12) regsvr32 с админскими правами
я обычно просто выношу нужную командную строку на ярлычок и запускаю его «от имени администратора»
(11) жаль, что в снеговике нет поиска похожих слов, а реализованный полнотекстовый поиск — туфта… так что, любителей ВК не поубавится.
(11) «Полнотекстовый поиск» и «поиск похожих» — разные вещи
(14),(15) Что понимается под выражением «поиск похожих» ?
И что понимается под выражением «полнотекстовый поиск», который «в восьмерке — туфта ?» ?
Растолкуйте мне.
На всякий случай выдержка из документации (описание полнотекстового поиска в 8-ке):
* — поиск с использованием группового символа (замена окончания слова). Должно быть введено более 1 значащего символа; пример: доку* — найдет «документ», «документировать», «документальный» и др.;
# — нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос #Система найдет «систама», «сивтема»; запрос Система#2 найдет «ситтама», «сеттема»;
! — поиск с учетом синонимов русского, английского и украинского языков. ! ставится перед соответствующим словом; пример: поиск !красный кафель, найдет еще и «алый кафель» и «коралловый кафель».
(16) Давай на примере.
В базе есть следующие товары:
Т/в Виски 100мл Лимитед
Виски 100мл Лимитед Т/в
Виски 100мл Лимитед
Виски 100 Лимитед
Whisky 100 Лимитед
Whisky Лимитед 100
…. ну и ещё с десяток другой похожих комбинаций с перестановкой слов/символов. А всё это один и тот же товар.
Как надо построить запрос, чтобы получить все такие похожие позиции в 8-ке без ВК?
(17) Если поисковое наименование состоит из трех слов то возможен пример строки поиска :
ПервоеСлово#2 NEAR ВтороеСлово#2 OR
ПервоеСлово#2 NEAR ТретьеСлово#2 OR
ВтороеСлово#2 NEAR ТретьеСлово#2
Поиск с учетом морфологии.
Порядок слов не имеет значения.
#2 — допускается несовпадение двух символов в слове.
Поиск может осуществляться либо во всей конфигурации, либо только среди назначенных объектов метаданных. Существуют и другие возможности для организции такого поиска , какой мне нужен .
И после этого — мне толкуют о какой -то самопально-хитрой ВК ?
(17)(15) Кстати, большое спасибо заhttp://infostart.ru/public/15765/
именно эту обработку я брал как основу
(18) Что такое ПервоеСлово, ВтороеСлово… ?
Для каждого элемента, в зависимости от количества слов надо будет строить новый запрос?
….
млин, хоть ставь и смотри )
(20) можешь не ставить.. нет в снеговике этого.
+21 ты должен будешь писать
Виск* 10* Lim* ну и т.д..
(20)
Задача :
Наименование элемента справочника : «Виски 100мл Лимитед »
Для этого элемента справочника мы ищем «похожие по наименованию» другие элементы этого же справочника.
Решение для 8-ки :
Определяем
ПервоеСлово = «Виски» ;
ВтороеСлово = «100мл» ;
ТретьеСлово = «Лимитед»;
Составляем символьную строку поиска с использованием литералов :
СтрокаПоиска =
«Виски#2 NEAR 100мл#2 OR
Виски#2 NEAR Лимитед#2 OR
100мл#2 NEAR Лимитед#2 »
— и подаем на вход встроенной функции 8-ки, которая возвращает набор объектов
«похожих» на строку поиска.
Приведенная строка поиска означает , что искаться будут такие элементы справочника, наименование которых содержит
либо два слова «Виски» и «100мл» ( в любом порядке),
либо два слова «100мл» и «Лимитед» (в любом порядке),
либо два слова «Виски» и «Лимитед» (в любом порядке)
В каждом посиковом слове допускается несовпадение двух символов.
Т.е. наименование , содержащее два слова
«Висто» и «Леметед» в любом порядке — удовлетворяет критерию поиска.
(20) Не слушай Ёпрста. Поставь.
(23) зачет.. А теперь найди дубли во всем справочнике..
Тоже будешь для каждого наименования строку для поиска руками составлять?
(25) Не понял. Зачем ручками ?
Позиционируемся на каждый элемент справочника.
Разбираем наименование на «пЕрвоеСлово», «ВтороеСлово»,»ТретьеСлово».
Запускаем поиск. Получаем массив «похожих». Переходим к следующему.
Как вариант :
Затем можно организовать анализ всех полученных массивов на похожесть.
И получить группы предполагаемых дубликатов.
Сам никогда такого не делал — но предполагаю , что делать нужно примерно так.
(26) ты не понял.. Я просто запускаю обработку и она мне выдаст список всех похожих элементов..
А тут как ?
Там реализован программный вызов этого чуда ?
+ на сколько я помню, нужно у каждого реквизиты втыкать , что он используется в полнотекстовом поиске + поддержка индекса в актуальном состоянии для этого поиска..
(27) Ага. Это чудо запускается программно. Т.е. на вход встроенного менеджера подается строка поиска , а на выходе коллекция объектов «СписокПолнотекстовогоПоиска».
Да, у каждого реквизита объекта есть свойство «Полнотекстовый поиск».(использовать или не использовать).
Да, база периодически должна индексироваться в монопольном режиме.
(28) ну, если в профайлере посмотреть на текст запроса — то там скорее всего, обычный like и ничего нового…
А так — один хрен писать хоть в клюшках, хоть в снеговике придётся всё руками.
Конечно, Like.
А что там еще может быть ?
Да, я совсем не возражаю против творчества в 77.
Но паровоз ушел слишком далеко…
(30) мечтатель..
🙂
(23) Давай другой пример. Дано:
«Виски 500 мл производство Волгоград».
Найти похожие.
По твоему алгоритму (как я его понял) помимо прочего получим и такие элементы:
Водка 500 Волгоград
Лимонад Волгоград
Чай 500
…
Так?
(30) Что ты все про паровоз?
Как бы тебе ни хотелось, никуда он не ушел, пыхтит. И весьма бодро.
(32) Нет не так .
Если тупо применить описанный алгоритм к твоему примеру
«Виски 500 мл производство Волгоград».
, то строка поиска будет сотоять из комбинации трех первых слов :
«Виски» , «500» , «мл».
Т.е. программно на вход встроенного менеджера полнотекстового поиска мы подадим строку :
Виски NEAR 500
OR Виски NEAR мл
OR 500 NEAR мл
Отсюда следует что наименование «Водка 500 Волгоград» не содержит вместе ни одной из комбинаций из строки поиска .
А например строка «Волгоград 500 Лимонад мл » содержит вместе слова «500» и «мл» — значит она удовлетворяет критерию поиска. (…OR 500 NEAR мл)
(33) Я тут маленько похулиганил …
но отгадай какие слова лишние ?
«никуда он не ушел, пыхтит на месте. И на вид весьма бодро»
(35) Сам же понимаешь, что тобой добавленные слова лишние.
На месте пыхтят и будут пыхтеть такие, как ты, типовоконфигопоклонники.
И в 7, и в 8.
Ок спасибо =) (13)
(36) Не угадал. В предложении нет лишних слов.
«Типовоконфигопоклонники» — пусть так.
Нас тьмы и тьмы и тьмы… Попробуйте сразитесь с нами (с)
(38) Согласен. А нас единицы.
И после вашей тьмы нам работать с заказчиком гораздо легче.
(39) Я тебе уже писал
«Единица — вздор, единица -ноль», а ты опять за своё…
(39) Перебирайся к нам во тьму — возьми на сопровождение типовую.
Узнаешь, что почём. В темноте , но не в обиде.
Все не прочитала ))
Полнотекстовый поиск — это хорошо — но это совсем не заменит нечеткого сравнения — это совсем разное.
На любую построенную маску — для запроса типа LIKE — легко построю контрпример, заменивши одну букву и получивши в общем-то похожее слово. К тому же «вес чисел» тоже никак не используешь — маска Масло 100* — выберет и Масло 1000. Не говоря уж о том, что я совсем не хочу ломать голову, читать справочники и строить хитрые маски. Я просто укажу — «все похожие». Если нужна маска — сформирую выборку для поиска с использованием маски.
По поводу внешних компонент… Весь спор — «использовать или нет, если в восьмерке все есть?»
А для меня неразгаданная загадка — почему типовой ЗиУП использует внешнюю компоненту для склонения ФИО, если «в восьмерке все есть», и в крайнем случае все можно просто программно реализовать средствами языка .
(34) ну ты как-то слишком уж всё упростил. Я ж написал такой пример, состоящий из пяти (читай «не из трех») слов, не для того, чтобы ты применил к нему статический алгоритм для трех слов. Я ж думал, что он у тебя подстраивается под количество строк.
Ну если тупо применять твой алгоритм, тогда давай такой пример
«производство Волгоград 500 мл Виски».
Я как бы намекал, что полнотекстовым поиском добиться универсальности крайне сложно, если вообще возможно.
И дело вообще не в платформе 7.7/8. От неё в данном случае вообще ничего не зависит
(43) Ни в коем случае , приведенный мной навскидку алгоритм не является лучшим или оптимальным . Этим примером я лишь продемонстрировал , что в 8-ке достаточно встроенных средств для реализации оптимального алгоритма и не нужны никакие ухищрения и ВК. Вот и всё.
На фразу
» полнотекстовым поиском добиться универсальности крайне сложно, если вообще возможно »
можно ответить только одно :
» любым другим поиском добиться универсальности крайне сложно …. даже (прости меня, vip ) при помощи ВК»
Потому что (и я здесь полностью с тобой согласен) :
«.. дело вообще не в платформе 7.7/8. От неё в данном случае вообще ничего не зависит».
(42)
1. За то , что разработчики ЗиУП используют внешний компонент для склонения ФИО — мы их осудим.
2. Из Ваших слов непонятно Что Вы понимаете под «нечетким сравнением».
Пример.
В строке поиска , которая подается на вход менеджера полнотекстового поиска в 8-ке, мы указали «Natalia#2» .
Это значит , что критерию поиска удовлетворяют :
«Natelii»,»Datilia» и т.д.
Вопрос : Это нечеткий поиск ?
3.
Вы то укажете …
Но «кто-то сидящий внутри программы» должен указать числовой параметр , определяющий степень этой самой нечеткости . В примере п.2 такой числовой параметр равен 2.
(45) 😀 Я не то чтобы ради осуждения. Я просто к тому, что и в 7.7 и в 8 используются внешние средства, даже «самыми главными разработчиками».
И это хорошо ))
Семерка без возможности использования внешних средств вообще давно умерла бы. Для восьмерки полный отказ от внешних компонент был бы тоже путь к концу.
Про использование полнотекстового поиска в восьмерке — все же — признаю — была не права — возможность нечеткого поиска все-таки есть — так что все не так плохо ))
С сайта фирмы 1С:
Есть возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости. Пример: указав в строке поиска слово «привет» и нечеткость 17 %, найдем все аналогичные слова с ошибками и без: «привет», «превет», «привед». (с)
Насколько я понимаю, чтобы полноценно воспользоваться полнотекстовым поиском — необходимо поддерживать индекс поиска в актуальном состоянии? Т е задача поиска всех двойников может «осложниться» восстановлением индекса? Особенно если нужные на момент поиска поля не были включены в состав этого самого полнотекстового поиска и в общем случае там и не нужны?
«Но «кто-то сидящий внутри программы» должен указать числовой параметр , определяющий степень этой самой нечеткости . В примере п.2 такой числовой параметр равен 2.»
Не поняла мысли …. Ну параметр «похожести» — ну и что? StrMatch вполне поддерживает «степень похожести».
(46)
Именнно так.
Для полнотекстового поиска в 8-ке индекс должен поддерживаться в актуальном состоянии. Необходимые реквизиты должны быть включены в индекс на уровне конфигуратора. Согласен , некоторые неудобства. Я согласен их терпеть и не устанавливать никакие ВК (пусть даже по отзывам великолепные).
Эээээ….Вы бы того , полегче на поворотах.
При полном отказе от ВК работает великая подавляющая часть пользователей (та самая «тьма», к которой имею честь принадлежать).
Извиняюсь. «Тьма» — это не «конец» !
(47) Для быстрого разгребания завалов — перестроить всю конфигурацию — ради полнотекстового поиска???
Неееее. Лучше РАЗОВО внешняя компонента — легко и быстро.Она ведь не нужна постоянно. В семерке я тоже минимумом обхожусь.
(47) «Перестроить всю конфигурацию».
95% пользователей используют типовые конфигурации. А в них на реквизитах установлено свойство «Полнотекстовый поиск». Так что проблема надуманная.
Если конфигурация нетиповая , то установить нужное свойство для реквизитов и запустить индексирование — труд небольшой.
Дело вкуса , конечно. Но это лучше , чем ставить неизвестно что на свой компьютер.
(49) «Полнотекстовый поиск» в типовых — по всем реквизитам разве? По-моему «джентельменский минимум» — ради уменьшения времени индексирования… Ну да ладно
Я тоже не очень сторонница внешних компонент, но иногда это действительно необходимость.
Это как раз тот случай.
Тем более что это не для «работы изо дня в день» и не для доступа к данным для записи
А всего лишь внешние функции строковых переменных, остальное штатно. И редкие административные работы.
(23) плохо, не найдет элемент с Wisky LTD. а с ВК — найдет…
(51) Уел.
(52) Передумал : нет, не уел.
Специализированное решение , разумеется, эффективнее общего.
Грубо говоря , на любой Like всегда найдется свой Whisky .
Отсюда любители «кустарных» парсеров делают радостный вывод :
время «самопальных» ВК еще не прошло !
Уместить весь алгоритм поиска в одну символьную строку и употребить Like в запросе —
смотрится ущербно , скучно и неинтересно.
(13)
я обычно просто выношу нужную командную строку на ярлычок и запускаю его «от имени администратора»
Ой, мамо! А юзверей 40 и все не в терминале. А потом еще инженер, гад, винду переставлял и прорегить забыл 😥 Плавали — знаем! 😉
(54) Я просто рассказала, как я решаю проблему для себя. Даже наверное кому-то этим помогла.
А Вы как боретесь со своими 40 юзерами и гадами инженерами?
(55) vkloader?
(56) С vkloader на Win 7 какие-то проблемы были, наспех не получилось, потом разбираться не стала.
Но (54) немножко иронией было — если уж критикуете — то критикуйте конструктивно.
(57)
и (55)
http://infostart.ru/public/15861/
http://infostart.ru/public/59436/ — и сама зверь штука 😉 и метод RunAs есть
Конструктивно? Да сколько угодно! Варианты:
1. Убить гада-инженера (но это больно уж просто)
2.
3.
Чего-то более конструктивного уже нагловато-то бы было просить, а? 😀
(57) Дома стоит вин 7, проблем нет
На работе вин 8, только из-за нее пришлось прикрутить эту длл. Правда справедливости ради нужно отметить, что пришлось несколько релизов сменить, прежде чем удалось запустить ее нормально.
(58) это уже конструктивнее )))
когда у меня будет гад-инженер — то он скорее всего останется жив )))
а пока я все же просто с ярлычка «от имени администратора» — мне пока хватает и этого
(13) не работает. надо в c:windowssystem32 положить 2 файла mfc71.dll и msvcr71.dll
только после этого strmatch.dll смогла зарегиться
бага в бух 7.7 рел 517, спр Контрагенты, ползунок на 0%:
Для А = 1 По СколькоОтбирать Цикл
{V:BASE7LYASKINEXTFORMS\_TRIFLEDUBLFIND.ERT(1031)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
(0)StrMatch.dll битая оказалась, брал здесьhttp://infostart.ru/public/15765/