|
v7: Поиск по всему справочнику и по указанной группе | ☑ | ||
---|---|---|---|---|
0
Масянька
06.12.12
✎
16:32
|
День добрый!
Я уже поломала все, что ломается :( Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если УчетГруппы = 1 Тогда Если Спр.ПринадлежитГруппе(ГруппаСправочникаДляКорректировки) = 1 Тогда СтрокаПоиска = Найти(Нрег(Строка(Спр.ПолучитьАтрибут(РабочийРеквизит))), Нрег(Строка(СокрЛ(ЧтоИщем)))); Иначе СтрокаПоиска = 0; КонецЕсли; Иначе СтрокаПоиска = Найти(Нрег(Строка(Спр.ПолучитьАтрибут(РабочийРеквизит))), Нрег(Строка(СокрП(ЧтоИщем)))); КонецЕсли; Если СтрокаПоиска > 0 Тогда ЗаполнитьСтрокуТаблицы(Спр.Код, Спр.Наименование, Спр.ПолнНаименование); КонецЕсли; КонецЦикла; Если искать по справочнику - ищет, если указать группу - нет. Ну почему? |
|||
1
Ёпрст
06.12.12
✎
16:33
|
ГруппаСправочникаДляКорректировки - не элемент
|
|||
2
Ёпрст
06.12.12
✎
16:33
|
т.е это не ссылка на группу справочника
|
|||
3
Ёпрст
06.12.12
✎
16:34
|
не так ли ? :)
|
|||
4
Масянька
06.12.12
✎
16:34
|
Ёлки-моталки! Забыла - ТиС 932
|
|||
5
Масянька
06.12.12
✎
16:35
|
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если УчетГруппы = 1 Тогда Если Спр.ПринадлежитГруппе(ГруппаСправочникаДляКорректировки) = 1 Тогда выполняется, то бишь: заходит, выводит наименование "Трали-вали", но искомая строка "вали" - не находится, почему-то... |
|||
6
Масянька
06.12.12
✎
16:36
|
+(5) И "ГруппаСправочникаДляКорректировки " - тип значения - "Справочник".
|
|||
7
Ёпрст
06.12.12
✎
16:37
|
СокрЛ замени на сокрлп
|
|||
8
Ёпрст
06.12.12
✎
16:37
|
приводить атрибут явно к строке тоже лишнее
|
|||
9
Масянька
06.12.12
✎
16:38
|
(7) Не пойдет - нужно левые пробелы оставлять.
(8) Это я уже перестраховываюсь. |
|||
10
Масянька
06.12.12
✎
16:40
|
(8) Нет, ты объясни, почему две одинаковые строчки
СтрокаПоиска = Найти(Нрег(Строка(Спр.ПолучитьАтрибут(РабочийРеквизит))), Нрег(Строка(СокрЛ(ЧтоИщем)))); по-разному работают? В Clipper'е были такие косяки - при поиске в БД, как только накладываешь фильтр - результат не перестаёт удивлять. |
|||
11
Mikeware
06.12.12
✎
16:41
|
(9) открой для себя прямые запросы.
быстро и со вкусом... |
|||
12
Масянька
06.12.12
✎
16:42
|
(11) Ну, начинается.... После 3 суток с 1срр....
|
|||
13
Mikeware
06.12.12
✎
16:42
|
(10) ни в одном из клипперов (кроме сырого Visual Objects) никакого удивления не испытывал. все работало строго в соответсвии с документацией
|
|||
14
Масянька
06.12.12
✎
16:42
|
(11) Кидай пример. Пожалуйста (чуть не забыла :)))) )
|
|||
15
Mikeware
06.12.12
✎
16:42
|
(12) ну, начнем с того, что 1с++ у тебя уже есть...
|
|||
16
Масянька
06.12.12
✎
16:43
|
(13) Да ладно.
|
|||
17
Стрелок
06.12.12
✎
16:44
|
Процедура ОбработкаПоиска()
//СписокКлиентов.УдалитьВсе(); Если ПустоеЗначение(стрПоиска)=1 Тогда ИспользоватьСписокЭлементов(); ИерархическийСписок(1,1); ИспользоватьРодителя(ПолучитьПустоеЗначение("Справочник.Контрагенты")); Возврат; КонецЕсли; Если ИсторияФильтра.НайтиЗначение(СтрПоиска)=0 Тогда ИсторияФильтра.ВставитьЗначение(1,СтрПоиска); КонецЕсли; РазбиваемаяСтрока=СтрЗаменить(Нрег(СокрЛП(стрПоиска))," ",РазделительСтрок); РазбиваемаяСтрока=СтрЗаменить(РазбиваемаяСтрока,"'","''"); Текст="SELECT |code AS Код, |id AS [Контрагент $Справочник.Контрагенты] |FROM $Справочник.Контрагенты WHERE isfolder=2"; Для Индекс=1 По СтрКоличествоСтрок(РазбиваемаяСтрока) Цикл Слово=СтрПолучитьСтроку(РазбиваемаяСтрока,Индекс); Если ПустоеЗначение(Слово)=0 Тогда Текст=Текст+" |AND LOWER(descr) LIKE '"+Слово+"'"; КонецЕсли; КонецЦикла; Попытка ТЗРезультата=Запрос.ВыполнитьИнструкцию(Текст); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; СписокКлиентов=СоздатьОбъект("СписокЗначений"); ТЗРезультата.Выгрузить(СписокКлиентов,,,"Контрагент"); ИерархическийСписок(0,0); ИспользоватьСписокЭлементов(СписокКлиентов); КонецПроцедуры Запрос=СоздатьОбъект("ODBCRecordSet"); БазаДанных=СоздатьОбъект("ODBCDataBase"); Если БазаДанных.ЕстьСоединение()=0 Тогда // Это база дбф Если МонопольныйРежим()=1 Тогда Предупреждение("Поиск не работает в монопольном режиме"+РазделительСтрок+ "Функция быстрого поиска по справочнику отключена"); Форма.СтрПоиска.Доступность(0); КонецЕсли; Если БазаДанных.Соединение("DRIVER=Microsoft Visual FoxPro Driver; |Deleted=Yes; |Null=Yes; |Collate=RUSSIAN; |BackgroundFetch=No; |Exclusive=No; |SourceType=DBF; |SourceDB=" + КаталогИБ()) = 0 Тогда Сообщить(БазаДанных.ПолучитьОписаниеОшибки()); Предупреждение("Функция быстрого поиска по справочнику отключена"); Форма.СтрПоиска.Доступность(0); Форма.СписокКлиентов.Доступность(0); КонецЕсли; Запрос.УстБД(БазаДанных); КонецЕсли; |
|||
18
Масянька
06.12.12
✎
16:45
|
+(16) На 3 курсе лабу писала на Fox'е. Когда сдавала, консилиум собрался. Глядя на код, все изрекали: "Это не может работать!". Компилировались и чесали репу.
|
|||
19
Стрелок
06.12.12
✎
16:45
|
это самое простое - фильтр справочника по подстроке в наименовании элемента. дальше всё аналогично
|
|||
20
Масянька
06.12.12
✎
16:46
|
(17) Ну, все....
В ближайшие пару дней - меня не ищете.... |
|||
21
Масянька
06.12.12
✎
16:46
|
(17) Забыла = спасибо.
|
|||
22
Mikeware
06.12.12
✎
16:46
|
(16) работал с версиями от winter'85 до 5.3 лет 10.
зы. база сиквельная? |
|||
23
Масянька
06.12.12
✎
16:48
|
(22) Нет, виа (тьфу, ВИА "Умелые ручки) - dbf.
|
|||
24
Mikeware
06.12.12
✎
16:56
|
(23) Тогда Ёпа пытай.
в принципе, как основа и (17) сойдет |
|||
25
Масянька
06.12.12
✎
16:56
|
Ёпрст4! Вот ты объясни, пожалуйста, что за х....ня!!!!!
С сокрЛП - работает. |
|||
26
Стрелок
06.12.12
✎
16:57
|
(25) в пробелах дело в них родных ;) у тебя реквизит то типизирован и длина указана. ВОт и всё
|
|||
27
pofigos
06.12.12
✎
16:59
|
(25) с учетом группы ты отсекаешь пробелы слева!!! иначе - справа. вот и вся разница.
|
|||
28
Ёпрст
06.12.12
✎
17:01
|
(25)
:) Ну как бэ в строке "вася" он " вася" ну никак не найдет |
|||
29
Ёпрст
06.12.12
✎
17:02
|
строка поиска у тебя поди реквизит формы определенной длины - он всегда такой длины и будет (просто пробелами забьёт до нужной длины) вот и их отрезать и нужно
|
|||
30
Ёпрст
06.12.12
✎
17:03
|
ну или пробелы справа.. не важно
|
|||
31
Масянька
06.12.12
✎
17:06
|
Вот пипец (ой извините).
А если мне надобно найти " ," (лишний пробел перед запятой) - индейская изба...... Спасибо огромное! |
|||
32
Масянька
06.12.12
✎
17:12
|
Нет подождите, а почему без группы работает? Там-то тоже нет СокрЛП.
|
|||
33
Ёпрст
06.12.12
✎
17:13
|
(32) там сокрп
|
|||
34
Стрелок
06.12.12
✎
17:13
|
(32) там справа обрезаются. откуда мы знаем как в реквизите стоит твои "трили-вали"?
|
|||
35
Ёпрст
06.12.12
✎
17:14
|
то бишь ты в первом случае пытаешься найти в
"вася" вот это "вася " а во втором случае, пробелы справа отрезаешь |
|||
36
Масянька
06.12.12
✎
17:16
|
То есть (у меня реквизит поиска - строка, 50): как строка будет заполняться пробелами?
|
|||
37
Ёпрст
06.12.12
✎
17:17
|
(36) ну дык выведи
сообщить(""""+ЧтоИщем+""""); сама увидишь %) |
|||
38
Масянька
06.12.12
✎
17:17
|
ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |