Поиск и замена дублирующихся элементов справочников, КОД ОТКРЫТ, для 7.7
Разработка - Инструментарий разработчика
2. Для установки:
2.1 Переименуйте файл WithoutConf.exe_ в WithoutConf.exe
и разархивируйте (запустите на выполнение).
2.2 Каталог DLL скопируйте в Вашу базу (копию !!!), каталог ExtForms
в одноименный каталог Вашей базы.
3. Для открытия: Сервис
Дополнительные возможности
1С:Студио: Отчёты и обработки
Поиск и замена элементов справочников
4. В обработке использованы 1С++, FormEx, StrMatch
Скачать файл
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Наименование | Бесплатно | |
---|---|---|
arhiv
.exe_ 1,36Mb
644
|
644 | Скачать бесплатно |
См. также
Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 1C77 Абонемент ($m)
Консоль запросов к базе SQL, не требующая внешних компонент
10 стартмани
29.04.2015 22465 57 Gvozdod 8
Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 OpenConf Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 1C77 Россия Бесплатно (free)
Обновленная сборка OpenConf Light Pack.
27.04.2014 59894 446 unichkin 50
Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)
Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.
1 стартмани
23.04.2014 169034 1889 Alexoniq 1603
Инструментарий разработчика Программист Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)
Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))
1 стартмани
04.09.2013 33516 61 O-Planet 78
Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)
На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.
1 стартмани
13.08.2013 21990 Reptile 5
Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)
Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.
1 стартмани
14.07.2013 27788 56 adamx 11
Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)
Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........
1 стартмани
21.02.2013 18428 36 MarSeN 14
Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)
Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.
1 стартмани
21.12.2012 36461 51 venger 7
Сама для себя писала «того же назначения», в ходе последней сложной конвертации данных ничего лишним не показалось – потому попробую описать различия функционала. В качестве стартовой для организации подборов использовала свою же Печать_Справочников (есть в профайле)
1)Тоже использовала компоненту для нечеткого сравнения строк и тоже ReplVal. Только правила ее чуть больше – во-первых, в стандартном виде замена в проводках доступна только при перепроведении – хотя штатно программно можно и без перепроведения - потому сделала птычку "Заменять в операциях без перепроведения". Из того, до чего «должны дойти руки» - оставить от ReplVal только внешнюю оболочку и сделать замену прямыми запросами – чтобы и регистры и периодику без перепроведения. Во-вторых, в ReplVal исправлена «авторская ошибка» - строки 226-227 при должных обстоятельствах «выстреливают» В третьих, добавлена возможность ограничения временного диапазона документов, в которых производится замена.
2)Компонента нечеткого сравнения – замечательно, но иногда работаешь у клиента, и нет возможности ее зарегистрировать. Удобно, когда в этом случае работать все-таки можно, не используя нечеткое сравнение строк, а просто равенство (возможно, с точностью до регистра или до «всех значащих символов»)
3)Удобно, когда сравнение не по одному реквизиту, а возможность одновременного сравнения по нескольким – например, контрагенты являются двойниками, когда у них «УНН равно, наименование похоже», или товары – когда «Штрих коды равны, цены равны, наименования похожи»
4)Удобно ограничить область правильных и область поиска двойников произвольной выборкой или группой или даже признаком «удаленные» или «не удаленные» - это и ускоряет поиск, и делает результат более четким
5) Для поиска по периодическим реквизитам – задавать дату, на которую их сравниваем
6)В компоненте нечеткого сравнения строк есть замечательная возможность использовать Вес чисел – чтобы Масло 100 г и Маслы 100 г были похожи, а Масло 100 г и Масло 200 г - нет
7)В ReplVal – удобнее передавать не одной порцией, а все сразу – актуально, если двойников ОЧЕНЬ много, что бывает после конвертации.
8)После обработки ReplVal можно обучить делать «заменяемое» помеченным на удаление, а с «заменителя» эту пометку снять – мелочь, а приятно
9)Важно иметь возможность не только передать в обработку замены, но и на печать – заменитель и все двойники к нему, с расшифровками. Например, чтобы дать ответственным возможность разобраться с нечеткими случаями. Или распечатать для виновных «рецепт на получение оплеух от начальства».
Уффф….. вспомню еще чего – напишу еще )))
А просто так - жаль выкладывать - уж очень большой кусок работы.
Слишком много молчаливых пользователей с нулевым рейтингом - просто качают-качают - и все уходит куда-то "как в черную дыру" - даже без конструктива и без благодарности.
я обычно просто выношу нужную командную строку на ярлычок и запускаю его "от имени администратора"
Ой, мамо! А юзверей 40 и все не в терминале. А потом еще инженер, гад, винду переставлял и прорегить забыл :cry: Плавали - знаем! ;)
Конструктивно? Да сколько угодно! Варианты:
1. Убить гада-инженера (но это больно уж просто)
2.
3.
Чего-то более конструктивного уже нагловато-то бы было просить, а? :D
И что понимается под выражением "полнотекстовый поиск", который "в восьмерке - туфта ?" ?
Растолкуйте мне.
На всякий случай выдержка из документации (описание полнотекстового поиска в 8-ке):
* — поиск с использованием группового символа (замена окончания слова). Должно быть введено более 1 значащего символа; пример: доку* — найдет "документ", "документировать", "документальный" и др.;
# — нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос #Система найдет "систама", "сивтема"; запрос Система#2 найдет "ситтама", "сеттема";
! — поиск с учетом синонимов русского, английского и украинского языков. ! ставится перед соответствующим словом; пример: поиск !красный кафель, найдет еще и "алый кафель" и "коралловый кафель".
В базе есть следующие товары:
Т/в Виски 100мл Лимитед
Виски 100мл Лимитед Т/в
Виски 100мл Лимитед
Виски 100 Лимитед
Whisky 100 Лимитед
Whisky Лимитед 100
.... ну и ещё с десяток другой похожих комбинаций с перестановкой слов/символов. А всё это один и тот же товар.
Как надо построить запрос, чтобы получить все такие похожие позиции в 8-ке без ВК?
ПервоеСлово#2 NEAR ВтороеСлово#2 OR
ПервоеСлово#2 NEAR ТретьеСлово#2 OR
ВтороеСлово#2 NEAR ТретьеСлово#2
Поиск с учетом морфологии.
Порядок слов не имеет значения.
#2 - допускается несовпадение двух символов в слове.
Поиск может осуществляться либо во всей конфигурации, либо только среди назначенных объектов метаданных. Существуют и другие возможности для организции такого поиска , какой мне нужен .
И после этого - мне толкуют о какой -то самопально-хитрой ВК ?
Задача :
Наименование элемента справочника : "Виски 100мл Лимитед "
Для этого элемента справочника мы ищем "похожие по наименованию" другие элементы этого же справочника.
Решение для 8-ки :
Определяем
ПервоеСлово = "Виски" ;
ВтороеСлово = "100мл" ;
ТретьеСлово = "Лимитед";
Составляем символьную строку поиска с использованием литералов :
СтрокаПоиска =
"Виски#2 NEAR 100мл#2 OR
Виски#2 NEAR Лимитед#2 OR
100мл#2 NEAR Лимитед#2 "
- и подаем на вход встроенной функции 8-ки, которая возвращает набор объектов
"похожих" на строку поиска.
Приведенная строка поиска означает , что искаться будут такие элементы справочника, наименование которых содержит
либо два слова "Виски" и "100мл" ( в любом порядке),
либо два слова "100мл" и "Лимитед" (в любом порядке),
либо два слова "Виски" и "Лимитед" (в любом порядке)
В каждом посиковом слове допускается несовпадение двух символов.
Т.е. наименование , содержащее два слова
"Висто" и "Леметед" в любом порядке - удовлетворяет критерию поиска.
Позиционируемся на каждый элемент справочника.
Разбираем наименование на "пЕрвоеСлово", "ВтороеСлово","ТретьеСлово".
Запускаем поиск. Получаем массив "похожих". Переходим к следующему.
Как вариант :
Затем можно организовать анализ всех полученных массивов на похожесть.
И получить группы предполагаемых дубликатов.
Сам никогда такого не делал - но предполагаю , что делать нужно примерно так.
А тут как ?
Там реализован программный вызов этого чуда ?
+ на сколько я помню, нужно у каждого реквизиты втыкать , что он используется в полнотекстовом поиске + поддержка индекса в актуальном состоянии для этого поиска..
Да, у каждого реквизита объекта есть свойство "Полнотекстовый поиск".(использовать или не использовать).
Да, база периодически должна индексироваться в монопольном режиме.
Если тупо применить описанный алгоритм к твоему примеру
"Виски 500 мл производство Волгоград".
, то строка поиска будет сотоять из комбинации трех первых слов :
"Виски" , "500" , "мл".
Т.е. программно на вход встроенного менеджера полнотекстового поиска мы подадим строку :
Виски NEAR 500
OR Виски NEAR мл
OR 500 NEAR мл
Отсюда следует что наименование "Водка 500 Волгоград" не содержит вместе ни одной из комбинаций из строки поиска .
А например строка "Волгоград 500 Лимонад мл " содержит вместе слова "500" и "мл" - значит она удовлетворяет критерию поиска. (...OR 500 NEAR мл)
Ну если тупо применять твой алгоритм, тогда давай такой пример
"производство Волгоград 500 мл Виски".
Я как бы намекал, что полнотекстовым поиском добиться универсальности крайне сложно, если вообще возможно.
И дело вообще не в платформе 7.7/8. От неё в данном случае вообще ничего не зависит
На фразу
" полнотекстовым поиском добиться универсальности крайне сложно, если вообще возможно "
можно ответить только одно :
" любым другим поиском добиться универсальности крайне сложно .... даже (прости меня, vip ) при помощи ВК"
Потому что (и я здесь полностью с тобой согласен) :
".. дело вообще не в платформе 7.7/8. От неё в данном случае вообще ничего не зависит".
Специализированное решение , разумеется, эффективнее общего.
Грубо говоря , на любой Like всегда найдется свой Whisky .
Отсюда любители "кустарных" парсеров делают радостный вывод :
время "самопальных" ВК еще не прошло !
Уместить весь алгоритм поиска в одну символьную строку и употребить Like в запросе -
смотрится ущербно , скучно и неинтересно.
именно эту обработку я брал как основу
Полнотекстовый поиск - это хорошо - но это совсем не заменит нечеткого сравнения - это совсем разное.
На любую построенную маску - для запроса типа LIKE - легко построю контрпример, заменивши одну букву и получивши в общем-то похожее слово. К тому же "вес чисел" тоже никак не используешь - маска Масло 100* - выберет и Масло 1000. Не говоря уж о том, что я совсем не хочу ломать голову, читать справочники и строить хитрые маски. Я просто укажу - "все похожие". Если нужна маска - сформирую выборку для поиска с использованием маски.
По поводу внешних компонент... Весь спор - "использовать или нет, если в восьмерке все есть?"
А для меня неразгаданная загадка - почему типовой ЗиУП использует внешнюю компоненту для склонения ФИО, если "в восьмерке все есть", и в крайнем случае все можно просто программно реализовать средствами языка .
1. За то , что разработчики ЗиУП используют внешний компонент для склонения ФИО - мы их осудим.
2. Из Ваших слов непонятно Что Вы понимаете под "нечетким сравнением".
Пример.
В строке поиска , которая подается на вход менеджера полнотекстового поиска в 8-ке, мы указали "Natalia#2" .
Это значит , что критерию поиска удовлетворяют :
"Natelii","Datilia" и т.д.
Вопрос : Это нечеткий поиск ?
3.
Вы то укажете ...
Но "кто-то сидящий внутри программы" должен указать числовой параметр , определяющий степень этой самой нечеткости . В примере п.2 такой числовой параметр равен 2.
И это хорошо ))
Семерка без возможности использования внешних средств вообще давно умерла бы. Для восьмерки полный отказ от внешних компонент был бы тоже путь к концу.
Про использование полнотекстового поиска в восьмерке - все же - признаю - была не права - возможность нечеткого поиска все-таки есть - так что все не так плохо ))
С сайта фирмы 1С:
Есть возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости. Пример: указав в строке поиска слово "привет" и нечеткость 17 %, найдем все аналогичные слова с ошибками и без: "привет", "превет", "привед". (с)
Насколько я понимаю, чтобы полноценно воспользоваться полнотекстовым поиском - необходимо поддерживать индекс поиска в актуальном состоянии? Т е задача поиска всех двойников может "осложниться" восстановлением индекса? Особенно если нужные на момент поиска поля не были включены в состав этого самого полнотекстового поиска и в общем случае там и не нужны?
"Но "кто-то сидящий внутри программы" должен указать числовой параметр , определяющий степень этой самой нечеткости . В примере п.2 такой числовой параметр равен 2."
Не поняла мысли .... Ну параметр "похожести" - ну и что? StrMatch вполне поддерживает "степень похожести".
Именнно так.
Для полнотекстового поиска в 8-ке индекс должен поддерживаться в актуальном состоянии. Необходимые реквизиты должны быть включены в индекс на уровне конфигуратора. Согласен , некоторые неудобства. Я согласен их терпеть и не устанавливать никакие ВК (пусть даже по отзывам великолепные).
Эээээ....Вы бы того , полегче на поворотах.
При полном отказе от ВК работает великая подавляющая часть пользователей (та самая "тьма", к которой имею честь принадлежать).
Извиняюсь. "Тьма" - это не "конец" !
95% пользователей используют типовые конфигурации. А в них на реквизитах установлено свойство "Полнотекстовый поиск". Так что проблема надуманная.
Если конфигурация нетиповая , то установить нужное свойство для реквизитов и запустить индексирование - труд небольшой.
Дело вкуса , конечно. Но это лучше , чем ставить неизвестно что на свой компьютер.
Я тоже не очень сторонница внешних компонент, но иногда это действительно необходимость.
Это как раз тот случай.
Тем более что это не для "работы изо дня в день" и не для доступа к данным для записи
А всего лишь внешние функции строковых переменных, остальное штатно. И редкие административные работы.
Для А = 1 По СколькоОтбирать Цикл
{V:\BASE7\LYASKIN\EXTFORMS\_TRIFLE\DUBL\FIND.ERT(1031)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
Рейтинг: 207
Для получения уведомлений о новых публикациях автора подключите телеграм бот: Инфостарт бот
№ 70044
Создание 11.05.10 15:01
Обновление 03.08.10 19:19
Просмотры 29948
Загрузки 644
Рейтинг
44
Комментарии 64
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому
Системный администратор
,
Программист
Тип файла Внешняя обработка (ert,epf)
Платформа Платформа 1С v7.7
Конфигурация 1C77
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)