Задание следующее:
Итоговое задание
1. Сделать внешнюю обработку с формой, на которой будет строковое поле "Базовое значение" и таблица с 2 колонками (одна строковая "Значения" и одна типа Булево "Выбрано"). Все элементы на форме разместить кодом.(ГОТОВО)

2. поле "Базовое значение" подсветить светло голубым цветом и добавить подсказку ввода "Укажите базовый текст".
(Готово)

3. Рядом с полем "Базовое значение" разместить кнопку "Заполнить таблицу" (должна быть доступна только когда в
поле есть текст)
4. Строковую колонку "Значения" в таблице сделать нередактируемой.
5. По кнопке "Заполнить таблицу" выдавать окно ввода числа с вопросом "Сколько строк добавить?" и после указания количества добавить в таблицу заданное число строк и для каждой колонку "Значения" заполнить как текст введенный в поле "Базовое значение" + номер строки (Текст 1, Текст 2 и
т.д.). Если в таблице уже есть строки, не очищать.
6. В таблице только для одной строки можно установить флаг "Выбрано". Добавить проверку и когда пользователь пытается установить флаг, например, в строке 3, а для строки 1 уже установлено значение Истина, тогда выдавать предупреждение "В строке 1 уже установлено значение "Выбрано". Оно будет очищено. Продолжить?", варианты ответа да/нет. Если да, то очищаем значение в строке 1 и устанавливаем в строке 3. Если нет, то наоборот.
7. под таблице добавить надпись "Основной текст в строке ..." (номер строки для которой установлен флаг Выбрано). Если таких строк нет, надпись не выводить.
Все элементы формы создать программно. Обработка должна работать в режиме модальности не использовать или использовать с предупреждением.

Соответственно у меня возникла трудность с реализацией третьего пункта,а именно применение условия о доступности кнопки Заполнения,в случае,когда в поле ввода есть текст. Думал применять методы ПроверятьЗаполнение(); Но такого нет для Поля Ввода,как можно проверить значение внутри поля ввода,и обыграть условие верно? (Код формы будет в комментариях под тредом).

И ещё вопрос какие есть варианты реализации передачи значения из поля ввода в таблицу? Я себе представляю это в виде передачи значения из поля ввода в переменную,а затем использование её как параметра для заполнения таблицы(именно логичекси,я представляю,как это должно быть,но в виде кода изобразить не могу)

Буду рад любой помощи и подсказкам!
---
Вот это не нужно.

```1c
    ПолеВвода=" " ;
    Если ЗначениеЗаполнено(ПолеВвода) Тогда
    КнопкаЗаполнения.Доступность = Истина;
    Иначе
    КнопкаЗаполнения.Доступность = Ложь;
    КонецЕсли;
```

Можно использовать событие поля ИзменениеТекстаРедактирования

```1c
    ПолеВвода.УстановитьДействие("ИзменениеТекстаРедактирования", "ПолеВводаИзменениеТекстаРедактирования");
```

И обработчик события:

```1c
    &НаКлиенте
    Процедура ПолеВводаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)

    Элементы.ЗаполнениеТаблицы.Доступность = ЗначениеЗаполнено(Текст);

    КонецПроцедуры
```

Если же использовать при изменении, то в параметрах передается элемент поля ввода, а не текст
---
Данные хранятся в реквизите БазовоеЗначение

```1c
    &НаКлиенте
    Процедура ЗаполнитьТаблицу(Команда)

    Оп = Новый ОписаниеОповещения("ОбработатьВводЗначения", ЭтотОбъект);

    ПоказатьВводЗначения(Оп, 1, "Сколько строк добавить?");

    КонецПроцедуры

    &НаКлиенте
    Процедура ОбработатьВводЗначения(РезультатВвода, ДополнительныеПараметры) Экспорт

    Если РезультатВвода = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Для Инд = 1 По РезультатВвода Цикл

    НоваяСтрока = ЭтаФорма.ТаблицаЗнач.Добавить();
    НоваяСтрока.Значение = ЭтаФорма.БазовоеЗначение + Формат(Инд, "ЧГ=0");

    КонецЦикла;

    КонецПроцедуры
```
---
```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    //Создание реквизитов
    ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
    РеквизитПоляВвода = Новый РеквизитФормы("БазовоеЗначение",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
    ДобавляемыеРеквизиты.Добавить(РеквизитПоляВвода);
    ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применение реквизитов для формы
    //Получение поля ввода БазовогоЗначения и изменение его свойств.
    ПолеВвода = ЭтаФорма.Элементы.Добавить("БазовоеЗначение", Тип("ПолеФормы"));
    ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
    ПолеВвода.ПутьКДанным = "БазовоеЗначение";
    ЦветЗначения= Новый Цвет(148, 248, 255);
    ПолеВвода.ЦветФона=ЦветЗначения;
    ПолеВвода.ПодсказкаВвода="Укажите базовый текст";
    ПолеВвода=" " ;
    //Создание кнопки
    КомандаЗаполнения = ЭтаФорма.Команды.Добавить("ЗаполнитьТаблицу");
    КомандаЗаполнения.Заголовок = "Заполнить таблицу";
    КомандаЗаполнения.Действие = "ЗаполнитьТаблицу";
    КнопкаЗаполнения = ЭтаФорма.Элементы.Добавить("ЗаполнениеТаблицы", Тип("КнопкаФормы"), );
    КнопкаЗаполнения.Заголовок = "Заполнить таблицу";
    КнопкаЗаполнения.ИмяКоманды = "ЗаполнитьТаблицу";
    //КнопкаЗаполнения.Доступность=Ложь;
    Если ЗначениеЗаполнено(ПолеВвода) Тогда
    КнопкаЗаполнения.Доступность = Истина;
    Иначе
    КнопкаЗаполнения.Доступность = Ложь;
    КонецЕсли;

    //ДОБАВЛЕНИЕ ТАБЛИЦЫ
    // Описание таблицы значений как реквизита
    МассивТипа = Новый Массив;
    МассивТипа.Добавить(Тип("ТаблицаЗначений"));

    // Добавление ТаблицыЗначений в массив реквизитов
    ОписаниеТипа = Новый ОписаниеТипов(МассивТипа);
    МассивРеквизитовФормы = Новый Массив;
    МассивРеквизитовФормы.Добавить(Новый РеквизитФормы("ТаблицаЗнач", ОписаниеТипа, ", "ТЗЗнач"));

    // Создание ТаблицыЗначений с описанием колонок
    КвалификаторыСтроки = Новый КвалификаторыСтроки(150);
    ОписаниеЗначения = Новый ОписаниеТипов("Строка", ,КвалификаторыСтроки);

    ОписаниеВыбрано = Новый ОписаниеТипов("Булево");

    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Значение", ОписаниеЗначения);
    ТЗ.Колонки.Добавить("Выбрано", ОписаниеВыбрано);
    // ТЗ.Колонки.Добавить - можно и в цикле

    // Добавление в массив реквизитов колонок ТаблицыЗначений
    Для Каждого Колонка Из ТЗ.Колонки Цикл
    МассивРеквизитовФормы.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаЗнач"));
    КонецЦикла;

    // Удаление - если таблица существует
    ЭлементТаблица = Элементы.Найти("ТаблицаЗнач");
    Если ЭлементТаблица <> Неопределено Тогда
    Элементы.Удалить(ЭлементТаблица);
    Иначе
    ИзменитьРеквизиты(МассивРеквизитовФормы);
    КонецЕсли;

    // Добавление ТаблицыЗначений на форму
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗЗнач", Тип("ТаблицаФормы"));
    ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаЗнач";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
    ТаблицаПолейВыбора.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; // Отключение командной панели

    Для Каждого Колонка Из ТЗ.Колонки Цикл

    НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "ТаблицаЗнач." + Колонка.Имя;
    НовыйЭлемент.Ширина = 10;

    КонецЦикла;

    КонецПроцедуры
```
---
Предполагаю,что можно воспользоваться дополнительной процедурой ПриИзменении,где в параметрах передать значение из ПоляВвода,и уже тут обыграть условие. В противном случае,при применении метода ПроверитьЗначение(); выдает ошибку. ЗначениеЗаполненно(); тоже не подходит,так как выдает ошибку о мутабельных переменных.
---
Очень важный прикрепленный файл!
---
Очень важный комментарий!
---
Само поле ввода - это просто элемент управления, в нем нет никакого значения. Значение у вас - это реквизит формы БазовоеЗначение, его и проверяйте на заполненность при изменении поля ввода.
Для этого программно привяжите действие для поля ввода "ПриИзменении". В этом событии устанавливайте свойство доступность кнопки в зависимости от заполненности реквизита БазовоеЗначение.
---
Вот это не нужно.

```1c
    ПолеВвода=" " ;
    Если ЗначениеЗаполнено(ПолеВвода) Тогда
    КнопкаЗаполнения.Доступность = Истина;
    Иначе
    КнопкаЗаполнения.Доступность = Ложь;
    КонецЕсли;
```

Можно использовать событие поля ИзменениеТекстаРедактирования

```1c
    ПолеВвода.УстановитьДействие("ИзменениеТекстаРедактирования", "ПолеВводаИзменениеТекстаРедактирования");
```

И обработчик события:

```1c
    &НаКлиенте
    Процедура ПолеВводаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)

    Элементы.ЗаполнениеТаблицы.Доступность = ЗначениеЗаполнено(Текст);

    КонецПроцедуры
```

Если же использовать при изменении, то в параметрах передается элемент поля ввода, а не текст
---
а по поводу передачи параметра из ПоляВвода в таблицу значений? Это лучше совершать через цикл?
---
Данные хранятся в реквизите БазовоеЗначение

```1c
    &НаКлиенте
    Процедура ЗаполнитьТаблицу(Команда)

    Оп = Новый ОписаниеОповещения("ОбработатьВводЗначения", ЭтотОбъект);

    ПоказатьВводЗначения(Оп, 1, "Сколько строк добавить?");

    КонецПроцедуры

    &НаКлиенте
    Процедура ОбработатьВводЗначения(РезультатВвода, ДополнительныеПараметры) Экспорт

    Если РезультатВвода = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Для Инд = 1 По РезультатВвода Цикл

    НоваяСтрока = ЭтаФорма.ТаблицаЗнач.Добавить();
    НоваяСтрока.Значение = ЭтаФорма.БазовоеЗначение + Формат(Инд, "ЧГ=0");

    КонецЦикла;

    КонецПроцедуры
```
---
Оп = Новый ОписаниеОповещения
а где можно об этом прочитать в синтаксис-помощнике?
---
нашел уже,спасибо
---
Дружище,слушай,еще момент,я не могу понять как мне описывать свойство для колонки Значения,чтобы она была нередактируемой. Я полагаю,что за это отвечает свойство "ТолькоПросмотр",но когда,Я пытаюсь его дать данной колонке,мне выдаёт ошибку о том,что ПолеОбъектаНеОбнаружено. Почему методы,которые я пытаюсь применять к элементам формы,воспринимаются за объекты,можешь примерно объяснить,что я делаю не так,ибо это уже не первый случай.
---
Я нашел нужное свойство,пока вроде все получается,но у меня теперь трудность следующего характера,я сделал так,чтобы булево представлялось в виде флага,как будет грамотнее описать условие из пункта 6?

Вот пока код,который получился:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    //Создание реквизитов
    ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
    РеквизитПоляВвода = Новый РеквизитФормы("БазовоеЗначение",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
    ДобавляемыеРеквизиты.Добавить(РеквизитПоляВвода);
    ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применение реквизитов для формы
    //Получение поля ввода БазовогоЗначения и изменение его свойств.
    ПолеВвода = ЭтаФорма.Элементы.Добавить("БазовоеЗначение", Тип("ПолеФормы"));
    ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
    ПолеВвода.ПутьКДанным = "БазовоеЗначение";
    ЦветЗначения = Новый Цвет(148, 248, 255);
    ПолеВвода.ЦветФона=ЦветЗначения;
    ПолеВвода.ПодсказкаВвода="Укажите базовый текст";
    //Создание кнопки
    КомандаЗаполнения = ЭтаФорма.Команды.Добавить("ЗаполнитьТаблицу");
    КомандаЗаполнения.Заголовок = "Заполнить таблицу";
    КомандаЗаполнения.Действие = "ЗаполнитьТаблицу";
    КнопкаЗаполнения = ЭтаФорма.Элементы.Добавить("ЗаполнениеТаблицы", Тип("КнопкаФормы"), );
    КнопкаЗаполнения.Заголовок = "Заполнить таблицу";
    КнопкаЗаполнения.ИмяКоманды = "ЗаполнитьТаблицу";
    КнопкаЗаполнения.Доступность = Ложь;
    //Добавление фукнции доступности кнопки
    ПолеВвода.УстановитьДействие("ИзменениеТекстаРедактирования", "ПолеВводаИзменениеТекстаРедактирования");

    //ДОБАВЛЕНИЕ ТАБЛИЦЫ
    // Описание таблицы значений как реквизита
    МассивТипа = Новый Массив;
    МассивТипа.Добавить(Тип("ТаблицаЗначений"));

    // Добавление ТаблицыЗначений в массив реквизитов
    ОписаниеТипа = Новый ОписаниеТипов(МассивТипа);
    МассивРеквизитовФормы = Новый Массив;
    МассивРеквизитовФормы.Добавить(Новый РеквизитФормы("ТаблицаЗнач", ОписаниеТипа, ", "ТЗЗнач"));

    // Создание ТаблицыЗначений с описанием колонок
    КвалификаторыСтроки = Новый КвалификаторыСтроки(150);
    ОписаниеЗначения = Новый ОписаниеТипов("Строка", ,Новый КвалификаторыСтроки(150));
    ОписаниеВыбрано = Новый ОписаниеТипов("Булево");

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

    // Добавление в массив реквизитов колонок ТаблицыЗначений
    Для Каждого Колонка Из ТЗ.Колонки Цикл
    МассивРеквизитовФормы.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаЗнач"));
    КонецЦикла;

    // Удаление - если таблица существует
    ЭлементТаблица = Элементы.Найти("ТаблицаЗнач");
    Если ЭлементТаблица <> Неопределено Тогда
    Элементы.Удалить(ЭлементТаблица);
    Иначе
    ИзменитьРеквизиты(МассивРеквизитовФормы);
    КонецЕсли;

    // Добавление ТаблицыЗначений на форму
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗЗнач", Тип("ТаблицаФормы"));
    ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаЗнач";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
    ТаблицаПолейВыбора.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; // Отключение командной панели
    Для Каждого Колонка Из ТЗ.Колонки Цикл

    НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора );
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "ТаблицаЗнач." + Колонка.Имя;
    НовыйЭлемент.Ширина = 10;
    Если НовыйЭлемент.Имя = "Значение" Тогда
    НовыйЭлемент.ТолькоПросмотр = Истина;
    Иначе НовыйЭлемент.ТолькоПросмотр = Ложь;
    КонецЕсли;
    Если НовыйЭлемент.Имя = "Выбрано" Тогда
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
    КонецЕсли;
    ////Если НовыйЭлемент.Вид.ПолеФлажка = Истина Тогда
    //КонецЕсли;

    КонецЦикла;
    КонецПроцедуры

    //Обработчик события доступности кнопки
    &НаКлиенте
    Процедура ПолеВводаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)

    Элементы.ЗаполнениеТаблицы.Доступность = ЗначениеЗаполнено(Текст);

    КонецПроцедуры
    //Обработчик нажатия на кнопку
    &НаКлиенте
    Процедура ЗаполнитьТаблицу(Команда)

    Оп = Новый ОписаниеОповещения("ОбработатьВводЗначения", ЭтотОбъект);

    ПоказатьВводЗначения(Оп, 1, "Сколько строк добавить?");

    КонецПроцедуры

    &НаКлиенте
    Процедура ОбработатьВводЗначения(РезультатВвода, ДополнительныеПараметры) Экспорт

    Если РезультатВвода = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Для Инд = 1 По РезультатВвода Цикл

    НоваяСтрока = ЭтаФорма.ТаблицаЗнач.Добавить();
    НоваяСтрока.Значение = ЭтаФорма.БазовоеЗначение + Формат(Инд, "ЧГ=0");

    КонецЦикла;
    КонецПроцедуры
```
---
Хорошее задание – затрагивает множество вопросов работы с пользовательским интерфейсом.