v7: Множественный отбор в журналах и справочниках 7.7 заменой запросов SQL #210738


#0 by romix
Зацените разработку (приложен тестовый пример, который можно скачать). Порядок установки - в readme.txt. Позволяет делать отбор сразу по нескольким (а не по одному) реквизитам в обычном (не только общем) журнале документов. То есть, более полно использовать возможности отбора, присущие языку запросов SQL.
#0 by romix
Зацените разработку (приложен тестовый пример, который можно скачать). Порядок установки - в readme.txt. Позволяет делать отбор сразу по нескольким (а не по одному) реквизитам в обычном (не только общем) журнале документов. То есть, более полно использовать возможности отбора, присущие языку запросов SQL.
#1 by АперБот
Не сердитесь на меня, за то, что я поднимаю ветки, я всего лишь бот. Все претензии к моему автору - Волшебнику. Мои сообщения - это его сообщения.
#2 by AeDen
Жаль, сто на для ДБФ...
#3 by romix
Аналогично реализуется отбор в справочниках.
#4 by корум
хочу в дэбэээээф... (ушёл плакать)
#5 by romix
Ну вот оказывается никому не нужно :-(
#6 by КонецЦикла
Нужно! Ты коротенько поясни смысл ИспользоватьСписокЭлементов?
#7 by КонецЦикла
Или как оно там? Тестил по сетке?
#8 by romix
SQL же, а там по барабану, сетка или локально. Лана пойду справочники мутить. Там должно быть интересно: полный отбор по любым критериям, включая признак пометки на удаление... Быстрый подбор можно также наверное реализовать...
#9 by КонецЦикла
имел в виду типо реальной работы, когда все что-то делают
#10 by kir-g
вещь нужная спасиба попробую
#11 by Иде я
#12 by Иде я
Это отбор в форме списка справочника через АДО
#13 by SergeyFirst
Жаль, что это сделано не лет 5-6 назад
#14 by ASV
в Демо базе делаю отбор по Товар - Киндзмараули В итоге две строки. устанавливаю курсор на вторую строку. если прокрутить колесико мышки вверх то оба документа исчезают из журнала
#15 by romix
На реальных пользователях пока не тестил. Но они очень настаивали на отборах и я уже запарился объяснять что 7.7 этого не поддерживает. :-)
#16 by КонецЦикла
ОК. Попробую на средней (2 Гиг) базе локальной скоро. На пользователях - боюс :)
#17 by romix
Оказалось кстати что ничего сложного: подменная DLL и фтыкание условий в предложение where
#18 by КонецЦикла
Молодец короче!
#19 by КонецЦикла
Я ж знал, просил людей: "ну сделайте полноценный отбор"
#20 by romix
Ну да, конечно. Сначала на тестовой базе... Может и мне рабочую базу развернуть :-)
#21 by КонецЦикла
Слухай, а патчер куда надо? В Бин переносить? Говорит не найден Бкенд.длл
#22 by КонецЦикла
Короче работает! Офигеть!
#23 by КонецЦикла
глЗначениеОтбора - зачем?
#24 by Азат
А если 1С++ прикрутить и выкинуть АДО? тогда, в принципе, для ДБФ проблем не должно быть?
#25 by КонецЦикла
Думается, что так
#26 by Любитель XML
попробуй
#27 by Любитель XML
+ потом расскажешь :)
#28 by Азат
в выходные сделаю, только, фишка одна - в КЗ не буду ничего писать, просто потестирую и все
#29 by Любитель XML
ветку тока заведи, или эту апни
#30 by Азат
о результатах скажу...
#31 by romix
Там в readme.txt я все расписал... Юзал пока отлаживался, забыл стереть.
#32 by Vinny
Вот же блин. И какого фига у нас в Компании софт должен быть лицензионный... Так и тенуться руки лицензионное соглашение нарушить
#33 by romix
А там запрет на изменение двоичного кода что ли?
#34 by Дык ё
А почему только для общих реквизитов? Графу отбора хочу.. :)
#35 by Vinny
модифицируешь код системной 1С кой dllки... Врядли 1С обрадуется ... Может и предяъвить, ИМХО
#36 by kink
ламеры, да сделайте любой свой view и юзайте....
#37 by acsent
Для 1С++ уже года 2 назад как написал журнал с любым отбором
#38 by Злобный Фей
Хде ссылка? А то ведь я тож Windows Vista уже лет десять тому написАл
#39 by acsent
acsent.nm.ru
#40 by kink
37. Он ведь не динамический... Динамический тока я писал.
#41 by Злобный Фей
Другое дело :) Ссылку в студию
#42 by Прохожий
Для ДБФ тоже есть АДО... ...
#43 by acsent
На основе ТП очень даже динамеческий (но ему конечно нет еще 2 лет)
#44 by kink
41. Смотри в проклабе по нику matreya, много лет назад выкладывал упрощенную версию (без использования ado).
#45 by kink
43. Что такое ТП?
#46 by HIDDEN MESSAGE
#47 by HIDDEN MESSAGE
#48 by toypaul
по теме топика :)
#49 by HIDDEN MESSAGE
#50 by HIDDEN MESSAGE
#51 by HIDDEN MESSAGE
#52 by HIDDEN MESSAGE
#53 by romix
Где мы были несколько лет назад? :-)
#54 by romix
Так это мой же код! :-)
#55 by МуМу
Только уважаемый romix не рассказывает к чему может привест подобная подмена с точки зрения производительности в случае указания конкретных индексов.(index=) Ну а вообщем то это решение(полное с доп. индексами по отбитраемым полям) есть у Softpoint.
#56 by МуМу
Вообщем проверьте решение romixa на больших журналах и сами все поймете. В случае если в доп. отборе участвует доп. реквизит большой размерности(например строка 20 символов) это может быть для системы вообще смертельно.
#57 by МуМу
Хотя конечно если ромикс все эти ньюансы учел то респект мой и уважуха.:)
#58 by romix
Дополнительно индексирование в скобочках можно указывать, я не против. Так наверное будет даже лучше. Спасибо за подсказку. Можно, я думаю, даже очищать это поле - тогда MS-SQL сам проставит в соотв. со своими внутренними счетчиками требуемые индексы. Что же может быть "смертельно опасного" в модификации условия в SELECT? Это безопасный оператор, т.к. он всего лишь читает данные из таблицы по условию. Подбор слов "смертельно для системы", когда речь идет о всего лишь понижении скорости - это чОрный пиар что ли? Или это демонстрация умелого использования методики медицинского гипноза/НЛП заказчика с целью развода на деньги? :-) Пожалуй, я немного изменю DLL, чтобы можно было заменять полный текст запроса - тогда каждый учтет что он хочет учесть...
#59 by ASV
>>чтобы можно было заменять полный текст запроса SELECT изменить на DELETE :)
#60 by DF_Slayer
Лучше INSERT, это, вообще, по теме будет. Только вот куда потом 1С девать :)
#61 by КонецЦикла
Да, да Ромикс, измени И со справочниками бы то же самое сделать, не забудь :) ЗЫ. Еще не тестил на большой
#62 by МуМу
Для эффективного отбора по нескольким реквизитам нужен дополнительный индекс. Ты его тоже будешь компонентой создавать?
#63 by kudlach
Было бы идеально. Когда ждать ?
#64 by kudlach
А со справочниками - 1с++ идеально работает. ИспользоватьСписокЭлементов(СписокВыбораВзятыйИз1СРР); 49 000 записей по установленным фильтрам (6 штук) менее чем за 0,1 сек выбирает
#65 by КонецЦикла
А ведь неудобства при вводе нового элемента есть, напрмиер Как разруливаешь?
#66 by romix
В моем примере - в таблице 1SJOURN находятся дополнительные "Общие" реквизиты с установленной галочкой "отбор" (только тогда они хранятся в 1SJOURN). К ним 1С-ка уже создала индексы: По одному реквизиту, видимо, прокатит стандартный индексированный отбор. По второму и последующим реквизитам отбор будет без индекса, но это тоже вполне штатная ситуация в SQL. Например, во многих случаях по одному контрагенту не так много документов за период... Если же будет проблема с включением тормозов, то придется уже что-то думать, или приобретать более общие решения.
#67 by romix
Сейчас мысли в кучку соберу...
#68 by kudlach
#69 by kudlach
А есть ли возможность вместо слова WHERE далать подставу нужного текста ? Например : Вместо WHERE подставлять : LEFT OUTER JOIN DT12345 as Документ (NOLOCK) ON Документ.ID=_1JOURN.ID WHERE Документ.SP67890='xyz' ???   вот хотябы так и тогда вообще все вопросы по тому где лежат реквизиты документов журнала отпадают  :-)
#70 by romix
Да, щас будет
#71 by kudlach
Где скачать ?
#72 by КонецЦикла
Однако попробуй на реальном объеме Я мучался - ничего невозможно делать, искать, проводить доки
#73 by КонецЦикла
+ В смысле ДИКО тормозит
#74 by Прохожий
Ну да. Я это для ...
#75 by kudlach
Ничего не изменилось...   :( а сам я в Делфях , к сожалению, не шарю... Все же, если удастся сваять тоже, но с перламутровыми пуговицами (заменить WHERE   на  текст подставы) Буду признателен, если в меня кинут сцылой где это можно качнуть. Спасибо.
#76 by romix
1) Полностью переписал компоненту, чтобы не требовался явный патч. Полный перехват SQL уже делает внешняя компонента (патч не требуется). 2) Теперь можно заменять SQL-запросы целиком: Таким образом, можно заменить несколько (до 200) шаблонов запросов. 3) В тестовый пример добавлен случай отбора по "не помеченным на удаление" документам. 4) В справочнике добавлен подбор по первым буквам наименования (чтобы отображался не весь справочник, а только те элементы, наименование которых начинается с указанных букв (можно не по первым - тогда % - метасимвол).
#77 by romix
Тестовый пример (ссылка изменилась) можно скачать здесь:
#78 by romix
Может, у тебя был включен лог (журналирование), а он притормаживает. И в реальной работе совсем не нужен. В любом случае, я сейчас перехватываю (внешней компонентой, а не патчем) единственную функцию SQLPrepareA, остальные не трогаю.
#79 by MMF
Жуткое качество кода компоненты
#80 by MMF
(79+) модуль uList просто шедевр :-) да и использование критических секций в незащищенном коде - прикольно
#81 by MMF
чтобы не выглядело просто злорадством, рекомендую: 1) выкинуть ужас в виде класса TList (кстати, никогда не надо давать пересекающиеся со стандартными классами идентификаторы). Использовать TList :-) только из Classes. Попутно избавляемся от ограничения в количестве подмен. 2) Причина тормозов помимо всего прочего в поиске заменяемого запроса перебором. Использовать простейшую дихотомию. 3) Критические секции обязательно оформлять в try/finally 4) Заменить оригинальный :-) способ финализации g_sz на if Assigned(g_sz) then FreeAndNil(g_sz) 5) Подозреваю, что raise в компоненте покажет не сообщение, а обвалит 1С. Все raise заменить на сообщения с соответствующим маркером 6) InitializeCriticalSection ты делаешь, а освобождать кто будет? When you have finished using the critical section, call the DeleteCriticalSection function.
#82 by romix
Спасибо... Сейчас все проверю...
#83 by romix
1,2) Чтобы не париться, поюзал TStringList и его свойство Values      g_sz.Values[HexEncode(g_OldSQL)]:=g_NewSQL; Функция HexEncode - просто переводит строку в шестнадцатеричный формат (чтобы ее можно было использовать как ключ в TStringList). 3)   Не согласен - это где такое написано? Может быть, у Рихтера? Но там такого нет. 4) Сделал. 5) Неверно - 1С-ка не падает в моем случае при Raise, т.к. есть обработчик:  try Пользоваться не Raise, а устаревшими заменителями в виде кодов возврата - зло. 6) Сделал. Хотя винды вроде сами освобождают все при закрытии 1С-ки.
#84 by romix
Обновил файл в . Пример теперь содержит поля отбора в самой форме журнала.
#85 by MMF
EnterCryticalSection(SomeSection); raise Exception.Create('тут какой то твой код вызвал исключение'); LeaveCryticalSection... секция осталось залоченой. ps Рихтер твой код писал? тогда я не буду критиковать
#86 by romix
А, понял. У меня щас так:
#87 by MMF
ты гонишь. try  EnterCriticalSection finally  LeaveCriticalSection end
#88 by romix
А есть разница?
#89 by MMF
угу. Только мне надоело
#90 by romix
Из разговора по аське я понял что в у меня все правильно.
#91 by МуМу
Забавный диалог. :) То romix - не понимаю твоей мотивации. В чем смысл давать неподготовленные советы? Причем дело в данном случае исключительно с точки зрения професионализма. Подумай сколько людей с некорепшими умами ты можешь подвести своими неподготовленными и непродуманными советами.
#92 by МуМу
Сорри, очепятка. "Некорепшими" -"неокрепшими"  ;)
#93 by kudlach
- сложно сделать "последнее доброе дело" ? - критикуешь - предлагай. Есть что конкретное - обсуди с romix. Если есть шанс родиться чуду - пусть оно родится. Если считаешь себя "профессионалом" - помоги. Не можешь/не хочешь - ну, тут медицина бессильна...
#94 by MMF
нихрена ты не понял. Водитель, который включает поворот только если сзади за ним кто-то едет, а в остальных случаях просто поворачивает - хреновый водитель. Тоже самое с программистом. Как только пишешь код создания объекта (выделения/блокирования ресурса) сразу же надо писать его освобождение. Поэтому если будешь писать такой код, смело показывай его только 1С-никам. Дельфисты тебя запинают (даже если простят авторское :-) оформление проекта)
#95 by romix
Я сам неокрепший, поэтому прошу поконкретнее, о чем это вы? Да и я не уверен, что вы сами щас что-нибудь удивительное не скажете (если конечно дело не ограничится дежурными фразами для НЛП-гипнотизирования клиентов). Я вроде все исправил - Raise точно не буду "исправлять" т.к. это не ошибка, а стиль такой. А с блокировками мы вроде по аське договорились, что я прав. Т.е. конструкция в - правильная и безопасная. Насчет "утечки" DeleteCriticalSection - я это исправил, так что мимо. :-) Да и она безопасная - винды при закрытии сами все чистят. Хотя я бы на месте Билли ругался в такой ситуации (выдавал исключение), т.к. стиль действительно нарушается, и следуя ему легко пропустить настоящую ошибку.
#96 by МуМу
То 95. Поконкретнее - да насчет индексов куда уж конкретнее! На больших объемах сервак у тебя ляжет. У одного из использующих уже такое было.
#97 by romix
Вы написали про "забавный диалог" и что я даю "неподготовленные, непродуманные" советы людям с "неокрепшими умами" . Вот мне и хотелось бы выяснить, о каких именно моих "советах" в этом "забавном диалоге" идет речь, и в чем же они с моей стороны неверные. Вы меня случайно ни с кем не обобщаете? :-) Насчет индексов - сейчас у меня поддерживается полная замена SQL-запроса, и все желающие смогут добавить что им нужно по своему желанию.
#98 by romix
Т.е. сейчас возможность использовать индексы поддерживается (ничто этому не препятствует).
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С