Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрый поиск в журнале документов, 8.х, потестируйте код 
:(
    Опции темы
Nicholas
  Дата 19.10.2011, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



Ну, вот кое-как сделала быстрый поиск по колонке в журнале документов! smile 
Делал для конфигурации «Бухгалтерия бюджетного учреждения версия 1.0.22.2»,  наверно многим пригодится, т.к. в 8й версии почему-то быстрый поиск убрали.
Кому не лень, пожалуйста, оптимизируйте код, наверняка можно сделать его намного меньше и использовать другие функции, про которые я давно забыл. smile

Самое главное я не нашел как начинать поиск в выборке с определенного места, поэтому пришлось все гонять по циклу и записывать уже найденные документы в список, который кстати еще не всегда очищается, это я сейчас при тестировании обнаружил.

Код

//*************************************************************************************************
//********************* ПРОЦЕДУРЫ БЫСТРОГО ПОИСКА В КОЛОНКЕ ***************************************
//*************************************************************************************************
// 
// кроме того добавляем строки:
//                        ПредыдущиеДанные = "";
//                        НайденныйОбъект = Новый СписокЗначений;
// в процедуру ПриОткрытии()
//
// и глобальные переменные:
//                        Перем ПредыдущиеДанные,НайденныйОбъект;
//
// ну и конечно кнопку "Быстрый поиск" на панель инструментов
//
// п.с. 5ть лет не брался за 1ску, тогда еще была 7ка, в 8ке оказывается сильно изменился 
// встроенный язык, про что вспомнил на том и написал :)
//*************************************************************************************************

Функция НачалоСтроки(Строка,Подстрока)
    Строка = СокрЛП(НРег(Строка));
    Подстрока = НРег(Подстрока);
    // убираем пробелы если число, кстати в числе какойто другой символ,а не пробел, скопировал его
    Строка = СтрЗаменить(Строка," ","");    
//    Сообщить("Подстрока ="+Подстрока+"_");
//    Сообщить("Строка="+Строка);
    // сморим есть ли в начале строки
    Если Лев(Строка,СтрДлина(Подстрока)) = Подстрока тогда
        Возврат 1;
    Иначе
//        Сообщить("Поиск подстроки " + Подстрока+ " в строке "+строка+" вернул 0");
     Возврат 0;
    КонецЕсли;    
КонецФункции


Функция ВернутьИдентификатор(Выборка,ИмяИдентификатора)
    Если ИмяИдентификатора = "Выбыло" тогда
        Возврат(Выборка.Выбыло);
    ИначеЕсли ИмяИдентификатора = "Поступило" тогда
        Возврат(Выборка.Поступило);
    ИначеЕсли ИмяИдентификатора = "Номер" тогда    
        Возврат(Выборка.Номер);
    ИначеЕсли ИмяИдентификатора = "Вид документа" тогда
        Возврат(Выборка.ВидПервичногоДокумента);
    ИначеЕсли ИмяИдентификатора = "Дата документа" тогда
        Возврат(Выборка.ДатаПервичногоДокумента);
    ИначеЕсли ИмяИдентификатора = "Основание" тогда
        Возврат(Выборка.Основание);
    ИначеЕсли ИмяИдентификатора = "Вид операции" тогда
        Возврат(Выборка.ВидОперации);
    //ИначеЕсли ИмяИдентификатора = "" тогда
    КонецЕсли;
КонецФункции

Процедура ПоискВКолонке(Кнопка)
    ОчиститьСообщения() ;
    Данные ="";
    Подсказка = "Поиск по "+ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки;
//    Сообщить("ПредыдущиеДанные="+СокрЛП(ПредыдущиеДанные)+"_");
    Если СокрЛП(ПредыдущиеДанные) <> "" тогда 
        Данные = СокрЛП(ПредыдущиеДанные);
    КонецЕсли;    
    ВвестиЗначение(Данные, Подсказка,);
//    Сообщить("ТекущаяКолонка="+Колонка);
    Выборка = ЖурналыДокументов.РасчетноПлатежныеДокументы.Выбрать();     
    //*************************************************************
    // Перебор строк журнала документов
    //*************************************************************
    Пока Выборка.Следующий() Цикл
//        Сообщить("Найден документ: " +Выборка.ПолучитьОбъект()+" на сумму "+ ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.имя);
//        Сообщить("Текущая строка = " +ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока);
//        Сообщить("Текущий идентификатор="+СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)));
        //***************************************************
        // если найдено совпадение с началом искомой строки
        //***************************************************
        Если НачалоСтроки(СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)), Данные) = 1 тогда
            ОчиститьСообщения();
//            Сообщить("Выборка.ПолучитьОбъект()="+Выборка.ПолучитьОбъект());
            Если   НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))  <> Неопределено тогда
            //Если    СокрЛП(НайденныйОбъект) = СокрЛП(Выборка.ПолучитьОбъект()) тогда
//                Сообщить("Наден предыдущий документ: "+Выборка.ПолучитьОбъект());
                Продолжить;
            иначе
//                Сообщить("Объект в списке"+НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))+"_");
            КонецЕсли;    
            Если ПредыдущиеДанные <> Данные тогда
                 НайденныйОбъект.Очистить();
                 ПредыдущиеДанные = Данные;
            КонецЕсли;
            ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока   = Выборка.ПолучитьОбъект();
            НайденныйОбъект.Добавить(СокрЛП(Выборка.ПолучитьОбъект()));
//            Сообщить("Добавил в список "+СокрЛП(Выборка.ПолучитьОбъект())+"_");
            ПредыдущиеДанные = Данные;
            Прервать;
        //*******************************************************************    
        // если надо найти искомую строку в любом месте строки а не в начале
        //*******************************************************************
        иначеЕсли Прав(СокрЛП(Данные),1) = "*" тогда
            //Сообщить("Поиск в любом месте строки");
            Если  Найти(СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)),Лев(Данные,СтрДлина(Данные)-1)) <> 0 тогда
            //    Сообщить("Подстрока найдена в строке");
                Если   НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))  <> Неопределено тогда
//                Сообщить("Наден предыдущий документ: "+Выборка.ПолучитьОбъект());
                Продолжить;
            иначе
//                Сообщить("Объект в списке"+НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))+"_");
            КонецЕсли;    
            Если ПредыдущиеДанные <> Данные тогда
                 НайденныйОбъект.Очистить();
                 ПредыдущиеДанные = Данные;
            КонецЕсли;
            ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока   = Выборка.ПолучитьОбъект();
            НайденныйОбъект.Добавить(СокрЛП(Выборка.ПолучитьОбъект()));
//            Сообщить("Добавил в список "+СокрЛП(Выборка.ПолучитьОбъект())+"_");
            ПредыдущиеДанные = Данные;
            Прервать;
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;
 КонецПроцедуры





Это сообщение отредактировал(а) Nicholas - 19.10.2011, 08:57

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  _____.jpg 539,86 Kb
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.