1с обновление индекса ппд. О интересных вещах из мира IT, инструкции и рецензии

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

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

  • Есть поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ 7.79-2000). Пример: "русская фраза" = "russkaya fraza".
  • Есть поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами). Пример: "руссrfz фраpf" (окончания каждого слова набраны латиницей, допустим, в результате ошибки оператора).
  • Есть возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости. Пример: указав в строке поиска слово "привет" и нечеткость 17 %, найдем все аналогичные слова с ошибками и без: "привет", "превет", "привед".
  • Есть возможность указать область выполнения поиска по выбранным объектам метаданных.
  • Полнотекстовое индексирование названий стандартных полей ("Код", "Наименование" и т. д.) производится на всех языках конфигурации.
  • Поиск выполняется с учетом синонимов русского, английского и украинского языков.
  • Морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ "1С:Предприятие".
  • Стандартно в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, которые предоставлены компанией "Информатик".
  • Поиск можно осуществлять с использованием подстановочных символов ("*"), а также с указанием поисковых операторов ("И", "ИЛИ", "НЕ", "РЯДОМ") и спецсимволов.

Полнотекстовый поиск можно осуществлять в любой конфигурации на платформе 1С:Предприятие 8

Для того чтобы открыть окно управления полнотекстовым поиском необходимо выполнить следующее:

Обычное приложение - пункт меню Операции - Управление полнотекстовым поиском .

Управляемое приложение - пункт меню Главное меню - Все функции - Стандартные - Управление полнотекстовым поиском.


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

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

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

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

Специальные операторы, допустимые при задании поискового выражения

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

Два оператора РЯДОМ

  • упрощенный. На расстоянии 8 слов друг от друга
  • РЯДОМ/[+/-]n – поиск данных в одном реквизите на расстоянии n-1 слов между ними.

Знак указывает в каком направлении от первого слова будет поиск второго. (+ - после, - до)

Групповой символ «*» может использоваться только в качестве замены конца слова

Оператор нечеткости «#». Если неизвестно точное написание названия, имени.

Программными средствами и средствами 1с: программирование.

Оператор синонимов «!». Позволяет найти слово и его синонимы

Как программно обновить индекс полнотекстового поиска?

Код 1C v 8.х Процедура ОбновлениеИндексы() Экспорт
ПолнотекстовыйПоиск.ОбновитьИндекс();
КонецПроцедуры

Пример полнотекстового поиска данных

Определение переменной СписокПоиска

Код 1C v 8.х Перем СписокПоиска;

Кроме этого в процедуре обработки события ПриОткрыии формы определим, что эта переменная будет содержать список полнотекстового поиска, с помощью которого мы и будем осуществлять поиск в данных

Код 1C v 8.х Процедура ПриОткрытии()
СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок();
КонецПроцедуры

Теперь для события нажатия на кнопку Найти напишем код, который позволит нам выполнять поиск в соответствии с тем выражением, которое задано в поле ПоисковоеВыражение

Код 1C v 8.х Процедура НайтиНажатие(Элемент)
СписокПоиска.СтрокаПоиска = ПоисковоеВыражение;
Попытка
СписокПоиска.ПерваяЧасть();
Исключение
Предупреждение(ОписаниеОшибки());
КонецПопытки;
Если СписокПоиска.ПолноеКоличество() = 0 Тогда
ЭлементыФормы.СообщениеОРезультате.Значение = "Не найдено";
ЭлементыФормы.РезультатПоиска.УстановитьТекст("");
Иначе
ВывестиРезультатПоиска();
КонецЕсли;
КонецПроцедуры

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

Создадим в модуле формы процедуру с таким именем и напишем в ней код,

Код 1C v 8.х Процедура ВывестиРезультатПоиска()
ЭлементыФормы.СообщениеОРезультате.Значение = "Показаны " + Строка(СписокПоиска.НачальнаяПозиция() + 1) + " - " + Строка(СписокПоиска.НачальнаяПозиция() +СписокПоиска.Количество()) + " из " + СписокПоиска.ПолноеКоличество();
Результат = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
ЭлементыФормы.РезультатПоиска.УстановитьТекст(Результат);
ДоступностьКнопок();
КонецПроцедуры

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

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

Код 1C v 8.х Процедура ДоступностьКнопок()
ЭлементыФормы.СледующаяПорция.Доступность = (СписокПоиска.ПолноеКоличество() - СписокПоиска.НачальнаяПозиция()) > СписокПоиска.Количество();
ЭлементыФормы.ПредыдущаяПорция.Доступность = (СписокПоиска.НачальнаяПозиция() > 0);
КонецПроцедуры

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

Код 1C v 8.х Процедура ПредыдущаяПорцияНажатие(Элемент)
СписокПоиска.ПредыдущаяЧасть();
ВывестиРезультатПоиска();
КонецПроцедуры
Процедура СледующаяПорцияНажатие(Элемент)
СписокПоиска.СледующаяЧасть();
ВывестиРезультатПоиска();
КонецПроцедуры

Заключительным «штрихом» будет создание обработчика события onclick поля HTML-документа, расположенного в форме. Дело в том, что результат полнотекстового поиска, представленный в виде HTML-текста, содержит гиперссылки на номера элементов списка поиска. И нам хотелось бы, чтобы при переходе пользователя на эту ссылку система открывала бы форму того объекта, который содержится в этом элементе списка. Для этого мы будем перехватывать событие onclick HTML-документа, содержащегося в поле HTML-документа, получать номер элемента списка из гиперссылки и открывать форму соответствующего объекта. Текст обработчика события onclick поля HTML-документа представлен в коде

Код 1C v 8.х Процедура РезультатПоискаonclick(Элемент, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Проверить идентификатор элемента
Если (htmlElement.id = "FullTextSearchListItem") Тогда
// Получить имя файла (номер строки списка поиска),
// содержащегося в гиперссылке
НомерВСписке = Число(htmlElement.nameProp);
// Получить строку списка поиска по номеру
ВыбраннаяСтрока = СписокПоиска[НомерВСписке];
// Открыть форму найденного объекта
ОткрытьЗначение(ВыбраннаяСтрока.Значение);
pEvtObj.returnValue = Ложь;
КонецЕсли;
КонецПроцедуры

или

Зачем разработчику 1С «индексировать» измерения регистров и реквизиты?

— Ну у вас и запросы! — сказала база данных и повисла…

Краткий ответ на вопрос заголовка заключается в том, что это позволит выполнять запросы быстро и уменьшать негативное влияние блокировок на .

Что такое индекс?

Оптимизация размещения индексов

При объеме таблиц не позволяющем им «разместиться» в оперативной памяти сервера, на первое место выходит скорость дисковой подсистемы (I/O). И здесь можно обратить внимание возможность размещать индексы в отдельных файлах расположенных на разных жестких дисках .

Подробное описание действий http ://technet .microsoft .com /ru -ru /library /ms 175905.aspx
Использование индекса из другой файловой группы повышает производительность некластерных индексов в связи с параллельностью выполнения процессов ввода/вывода и работы с самим индексом.
Для определения размеров можно использовать выше упомянутую обработку.

Влияние индексов на блокировки

Отсутствие необходимого индекса для запроса означает перебор всех записей таблицы, что в свою очередь приводит к избыточным блокировкам, т.е. блокируются лишние записи. Кроме того, чем дольше выполняется запрос из-за отсутствующих индексов, тем больше время удержания блокировок.
Другая причина блокировок — малое количество записей в таблицах. В связи с этим SQL Server, при выборе плана выполнения запроса, не использует индексы, а обходит всю таблицу(Table Scan), блокируя целиком. Для того, чтобы избежать подобных блокировок, необходимо увеличить количество записей в таблицах до 1500-2000. В этом случае сканирование таблицы становится долее дорогостоящей операцией и SQL Server начинает использовать индексы. Конечно это можно сделать не всегда, ряд справочников как «Организации», «Склады», «Подразделения» и т.п. обычно имеют мало записей. В этих случаях индексирование не будет улучшать работу.

Эффективность индексов

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

  • Запросы, которые указывают «узкие» критерии поиска. Такие запросы должны считывать лишь небольшое число строк, отвечающих определенным критериям.
  • Запросы, которые указывают диапазон значений. Эти запросы также должны считывать небольшое количество строк.
  • Поиск, который используется в операциях связывания. Колонки, которые часто используются как ключи связывания, прекрасно подходят для индексов.
  • Поиск, при котором данные считываются в определенном порядке. Если результирующий набор данных должен быть отсортирован в порядке кластеризованного индекса, то сортировка не нужна, поскольку результирующий набор данных уже заранее отсортирован. Например, если кластеризованный индекс создан по колонкам lastname (фамилия), firstname (имя), а для приложения требуется сортировка по фамилии и затем по имени, то здесь нет необходимости добавлять инструкцию ORDER BY.

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

Покрывающим (для данного запроса), называется индекс в котором есть все необходимые поля для этого запроса. Например, если индекс создан по колонкам a, b и c, а оператор SELECT запрашивает данные только из этих колонок, то требуется доступ только к индексу.

Для того, что бы определить эффективность индекса, мы можем приблизительно оценить с помощью бесплатного онлайн-сервиса показывающий «план исполнения запроса» и используемые индексы.

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

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

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

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

Загрузка классификатора банков — воскресение, 4:30
Загрузка курсов валют — каждый день; 7:00
Извлечение текстов — каждый день; 6:00.
Обмен сообщениями по учетным записям документооборота — каждый день; каждые 10800 сек.
Обновление агрегатов — каждый день; с 5:00:00 один раз в день
Обновление Задач Бухгалтера — каждый день; с 6:30:00 один раз в день
Обновление индекса ППД (полнотекстового поиска) — каждый день; каждые 10800 сек.
Перестроение агрегатов — каждый день, по дням недели [суббота]; с 3:00:00 один раз в день
Пересчет текущих значений относительных дат запрета изменения — каждый день; с 7:00:00 один раз в день
Слияние индекса ППД (полнотекстового поиска) — каждый день; с 4:00:00 один раз в день
Удаление неактуальной информации синхронизации — каждый день; с 3:30:00 один раз в день
Установка периода рассчитанных итогов — каждый день, 5-го числа месяца; с 1:00:00 один раз в день

Вопрос: Перестроение Индекса для 1С


Добрый день, есть база УПП на SQL 2014, стоят регламентные задания:
1)
2)
Работало все вначале отлично, ничего не тормозило, прошло полтора месяца и начались тормоза. переустанавливал 1С, SQL, 1С сервер в надежде, что что-то неправильно настроил, но косяк остался. Глянул в отчет

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

Ответ: ()

Вопрос: SQL и фрагментация индексов


При сборе статистки показывает что больше сотни индексов требуют перестроение их фрагментация свыше 50% но после перестроения индексов фрагментация остается такая же что можно предпринять?

Ответ: Хорошо спасибо учту

Вопрос: Последствия удаления индекса


Доброе время суток. Имеется БД 1С в SQL-формате, на которой нужно сделать ТИИ, которое не делается, выдавая такие ошибки:

Я не могу определить с какими данными в 1С связаны вышеуказанные таблицы. Что может быть плохого если я удалю вышеуказанные индексы через drop index ?

Я не автор темы.
Все команды отправляет 1с на сервер sql, индексы создаются и удаляются.
чужеродный - если мы не через конфигуратор создаем индексы, а на сервере sql сами.
индекс созданный при штатной процедуре 1с, не будет отличаться от индекса созданного sql-сервером

Вопрос: Как правильно настроить регламентные "Обновление индекса ППД" и "Слияние индекса ППД" (Прочитано 19


Как правильно настроить регламентные "Обновление индекса ППД" и "Слияние индекса ППД"?
Размер базы 160 ГБ. Сейчас настроены. Каждый час оба. Уместно ли установка "Обновление индекса ППД" раз в час, а "Слияние индекса ППД" один раз ночью?
Оно успеет произвести слияние его ночью?

Ответ:

Вопрос снят. Регламентное обновляло индекс порциями. По 10 000 записей. Свою работу оно сделало 10 000 обновило. Но оказалось больше чем 10 000 вот и получилось что индекс все таки не актуален.

Вопрос: Вопросы про индексы в 1с


В каких случаях их лучше использовать? на сколько может распухнуть база при частом их использовании? в чем разница: индексы и индексы с доп. упорядочиванием.
Можно так же ссылки на нормальные примеры.
Спасибо.

Ответ: () Индексы могут быть и больше размера данных:)
() Как мне кажется размер индексов не самый главный их минус, тут важнее, что при "лишних" индексах идут "лишние" издержки при записи. ИМХО.
Но при больших(сотни-тысячи гб) базах, конечно уже и на размер смотреть нужно:)

Общий принцип - если по этому полю будут отборы - индексируем, не будут - не индексируем. Если по полю отбор нужен, но количество строк мало - не нужен индекс. Если по полю отбор нужен, но под него подходит почти вся таблица - не нужен индекс. ИМХО.

Вопрос: Индексы таблицы значений


Добрый день.
Есть форма с таблицей значений. По кнопке в эту таблицу импортируются данные из excel.
При первом открытии формы и нажатии на кнопку загрузилось например 10 строк. Для каждой строки автоматически проставились индексы от 0 до 9. При повторной загрузке (без закрытия формы) я очищаю таблицу и добавляю в нее еще например 5 строк. Индексы продолжают нумерацию и будут равны 10-14. Как обнулить счетчик индексов и запустить его заново?
Спасибо

Ответ:

Вы были правы. Я не так искал. Был уверен что индексы и идентификаторы это одно и то же. Вопрос закрыт. Огромное спасибо за помощь

Вопрос: Обращение к элементу ТЧ по индексу


Задали учебную задачу произвести сортировку ТЧ документа не встроенной функцией, а вручную по алгоритму какому-нибудь.
Меня интересует, можно ли обратиться к элементу ТЧ по индексу?

Ответ: С табличной частью тот же смысл.
Копипаста из СП:

Табличная часть (Tabular section)
Элементы коллекции:

Строка табличной части
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс строки (нумерация с 0).

Вопрос: после обновления платформы заглючили рег задания обновление индекса поиска


установили 12.1616 на части серверов все нормально, а сервер с консолидацией стал глючить по страшному, рхосты вываливаются через 2...3 минуты...

выяснил, что во всем виновато рег задание "обновление индекса полнотекстового поиска", пока его отключил...

при этом на типовых бухах - вроде проблема не появляется

вопросы
1. у кого еще такая проблема появляется?
2. как искать детальную причину (включать рег задания на продакте не хочется а на тестовом нельзя)
3. что делать

Ответ: Я ненастоящий сварщик, но на тестовой базе отключил бы все рег задания, кроме "обновление индекса полнотекстового поиска" и наблюдал бы за ним через тех.журнал.

Вопрос: Спецам по SQL - как влияют общие реквизиты на статистику по индексам?


Вопрос: Насколько трудоемко будет вырезать из конфигурации общие реквизиты разделения данных? Стоит вообще этим заниматься?
БСП смотрел, в целом похоже, что там не очень много мест, но времени на глубокое изучение не было.
А теперь – о причинах, почему меня это интересует.
База БП 3.0, размер примерно 1 ТБ, из них 200 ГБ – это таблицы регистра бухгалтерии, записей от 50 до 250 млн. В таблицах на сервере поле ОбластьДанныхОсновныеДанные имеет тип Numeric(7,0), поэтому глобально я места не сэкономлю (примерно 9 ГБ приходится сейчас на это поле).
Основная цель – немного ускорить работу с базой, за счет:
*уменьшения размеров таблиц и индексов; *ускорения выборки за счет уменьшения размера строки данных (и индексов) и более точных планов запросов; *ускорения команды ‘update statistics’; *уменьшения затрат на ведение колоночной статистики (может быть по некоторым полям ее вообще на надо будет вести отдельно, т.к. это поле окажется самым левым в индексе).
Небольшое ускорение операции с одной строкой в пересчете на миллионы строк дает значительную экономию времени. А в пересчете на год – еще больше, поэтому мне кажется, что цель оправдана.

И немного теории, на которой я основываюсь.
Общеизвестный факт, что MSSQL создает статистику только по самой левой колонке индекса и хранит там 200 интервалов распределения значений.
В индексах типовой бухгалтерии 3.0 левой колонкой идет "ОбластьДанныхОсновныеДанные", тип Число. Если разделение не используется, то в этом поле везде ноль. Ниже – пример такого индекса (регистр бухгалтерии). 49 млн записей, все собрались в одной строке гистограммы.

Сервер создает колоночные статистики по всем полям, которые участвуют в запросах

Например, по регистратору