powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сравочник - устаревающие значения
24 сообщений из 24, страница 1 из 1
Сравочник - устаревающие значения
    #32364540
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважамые знатоки! (с) ШтоХдеКада?!
Подскажите плюсы и минусы пользования поля "Акутально" в справочниках:
идея такова -
не мучиться с кучей устаревающих позиций при выборе из справочника,
а добавить в него поле логическое
и предлагать пользователю к выбору только отмеченные.
Вопрос: какие грабли-блохи могут выплыть / как реализовать без блох?
Спасибо!
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364619
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Драсте...
Всегда так и делал. Только отмечал не актуальные, а "не актуальные". Так для восприятия понятней ИМХО.

Блоха номер раз: Пользователю обязательно понадобится не актуальные данные, поэтому надо предоставить ему возможность быстро переключиться в режим просмотра "Включая устаревшие данные" или "Устаревшие данные". Вообще-то у меня было три режима: "Только актуальные", "Все (Актуальные, включая устаревшие)" и "Только не актуальные". На практике оказалось, что последний режим практически не используется, поэтому от его поддержки практически отказался (можно отфильтровать записи и по данному признаку, но не так быстро, т.е. режим не имеет "горячих клавиш"). При работе в сети есть тонкости по оптимизации...

Блоха номер два: При отображении данных в режиме "Включая устаревшие" естественно надо дать возможность пользователю идентифицировать данные, поэтому логическое поле должно присутствовать в форме.

Блоха номер три: Пользователь не в состоянии помнить все товарные позиции (все данные справочника), поэтому частенько бывает, что некий товар, который уже отмечен как "не актуальный" заводится в базе повторно - ну не увидил его оператор в отфильтрованном по актуальности наборе, вот и завёл новый. Редко, но и такое случалось... Приходится создавать достаточно сложный (как с точки зрения бизнес-логики, так и с точки зрения кодовой и интерфейсной реализации) механизм объединения товарных позиций. Типа две позиции справочника фактически являются одним и тем же, а по сему их необходимо слить в одну "строку" справочника с учетом движения товара, товарных остатков и т.п.
Попытка реализовать синтаксический анализ добавляемых в справочник позиций на предмет повторени провалилась с треском... Слишком уж у операторов фантазия большая в плане "называния", и это не смотря на наличие внутрифирменных требований к наименованиям.

Вроде всё что вспомнилось "на вскидку"...
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364623
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
присоединюсь
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364849
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, а как быть с такой ситуацией:
статья устарела, галочку поставили, в combobox с роусорсом по этому справочнику она
соответственно не попадет - для ВВОДА так и нужно, устарела - не выбирать!
А как быть с ПОКАЗОМ СТАРЫХ записей? ведь если не попадет в роусорс,
на месте этой записи будет пусто...
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364856
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А в показе старых записей просто не учитывать поле "Актуально". Очень удобно.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364865
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Нуфмеханизм объединения товарных позиций
Он запускается, видимо, в тот момент, когда обнаруживается дублирование в справочнике. Значит, оно все-таки когда-то обнаруживается, несмотря на всю фантазию и невнимательность операторов. А раз так, то почему бы в этот момент не поступить иначе - взять и заменить все вхождения старого кода в таблицах на новый?
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364885
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я был в аптечном бизнесе и работал на фирме-дистрибьюторе аптечной номенклатуры, мы предлагали аптекам свою автоматизированную программу складского учета и продаж. Постерминалы (кассы) +раб.места для оприходования товаров. Так справочник у нас был на всех клиентов общий. Т.е. в момент предстартовой инвентаризации в аптеке там ставилась наша актуальная копия справочника. Результаты инвентаризации выявляли т.н. собственную номенклатуру аптеки, т.е. то подмножество общего справочника товаров, которым она оперирует. По этому полю и был фильтр, но всегда была возможность пепреключится на полный справочник. Потом (после инвентаризации, во время оприходования конкретных поставок) аптека вводила свою новую номенклатуру на "временные" коды (т.е. с большими ID 80000000....) и на нашу фирму, которая занималась сервисной поддержкой аптечного софта и единого справочника одновременно с продажей таблеток, помимо заявок на товар поступали т.н. заявки на пополнение номенклатурного справочника. В нашем офисе был АРМ, на который стекались эти пополнения ото всех автоматизированных клиентов и девчушка, вооружившись томами энциклопедий, реестров, интернетом и прочее занималась тем, что выставляла соответствия между заявкой от аптеки и реальным товаром, который мог быть предложен на рынок. Если выяснялось, что товар - не дублер, то позиция по всем правилам грамматики заводилась на постоянный код, а в аптеку уходила команда замещения, которая добавляла новую позицию в локальный аптечный справочник и временный код везде замещался на новый постоянный. Если выявлялся дубль, то шла команда замещения временного кода на один из старых постоянных кодов опять же везде.
И так славно все работало...Мне прям жалко, что фирма развалилась и софт теперь эксплуатируется под другим логотипом.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364902
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Хам трамвайный:
:) Спасибо! Такой краткой похвалы (именно так и расцениваю:) я еще не получал. Как и вообще похвалы от тебя в целом :) //от него дождешся... ничего не спрашивает, ничем помочь не дает... хамит постоянно...


для Alexus12:
Alexus12Хорошо, а как быть с такой ситуацией:<...>А как быть с ПОКАЗОМ СТАРЫХ записей? ведь если не попадет в роусорс, на месте этой записи будет пусто...
Ну так почему я и говорил о двух (или более) РЕЖИМАХ работы. Т.е. если у тебя форма в режиме "Только Актуальные", то ну нигде абсолютно оператор не должен умудриться наткнуться на старые данные. В то же время, если оператор знает, что у него есть такой товар (тьфу! опять товар... вообщем, я буду говорить "товар", а ты перефразируй на свой лад), но он "устаревший", или просто хочет что-либо поискать в "устаревших" товарах, то он переводит форму в РЕЖИМ "Включая устаревшие" и уже на этой же самой форме, без какой либо смены интерфейса он может увидеть весь перечень товара. Т.е. в твоем комбобоксе надо менять условия фильтрации. Опять же, если операторы выбирают позиции из комбобокса (?!!!), то этот комбобокс в режиме "Включая устаревшие" должен иметь логическое поле "Устаревший товар". Это для того, чтобы юзер мог отделить зерна от плевел.
Еще раз повторю, что речь не идет о отображении данных в каком-то конкретном контроле или форме, а речь о переключении РЕЖИМОВ - понимай и реализуй в соответствии с твоей задачей.

для Владимир Саныч:
Владимир СанычЗначит, оно все-таки когда-то обнаруживается...
Ну да. Может обнаружиться и на складе, когда приходят отборщики и говорят, что у них есть товар, похожий на выписанный по накладной, но он всю жисть назывался (приходил в отборных листах) по другому. Типа, это оно теперь и есть?
Владимир СанычА раз так, то почему бы в этот момент не поступить иначе - взять и заменить все вхождения старого кода в таблицах на новый?
Саныч, случаи бывают разные :) В простейшем случае возможно прокатит и такой простецкий вариант, но иногда ведь и не прокатит... Я тонкостей не помню, но вот на вскидку случаи, когда просто изменить ID не прокатит:
1. Товарные остатки хранятся, а не формируются динамически (подход спорный, но здесь не обсуждается). Если у нас есть табличка с товарными остатками, то просто перезаписав ID мы получим попытку нарушения целостности данных - IDшка существует, а мы пытаемся засунуть в эту же таблицу еще одну такую же (ненужную позицию перезаписываем IDшкой старой позиции). Что бы избежать этой радости приходится остаток перекидывать (плюсовать) с остатком "правильной" позиции, а строку с неправильной позицией удалять.
2. ээээээээ... Воспоминания иссякли :) Давненько дело было... Но, помнится, это место (объединение аналогичных товарных позиций) было одним из наиболее сложных участков в том проекте. Можно попробовать поднять архив и покопаться в нем, но ведь и так самостоятельно можно "дофантазировать" :)

Кроме того, я не зря упомянул проблему с организацией интерфейса. Сначало надо выбрать объединяемые товары, затем выбрать "основной" товар, к которому будет приравнен удаляемый, потом заставить юзера присесть три раза (ибо "откат" на его "ой! я ошибся" очень сложно организовать) и т.п. Оптимальным вариантом, конечно, является драг-энд-дроп, но помнится руки до этого не дошли...
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32364994
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
статья устарела, галочку поставили, в combobox с роусорсом по этому справочнику она
соответственно не попадет - для ВВОДА так и нужно, устарела - не выбирать!
А как быть с ПОКАЗОМ СТАРЫХ записей? ведь если не попадет в роусорс,
на месте этой записи будет пусто...

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

---------------------------------------------------------------

Еще одно решение, но с жуткой денормализацией. Хранить в составе документа не только ID-шник, но и текст (наименование). В формочке - комбобокс со списком, причем в списке только наименования , без ID-шников, число столбцов = 1, bound column = наименование, ограничиться списком = нет. В источнике строк для списка наложить условие - неустаревший товар.
Таким образом в выпавшем списке будут отображаться только актуальные товары (наименования), а уже внесенные неактуальные преспокойно видны в обычном режиме (в свернутом состоянии).
Ну и AfterUpdate этого поля отслеживать, дабы денормализацию блюсти.

Мне такое решение ни фига не симпатично, но иногда имеет место быть.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365042
lobodava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12статья устарела, галочку поставили, в combobox с роусорсом по этому справочнику она
соответственно не попадет - для ВВОДА так и нужно, устарела - не выбирать!
А как быть с ПОКАЗОМ СТАРЫХ записей? ведь если не попадет в роусорс,
на месте этой записи будет пусто...

Можно ещё вот так сделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Form_Current()
Dim strSQL As String
strSQL =  "SELECT ManagerID, FirstName & ' ' & LastName AS Manager From tblManagers " 

If IsNull(Me!cboManagers) Then
    strSQL = strSQL &  "WHERE Old = False" 
Else
    If Not CurrentDb.OpenRecordset( "SELECT Old FROM tblManagers _
            WHERE ManagerID = "  & Me!cboManagers, dbOpenSnapshot)!Old Then
        strSQL = strSQL &  "WHERE Old = False" 
    End If
End If

strSQL = strSQL &  ";" 

If Me!cboManagers.RowSource <> strSQL Then Me!cboManagers.RowSource = strSQL
End Sub
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365177
Фотография Sinner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя ли применять профилактические меры к порождению двойников...
вот я например, лучше бы не дал оператору вводить еще раз позицию, чем потом писать миханизмы "слияния"...

Можно просто на этапе ввода проверять наличие такой позиции или "почти такой", т.е. очень похожей и поругаться типа
вот "коробка спичек" уже была, а вы вот еще раз пытаетесь ввести
"каробка спичяк" (и список похожих наименований, из которых юзер выберет, что надо или все-таки добавит свое)
как установить сходство с тем, что это двойник - это чисто технический вопрос...,
могу посоветовать несколько функций по этому поводу,
сам написал dlll для MS SQL я, которая выполняет эту проверку строк,
можно без труда и на VBA реализовать ....
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365179
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Sinner:

На это давно ответил Нуф:

НуфПопытка реализовать синтаксический анализ добавляемых в справочник позиций на предмет повторени провалилась с треском... Слишком уж у операторов фантазия большая в плане "называния", и это не смотря на наличие внутрифирменных требований к наименованиям.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365218
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
актуальность справочников штука серьезная...

ладно бы казалось есть при написании бд некотрые вещи динамически изменяемые по времени каталог товаров, список сотрудников
тут все ясно для такого справочника завязка на актуальность по времени

Код: plaintext
id_товара название_товара актуально_с актуально_по


написали и забыли про эту проблему

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

пока решаю такого рода проблемы написанием серверных функций.
типа
Код: plaintext
Определить_название_отдела_сотрудника_на_дату(@КодСотрудника, @Дата)



вот еще яркий пример из области кадров
у каждого сотрудника есть два поля дата приема и дата увольнения

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

Код: plaintext
1.
2.
3.
Стаж (@КодСотрудника, @наДату) 
если датаУвольнения не null и  @наДату > датаувольнения то   @наДату = датаувольнения

Стаж =  @наДату - дата приема



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

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

Код: plaintext
1.
2.
3.
4.
5.
Стаж (@КодСотрудника, @наДату) 
если датаУвольнения не null и  @наДату > датаувольнения то   @наДату = датаувольнения

Стаж =  @наДату - дата приема - суммаПериодовУвольненияПоСотруднику



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

PS :
Мне очень интересно выслушать другие мнения и подходы к данной проблеме, в частности с приближающимся новым годом и ожидаемыми новыми идеями руководства в связи с этим.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365679
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем откликающимся!

>ВС:А в показе старых записей просто не учитывать поле "Актуально". Очень удобно.
>Нуф-Нуф: Т.е. если у тебя форма в режиме "Только Актуальные",

Тады нада как-то отделять старые от новых?.....
А как? 8()
Вчера была актуальной, сегодня устарела эта позиция в справочнике,
завтра - другая, и чито?
Дату устаревания вести?..

> ЛП: Я еще раз выскажу одну и ту же мысль.
Комбобокс фигово пригоден для выбора товара и

Да, именно так.
Но и юзер при просмотре должен видеть в записи какую-то ценную инфо
вместо ID, правда?
Легче всего огранизовать Lookup наименования по ID через комбобокс
Или денормализовать и хранить рядом с ID для внутренних нужд
его текстовое отображение для нужд показа?
То есть второе решение вижу, а до первого не догоняю ((((

И еще вопрос по универсальной форме для выбора:
кто пользуется - как реализована?
переключением иссточника данных на запрос,
который во "всегда одинаковом" виде выводит ей разные справочники?
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365745
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinnerА нельзя ли применять профилактические меры к порождению двойников...
вот я например, лучше бы не дал оператору вводить еще раз позицию, чем потом писать миханизмы "слияния"...


интересная тема, достойная вынесения в отдельный топик. ??

у меня есть VB функция сравнивающая два названия при любых очепятках и дающая на выходе число - степень схожести фраз
на основе алгоритма число совпадающих подряд букв - степень числа 2, количество совпадающих блоков - сумма
записываем степень похожести в таблицу и сортируем в обратном порядке


находит невероятные комбинации ))

один минус при таблице в 1000 записей и длине боле 25 букв поиск более 10 сек.

думаю над тем как бы в хранимку запихнуть алгоритм и может напрячь на это дело полнотекстовый поиск чтоб быстро искало.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365804
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда дело дойдет до практики и за работу (например: по заколачиванию накладных) возьмутся реальные тётеньки-операторы без специального филологического образования и структурированного мышления - см. замечание Нуф-Нуфа
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365864
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК
Но и юзер при просмотре должен видеть в записи какую-то ценную инфо вместо ID, правда?
Истинная правда. Пусть видит наименование (например).
Легче всего огранизовать Lookup наименования по ID через комбобокс
Истинная неправда. Отображать текстовое поле (наименование) проще всего отображать через в обычном текстбоксе. Комбобокс нужен для выбора , но, как я уже устал повторять, именно для выбора он и неудобен - в случае большого списка.

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

А нельзя ли применять профилактические меры к порождению двойников...
Можно и даже нужно. Самая главная профилактическая мера - недопущение тетенек-операторов до ведения номенклатурных справочников. Не их это дело - новые позиции заводить. Их дело уже имеющиеся позиции приходовать/отгружать.
А за корректное ведение ном.спр. должнен отвечать отдельный человек. Причем отвечать он должен своими зубами. Тогда и "двойников" не будет. По крайней мере не больше 32 двойников.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365934
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох>недопущение тетенек-операторов до ведения номенклатурных справочников

Иосиф Виссарионович сказал как-то кому-то из писателей "Другого народа у меня для вас нет, товарищ ..."

Ну и хде взять других тётенек? Самому что-ли за ввод садиться? Или всех на курсы отправлять (зубы заранее вставные делать?)
Профилактика конечно должна быть, чтобы не было эпидемий, но если ее довести до абсурда, то дети тоже нарождаться не будут. И если софт предполагается использовать в полевых условиях, но он должен содержать в себе возможности майнстрим обойти (завести-таки номенклатуру на месте), но и последствия чтоб разгребались достаточно легко. А это уже - проектировщики софта должны обеспечить. ИМХО
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32365961
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лифчик
Как ты себе все это представляешь?
Я вот по опыту работы в нескольких торгашеских конторах могу сказать, что прежде чем расширять ассортимент - куча людей сидит и занимается анализом. Изучают спрос, изучают предложения, изучают конкурентов, определяют, можно ли выдергивать средства из под уже проверенных товаров, хватит ли места на складе и т.д. и т.п. Долго чешут репу и выносят вердикт - "Надо брать, будем торговать" или "Да пошли они со своей херней куда подальше"
Оказывается это все от лукавого. Весь этот непростой механизм можно заменить одной тетенькой-оператором, которая возьмет и оприходует грузовик чугуниевых презервативов. И будет потом фирма по продаже детских колясок эти чугуниевые презервативы давать в качестве бесплатного подарка каждому купившему детскую коляску.
Полевые условия? Тетенька заблудилась в своем собственном прайсе? Да пусть позвонит в офис, ей там скажут "Долбое..на лесная, это же находится в группе такой-то на третьей снизу строчке". А то назаводят новых позиций блин...
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32366050
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох, все правильно с точки зрения внутрикорпоративного развития. Но я даю другой пример.
Ты - софтверная фирма с далекоидущими намерениями по контролю за информацией на рынке. Сейчас много таких фирм в каждой отрасли пытаются впарить свой программный продукт "склад-розница" мелким торговцам, чтобы они в едином формате (желательно - на основании одного справочника) давали свои предложения. Т.е. чтобы у всех них Чугунный презерватив назывался именно чугунным презервативом и никак иначе.
Но если ты свой прогр.продукт впаришь клиенту со словами: "А если вдруг на рынке появятся чугунные през-вы фасонные с графитовым лубрикантом, то вы должны позвонить в наш кал-центр, чтобы мы сами завели и прислали вам код новой позиции" - то обычно таких "автоматизаторов" посылают по известным адресам. Или софт берут, но справочник заполняют как хотят и они у конечных мелких клиентов со временем расходятся, плодятся дубли и прочее-прочее так, что потом собрать весь этот массив информации (расставить соответствие, т.е. подвести под единый справочник) становится проблемой.
Вот поэтому я и привел (несколькими постами выше) историю, как мы вели общий справочник на несколько десятков розничных продавцов, не особенно стесняя их телодвижения по поводу заведения новой номенклатуры. И человек, следящий за новой номенклатурой как раз у нас и сидел (а не в штате клиента) - но в целом софт давал конечному пользователю достаточно гибкости. Вопросы, конечно, были,но тогда уже запускался итерационный процесс и мы были в 90% правы. А большинство замен (там где элементарные грамматические ошибки и дубли исправлялись) клиенты и не замечали.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32366092
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейК>один минус при таблице в 1000 записей и длине боле 25 букв поиск более 10 сек.

А вот этот минус все плюсы забивает, если речь идет о работе в реальном времени. В бытность свою в аптеке отметил - приходуется в день 10-15 накладных всего 100-200 позиций. Если в каждую включить 10 сек. на проверку дубля - это кранты. Кроме того, полный справочник аптечной номенклатуры 3 года назад тянул на 30000 наименований. Что сейчас - трудно представить.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32366194
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал серверную процедурку(пока без оптимизации быстродействия), которая ищет похожесть по любым частям слова, пока не получилось поиспользовать полнотекстовый поиск так как в нем нет операций сравнения двух полей а только поле и условие. попробую курсором сделать....



пока результат 3сек на медленном серваке для 50000 записей и 39 символов поиска

в процедуре ищется название клиента, похожее на параметр, передаваемый в хранимку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
ALTER PROCEDURE clients_find_simple (@findstr nvarchar( 50 ))


AS
SET NOCOUNT ON 
begin transaction

declare @len int		 -- динамическая для цикла длина искомой фразы
 
declare @start int           -- с какой позиции идет поиск
 
declare @findstrlen int    -- длина искомой строки
 
declare @scale bigint 	 -- для указания класса точности при возведении в степень
 

set @scale =  3 


set @findstr ='Фигзнаеткаковский нефтеперерабатывающий завод'


 -- очистка искомой строки от мусора
 
set @findstr = REPLACE( @findstr ,' ОАО','')
set @findstr = REPLACE( @findstr ,' OAO','')
set @findstr = REPLACE( @findstr ,' ОАО','')
set @findstr = REPLACE( @findstr ,' ООО','')
set @findstr = REPLACE( @findstr ,' OOO','')
set @findstr = Ltrim( @findstr )
set @findstr = Left(@findstr,  39 )
set @findstrlen = len(@findstr)

 -- временная таблица, содержащая все варианты
 
declare @allvariants table (wordpart  nvarchar( 50 ) COLLATE SQL_Latin1_General_CP1251_CI_AS , stepen bigint )

 -- поиск совпадений менее 3 букв не существенен
 
set @start =  1 
while @start <=  @findstrlen -  3 
begin
	set @len =  3 
	while @len + @start -  1  <=  @findstrlen
	begin
  		insert into @allvariants (wordpart, stepen) values (   '%' +  SUBSTRING ( @findstr , @start , @len ) + '%' , power(@scale ,@len) )
	set @len = @len +  1 
	end
set @start = @start +  1 
end



SET NOCOUNT Off

select cl.name, ( select sum (stepen) from  @allvariants av where   cl.name  like av.wordpart    )
from client cl with (nolock) 

commit transaction

	RETURN 
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32366421
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК.
Ну зачем же изобретать велосипед ?
Посмотри здесь . Возможно, это то,что тебе надо.
...
Рейтинг: 0 / 0
Сравочник - устаревающие значения
    #32368511
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кааца, алексейК путает 2 задачи:

1. Ведение таблиц актуальных _представлений_ сущностей (то же имя фирмы и реквизиты, или например наименование страны которые с 17-го по 90 было таким-то с 90 по ... - такое-то, и соответственно и выводиться должно на таких-то документах так-то, а на таких-то - так-то). Эта задача решается именно созданием таблиц представлений, которые имеют одну головную запись в таблице сущностей, но несколько (отличающиеся, _может быть_ датами актуальности, а может быть и не отличающиеся - если актуальность прописывается на уровне записи в документе, а не в зависимости от времени). Таблица сущностей может содержать только код "основного представления" в справочнике (+- код "актуального представления"). Таблица представлений - это обычно то, что было "не продуманным справошником" (или справочником одного департамента). Таблица связи может добавляться отдельно (при проблемах с модификацией структуры), а можно добавить в "непродуманный" справошник поле связи с таблицей первичных "сущностей" (каскадно обновляемое). Как правило, таблица сущностей будет использоваться для подсчета сверток (агрегатов) по сущностям (имеющих, несколько представлений) или выводе отфильтрованных записей. При этом придется переписывать фильтры и заново писать подсчеты агрегатов по "основным сущностям" (как правило, агрегаты и фильтры по "представлениям" к этому моменту существуют). В документах же как были ссылки на представления, так и останутся. И заботиться об их актуальности по датам не придется. За исключением процедуры выбора (актуального) текущего представления в новый документ.


2. Ведение справочников, в которых сущности могут задваиваться только по недосмотру или разобщенности (разнесенности в пространстве) данных, и для которых требуются процедуры приведения к нормальному виду и (или) анализа похожести при вводе данных. Если данных в справочники вносится много, то тормоза при вводе не нужны, и анализ дубляжа вновь введеных данных имеет смысл вынести в отдельную процедуру (то же верно и при слиянии/синхронизации данных разнесенных департаментов). Если пополнение справочников редкое - можно подцепит процедуру анализа по умолчанию на ввод. Можно скомбинировать ручной запуск процедуры анализа дублей с авто-анализом по умолчанию (в зависимости от какого-нить флажка формы ввода).
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сравочник - устаревающие значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]