В процессе работы с платформой 1С:Предприятие 7.7 можно столкнуться с неочевидным, но неприятным поведением стандартного механизма поиска. Представим ситуацию: у нас есть печатная форма, в которой для красивого отобрания данных используется свойство ячеек Положение - "по выделенным столбцам". Как только мы устанавливаем для всей таблицы свойство Только просмотр, встроенный поиск по Ctrl+F3 или F3 перестает работать корректно. Он находит первое совпадение и останавливается, будто других значений в документе нет.
Давайте подробно разберемся, почему так происходит, и какие существуют способы решения этой проблемы. Проанализируем ситуацию и рассмотрим все доступные варианты, от самых простых до более продвинутых.
Корень проблемы кроется в том, как платформа 1С 7.7 обрабатывает свойство Положение - "по выделенным столбцам". В отличие от стандартного объединения ячеек, которое физически создает одну большую ячейку из нескольких, это свойство работает иначе. Оно лишь визуально растягивает содержимое одной ячейки (обычно крайней левой) на несколько соседних столбцов. Для алгоритма поиска эти ячейки справа по-прежнему существуют и считаются пустыми.
Когда вы запускаете поиск, происходит следующее:
Таким образом, это не просто недоработка, а подтвержденный "глюк" или ограничение старой платформы. Теперь, зная причину, рассмотрим, как можно обойти это ограничение.
Самый простой и логичный способ решить проблему — отказаться от свойства, которое ее вызывает. Вместо "виртуального" растягивания текста применим "физическое" объединение ячеек.
Разберем по шагам:
Положение - "по выделенным столбцам".После такого изменения структура таблицы становится понятной для стандартного механизма поиска. Он будет корректно воспринимать объединенную область как одну большую ячейку и после ее обработки без проблем переходить к следующим данным. Этот метод является наиболее предпочтительным, если нет строгих ограничений на изменение макета.
Этот подход можно назвать самым надежным и "правильным" с точки зрения структуры данных. Он предполагает полный отказ от любого вида объединения ячеек в тех областях, где предполагается поиск.
Суть проста: каждое значение должно находиться в своей собственной, отдельной ячейке. Это может потребовать пересмотра дизайна печатной формы, но гарантирует абсолютную предсказуемость работы всех стандартных механизмов платформы, включая поиск, копирование и экспорт данных.
Преимущества этого метода:
Недостатки:
Этот способ стоит выбирать, если надежность работы с печатной формой является высшим приоритетом, и вы готовы потратить время на переделку макета.
Если по каким-либо причинам изменять макет печатной формы нельзя, а функция поиска жизненно необходима пользователям, можно разработать собственный механизм поиска на встроенном языке 1С.
Это продвинутое решение, требующее навыков программирования. Давайте набросаем примерный алгоритм, как это можно реализовать.
Ячейка.Текст) и сравнивайте его с искомым значением. Для поиска подстроки используйте функцию СтрНайти().Таблица.АктивизироватьОбласть(НайденнаяЯчейка).Примерный фрагмент кода для поиска мог бы выглядеть так (это псевдокод для иллюстрации идеи):
Процедура НайтиСледующий(ТабДокумент, ИскомыйТекст, НачатьСоСтроки, НачатьСКолонки)
Для Стр = НачатьСоСтроки По ТабДокумент.ВысотаТаблицы() Цикл
Для Кол = 1 По ТабДокумент.ШиринаТаблицы() Цикл
// Пропускаем ячейки до стартовой позиции при повторном поиске
Если (Стр = НачатьСоСтроки) И (Кол <= НачатьСКолонки) Тогда
Продолжить;
КонецЕсли;
ТекущаяЯчейка = ТабДокумент.Область(Стр, Кол);
Если СтрНайти(ТекущаяЯчейка.Текст, ИскомыйТекст) > 0 Тогда
// Нашли!
ТабДокумент.АктивизироватьОбласть(ТекущаяЯчейка);
// Сохраняем позицию для следующего поиска
ЗапомнитьПозицию(Стр, Кол);
Возврат; // Прерываем поиск до следующего нажатия кнопки
КонецЕсли;
КонецЦикла;
КонецЦикла;
// Если ничего не нашли
Предупреждение("Больше совпадений не найдено!");
КонецПроцедуры
Этот метод дает полный контроль над логикой поиска, но является самым трудозатратным в реализации.
Для платформы 1С 7.7 существует множество внешних компонент, расширяющих ее стандартные возможности. Одной из самых известных для работы с таблицами является "Йоксель" (Yoksel). Она представляет собой мощную замену стандартному объекту Таблица.
Ключевые преимущества "Йоксель":
Используя эту компоненту, вы можете формировать отчеты в ее объекте, а затем использовать встроенные методы поиска, которые корректно работают с любыми типами объединения ячеек. Для настройки поиска в компоненте предусмотрен специальный объект Йоксель.ПараметрыПоиска, позволяющий гибко задавать условия. Это наиболее технологичное, но требующее установки и изучения дополнительного инструмента, решение.
В итоге, мы видим, что даже для такой старой, но все еще используемой платформы, как 1С 7.7, существует несколько путей решения проблемы. Выбор конкретного способа зависит от сложности вашей печатной формы, ваших навыков и готовности вносить изменения в существующий код или макеты.