Как исправить проблему с неработающим поиском (Ctrl+F) в табличной части документов 1С при большом количестве строк?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация
← На главную

Мы столкнулись с частой и весьма неприятной особенностью работы встроенного поиска (клавишная комбинация Ctrl+F) в табличных частях документов системы 1С:Предприятие 8.3. Данная проблема проявляется при попытке найти данные по полям ссылочного типа, например, по полю Номенклатура, если количество строк в табличной части превышает определенное пороговое значение, в нашем случае это было около 100 строк. При этом поиск по полям числового или строкового типа, таким как Количество или Цена, продолжал работать корректно независимо от объема данных.

Изначально, подобное поведение вызывало недоумение. Полнотекстовый поиск включали и отключали, обновляли его индекс, очищали кэш – все эти действия не приводили к желаемому результату. Расширенный поиск, доступный через специальные кнопки или пункты меню, при этом работал без сбоев, что лишь подчеркивало специфичность проблемы именно со стандартным Ctrl+F.

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

Выясняем причину ограничения поиска

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

Предположим, что в определенных версиях платформы или конфигураций этот процесс “разыменования” и последующего текстового поиска был неоптимальным или содержал ошибку, которая проявлялась именно при большом объеме данных. При количестве строк более 100, механизм поиска Ctrl+F мог либо вообще не выполнять “разыменование” для всех строк, либо сталкивался с таймаутом, либо с какой-то внутренней ошибкой, что приводило к пустому результату.

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

Обходное решение: вывод наименования ссылочного поля отдельной колонкой

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

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

Разберем по шагам, как добавить колонку Наименование номенклатуры через «Изменить форму»:

  1. Откройте документ и табличную часть: Перейдите в любой документ, содержащий табличную часть, где проявляется проблема (например, документ Реализация товаров и услуг или Поступление товаров и услуг).
  2. Вызовите форму настройки: Нажмите кнопку Еще (обычно находится в правом верхнем углу формы документа) и выберите пункт Изменить форму.... Откроется окно Настройка формы.
  3. Найдите нужную группу и таблицу: В левой части окна Настройка формы мы увидим дерево элементов формы. Нам нужно найти группу, которая содержит вашу табличную часть (например, Группа: Товары) и развернуть ее. Затем найдите саму табличную часть, она будет обозначена как Таблица: [ИмяВашейТабличнойЧасти] (например, Таблица: Товары).
  4. Добавьте новое поле:
    1. Выделите в дереве элементов вашу табличную часть (например, Таблица: Товары).
    2. Нажмите кнопку Добавить поля... (обычно находится сверху списка элементов формы или в правой части окна).
    3. В открывшемся списке доступных полей нам нужно найти поле, которое представляет собой наименование ссылочного объекта. Для поля Номенклатура это будет Номенклатура.Наименование. Разверните ветку Номенклатура и найдите Наименование.
    4. Установите флажок напротив поля Наименование и нажмите ОК.
  5. Настройте отображение колонки (по желанию):
    1. После добавления, новое поле Номенклатура.Наименование появится в списке элементов табличной части в окне Настройка формы.
    2. Мы можем переместить эту колонку на более удобное место, выделив её и используя кнопки со стрелками вверх/вниз.
    3. Также мы можем переименовать заголовок колонки для пользователя. Для этого выделите добавленное поле и в поле Заголовок в правой части окна укажите, например, «Наименование».
  6. Примените изменения: Нажмите кнопку ОК в окне Настройка формы, чтобы сохранить изменения и применить их к документу.

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

Официальное исправление проблемы: ошибка 10233177

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

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

  1. Обновить платформу 1С:Предприятие до последней стабильной версии, в которой было реализовано исправление ошибки 10233177.
  2. Обновить конфигурацию 1С (в нашем случае, 1С:Комплексная автоматизация) до актуального релиза, который включает в себя исправления, относящиеся к данной проблеме.

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

Дополнительные аспекты и информация

Для более полного понимания контекста, рассмотрим несколько важных моментов, касающихся поиска и работы с табличными частями в 1С.

Отличия между Ctrl+F и Полнотекстовым поиском

Мы должны четко различать два основных механизма поиска в 1С:

  1. Встроенный поиск (Ctrl+F): Этот механизм предназначен для интерактивного поиска внутри текущей формы или табличной части. Он работает с теми данными, которые отображаются на экране или могут быть быстро доступны из контекста формы. Как мы выяснили, его эффективность может зависеть от типа поля и количества строк.
  2. Полнотекстовый поиск (ПФТ): Это мощный инструмент для поиска информации по всей информационной базе. Он использует специальный индекс, который регулярно обновляется (или может быть обновлен вручную). ПФТ позволяет находить объекты данных, содержащие заданный текст, даже если он находится в прикрепленных файлах или нетекстовых полях. Проблема с Ctrl+F в табличной части, как правило, не связана напрямую с полнотекстовым поиском, поскольку последний оперирует на уровне всей базы данных, а не отдельной формы. Хотя активация/деактивация ПФТ и обновление его индекса часто являются стандартными шагами при любых проблемах с поиском.

Динамические списки и отображаемые реквизиты

Табличные части документов в управляемых формах 1С часто реализованы на основе ДинамическихСписков. Поиск в таких списках, особенно интерактивный (Ctrl+F), как правило, осуществляется по тем реквизитам, которые явно вынесены на форму. Когда мы добавляем колонку Номенклатура.Наименование, мы делаем текстовое представление номенклатуры "видимым" для клиентской части платформы, что упрощает и ускоряет поиск по этому полю.

Известные ограничения по количеству строк в табличных частях

Мы также должны знать общие ограничения по количеству строк в табличной части документа в 1С. Исторически, максимальное количество строк, которое можно было записать в табличную часть документа, составляло 99 999 строк. Это ограничение было связано с типом данных, используемым для номера строки. Однако важно отметить, что данное ограничение относится к сохранению данных и значительно превышает пороговое значение в 100 строк, при котором возникала проблема с поиском. В новых версиях платформы 1С (начиная с 8.3.27) планируется увеличить этот лимит до 999 999 999 строк за счет нового свойства ДлинаНомераСтроки. Тем не менее, наша проблема с поиском при 100+ строках была гораздо более специфичной и не связана с этим глобальным лимитом на запись.

Заключение

Проблема с неработающим поиском (Ctrl+F) по полям ссылочного типа в табличных частях документов 1С при большом количестве строк является известной ошибкой, которая была зарегистрирована под кодом 10233177 и исправлена разработчиками 1С. До момента обновления до исправленной версии платформы или конфигурации, эффективным обходным решением является добавление текстового представления ссылочного поля (например, Номенклатура.Наименование) отдельной колонкой в табличную часть через пользовательскую настройку формы.

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

← На главную