Контекстный поиск в 7.7

18.04.14

Задачи пользователя - Поиск данных

Процедура контекстного поиска в журнале документов.

Сам я уже отошел от написания чего бы то ни было серьезного на 1С, больше конешно по причине, что не вижу перспектив работать в этом направлении в нашем городе. Но  не об этом я хотел написать, началось все с того что на работе сократили всех маркетологов и вообще всех, кто работал с клиентами ,а обязанности по решению технических вопросов навесили на нашего системщика. К тому же начальство в плане выдачи идиотских заданий, по поводу вытянуть нечто нестандартное из базы, факт отсутствия людей не сколько не беспокоит. Вот и приходится по мелочи дописывать старую конфигурацию, на предмет микроотчетов, и прочих фишек для выуживания данных. Поэтому поводу и пришлось вспомнить про обработку, которую писал еще в далеком 2005, правда, конфигурации не сохранилось, но да какая разница, все, что было когда-то написано, всегда можно написать заново.

Итак, встречайте - процедура поиска заданной строки в журнале документов. Процедура просто перебирает реквизиты документов в поисках требуемой строки. Конечно, со внешниим компонентами это работало бы быстрее, а в 8-ке это есть на уровне платформы, но для 7.7 подобная обработка для подобного вида поиска способна здорово помочь.

Параметры:

Поиск_ - искомая строка

Журнал_ - имя журнала ( в 7.7 из контекста нельзя получить имя журнала документа)

Контекст_ - сам контекст журнала документов

 

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

См. также

Поиск данных Платформа 1С v7.7 Абонемент ($m)

Если у пользователя конфигурации 1С 7.7 сложный интерфейс (или несколько интерфейсов), в котором проблематично найти нужный элемент метаданных - константу, справочник или документ (журнал документов), отчет или обработку, в этом случае поможет универсальный навигатор - органайзер по элементам метаданных, позволяющий легко найти нужный пользователю вид объекта метаданных в отсортированном по алфавитному порядку списке идентификаторов, синонимов или даже комментариев объектов метаданных. Данная универсальная обработка позволяет выбрать и открыть необходимую форму списка и форму элемента. Для доступа к нужному объекту в конфигурации у пользователя должно быть настроено разрешение в правах пользователя, а ссылка в его интерфейсе пользователя в конфигурации не обязательна.

1 стартмани

09.10.2021    5032    0    ksnik    1    

7

Поиск данных Чистка данных Логистика, склад и ТМЦ Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Простая и удобная обработка предназначена для поиска и исправления задублированных (повторяющихся) номенклатурных штрихкодов справочника Единицы. Также она даёт возможность посмотреть номенклатурные остатки. Полезна в случаях, когда номенклатура сопоставляется по штрихкоду с другими внешними источниками, а именно с модулем "Обмент ГИСМТ".

1 стартмани

19.11.2020    7883    1    Kuzya_brаtsk    4    

8

Поиск данных Программист Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Россия Абонемент ($m)

Для 1с77 ТиС 9.2 отчет - выборка всех сотовых телефонов из справочника контрагенты для передачи в СМС рассылку. Для 1с8 Обработка с алгоритмом распознавания номера телефона из строки.

1 стартмани

20.03.2020    5468    5    AlexHelmer    1    

2

Поиск данных Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Внешняя обработка предназначена для поиска и подробного анализа дублей.

2 стартмани

29.04.2015    19009    53    Pirat-37    1    

0

WEB-интеграция Поиск данных Платформа 1С v7.7 1С:Торговля и склад 7.7 Автомобили, автосервисы Абонемент ($m)

Внешняя обработка для поиска автозапчастей по каталожному номеру

1 стартмани

26.01.2015    15057    11    kras_71    6    

2

Поиск данных Бухгалтер Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Абонемент ($m)

Поиск контрагентов по списку ИНН, переноса в группу и формирования оборотов по счетам с субконто "Контрагенты"

10 стартмани

16.08.2014    17045    2    GSoft    1    

1

Поиск данных Программист Платформа 1С v7.7 Абонемент ($m)

Обработка + консольная утилита (exe). Работает с использованием FormEx.dll (Алексей Фёдоров aka АЛьФ), strmatch (Ракунов Александр aka skorp) и 1sqlite (Александр Орефков). Выполняет быстрый нечеткий поиск по справочнику (по умолчанию - номенклатуры) с выводом наиболее похожих позиций в выпадающий список. Работает на 1с 7.7. Тестировалось на server 2003 в терминалах, в файловой БД. Предполагаемые достоинства: пример (более) «адекватного» (по меркам автора на данный момент) поведения поисковой строки (реализовано при помощи консольной утилиты, работающей через winapi – исходники прилагаются (писалось в lazarus)) и удобной навигации по списку, во время ввода. Является, скорее, примером для реализаций собственных адаптированных поисковых решений.

1 стартмани

30.12.2013    22197    34    Jill    13    

12

Поиск данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Обработка 1С7.7 ищет в таблице DBF дублирующиеся записи. Помещает все найденные дубли в файл dubli.dbf. Есть вариант поиска с удалением дублей из файла, если установить соответствующую отметку на форме.

1 стартмани

26.07.2013    14739    10    hubby    2    

0
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aves 228 23.04.14 13:59 Сейчас в теме
2. zsi_uk 05.04.19 17:21 Сейчас в теме
Спасибо, интересная обработка. Случайно увидел, подключил к своей базе, нравится как работает.
3. srt2020 17.02.22 10:46 Сейчас в теме
// не вижу перспектив работать в этом направлении в нашем городе
А что за город? У всех уже появились на то время 1С?
Оставьте свое сообщение