Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2022, 21:23

Создать на форме элементы типа СписокЗначений и заполнить их

Автор RagnarLodbrok, 02 окт 2017, 21:50

0 Пользователей и 1 гость просматривают эту тему.

RagnarLodbrok

Приветсвую всех форумчан!
Я недавно начал изучать 1с программирование и сейчас делаю следующее задание: необходимо в 1с создать тестирование пользователей(анкетирование). Мне необходимо, чтоб на форму последовательно выводились вопросы и варианты ответов из соответсвующих справочников. Для вывода теста программно создаю реквизиты типа СписокЗначений и добавляю на форму поля ввода. Но не могу понять как заполнить эти поля своими данными. Очень надеюсь на вашу помощь. Фрагмент кода прилагаю. Компилятор жалуется на: {Обработка.ПройтиТест.Форма.Форма.Форма(226)}: Значение не является значением объектного типа (Добавить)
         РеквизитВО.Добавить(Выб.Ссылка,Выб.Ссылка.Наименование);
Я так понимаю, это потому что я в РеквизитВО передаю не объект, а строку. Как это правильно реализовать? Спасибо.

Счетчик = 1;


Пока Счетчик < 10 Цикл
                //Выводим номер вопроса и его формулировку
Группа = Элементы.Добавить("ИмяГруппы" + Счетчик, Тип("ГруппаФормы"), ЭтаФорма);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;

НоваяНадпись = Элементы.Добавить("Надпись1" + Счетчик, Тип("ДекорацияФормы"), Группа);
НоваяНадпись.Заголовок = "Вопрос №" + Счетчик;

НоваяНадпись1 = Элементы.Добавить("Надпись2" + Счетчик, Тип("ДекорацияФормы"), Группа);
НоваяНадпись1.Заголовок = ВопросыОтветы[Счетчик].Вопрос.ТекстВопроса;

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


//Добавляем поле ввода
ОбластьОтветов = Элементы.Добавить("Таблица" + Счетчик, Тип("ТаблицаФормы"), Группа);
ОбластьОтветов.ПутьКДанным = РеквизитВО;
ОбластьОтветов.Отображение = ОтображениеТаблицы.Список;

ОтветЗначение = Элементы.Добавить("Поле" + Счетчик, Тип("ПолеФормы"), ОбластьОтветов);
ОтветЗначение.ПутьКДанным = РеквизитВО + ".Значение";
ОтветЗначение.Вид         = ВидПоляФормы.ПолеНадписи;

ОтветПометка = Элементы.Добавить("Пометка" + Счетчик, Тип("ПолеФормы"), ОбластьОтветов);
ОтветПометка.ПутьКДанным = РеквизитВО + ".Пометка";
ОтветПометка.Вид         = ВидПоляФормы.ПолеФлажка;


//Заполняем реквизит
Стр=ВопросыОтветы.Получить(Счетчик-1);
З=Новый Запрос;
З.Текст="
|ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Ответы
|ГДЕ Владелец=&Вопрос
|УПОРЯДОЧИТЬ ПО КОД";
З.УстановитьПараметр("Вопрос",Стр.Вопрос);
Выб=З.Выполнить().Выбрать();
Пока Выб.Следующий() Цикл
РеквизитВО.Добавить(Выб.Ссылка,Выб.Ссылка.Наименование);
КонецЦикла;
Если НЕ Стр.Ответ.Пустая() Тогда
Зн=РеквизитВО.НайтиПоЗначению(Стр.Ответ);
Зн.Пометка=Истина;
КонецЕсли;

Счетчик = Счетчик + 1;

КонецЦикла;

Golickoff

РеквизитВО -- это переменная, имеющая тип Строка. У таких переменных нет метода "Добавить()". Копайте в сторону ЭтотОбъект.ВариантОтвета.Добавить()
Приведённый код не будет работать т.к. у вас не "ВариантОтвета", а "ВариантОтвета" + Счетчик. А, чуть не забыл. Странно, что ошибка не появилась ещё на этой строке РеквизитВО = "ВариантОтвета" + Счетчик; Тут не должно работать ни сложение, ни конкатенация. Сначала нужно преобразовать число к строке РеквизитВО = "ВариантОтвета" + Строка(Счетчик)
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

alex0402

Цитата: Golickoff от 04 окт 2017, 10:38Сначала нужно преобразовать число к строке

не нужно - выполняется неявное преобразование.
Спасибо за Сказать спасибо

Golickoff

Цитата: alex0402 от 04 окт 2017, 12:21не нужно - выполняется неявное преобразование.
Человек только начал заниматься 1С. Нужно, иначе однажды будет ломать голову что за ошибка преобразования к типу Число.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск