Имя: Пароль:
1C
1C 7.7
v7: 1cpp. Всегда искать с начала в табличном поле
0 DGorgoN
 
26.05.14
08:50
Когда делаешь поиск по подстроке, то если значение не нашлось то ТП предлагает поиск с начала. Как сделать что-бы поиск начинался всегда с самой верхней строки?
1 trad
 
26.05.14
08:58
попробуй в событии ПриПоиске спозиционироваться на начало
2 DGorgoN
 
26.05.14
09:04
(1) Следующий вопрос - как установить в начало? Такого метода не нашел (
3 DGorgoN
 
26.05.14
09:06
Процедура ТабличноеПолеМногострочнойЧастиПриНачалеБыстрогоПоиска(ТабПоле, чФСО)  
    ТабПоле.ТекущаяСтрока = 1;
КонецПроцедуры

Ничего не дало (
4 Ёпрст
 
гуру
26.05.14
09:07
(3) nbg ,eltn yt xbckj
5 trad
 
26.05.14
09:08
(2) если поставщикТЗ, то ТекущаяСтрока=1
если поставщикODBC, выполняешь запрос, аналогичный запросу поставщика с top 1. Значение идПоля тоже в ТекСтроку
6 trad
 
26.05.14
09:10
(3) так все таки Быстрый поиск или просто Поиск?
7 DGorgoN
 
26.05.14
09:11
ПоставщикДанныхМногострочнаяЧасть.ТекущаяСтрока = 1;
{C:\СДЕЛАТЬ\ЕМАЕ\СПР ЭКСП ПОДБОР.ERT(353)}: Поле агрегатного объекта не обнаружено (ТекущаяСтрока)
8 DGorgoN
 
26.05.14
09:12
(6) Поиск. В общем открываешь обработку с ТП, в ТП сразу набираешь искомую строку, допустим Артикул в справочнике номенклатура. Если искомый артикул не найден то предлагает (диалог выскакивает) начать с начала.
Как заставить всегда искать с начала?
9 trad
 
26.05.14
09:13
ТекущаяСтрока свойство ТП, а не поставщика
10 DGorgoN
 
26.05.14
09:14
Процедура ТабличноеПолеМногострочнойЧастиПриНачалеБыстрогоПоиска(ТабПоле, чФСО)  
    ТабПоле.ТекущаяСтрока = 1;   - на работает
    
Это тоже не работает

    ДанныеСправочник = ПоставщикДанныхМногострочнаяЧасть.Данные;
    ДанныеСправочник.КнопкаПросмотр = 1;
    ДанныеСправочник.СоздатьКнопкиПоУмолчанию();
    ДанныеСправочник.РежимВыбора = 1;
    ТабличноеПоле = ДанныеСправочник.ТабличноеПоле;
    ТабличноеПоле.ТекущаяСтрока = 1;
КонецПроцедуры
11 DGorgoN
 
26.05.14
09:16
(4) "nbg ,eltn yt xbckj"
тбй ,уден не число ?
12 Ёпрст
 
гуру
26.05.14
09:16
(10) ТекущаяСтрока  - это не число, а элемент справочника у тебя. Нужно лепить скалярный запрос с топ 1 для его поиска.
13 DGorgoN
 
26.05.14
09:17
(12) Вот тут я и попал - у меня просто поставщик данных стандартный:

Процедура ИнициализацияМногострочнойЧасти()
    ПоставщикДанныхМногострочнаяЧасть = СоздатьОбъект("ПоставщикДанных");
    ПоставщикДанныхМногострочнаяЧасть.ТипЗначений = "Справочник.Номенклатура";
    ПоставщикДанныхМногострочнаяЧасть.КонтейнерТабличногоПоля = "ТабличноеПолеМногострочнойЧасти";
    ПоставщикДанныхМногострочнаяЧасть.КонтейнерКоманднойПанели = "КоманднаяПанельМногострочнойЧасти";
    //ПоставщикДанныхМногострочнаяЧасть.РежимВыбора = 1;
    
    ДанныеСправочник = ПоставщикДанныхМногострочнаяЧасть.Данные;
    ДанныеСправочник.КнопкаПросмотр = 1;
    ДанныеСправочник.СоздатьКнопкиПоУмолчанию();
    ДанныеСправочник.РежимВыбора = 1;
    //ДанныеСправочник.СтандартныйБыстрыйПоиск = 0;
    
    ТабличноеПоле = ДанныеСправочник.ТабличноеПоле;
    ТабличноеПоле.СтильЗаголовков = 1;
    ТабличноеПоле.СтильРамки = 1;
14 trad
 
26.05.14
09:19
(12) похоже, это не чистое ТП, а КОП "ПоставщикДанных"
http://www.1cpp.ru/forum/YaBB.pl?num=1285520767
15 DGorgoN
 
26.05.14
09:19
(12)
    Сам = Сам(Контекст);
    Сам.ТекущаяСтрока = ЗапросСКЛ.ВыполнитьСкалярный(ТекстЗапроса);

Типа того?
16 trad
 
26.05.14
09:20
(14) + ну, так и есть
17 DGorgoN
 
26.05.14
09:20
(14) Да, в общем оно я так думаю.
18 DGorgoN
 
26.05.14
09:22
Ну так куда копать? В сторону скалярного запроса?
19 DGorgoN
 
26.05.14
09:24
Или таки есть волшебное свойство - искать с начала или установить 1-ю начальную строку?
20 DGorgoN
 
26.05.14
09:28
аууу!
21 DGorgoN
 
26.05.14
09:29
Процедура АктивизироватьСтроку(ЭлементСправочника)
    Если ТипЗначенияСтр(ЭлементСправочника) <> "Справочник" Тогда
        Возврат;
    КонецЕсли;
    ТабличноеПоле.ТекущаяСтрока = ЭлементСправочника;
КонецПроцедур
22 DGorgoN
 
26.05.14
09:30
Откопал, теперь остается понять, как найти этот самый 1-й элемент )
23 DGorgoN
 
26.05.14
09:33
Неа, нифига. Народ, ну подскажите куда копать то? Вчера до 2-х ночи сидел. Так и не просек фишку.
24 trad
 
26.05.14
09:36
(22) можно как то так
Спр = СоздатьОбъект("Справочник.Номенклатура");
//установить родителя/владельца как в ТП
//Установить отбор как в ТП
//Установить порядок сортировки как в ТП
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент();
ПервыйЭлемент = Спр.ТекущийЭлемент();
25 Salimbek
 
26.05.14
09:41
В коде класса есть это:
    //ЗначенияВыборки//:ИндексированнаяТаблица;
    Если ЗначенияВыборки.КоличествоСтрок() = 0 Тогда
        ТекстВопроса = "Поиск окончен. Совпадений не найдено.
        |Продолжить поиск с начала?";
        Если Вопрос(ТекстВопроса,"Да+Нет") = "Да" Тогда
            БыстрыйПоискПоПодстроке(ИмяКолонки,Значение,);
            Возврат 0;
        Иначе
            Возврат 1;
        КонецЕсли;
    КонецЕсли;
    ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1);
26 Salimbek
 
26.05.14
09:43
а чуть ранее это:
        Если ТабличноеПоле.ПозиционныйБыстрыйПоиск = 1 Тогда
            ТекущиеДанные = ТабличноеПоле.ТекущиеДанные;
        Иначе
            ТекущиеДанные = ПолучитьПустоеЗначение();
        КонецЕсли;
        БыстрыйПоискПоПодстроке(КолонкаПоиска,ЗначениеПоиска,ТекущиеДанные);

Что же такое "ПозиционныйБыстрыйПоиск" - надо смотреть в документации на класс
27 DGorgoN
 
26.05.14
09:49
(25) Во, в класс заберусь и там подправлю. Спасибо!
28 Salimbek
 
26.05.14
09:54
Зачем править? Я ж тебе поле нашел...

ПозиционныйБыстрыйПоиск
Синтаксис: ПозиционныйБыстрыйПоиск

Доступ: Чтение и запись

Тип: Число (1,0)

Описание: Признак для управления быстрым поиском. Используется только у поставщиков данных «Справочник», «Документы», «Журнал», «Операции», «Регистр». При установке флага равного 0 быстрый поиск не будет учитывать текущую позицию. По умолчанию: 1.
29 Salimbek
 
26.05.14
09:54
Выставляешь это поле в "0" и будет оно всегда искать с самого начала.
30 DGorgoN
 
26.05.14
09:58
(29) Сейчас попробую - заранее спасибо
31 DGorgoN
 
26.05.14
10:19
Не нашел, подправил класс и дело с концом. Видимо у меня старая версия классов еще.
Старая конечно но работает. Поэтому оставляю. Всем спасибо за участие.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший