Расширение тестируемого поля формы для табличного документа.ТекстВПределахГраницОбласти

Методы · TextIsWithinAreaBounds

Проверяет, что текст в указанной области помещается в ее размеры, а не отображается символами #.

Синтаксис

ТекстВПределахГраницОбласти(<Область>)
Полное описание, параметры и ограничения

Расширение тестируемого поля формы для табличного документа.ТекстВПределахГраницОбласти (Tested form field extension for a spreadsheet document.TextIsWithinAreaBounds)

Расширение тестируемого поля формы для табличного документа (Tested form field extension for a spreadsheet document)

ТекстВПределахГраницОбласти (TextIsWithinAreaBounds)

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

Синтаксис:
ТекстВПределахГраницОбласти(<Область>)
Параметры:

<Область> (необязательный)
Тип: Строка.
Определяет область, в которой требуется проверить размещение текста.
Если не указан, проверяется текущая ячейка.
Возвращаемое значение:
Тип: Булево.
Истина – текст помещается в границах области.
Ложь – текст не помещается в границах области, вместо текста табличный документ отображает символы "#####".
Описание:

Проверяет, что текст в указанной области помещается в ее размеры, а не отображается символами #.

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

Тонкий клиент, толстый клиент.

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

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

Описание изменено в версии 8.3.27.

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

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

Проверить свой табличный документ через клиент тестирования: адреса, тексты и объединение

Собственная таблица3×2 строится полным модулем формы. Менеджер тестирования находит именно её по настоящему UUID, проверяет все данные и объединённый заголовок, меняет только выбор ячейки и восстанавливает исходное состояние.

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

Полный отдельный модуль формы менеджера тестирования собственного тонкого клиента и два полных supporting-модуля для создания/открытия своей таблицы. В1С не запускался.

Подготовка

  1. НОВАЯ пустая отдельная конфигурация УчебнаяТаблицаТестирования85 на8.5.1.1343, совместимость Не использовать, Русский, интерфейс Такси. Нет рабочих справочников, документов, регистров, общих реквизитов, расширений, подписок и заданий. Только свои формы/команда этого урока; модули вручную пустые до вставки приведённого кода.

  2. Конфигуратор → Общие формы → УчебнаяТаблицаТест85: реквизит МеткаСеанса Строка100, одиночное поле ввода МеткаСеанса с тем же путём и ТолькоПросмотр=Да; реквизит УчебныйДокумент типа ТабличныйДокумент, поле УчебнаяТаблица85 вида ПолеТабличногоДокумента с ПутьКДанным=УчебныйДокумент. Вставьте весь модуль fixture ниже; событие ПриСозданииНаСервере назначьте одноимённой процедуре.

  3. Общая команда ОткрытьУчебнуюТаблицу85: модуль ниже полностью открывает ОбщаяФорма.УчебнаяТаблицаТест85. Включите команду в интерфейс своей подсистемы УчебныеТесты85. Не создавайте похожую команду для рабочего отчёта. Будущая ручная подготовка: сохранить конфигурацию, обновить базу F7.

  4. Будущий ручной запуск ТОЛЬКО собственного стенда: первый отдельный тонкий клиент /TESTCLIENT -TPort15384, второй /TESTMANAGER. Собственный localhost-порт15384 заранее свободен и выделен только этому уроку; если выбран другой собственный порт, одинаково измените ручной ключ и конструктор. Здесь клиенты, порт и сетевое соединение не запускались.

  5. В своём /TESTCLIENT откройте ровно одну собственную форму общей командой. Скопируйте реально показанный МеткаСеанса UUID. В таблице обычным щелчком выберите только R2C1, ячейку Книга; не выделяйте диапазон или объединённый заголовок.

  6. Своя внешняя обработка УчебныйМенеджерТаблицы85 → новая управляемая Форма в /TESTMANAGER: реквизиты Согласие Булево, МеткаСеанса Строка100, Итог Строка1000. Видимые поля с этими путями, Итог ТолькоПросмотр=Да. Команда/кнопка ВыполнитьСвойТест, действие ВыполнитьСвойТест; ПриОткрытии назначьте одноимённой процедуре. Вставьте весь основной модуль, вставьте настоящую скопированную метку и подтвердите Согласие только своему тесту.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Согласие = Ложь;
    МеткаСеанса = "";
    Итог = "Сначала подготовьте свою таблицу и выберите только R2C1";
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвойСтенд()
    Если Не Согласие Тогда
        ВызватьИсключение "Разрешите только тест своей таблицы без редактирования, файлов и печати";
    КонецЕсли;
    UUIDМетки = Новый УникальныйИдентификатор(МеткаСеанса);
    Если Строка(UUIDМетки) <> МеткаСеанса Тогда
        ВызватьИсключение "Скопируйте фактическую метку своего открытого клиента тестирования";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция НайтиСвоюТаблицу(Приложение)
    Заголовок = "Учебная таблица85 " + МеткаСеанса;
    Формы = Приложение.НайтиОбъекты(Тип("ТестируемаяФорма"), Заголовок, , 10);
    Если ТипЗнч(Формы) <> Тип("ФиксированныйМассив") Или Формы.Количество() <> 1 Тогда
        ВызватьИсключение "Должна быть одна фактически открытая собственная форма";
    КонецЕсли;
    Форма = Приложение.ПолучитьОбъект(Тип("ТестируемаяФорма"), Заголовок, , 10);
    Метка = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , "МеткаСеанса", 10);
    Если Метка.ПолучитьПредставлениеДанных() <> МеткаСеанса Тогда
        ВызватьИсключение "Не подтверждена настоящая метка собственной таблицы";
    КонецЕсли;
    Поле = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , "УчебнаяТаблица85", 10);
    Если ТипЗнч(Поле) <> Тип("ТестируемоеПолеФормы") Или Поле.Имя <> "УчебнаяТаблица85"
        Или Поле.Вид <> ВидПоляФормы.ПолеТабличногоДокумента Тогда
        ВызватьИсключение "Нужно своё поле именно вида ПолеТабличногоДокумента";
    КонецЕсли;
    Если Не Поле.ТекущаяВидимость() Или Не Поле.ТекущаяДоступность() Тогда
        ВызватьИсключение "Собственное поле должно быть видимым и доступным для выбора ячейки";
    КонецЕсли;
    Возврат Поле;
КонецФункции

&НаКлиенте
Процедура ПроверитьСвоюМатрицу(Поле)
    Если Поле.ПолучитьРазмерОбластиДанныхДокументаПоВертикали() <> 3
        Или Поле.ПолучитьРазмерОбластиДанныхДокументаПоГоризонтали() <> 2 Тогда
        ВызватьИсключение "Свой документ должен иметь последние данные в строке3 и колонке2";
    КонецЕсли;
    Если Поле.ПолучитьТекстОбласти("R1C1") <> "Учебная таблица85"
        Или Поле.ПолучитьТекстОбласти("R2C1") <> "Книга"
        Или Поле.ПолучитьТекстОбласти("R2C2") <> "3"
        Или Поле.ПолучитьТекстОбласти("R3C1") <> "Ручка"
        Или Поле.ПолучитьТекстОбласти("R3C2") <> "1" Тогда
        ВызватьИсключение "Все пять текстов собственной таблицы должны совпасть полностью";
    КонецЕсли;
    Объединение = Поле.ВходитВОбъединеннуюОбласть("R1C1");
    Если ТипЗнч(Объединение) <> Тип("Строка") Или Объединение <> "R1C1:R1C2" Тогда
        ВызватьИсключение "Заголовок должен входить именно в собственную объединённую область";
    КонецЕсли;
    Если Поле.ВходитВОбъединеннуюОбласть("R2C1") <> Неопределено Тогда
        ВызватьИсключение "Ячейка Книга не должна быть объединена";
    КонецЕсли;
    Если Поле.ТекущийРежимРедактирование() Тогда
        ВызватьИсключение "Не начинайте редактировать собственную таблицу этого урока";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьСвойТест(Команда)
    ПроверитьСвойСтенд();
    Приложение = Новый ТестируемоеПриложение("127.0.0.1", 15384);
    Поле = Неопределено;
    ИсходныйЛимит = Неопределено;
    СвояОбластьПодтверждена = Ложь;
    Ошибка = "";
    Итог = "Проверка ещё не завершена";
    Попытка
        Приложение.УстановитьСоединение();
        ИсходныйЛимит = Приложение.ПолучитьМаксимальноеВремяВыполненияДействия();
        Приложение.УстановитьМаксимальноеВремяВыполненияДействия(10);
        Поле = НайтиСвоюТаблицу(Приложение);
        ПроверитьСвоюМатрицу(Поле);
        Если Поле.ПолучитьАдресТекущейОбласти() <> "R2C1" Тогда
            ВызватьИсключение "До старта вручную выберите одну собственную ячейку Книга, R2C1";
        КонецЕсли;
        СвояОбластьПодтверждена = Истина;
        Ожидания = Новый Массив;
        Ожидания.Добавить(Новый Структура("Адрес,Текст", "R2C2", "3"));
        Ожидания.Добавить(Новый Структура("Адрес,Текст", "R3C1", "Ручка"));
        Ожидания.Добавить(Новый Структура("Адрес,Текст", "R2C1", "Книга"));
        Для Каждого Ожидание Из Ожидания Цикл
            Поле.УстановитьТекущуюОбласть(Ожидание.Адрес);
            Если Поле.ПолучитьАдресТекущейОбласти() <> Ожидание.Адрес Тогда
                ВызватьИсключение "Не выбран собственный адрес " + Ожидание.Адрес;
            КонецЕсли;
            Если Поле.ПолучитьТекстОбласти() <> Ожидание.Текст Тогда
                ВызватьИсключение "Новый API чтения текущей ячейки не вернул собственный текст";
            КонецЕсли;
            Если Поле.ПолучитьТекстТекущейОбласти() <> Ожидание.Текст Тогда
                ВызватьИсключение "Старый API не совпал с новым на своей одиночной ячейке";
            КонецЕсли;
        КонецЦикла;
        Если Не Поле.ТекстВПределахГраницОбласти("R2C2") Тогда
            ВызватьИсключение "Учебная строка3 не должна отображаться как #####";
        КонецЕсли;
        Если Не Поле.ТекстВПределахГраницОбласти() Тогда
            ВызватьИсключение "Текущая собственная Книга должна помещаться в подготовленную ширину";
        КонецЕсли;
        ПроверитьСвоюМатрицу(Поле);
    Исключение
        Ошибка = ОписаниеОшибки();
    КонецПопытки;
    Если СвояОбластьПодтверждена Тогда
        Попытка
            Поле.УстановитьТекущуюОбласть("R2C1");
            Если Поле.ПолучитьАдресТекущейОбласти() <> "R2C1" Тогда
                ВызватьИсключение "Не восстановлена подтверждённая исходная ячейка";
            КонецЕсли;
            ПроверитьСвоюМатрицу(Поле);
        Исключение
            Ошибка = Ошибка + " Восстановление собственной области: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Если ТипЗнч(ИсходныйЛимит) = Тип("Число") Тогда
        Попытка
            Приложение.УстановитьМаксимальноеВремяВыполненияДействия(ИсходныйЛимит);
        Исключение
            Ошибка = Ошибка + " Восстановление фактического лимита: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Попытка
        Приложение.РазорватьСоединение();
    Исключение
        Ошибка = Ошибка + " Разрыв собственного соединения: " + ОписаниеОшибки();
    КонецПопытки;
    Если Ошибка <> "" Тогда
        Итог = "Свой тест не завершён: " + Ошибка;
        ВызватьИсключение Итог;
    КонецЕсли;
    Итог = "Собственная таблица3×2, объединённый заголовок, три адреса и тексты проверены; исходная ячейка и фактический лимит восстановлены. Файл и печать не вызывались";
КонецПроцедуры
УчебнаяТаблицаТест85

Конфигуратор → Общие формы → УчебнаяТаблицаТест85 → Модуль

Полный самостоятельный модуль управляемой общей формы: создание собственной таблицы на сервере; не выполнялся.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПроверитьСвойПустойСтенд();
    МеткаСеанса = Строка(Новый УникальныйИдентификатор);
    ЭтотОбъект.АвтоЗаголовок = Ложь;
    ЭтотОбъект.Заголовок = "Учебная таблица85 " + МеткаСеанса;
    Документ = Новый ТабличныйДокумент;
    Заголовок = Документ.Область(1, 1, 1, 2);
    Заголовок.Объединить();
    Заголовок.Текст = "Учебная таблица85";
    Документ.Область(2, 1).Текст = "Книга";
    Документ.Область(2, 2).Текст = "3";
    Документ.Область(3, 1).Текст = "Ручка";
    Документ.Область(3, 2).Текст = "1";
    Документ.Область(1, 1, 3, 2).ШиринаКолонки = 30;
    Документ.ТолькоПросмотр = Истина;
    УчебныйДокумент = Документ;
    Элементы.УчебнаяТаблица85.Редактирование = Ложь;
    Элементы.УчебнаяТаблица85.Вывод = ИспользованиеВывода.Запретить;
    Элементы.УчебнаяТаблица85.РазрешитьНачалоПеретаскивания = Ложь;
    Элементы.УчебнаяТаблица85.РазрешитьПеретаскивание = Ложь;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры
ОткрытьУчебнуюТаблицу85

Конфигуратор → Общие команды → ОткрытьУчебнуюТаблицу85 → Модуль

Полный модуль собственной общей команды с ОбработкаКоманды; не выполнялся.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебнаяТаблицаТест85");
КонецПроцедуры

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

  1. Fixture реально создаёт ТабличныйДокумент: R1C1:R1C2 объединены на сервере и содержат Учебная таблица85; R2C1=Книга, R2C2="3", R3C1=Ручка, R3C2="1". Значения3/1 здесь именно текст ячеек, не числовые значения прикладного отчёта. Данные существуют только в памяти собственной формы.

  2. ТестируемоеПолеФормы получает это специальное расширение по своему Вид=ПолеТабличногоДокумента. Отдельного конструктора расширения нет: метод ПолучитьОбъект находит настоящее поле своей формы, а не создаёт объект из неизвестного ИсходныйОбъект.

  3. Настоящий UUID входит в заголовок; дополнительно читается собственное поле МеткаСеанса. Требуем ровно одну найденную форму, верное внутреннее имя/вид поля и фактическую видимость/доступность. Поиск не выбирает похожий чужой отчёт.

  4. Размеры области данных — максимальные номера строки и колонки с данными, не число выделенных ячеек или пиксели. Fixture плотный и кончается на R3C2, поэтому проверяем3 и2, затем все пять заданных текстов.

  5. ВходитВОбъединеннуюОбласть возвращает Строка с адресом объединения или Неопределено, не Булево. Проверяем положительный случай R1C1 → R1C1:R1C2 и отрицательный R2C1 → Неопределено.

  6. Исходная одиночная R2C1 подтверждается ДО изменения выбора. Затем три действительных адреса устанавливаются последовательно, а каждый возвращённый адрес и текст сравниваются с конкретным ожидаемым значением.

  7. ПолучитьТекстОбласти без аргумента читает текущую область. Для совместимости отдельно сравнивается ПолучитьТекстТекущейОбласти: установленная справка НЕ РЕКОМЕНДУЕТ старый метод с8.3.6 и рекомендует ПолучитьТекстОбласти. Старый вызов показан как миграционный контроль, не как образец нового кода.

  8. ТекстВПределахГраницОбласти применяется и к явной R2C2, и к текущей Книга. Это проверка отсутствия ##### в подготовленных широких ячейках, не измерение общего размера текста или гарантия печати. ТекущийРежимРедактирование подтверждает отсутствие режима изменения.

  9. Содержимое не редактируется. Cleanup восстанавливает R2C1 только если этот исходный адрес был подтверждён; повторно проверяет всю матрицу, возвращает фактический прежний лимит действий и разрывает только своё тестовое соединение. Ошибки этих трёх этапов собираются независимо.

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

  1. Будущий результат: пять исходных текстов и размер3×2 подтверждены, заголовок объединён, Книга не объединена; текущие R2C2/R3C1/R2C1 совпадают с ожидаемыми текстами, не открыто редактирование. Исходная R2C1 и действительный прежний лимит восстановлены.

  2. Будущий отрицательный контроль: до старта выберите R3C1 вместо R2C1. Менеджер должен отвергнуть исходное состояние ДО своего первого УстановитьТекущуюОбласть; не переименовывайте эталон и не подменяйте собственный UUID.

  3. Будущий контроль содержимого: временно в fixture замените текст Ручка на Ластик, обновите только свою учебную базу и откройте новую собственную форму с новым UUID. Полная проверка должна отклонить матрицу. Верните полный исходный fixture после опыта.

  4. runtimeVerifiedScenarios=0. Тестовая форма, BSL, GUI и соединение /TESTMANAGER–/TESTCLIENT здесь не запускались. Не выданы за проверенное поведение ни фактический вывод ячеек, ни границы текста.

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

Содержательный UI-тест своего небольшого отчёта: данные, адреса, объединение, режим и восстановление состояния проверяются совместно.

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

  1. Строковый адрес RNCN[:RMCM] не является числовым индексом массива. У документа номера строк/колонок начинаются с1; у массива найденных форм другая схема, поэтому до выбора сначала проверено количество.

  2. Коды имён и особое расширение тестируемого поля различаются от расширения обычного поля управляемой формы. Не вызывайте методы менеджера тестирования у Элементы.УчебнаяТаблица85 или у самого ТабличныйДокумент.

  3. В новой разработке используйте ПолучитьТекстОбласти. Устаревшее ПолучитьТекстТекущейОбласти оставлено только для конкретной проверки миграции уже существующего теста.

  4. ТекстВПределахГраницОбласти зависит от клиентского отображения, шрифтов и размера ячеек. Условие ожидает только этот подготовленный широкий fixture; если оно не подтвердилось, результат — ошибка теста, а не обещание, что оформление всегда подходит.

  5. Поле в режиме просмотра и Вывод=Запретить; это ограничения UI, не шифрование или серверные права. Этот урок не вызывает редактирование, расшифровку, ЗаписатьСодержимоеВФайл, печать, закрытие чужого окна или изменение базы.

  6. Тестирование тонкого клиента требует собственного локального запуска и TCP-порта, но такого запуска здесь не было. Веб-клиент, рабочий кластер и внешний адрес не используются.

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

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

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

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

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