Имя: Пароль:
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
Не нашел, подправил класс и дело с концом. Видимо у меня старая версия классов еще.
Старая конечно но работает. Поэтому оставляю. Всем спасибо за участие.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой