Проверяет, что текст в указанной области помещается в ее размеры, а не отображается символами #.
Синтаксис
ТекстВПределахГраницОбласти(<Область>)Полное описание, параметры и ограничения
Расширение тестируемого поля формы для табличного документа.ТекстВПределахГраницОбласти (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С не запускался.
Подготовка
НОВАЯ пустая отдельная конфигурация УчебнаяТаблицаТестирования85 на8.5.1.1343, совместимость Не использовать, Русский, интерфейс Такси. Нет рабочих справочников, документов, регистров, общих реквизитов, расширений, подписок и заданий. Только свои формы/команда этого урока; модули вручную пустые до вставки приведённого кода.
Конфигуратор → Общие формы → УчебнаяТаблицаТест85: реквизит МеткаСеанса Строка100, одиночное поле ввода МеткаСеанса с тем же путём и ТолькоПросмотр=Да; реквизит УчебныйДокумент типа ТабличныйДокумент, поле УчебнаяТаблица85 вида ПолеТабличногоДокумента с ПутьКДанным=УчебныйДокумент. Вставьте весь модуль fixture ниже; событие ПриСозданииНаСервере назначьте одноимённой процедуре.
Общая команда ОткрытьУчебнуюТаблицу85: модуль ниже полностью открывает ОбщаяФорма.УчебнаяТаблицаТест85. Включите команду в интерфейс своей подсистемы УчебныеТесты85. Не создавайте похожую команду для рабочего отчёта. Будущая ручная подготовка: сохранить конфигурацию, обновить базу F7.
Будущий ручной запуск ТОЛЬКО собственного стенда: первый отдельный тонкий клиент /TESTCLIENT -TPort15384, второй /TESTMANAGER. Собственный localhost-порт15384 заранее свободен и выделен только этому уроку; если выбран другой собственный порт, одинаково измените ручной ключ и конструктор. Здесь клиенты, порт и сетевое соединение не запускались.
В своём /TESTCLIENT откройте ровно одну собственную форму общей командой. Скопируйте реально показанный МеткаСеанса UUID. В таблице обычным щелчком выберите только R2C1, ячейку Книга; не выделяйте диапазон или объединённый заголовок.
Своя внешняя обработка УчебныйМенеджерТаблицы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");
КонецПроцедурыРазбор по шагам
Fixture реально создаёт ТабличныйДокумент: R1C1:R1C2 объединены на сервере и содержат Учебная таблица85; R2C1=Книга, R2C2="3", R3C1=Ручка, R3C2="1". Значения3/1 здесь именно текст ячеек, не числовые значения прикладного отчёта. Данные существуют только в памяти собственной формы.
ТестируемоеПолеФормы получает это специальное расширение по своему Вид=ПолеТабличногоДокумента. Отдельного конструктора расширения нет: метод ПолучитьОбъект находит настоящее поле своей формы, а не создаёт объект из неизвестного ИсходныйОбъект.
Настоящий UUID входит в заголовок; дополнительно читается собственное поле МеткаСеанса. Требуем ровно одну найденную форму, верное внутреннее имя/вид поля и фактическую видимость/доступность. Поиск не выбирает похожий чужой отчёт.
Размеры области данных — максимальные номера строки и колонки с данными, не число выделенных ячеек или пиксели. Fixture плотный и кончается на R3C2, поэтому проверяем3 и2, затем все пять заданных текстов.
ВходитВОбъединеннуюОбласть возвращает Строка с адресом объединения или Неопределено, не Булево. Проверяем положительный случай R1C1 → R1C1:R1C2 и отрицательный R2C1 → Неопределено.
Исходная одиночная R2C1 подтверждается ДО изменения выбора. Затем три действительных адреса устанавливаются последовательно, а каждый возвращённый адрес и текст сравниваются с конкретным ожидаемым значением.
ПолучитьТекстОбласти без аргумента читает текущую область. Для совместимости отдельно сравнивается ПолучитьТекстТекущейОбласти: установленная справка НЕ РЕКОМЕНДУЕТ старый метод с8.3.6 и рекомендует ПолучитьТекстОбласти. Старый вызов показан как миграционный контроль, не как образец нового кода.
ТекстВПределахГраницОбласти применяется и к явной R2C2, и к текущей Книга. Это проверка отсутствия ##### в подготовленных широких ячейках, не измерение общего размера текста или гарантия печати. ТекущийРежимРедактирование подтверждает отсутствие режима изменения.
Содержимое не редактируется. Cleanup восстанавливает R2C1 только если этот исходный адрес был подтверждён; повторно проверяет всю матрицу, возвращает фактический прежний лимит действий и разрывает только своё тестовое соединение. Ошибки этих трёх этапов собираются независимо.
Как проверить результат
Будущий результат: пять исходных текстов и размер3×2 подтверждены, заголовок объединён, Книга не объединена; текущие R2C2/R3C1/R2C1 совпадают с ожидаемыми текстами, не открыто редактирование. Исходная R2C1 и действительный прежний лимит восстановлены.
Будущий отрицательный контроль: до старта выберите R3C1 вместо R2C1. Менеджер должен отвергнуть исходное состояние ДО своего первого УстановитьТекущуюОбласть; не переименовывайте эталон и не подменяйте собственный UUID.
Будущий контроль содержимого: временно в fixture замените текст Ручка на Ластик, обновите только свою учебную базу и откройте новую собственную форму с новым UUID. Полная проверка должна отклонить матрицу. Верните полный исходный fixture после опыта.
runtimeVerifiedScenarios=0. Тестовая форма, BSL, GUI и соединение /TESTMANAGER–/TESTCLIENT здесь не запускались. Не выданы за проверенное поведение ни фактический вывод ячеек, ни границы текста.
Ожидаемый результат
Содержательный UI-тест своего небольшого отчёта: данные, адреса, объединение, режим и восстановление состояния проверяются совместно.
На что обратить внимание
Строковый адрес RNCN[:RMCM] не является числовым индексом массива. У документа номера строк/колонок начинаются с1; у массива найденных форм другая схема, поэтому до выбора сначала проверено количество.
Коды имён и особое расширение тестируемого поля различаются от расширения обычного поля управляемой формы. Не вызывайте методы менеджера тестирования у Элементы.УчебнаяТаблица85 или у самого ТабличныйДокумент.
В новой разработке используйте ПолучитьТекстОбласти. Устаревшее ПолучитьТекстТекущейОбласти оставлено только для конкретной проверки миграции уже существующего теста.
ТекстВПределахГраницОбласти зависит от клиентского отображения, шрифтов и размера ячеек. Условие ожидает только этот подготовленный широкий fixture; если оно не подтвердилось, результат — ошибка теста, а не обещание, что оформление всегда подходит.
Поле в режиме просмотра и Вывод=Запретить; это ограничения UI, не шифрование или серверные права. Этот урок не вызывает редактирование, расшифровку, ЗаписатьСодержимоеВФайл, печать, закрытие чужого окна или изменение базы.
Тестирование тонкого клиента требует собственного локального запуска и TCP-порта, но такого запуска здесь не было. Веб-клиент, рабочий кластер и внешний адрес не используются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.