Мы столкнулись с частой и весьма неприятной особенностью работы встроенного поиска (клавишная комбинация Ctrl+F) в табличных частях документов системы 1С:Предприятие 8.3. Данная проблема проявляется при попытке найти данные по полям ссылочного типа, например, по полю Номенклатура, если количество строк в табличной части превышает определенное пороговое значение, в нашем случае это было около 100 строк. При этом поиск по полям числового или строкового типа, таким как Количество или Цена, продолжал работать корректно независимо от объема данных.
Изначально, подобное поведение вызывало недоумение. Полнотекстовый поиск включали и отключали, обновляли его индекс, очищали кэш – все эти действия не приводили к желаемому результату. Расширенный поиск, доступный через специальные кнопки или пункты меню, при этом работал без сбоев, что лишь подчеркивало специфичность проблемы именно со стандартным Ctrl+F.
Давайте разберемся в причинах данного явления, рассмотрим предложенные обходные пути и выясним, какое официальное решение было предложено разработчиками 1С.
Вероятнее всего, проблема связана с тем, как платформа 1С обрабатывает поиск по полям ссылочного типа (таким как Номенклатура, Контрагент, Склад и т.д.) в больших динамических списках, на которых основаны табличные части документов в управляемом приложении. Когда мы ищем по ссылочному полю, система должна не просто найти значение ссылки, а “разыменовать” её, то есть получить текстовое представление связанного объекта (например, Наименование номенклатуры) и выполнить поиск уже по этому текстовому представлению.
Предположим, что в определенных версиях платформы или конфигураций этот процесс “разыменования” и последующего текстового поиска был неоптимальным или содержал ошибку, которая проявлялась именно при большом объеме данных. При количестве строк более 100, механизм поиска Ctrl+F мог либо вообще не выполнять “разыменование” для всех строк, либо сталкивался с таймаутом, либо с какой-то внутренней ошибкой, что приводило к пустому результату.
Поиск по полям, которые уже являются простыми типами данных (числовые Количество, Цена или строковые), не требует дополнительных операций по “разыменованию”, и поэтому работал стабильно. Тот факт, что расширенный поиск функционировал, также указывает на различие в механизмах их реализации: расширенный поиск, вероятно, использует более мощные и оптимизированные запросы к базе данных или имеет другие алгоритмы обработки.
Как часто бывает в 1С, сообщество пользователей быстро находит практичные обходные пути. В нашем случае, одним из участников форума было предложено простое, но эффективное решение, которое позволяет обойти ограничение по количеству строк и восстановить работоспособность поиска по ссылочным полям.
Суть метода заключается в том, чтобы явно вывести на форму табличной части отдельной колонкой текстовое представление ссылочного объекта. Для поля Номенклатура это будет Наименование номенклатуры. Мы можем сделать это, не прибегая к изменению конфигурации, используя стандартную функциональность пользовательской настройки формы.
Реализация товаров и услуг или Поступление товаров и услуг).Еще (обычно находится в правом верхнем углу формы документа) и выберите пункт Изменить форму.... Откроется окно Настройка формы.Настройка формы мы увидим дерево элементов формы. Нам нужно найти группу, которая содержит вашу табличную часть (например, Группа: Товары) и развернуть ее. Затем найдите саму табличную часть, она будет обозначена как Таблица: [ИмяВашейТабличнойЧасти] (например, Таблица: Товары).Таблица: Товары).Добавить поля... (обычно находится сверху списка элементов формы или в правой части окна).Номенклатура это будет Номенклатура.Наименование. Разверните ветку Номенклатура и найдите Наименование.Наименование и нажмите ОК.Номенклатура.Наименование появится в списке элементов табличной части в окне Настройка формы.Заголовок в правой части окна укажите, например, «Наименование».ОК в окне Настройка формы, чтобы сохранить изменения и применить их к документу.После выполнения этих шагов в табличной части документа появится новая колонка с наименованием номенклатуры. Теперь, когда текстовое представление номенклатуры явно присутствует на форме как отдельная колонка, поиск по Ctrl+F будет работать по этой новой колонке без проблем и ограничений по количеству строк. Это объясняется тем, что система теперь ищет по непосредственно отображаемому текстовому полю, а не по скрытому или требующему "разыменования" значению ссылки.
Наиболее обнадеживающей новостью стало подтверждение от службы технической поддержки 1С. Выяснилось, что описанное поведение действительно являлось зарегистрированной ошибкой платформы или конфигурации и имело свой идентификатор: 10233177. Согласно полученной информации, данная ошибка была признана разработчиками и впоследствии исправлена в одной из будущих версий платформы 1С:Предприятие или конфигурации.
Это подтверждение означает, что проблема не является особенностью архитектуры, а именно ошибкой, которую можно устранить путем обновления программного обеспечения. Таким образом, самым надежным и полным решением проблемы будет:
1С:Комплексная автоматизация) до актуального релиза, который включает в себя исправления, относящиеся к данной проблеме.Перед проведением обновлений всегда рекомендуется создавать резервные копии информационной базы и тестировать новые версии на тестовой базе. Если после обновления проблема сохраняется, возможно, потребуется дополнительная диагностика или повторное обращение в техподдержку 1С, так как исправления могут быть специфичны для определенных комбинаций версий платформы и конфигурации.
Для более полного понимания контекста, рассмотрим несколько важных моментов, касающихся поиска и работы с табличными частями в 1С.
Мы должны четко различать два основных механизма поиска в 1С:
Ctrl+F): Этот механизм предназначен для интерактивного поиска внутри текущей формы или табличной части. Он работает с теми данными, которые отображаются на экране или могут быть быстро доступны из контекста формы. Как мы выяснили, его эффективность может зависеть от типа поля и количества строк.Ctrl+F в табличной части, как правило, не связана напрямую с полнотекстовым поиском, поскольку последний оперирует на уровне всей базы данных, а не отдельной формы. Хотя активация/деактивация ПФТ и обновление его индекса часто являются стандартными шагами при любых проблемах с поиском.Табличные части документов в управляемых формах 1С часто реализованы на основе ДинамическихСписков. Поиск в таких списках, особенно интерактивный (Ctrl+F), как правило, осуществляется по тем реквизитам, которые явно вынесены на форму. Когда мы добавляем колонку Номенклатура.Наименование, мы делаем текстовое представление номенклатуры "видимым" для клиентской части платформы, что упрощает и ускоряет поиск по этому полю.
Мы также должны знать общие ограничения по количеству строк в табличной части документа в 1С. Исторически, максимальное количество строк, которое можно было записать в табличную часть документа, составляло 99 999 строк. Это ограничение было связано с типом данных, используемым для номера строки. Однако важно отметить, что данное ограничение относится к сохранению данных и значительно превышает пороговое значение в 100 строк, при котором возникала проблема с поиском. В новых версиях платформы 1С (начиная с 8.3.27) планируется увеличить этот лимит до 999 999 999 строк за счет нового свойства ДлинаНомераСтроки. Тем не менее, наша проблема с поиском при 100+ строках была гораздо более специфичной и не связана с этим глобальным лимитом на запись.
Проблема с неработающим поиском (Ctrl+F) по полям ссылочного типа в табличных частях документов 1С при большом количестве строк является известной ошибкой, которая была зарегистрирована под кодом 10233177 и исправлена разработчиками 1С. До момента обновления до исправленной версии платформы или конфигурации, эффективным обходным решением является добавление текстового представления ссылочного поля (например, Номенклатура.Наименование) отдельной колонкой в табличную часть через пользовательскую настройку формы.
Мы настоятельно рекомендуем в первую очередь рассмотреть возможность обновления вашей системы 1С до актуальных версий, чтобы получить все преимущества исправлений и улучшений, реализованных разработчиками.