Ну, вот кое-как сделала быстрый поиск по колонке в журнале документов! Делал для конфигурации «Бухгалтерия бюджетного учреждения версия 1.0.22.2», наверно многим пригодится, т.к. в 8й версии почему-то быстрый поиск убрали. Кому не лень, пожалуйста, оптимизируйте код, наверняка можно сделать его намного меньше и использовать другие функции, про которые я давно забыл.  Самое главное я не нашел как начинать поиск в выборке с определенного места, поэтому пришлось все гонять по циклу и записывать уже найденные документы в список, который кстати еще не всегда очищается, это я сейчас при тестировании обнаружил. | Код | //************************************************************************************************* //********************* ПРОЦЕДУРЫ БЫСТРОГО ПОИСКА В КОЛОНКЕ *************************************** //************************************************************************************************* // // кроме того добавляем строки: // ПредыдущиеДанные = ""; // НайденныйОбъект = Новый СписокЗначений; // в процедуру ПриОткрытии() // // и глобальные переменные: // Перем ПредыдущиеДанные,НайденныйОбъект; // // ну и конечно кнопку "Быстрый поиск" на панель инструментов // // п.с. 5ть лет не брался за 1ску, тогда еще была 7ка, в 8ке оказывается сильно изменился // встроенный язык, про что вспомнил на том и написал :) //*************************************************************************************************
Функция НачалоСтроки(Строка,Подстрока) Строка = СокрЛП(НРег(Строка)); Подстрока = НРег(Подстрока); // убираем пробелы если число, кстати в числе какойто другой символ,а не пробел, скопировал его Строка = СтрЗаменить(Строка," ",""); // Сообщить("Подстрока ="+Подстрока+"_"); // Сообщить("Строка="+Строка); // сморим есть ли в начале строки Если Лев(Строка,СтрДлина(Подстрока)) = Подстрока тогда Возврат 1; Иначе // Сообщить("Поиск подстроки " + Подстрока+ " в строке "+строка+" вернул 0"); Возврат 0; КонецЕсли; КонецФункции
Функция ВернутьИдентификатор(Выборка,ИмяИдентификатора) Если ИмяИдентификатора = "Выбыло" тогда Возврат(Выборка.Выбыло); ИначеЕсли ИмяИдентификатора = "Поступило" тогда Возврат(Выборка.Поступило); ИначеЕсли ИмяИдентификатора = "Номер" тогда Возврат(Выборка.Номер); ИначеЕсли ИмяИдентификатора = "Вид документа" тогда Возврат(Выборка.ВидПервичногоДокумента); ИначеЕсли ИмяИдентификатора = "Дата документа" тогда Возврат(Выборка.ДатаПервичногоДокумента); ИначеЕсли ИмяИдентификатора = "Основание" тогда Возврат(Выборка.Основание); ИначеЕсли ИмяИдентификатора = "Вид операции" тогда Возврат(Выборка.ВидОперации); //ИначеЕсли ИмяИдентификатора = "" тогда КонецЕсли; КонецФункции
Процедура ПоискВКолонке(Кнопка) ОчиститьСообщения() ; Данные =""; Подсказка = "Поиск по "+ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки; // Сообщить("ПредыдущиеДанные="+СокрЛП(ПредыдущиеДанные)+"_"); Если СокрЛП(ПредыдущиеДанные) <> "" тогда Данные = СокрЛП(ПредыдущиеДанные); КонецЕсли; ВвестиЗначение(Данные, Подсказка,); // Сообщить("ТекущаяКолонка="+Колонка); Выборка = ЖурналыДокументов.РасчетноПлатежныеДокументы.Выбрать(); //************************************************************* // Перебор строк журнала документов //************************************************************* Пока Выборка.Следующий() Цикл // Сообщить("Найден документ: " +Выборка.ПолучитьОбъект()+" на сумму "+ ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.имя); // Сообщить("Текущая строка = " +ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока); // Сообщить("Текущий идентификатор="+СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки))); //*************************************************** // если найдено совпадение с началом искомой строки //*************************************************** Если НачалоСтроки(СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)), Данные) = 1 тогда ОчиститьСообщения(); // Сообщить("Выборка.ПолучитьОбъект()="+Выборка.ПолучитьОбъект()); Если НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект())) <> Неопределено тогда //Если СокрЛП(НайденныйОбъект) = СокрЛП(Выборка.ПолучитьОбъект()) тогда // Сообщить("Наден предыдущий документ: "+Выборка.ПолучитьОбъект()); Продолжить; иначе // Сообщить("Объект в списке"+НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))+"_"); КонецЕсли; Если ПредыдущиеДанные <> Данные тогда НайденныйОбъект.Очистить(); ПредыдущиеДанные = Данные; КонецЕсли; ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока = Выборка.ПолучитьОбъект(); НайденныйОбъект.Добавить(СокрЛП(Выборка.ПолучитьОбъект())); // Сообщить("Добавил в список "+СокрЛП(Выборка.ПолучитьОбъект())+"_"); ПредыдущиеДанные = Данные; Прервать; //******************************************************************* // если надо найти искомую строку в любом месте строки а не в начале //******************************************************************* иначеЕсли Прав(СокрЛП(Данные),1) = "*" тогда //Сообщить("Поиск в любом месте строки"); Если Найти(СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)),Лев(Данные,СтрДлина(Данные)-1)) <> 0 тогда // Сообщить("Подстрока найдена в строке"); Если НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект())) <> Неопределено тогда // Сообщить("Наден предыдущий документ: "+Выборка.ПолучитьОбъект()); Продолжить; иначе // Сообщить("Объект в списке"+НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))+"_"); КонецЕсли; Если ПредыдущиеДанные <> Данные тогда НайденныйОбъект.Очистить(); ПредыдущиеДанные = Данные; КонецЕсли; ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока = Выборка.ПолучитьОбъект(); НайденныйОбъект.Добавить(СокрЛП(Выборка.ПолучитьОбъект())); // Сообщить("Добавил в список "+СокрЛП(Выборка.ПолучитьОбъект())+"_"); ПредыдущиеДанные = Данные; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры
|
Это сообщение отредактировал(а) Nicholas - 19.10.2011, 08:57
Присоединённый файл ( Кол-во скачиваний: 3 )
_____.jpg 539,86 Kb
|