ТабличныйДокумент.НайтиЗначение

Методы · FindValue

Осуществляет поиск значения в ячейках табличного документа.

Синтаксис

НайтиЗначение(<Значение>, <Начало>, <Где>, <ИскатьПоСтрокам>, <ИскатьВперед>)

Примеры платформы

Область = ТабДок.НайтиЗначение(ВыбЗначение);
Если ТипЗнч(Область)=Тип("Неопределено") Тогда
    Сообщить("Значение не найдено!");
Иначе
    Сообщить("Значение найдено.");
КонецЕсли;
Полное описание, параметры и ограничения

ТабличныйДокумент.НайтиЗначение (SpreadsheetDocument.FindValue)

ТабличныйДокумент (SpreadsheetDocument)

НайтиЗначение (FindValue)

Доступен, начиная с версии 8.1.

Синтаксис:
НайтиЗначение(<Значение>, <Начало>, <Где>, <ИскатьПоСтрокам>, <ИскатьВперед>)
Параметры:

<Значение> (обязательный)
Тип: Произвольный.
Искомое значение.

<Начало> (необязательный)
Тип: ОбластьЯчеекТабличногоДокумента.
Область, после которой начинать поиск. Если параметр не задан, то поиск с начала табличного документа.

<Где> (необязательный)
Тип: ОбластьЯчеекТабличногоДокумента.
Область, в которой осуществляется поиск. Если параметр не указан, поиск будет выполнен по всем ячейкам табличного документа.

<ИскатьПоСтрокам> (необязательный)
Тип: Булево.
Определяет последовательность обхода ячеек при поиске.
Истина - искать по текущей строке, затем переходить на следующую и т.д. в общем направлении поиска, Ложь - искать по текущей колонке, затем переходить на следующую и т.д. в общем направлении поиска.
Значение по умолчанию: Истина.

<ИскатьВперед> (необязательный)
Тип: Булево.
Определяет направление поиска: Истина - искать вперед; Ложь - искать назад.
Значение по умолчанию: Истина.
Возвращаемое значение:
Тип: ОбластьЯчеекТабличногоДокумента, РисунокТабличногоДокумента, Неопределено.
Если значение не найдено, то возвращается значение Неопределено.
Описание:

Осуществляет поиск значения в ячейках табличного документа.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Пример:

Область = ТабДок.НайтиЗначение(ВыбЗначение);
Если ТипЗнч(Область)=Тип("Неопределено") Тогда
Сообщить("Значение не найдено!");
Иначе
Сообщить("Значение найдено.");
КонецЕсли;

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Найти товар по подписи и цену по числовому значению

Текст и значение ячейки — разные уровни. Число 250 ищем как число, независимо от локального отображения 250,00.

Где и как запускать

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

Подготовка

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

  2. На форме создайте команду УчебныйПример и перетащите её на форму как кнопку. В действии команды выберите процедуру УчебныйПример(Команда).

  3. Вставьте весь приведённый модуль на уровне модуля формы: обработчик команды и функцию УчебнаяТаблица. Никакие макеты или реквизиты конфигурации не требуются.

  4. Сохраните EPF и откройте в тонком клиенте Windows. Примеры показывают таблицу, но не вызывают принтер, не записывают файлы и не читают рабочие документы.

&НаКлиенте
Процедура УчебныйПример(Команда)
    ТабДок = УчебнаяТаблица();
    Текстовая = ТабДок.НайтиТекст("книга", , ТабДок.Область(3, 1, 4, 1), Истина, Истина, Истина, Истина);
    Если Текстовая = Неопределено Тогда
        ВызватьИсключение "Учебная книга не найдена";
    КонецЕсли;
    Сообщить(Текстовая.Верх = 3);
    Сообщить(Текстовая.Лево = 1);
    Числовая = ТабДок.НайтиЗначение(250, , ТабДок.Область(3, 3, 4, 3));
    Если Числовая = Неопределено Тогда
        ВызватьИсключение "Учебная цена 250 не найдена";
    КонецЕсли;
    Сообщить(Числовая.Верх = 3);
    Сообщить(Числовая.Значение = 250);
    Сообщить(ТабДок.НайтиЗначение("250", , ТабДок.Область(3, 3, 4, 3)) = Неопределено);
    Сообщить(ТабДок.НайтиТекст("Несуществующий товар", , ТабДок.Область(3, 1, 4, 1)) = Неопределено);
    ТабДок.Показать("Учебная таблица — без печати и сохранения");
КонецПроцедуры

&НаКлиенте
Функция УчебнаяТаблица()
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Область(, 1, , 1).ШиринаКолонки = 35;
    ТабДок.Область(, 2, , 2).ШиринаКолонки = 10;
    ТабДок.Область(, 3, , 3).ШиринаКолонки = 14;
    ТабДок.Область(, 4, , 4).ШиринаКолонки = 15;
    Заголовок = ТабДок.Область(1, 1, 1, 4);
    Заголовок.Объединить();
    Заголовок.Текст = "Учебная таблица — данные только в памяти";
    Заголовок.Шрифт = Новый Шрифт("Arial", 12, Истина);
    Заголовок.ЦветФона = Новый Цвет(230, 242, 255);
    Заголовок.ВысотаСтроки = 24;
    ТабДок.Область(2, 1).Текст = "Товар";
    ТабДок.Область(2, 2).Текст = "Количество";
    ТабДок.Область(2, 3).Текст = "Цена";
    ТабДок.Область(2, 4).Текст = "Сумма";
    Товары = Новый Массив;
    Товары.Добавить(Новый Структура("Название,Количество,Цена", "Книга", 3, 250));
    Товары.Добавить(Новый Структура("Название,Количество,Цена", "Ручка", 1, 50));
    НомерСтроки = 3;
    Итого = 0;
    Для Каждого Товар Из Товары Цикл
        ТабДок.Область(НомерСтроки, 1).Текст = Товар.Название;
        Значения = Новый Массив;
        Значения.Добавить(Товар.Количество);
        Значения.Добавить(Товар.Цена);
        Значения.Добавить(Товар.Количество * Товар.Цена);
        Для НомерКолонки = 2 По 4 Цикл
            Ячейка = ТабДок.Область(НомерСтроки, НомерКолонки);
            Ячейка.СодержитЗначение = Истина;
            Ячейка.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 2));
            Ячейка.Значение = Значения.Получить(НомерКолонки - 2);
            Ячейка.Формат = "ЧДЦ=2; ЧН=0";
        КонецЦикла;
        Итого = Итого + Товар.Количество * Товар.Цена;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    ПодписьИтога = ТабДок.Область(5, 1, 5, 3);
    ПодписьИтога.Объединить();
    ПодписьИтога.Текст = "Итого";
    Итог = ТабДок.Область(5, 4);
    Итог.СодержитЗначение = Истина;
    Итог.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 2));
    Итог.Значение = Итого;
    Итог.Формат = "ЧДЦ=2; ЧН=0";
    Все = ТабДок.Область(2, 1, 5, 4);
    Все.Шрифт = Новый Шрифт("Arial", 10);
    Граница = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1, Ложь);
    Все.Обвести(Граница, Граница, Граница, Граница);
    Возврат ТабДок;
КонецФункции

Разбор по шагам

  1. Для названия используем НайтиТекст с совпадением всей ячейки и игнорированием регистра.

  2. Где ограничивает поиск собственными строками товаров. Начало не передаётся — ищем с начала области.

  3. Для цены используется НайтиЗначение(250), поскольку ячейка содержит Число.

  4. Строка "250" не равна числу 250. Отображение цены форматируется, но её тип остаётся числовым.

  5. Перед чтением координат проверяем Неопределено; отсутствие результата — не ошибка чтения свойства.

Как проверить результат

  1. Все шесть проверок Истина.

  2. Найдены Книга в строке 3/колонке 1 и её цена в строке 3/колонке 3.

  3. Поиск строки "250" как значения не находит числовую цену.

Ожидаемый результат

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

На что обратить внимание

  1. Поиск отображаемого текста может зависеть от формата и локали; поиск числового значения от этого не зависит.

  2. При нескольких совпадениях нужен отдельный цикл с параметром Начало, а не предположение, что найден единственный товар.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.