Полнотекстовый поиск 1с 8.3 10. Совет3: Отключить версионирование объектов

Реализовано в версии 8.3.5.1068.

Мы переработали механизм поиска в списках, сделав его более удобным и понятным.

Первое внешнее отличие заключается в том, что теперь в командной панели формы присутствуют два новых элемента: строка поиска и управление поиском :

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

Например, если вы хотите найти, что покупала «Шлюзовая ООО» оптом со среднего склада, то для этого просто наберите на клавиатуре: «шлюз опт сре»:

Видео загружается...

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

Очень удобной возможностью нового поиска является поиск по номеру без учёта лидирующих нулей. То есть, если вы хотите найти накладную с номером 000000011, для этого достаточно набрать на клавиатуре (или прямо в строке поиска) «11»:

Поиск по текущему значению

Мы вернули в платформу команду поиска по текущему значению. Искать по текущему значению можно было и раньше. Для этого нужно было вызвать диалог поиска и нажать Enter. Но без специальной отдельной команды многие пользователи этого не понимали.

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

Видео загружается...

Обратите внимание, что теперь над таблицей отображаются те значения, по которым найдены строки таблицы. Это удобно по двум причинам. Во-первых, теперь наглядно видно, что таблица показывает не все данные, а только некоторую часть. Во-вторых, значения, по которым выполнен поиск, вы теперь можете легко удалить или изменить на другие значения:

Видео загружается...

Также удобным моментом является то, что платформа запоминает текущие значения, по которым выполнялся поиск. Они сохраняются в истории поиска, которая доступна через кнопку управления поиском. Поэтому в любой момент вы можете вернуться обратно к тем значениям поиска, которые использовали раньше:

Видео загружается...

Расширенный поиск

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

Для вызова расширенного поиска мы сделали отдельную команду на тот случай, если у вас возникнет желание использовать именно его. И кроме этого платформа использует его тогда, когда вы меняете значения, по которым уже выполнен поиск:

Видео загружается...

Выбор периода

Мы значительно переработали диалог выбора периода. Этот диалог используется в отчётах, для задания периода, за который должны быть показаны данные. Этот же диалог используется в списках документов для поиска документов, относящихся к определенному периоду.

Отбор списка документов по периоду можно считать одним из способов их поиска - поиск по дате. Поэтому команду установки периода мы разместили в управлении поиском.

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

Видео загружается...

Период в несколько месяцев вы можете выбрать легко. Для этого нужные месяцы надо просто выделить мышью:

Видео загружается...

Если есть необходимость, можно тут же задать произвольный период, указав дату начала и дату окончания. Или же вы можете перейти на другую страницу диалога и выбрать один из стандартных периодов, имеющихся в платформе. Для того чтобы вам было легче ориентироваться в большом количестве стандартных периодов, мы сгруппировали их по интервалам: день, неделя, декада и т.д.:

Видео загружается...

Как выглядит новый поиск в конфигураторе

Для работы с новым механизмом поиска мы добавили в форму новый элемент. Он называется Дополнение элемента формы . Раньше у формы было 5 элементов: Поле , Таблица , Кнопка , Группа и Декорация . Теперь таких элементов шесть.

Для таблиц динамических списков платформа автоматически создаёт три таких элемента: Строка поиска , Состояние просмотра и Управление поиском . Появление этих элементов в форме регулируется тремя новыми свойствами таблицы: ПоложениеСтрокиПоиска , ПоложениеСостоянияПросмотра и ПоложениеУправленияПоиском .

При желании разработчик может не использовать стандартные элементы (Дополнение элемента формы ), а создать собственные. Для этого достаточно добавить в форму Дополнение элемента формы и задать ему источник. В зависимости от конкретного источника этот элемент примет тот или иной внешний вид. На данный момент источники есть только у таблицы динамического списка (три источника), но в дальнейшем мы, возможно, будем расширять эту механику:

Видео загружается...

Функциональность нового поиска основана на двух механизмах:
- полнотекстовый поиск (работает очень быстро и требует минимум вычислительных ресурсов);
- поиск средствами СУБД (в общем случае длительность поиска и затраты вычислительных ресурсов пропорциональны объему информации в таблице).

В текущей реализации поиск в списке будет осуществляться без использования полнотекстового поиска в следующих случаях ():
- полнотекстовый индекс выключен на уровне информационной базы;
- объект основной таблицы не индексируется полнотекстовым индексом;
- в результате поиска с помощью полнотекстового поиска, была получена ошибка.

Если же полнотекстовый поиск включен в информационной базе, а индекс не обновлен совсем или частично (из моей практики 95% информационных баз Заказчиков), то пользователь при поиске получит либо недостоверный, либо пустой результат поиска.

Спрашиваем у Фирмы 1С - как быть? как гарантировать достоверность результатов поиска всегда?
Получаем ответ: Да, для того, чтобы результаты поиска при включенном полнотекстовом поиске были актуальными, нужно следить за тем, чтобы индекс полнотекстового поиска был актуальным.Других вариантов эффективного и актуального поиска пока нет ().

А существует ли вообще "актуальный полнотекстовый индекс"? Зависит от числа пользователей, интенсивности изменения информации в базе и частоты запуска обновления индекса. Обычно обновление индекса запускают раз в 60 секунд. Хорошо, если объектов было изменено не много, и процедура успела обработать все изменения за эти 60 секунд. А если сделали перепроведение группы документов, или массовую перезапись справочника? В этом случае никто не может гарантировать время, через которое поиск по индексу снова даст достоверные данные.
В принципе, это не особо критично, кроме нескольких ситуаций. Частый вариант работы пользователей - установить в списке отбор по какому-то значению, например "Контрагенту", ввести новый или скопировать существующий документ и записать. Со старым поиском новый документ моментально был виден в списке. Теперь пользователь его увидит только через N секунд в лучшем случае, где N скорее ближе к 50-60 секундам, нежели к 2-3.
Если не заметить, что нового документа нет и по отобранным результатам предоставить информацию кому-либо, то она будет заведомо недостоверной.

Это было в случае нормальной работы с информационной базой. А что будет в специфических ситуациях? Приведу пару примеров.
1) В рабочей базе полнотекстовый индекс включен и часто обновляется. Пользователь просит развернуть ему копию рабочей базы, что по ней заняться анализом данных.
Восстанавливаем бэкап и даем доступ. Вот только полнотекстовый поиск работать не будет, т.к. индекс хранится не в СУБД, а в отдельных файлах (и в файловом, и в клиент-серверном варианте). Индекса нет в dt-файле.
т.е. чтобы пользователь смог использовать поиск по спискам - надо выключить полнотекстовый индекс в этой базе. Правда пользователь будет слегка удивлен тому, что поиск будет выполняться гораздо дольше. Либо перестроить индекс по всей базе.

2) (Актуально для более менее больших баз). В рабочей базе полнотекстовый индекс включен и часто обновляется. Наступает конец месяца и начинается закрытие периода. Начинаем массово грузить и перепроводить документы. Для снижения нагрузки на систему блокируем выполнение регламентных заданий, соответственно, и обновление индекс останавливается. Пользователи будут, мягко говоря, в недоумении - чего же в списках нет новых или измененных документов. Единственный выход - отключить полнотекстовый поиск для информационной базы, и, соответственно, получить еще большую нагрузку на оборудование за счет тяжелого поиска по всем реквизитам.

Таким образом, как мне кажется, операция по обновлению индекса станет еще одной головной болью администраторов информационных баз.
Система, ранее гарантировавшая 100% достоверность и актуальность информации в любой момент, сейчас превращается скорее в справочную систему, в которой нельзя быть полностью уверенным.
А пользователи получают еще один повод для упрека ИТ-шников - "ваша система неправильно работает".

В последних редакциях конфигурации на базе 1С 8.3 появилась отличная возможность автоматизировать поиск и замену дублей справочников. Это делается с помощью специальной обработки 1С — Поиск и замена дублей. Она встроена в такие прикладные решения на управляемых формах, как: , .

Рассмотрим небольшую инструкцию: как найти обработку в интерфейсе, как с помощью неё свернуть дублирующиеся элементы номенклатуры, контрагентов и других справочников.

Внимание! Перед работой с обработкой обязательно сделайте резервную копию базы данных.

Обработка для поиска дублей

Обработка Поиск и удаление дублей расположена на вкладке «Администрирование», в разделе «Поддержка и обслуживание»:

В самом низу:

Получите 267 видеоуроков по 1С бесплатно:

В обработке необходимо указать, какой справочник мы хотим «просканировать» (в нашем случае — номенклатура), по какому отбору (не помеченные на удаление) и что для нас будет являться фактом дубля (возьмем совпадение наименования по похожим словам). После настройки нажимаем «Найти дубли».

1С предложит варианты дублей:

На примере холодильника «СТИНОЛ»: система отметила элемент с окончанием «101» как оригинал, а элемент «103» как дубль. В окне справа мы видим, в каких документах участвует данных элемент номенклатуры.

Вы можете переназначить «оригинал» с помощью кнопки «Отметить как оригинал», исходя из своих убеждений. Я рекомендую выбирать эталоном тот объект, на котором больше «мест использования», чтобы ускорить процесс склейки дублей:

В новой версии 1С 8.3.5 улучшена работа с настройками списков.

Теперь настройки выглядят проще , пользоваться ими удобнее и, самое главное, теперь настройки списков сохраняются .

Также для облегчения работы пользователей настройка списков максимально похожа на настройку отчётов.

А условия, по которым выполняется отбор списка, дополнительно автоматически отображаются отдельными строками в нижней части настроек. Это позволяет быстро включать и выключать отдельные элементы отбора. Существует возможность автоматически включать эти же настройки в основную форму списка. При желании пользователь может самостоятельно указать, какие настройки он хочет видеть (какие он использует чаще всего) в форме списка.

Как было сказано выше, все настройки списков (отборы, сортировка, группировка и условное оформление) теперь сохраняются автоматически. Но кроме этого настройки теперь можно сохранить и вручную , задав для них какое-нибудь понятное имя. В результате для одного и того же списка пользователь может хранить несколько вариантов его настройки. Такая возможность будет весьма полезной для сложных списков, в которых используются различные варианты условного оформления.

Поиск в списках.

Был переработан механизм поиска в списках. Поиск стал более удобным и понятным .

Первое внешнее отличие заключается в том, что теперь в командной панели формы присутствуют два новых элемента : «Строка поиска» и «Управление поиском».

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

Очень удобной возможностью нового поиска является поиск по номеру без учёта лидирующих нулей . Например, чтобы найти накладную с номером 000000011, достаточно набрать на клавиатуре (или в строке поиска) «11»:

В платформу возвращена команда «Поиск по текущему значению» . Теперь возможно легко найти все строки таблицы, в которых содержится то же значение, что и в выделенной ячейке. А над таблицей отображаются те значения, по которым найдены строки таблицы. Стало наглядно видно , что таблица показывает не все данные, а только некоторую часть. И значения, по которым выполнен поиск, вы теперь можете легко удалить или изменить на другие значения.

Также удобным моментом является то, что платформа запоминает текущие значения, по которым выполнялся поиск. Эти значения сохраняются в истории поиска , которая доступна через кнопку управления поиском. Поэтому в любой момент возможно вернуться обратно к тем значениям поиска, которые использовались раньше.

Расширенный поиск.

Механизм поиска, существовавший в платформе раньше, остался, и называется теперь «Расширенный поиск». Немного изменился внешний вид его диалога и была добавлена возможность поиска по началу строки.

Для вызова расширенного поиска есть отдельная команда и, кроме этого, платформа использует его тогда, когда меняются значения, по которым уже выполнен поиск.

Выбор периода.

Переработан диалог выбора периода. Этот диалог используется в отчётах, для задания периода, за который должны быть показаны данные. А также этот же диалог используется в списках документов для поиска документов, относящихся к определенному периоду.

Отбор списка документов по периоду можно считать одним из способов их поиска — поиск по дате. Поэтому команду установки периода размещена в управлении поиском.

При первом открытии диалог предлагает выбрать один или несколько месяцев текущего, предыдущего или последующего года. Можно выбрать несколько месяцев, выделив их мышью . А также можно з, указав дату начала и дату окончания или же можно перейти на другую страницу диалога и выбрать один из стандартных периодов, имеющихся в платформе. А для того чтобы было легче ориентироваться периоды сгруппированы по интервалам: день, неделя, декада и т.д..

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

В данном окошке можно наблюдать три кнопки: Настройка - Включение/Отключение полнотекстового поиска;

Обновить индекс Создание индекса/Обновление индекса; Очистить индекс – обнуление индекса(рекомендуется после обновления всех данных); пункт Разрешить слияние индексов отвечает за слияние основного и дополнительного индекса.

Полнотекстовый поиск осуществляется при помощи полнотекстового индекса. При отсутствии индекса полнотекстовый поиск как таковой не возможен. Для того чтобы поиск имел результат, все необходимые данные должны быть включены в полнотекстовый индекс. Если пользователем введены в базу новые данные, их следует включить в рассматриваемый индекс, иначе они не будут участвовать в поиске. Чтобы этого избежать, необходимо обновлять полнотекстовый индекс. При обновлении система анализирует только определенные типы данных: Строка, Данные ссылочного типа (ссылки на документы, справочники),Число, Дата, ХранилищеЗначения . Если пользователь не имеет прав доступа к определенной информации, то он не сможет увидеть ее в результатах поиска. Следует также помнить и о том, что в свойствах объектов, по которым будет происходить поиск должно быть установлено значение Полнотекстовый Поиск – Использовать , которое задано по умолчанию.

Как вы можете заметить свойство Использовать установлено для всего справочника РегНомера , но сделать это можно и для каждого его реквизита соответствующего типа.

Рассмотрим более подробно полнотекстовый индекс, который состоит из двух частей (индексов): основного индекса и дополнительного . Высокая скорость поиска данных обеспечивается за счет основного индекса, но обновление его происходит относительно медленно, в зависимости от объема данных. Дополнительный индекс ему противоположен. Данные добавляются в него намного быстрее, но поиск осуществляется медленнее. Система осуществляет поиск одновременно в обоих индексах. Большая часть данных находится в основном индексе, а данные добавляемые в систему попадают в дополнительный индекс. Пока объем данных в дополнительном индексе небольшой, поиск по нему происходит относительно быстро. В тот момент, когда нагрузка на систему невелика, происходит операция слияния индексов, в результате чего дополнительный индекс очищается, а все данные помещаются в основной индекс. Слияние индексов предпочтительнее выполнять в тот момент времени, когда нагрузка на систему минимальна. С этой целью можно создавать регламентированные задания и задания по расписанию.

Рассмотрим случай автоматического обновления индекса при запуске приложения. Данный случай подходит для однопользовательских баз данных (в качестве однопользовательских баз данных могут выступать такие продукты как 1С Бухгалтерия Базовая, 1С Упрощенка ), так как при большом количестве пользователей обновление будет происходить после запуска приложения каждого из пользователей, что в результате очень сильно скажется на производительности системы.

Для начала создадим общий модуль и назовем его, к примеру ПП. В нем пропишем следующую процедуру:

Процедура ОбновлениеИндексы() Экспорт

ПолнотекстовыйПоиск.ОбновитьИндекс();

КонецПроцедуры

Так же установим свойства как на рисунке.

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

ОбновлениеПолнотекстовогоПоиска.ОбновлениеИндексы ();


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

Теперь рассмотрим случай, когда пользователей несколько. Здесь воспользуемся Регламентными Заданиями (в режиме Конфигуратор: в дереве конфигурации – Общие – Регламентные Задания). В данном случае нас интересуют только два задания: ОбновлениеИндексаПолнотекстовогоПоиска и СлияниеИндексаПолнотекстовогоПоиска. В свойствах этих заданий выберем Расписание и нажмем на сслыку Открыть.

Настраиваем расписания у обоих заданий. Рекомендаций по настройке в данном случае нет, здесь настройка определяется исходя из особенностей работы системы (нагрузки, объема информации, частоты ее обновлениея т.д.). Сами по себе задания работать не будут, нам потребуется иметь запущенный сеанс программы в режиме Предприятия , который и будет отвечать за выполнение этих заданий. Сразу следует заметить, что данный вариант работы используется для файловой системы. В этом сеансе должна быть запущена обработка ожидания, выполняющая вызов метода встроенного языка. Данная обработка будет иметь следующий вид:

Перейдем в режим Предприятия и выполним следующее: Запустим нашу обработку, которая в данном случае будет вызываться каждые 5 секунд и, в свою очередь вызывает метод “ВыполнитьОбработкуЗаданий()”. Данный метод проверяет настало ли время выполнять задания согласно их расписанию. Далее перейдем в пункт меню Операции – Константы – Настройка программы – вкладка Обмен Данными.

Определим пользовательский сеанс, который будет отвечать за выполнение и установим интервал опроса регламентных заданий. Работать в данном сеансе не рекомендуется, так как это может сказаться на производительности системы. Также на дисках ИТС имеется обработка “ЗапускРегламентныхЗаданий ”, которая принудительно запускает регламентные задания по выбору пользователя. Форма данной обработки выглядит следующим образом:

Таким образом все подготовительные работы выполнены и можно приступать непосредственно к самому поиску данных.

Чтобы начать работать с полнотекстовым поиском необходимо выполнить следующую команду: меню Сервис à Поиск данных .

После чего появится следующее окно:

Нажав на кнопку Настройки , появится поле с дополнительными настройками, такими как: Ограничение области поиска , Нечеткость , Размер Порции (в данном случае значение = 5, что означает вывод по пять результатов поиска на страницу). Параметр Нечеткость обозначает несовпадение части символов в поисковом запросе и полученной в ходе поиска информации. Нечеткость задается в процентном соотношении.

Полнотекстовый поиск может использовать следующие операторы:

Помимо этого механизм полнотекстового поиска допускает написание части символов русского слова одноклавишными латинскими символами. Результат поиска при этом не измениться.

В клиент-серверном варианте планированием выполнения заданий занимается планировщик заданий.

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

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

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

Спасибо!