Версия для печати темы (https://pro1c.org.ua/index.php?s=e00c19a484755d4f359c62285f92d57f&showtopic=48947)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Динамический список выбора в поле ввода на управляемых формах

Автор: info230a02 18.11.18, 4:20

Платформа: 8.3 (8.3.8.2322)
Конфигурация: самописная, на упрравляемых формах
Задача в целом:
Нужно прочитать csv-файл, вывести его в на форму таблицей (тут все норм: в серверной процедуре считываю построчно файл, формирую ТЗ, создаю программно реквизит формы и элементы формы - ТаблицуФормы передаю в реквизит формы ТЗ ... Все хорошо работает). Потом пользователь должен указать в кокой колонке этой таблицы что находится (напимер: Код - Колонка1, наименование- Колонка 2... и т.д. и т.п.) csv-файлы разные, разной структуры (для этого пользователь и указывает, что в какой колонке находится)
На форме создаю нужные рекфизиты (код, наименование...) размешаю на форме элементы управления - поле ввода. Теперь для этих елементов нужно задать (программно) СписокВыбора (перечислить все колонки из полученной таблицы). Для этого создал реквизит формы с типом СписокЗначений, в него и загоняю перечень всех колонок в той же серверной процедуре, где и формирую саму таблицу:

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

А теперь собственно сам вопрос:
Где (в каком обработчике) или как задать задать элементам (код, наименование...) СписокВыбора?
Если это делаю это присерно так:
    Элементы.Код.СписокВыбора.Очистить();
    ДЛя Каждого ЭлементСписка Из СписокВыбораКолонок Цикл
        Элементы.Код.СписокВыбора.Добавить(ЭлементСписка);
    КонецЦикла;

в той же серверной процедуре, или в клиентской, из которой вызывается серверная, (после вызова серверной) то в режиме предприятия нарываюсь на ошибку:

И даже моя таблица на форму не выводится.
Если для элемента управления выбираю КнопкуВыпадающегоСписка, и либо ставлю либо не ставлю "галку" в Режим выбораИзСписка И Содаю обработчик события НачалоВыбораИзСписка с кодом уже приведенным выше (но повторюсь):
    Элементы.Код.СписокВыбора.Очистить();
    ДЛя Каждого ЭлементСписка Из СписокВыбораКолонок Цикл
        Элементы.Код.СписокВыбора.Добавить(ЭлементСписка);
    КонецЦикла;

то в этот боработчик даже не заходит...
Если же ставлю КнопкуВыбора и отмечаю РежимВыбораИзСписка вобработчике НачалоВыбора пишу тот же код, то список формируется, но значение не выбирается (в пое ввода остается пустота)
Если снять РежимВыбораиИзСписка, то в обработчик заходит, но ни список, ни, само-собой, значение не отображаются
А если выбрать и КнопкуВыбора и КнопкуВыбораИзСписка, то: Сначала по КнопкеВыбора получаем список, а потом по КнопкеВыбораИзСписка выбираем нужное значение (Но это же БРЕД! Это ж какой догадливый пользователь должен быть, чтоб разгадать такой ребус?)

Подскажите, знающие люди, что я делаю не так?

P.S.: Спасибо всем, у кого хватило терпения дочитать до конца. И Еще большее спасибо, тем кто раскажет/покажет, где я заблуждаюсь
И еще: после того как добился спискавыбора и выбранного значения, при нажатии на кнопку, которая запускает процедуру прочтения файла - вылазит та же ошибка (см. выше). А тут уже что не так?
Еще раз всем (заранее) огромное спасибо за помощь

Автор: alx389d 18.11.18, 14:27

info230a02 @ Сегодня, 4:20 * ,
В ошибке пишет, что отсутствует представление для отображения типа ЭлементСпискаЗначений
какие-то строки в список выбора нужно добавлять, очевидно. так типа ЭлементСписка.Значение, в зависимости что там

Автор: info230a02 18.11.18, 16:39

alx389d @ Сегодня, 14:27 * ,
Писал и так:

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


Из справки:

СписокЗначений (ValueList)
Добавить (Add)
Синтаксис:

Добавить(<Значение>, <Представление>, <Пометка>, <Картинка>)
Параметры:

<Значение> (необязательный)

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

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

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

Тип: Картинка.
Визуальное представление значения.
Значение по умолчанию: Пустая картинка.
Возвращаемое значение:

Тип: ЭлементСпискаЗначений.


Ошибка никуда не исчяезает...

Автор: alx389d 18.11.18, 17:10

info230a02 @ Сегодня, 16:39 * ,
вместо вот этого

    Элементы.Код.СписокВыбора.Очистить();
    ДЛя Каждого ЭлементСписка Из СписокВыбораКолонок Цикл
        Элементы.Код.СписокВыбора.Добавить(ЭлементСписка);
    КонецЦикла;


напишите вот это
    Элементы.Код.СписокВыбора.Очистить();
    ДЛя Каждого ЭлементСписка Из СписокВыбораКолонок Цикл
        Элементы.Код.СписокВыбора.Добавить(ЭлементСписка.Значение);
    КонецЦикла;


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

увидите ту же ошибку.


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 1
 

Автор: info230a02 18.11.18, 17:53

alx389d @ Сегодня, 17:10 * ,
Спасибо!!! Заработало!!!
Причем работает и так:

Элементы.Код.СписокВыбора.Добавить(Строка(ЭлементСписка.Значение));

и так:
Элементы.Код.СписокВыбора.Добавить(ЭлементСписка.Значение);

И поля ввода ведут себя адекватно (если не забыть включить РежимВыбораИзСписка).
Еще раз СПАСИБО (как всегда: управляем высокими материями, а на элементарном сыпимся smile.gif)

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua