8.х Табличное поле И списочное

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Smikka, 8 дек 2008.

  1. TopicStarter Overlay
    Smikka
    Offline

    Smikka

    Регистрация:
    8 дек 2008
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Подскажите, бьюсь не первый день. :unsure:
    Есть поле выбора. В нем №Анкеты.
    Есть списочное поле. В него записываются данные: ссылка и название Анкеты.

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

    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ВопросыТесты.Ссылка КАК ВопросСсылка,
    |    ВопросыТесты.Вопрос,
    ...
    Запрос.УстановитьПараметр("Вопрос",счВопросов);
    Запрос.УстановитьПараметр("Наименование",глТест);
    </span>
    
    </FONT></FONT></pre>

    Добавила табличное поле и хотела записать в него тоже самое. Но в списочном поле ДОБАВИТЬ (ССЫЛКА,ИМЯ), а в табл.поле это не проходит. Записала в одну колонку имя, в другую ссылку(№зап). Дальнейшего Выбора из справочника "Вопросы" и вывода на формут не происходит . :smile:

    Справочник "Вопросы" иерхический. Вопросы-тема вопросов-анкеты вопросов-сами вопросы в анкете.
    Пробовала найти родителя Иерархически
    Код:
    Справочники.ВопросыТесты.ВыбратьИерархически(ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные,,,);
    
    
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ничего не понял.. Внятнее напишите.

    И нафига, кстати, второй запрос?
  3. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Я тоже почти ничего не понял. В следующий раз самовыражайтесь яснее:) Попробую угадать. Итак:
    Имеем 3-х уровневый иерархический справочник "Вопросы".
    1-й уровень - Тема
    2-й уровень - Анкета (набор вопросов)
    3-й уровень - Вопросы
    Для простоты будем считать, что уровни 1 и 2 содержат только группы, в группах нет дополнительных реквизитов, элементы справочника содержат реквизит "ТекстВопроса" (строка неопределенной длины).

    Нужно создать... обработку, которая в зависимости от выбора пользователя выводит набор вопросов.
    На форме обработки имеем:
    Поле выбора, назовем его "Тема", данные - "Тема", тип - "Произвольный";(Кстати, поле ввода мне тут более симпатично)
    Поле списка, назовем "Анкеты", данные - "Анкеты", тип - список значений;
    Табличное поле, назовем "ТаблицаВопросов", данные - "ТаблицаВопросов", тип - таблица значений;
    Так же в табличном поле имеем 2 колонки:
    1-я: Имя "Ссылка", данные - "Ссылка", тип - "СправочникСсылка.Вопросы"
    2-я: Имя "ТекстВопроса", данные - "ТекстВопроса", тип - строка неопределенной длины.

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

    Заполним значениями поле выбора. Для этого в событие формы "Перед открытием" вставим следующую процедуру:
    Код:
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    //Заполним список содержимым справочника "Вопросы" 1-го уровня
    //Для этого укажем в качестве родителя пустое значение
    ЭлементыФормы.Тема.СписокВыбора.ЗагрузитьЗначения(ВыполнитьЗапрос(Справочники.Вопросы.ПустаяСсылка()).Выгрузить().ВыгрузитьКолонку("Ссылка"));
    КонецПроцедуры
    
    Далее при выборе значения из поля выбора будем заполнять поле списка. Для этого в событие "ПриИзменении" поля выбора вставим такую процедуру:
    Код:
    Процедура ТемаПриИзменении(Элемент)
    Анкеты.ЗагрузитьЗначения(ВыполнитьЗапрос(Элемент.Значение).Выгрузить().ВыгрузитьКолонку("Ссылка"));
    КонецПроцедуры
    
    Ну и, наконец, при активизации какого-нибудь элемента списка значений, заполним таблицу. Для этого в событие "ПриАктивизацииСтроки" поместим процедуру:
    Код:
    Процедура АнкетыПриАктивизацииСтроки(Элемент)
    ТаблицаВопросов = ВыполнитьЗапрос(Элемент.ТекущаяСтрока.Значение, Истина).Выгрузить();
    КонецПроцедуры
    
    P.S. Вроде, должно все работать.
    P.P.S. Понятно, что код несовершенен:)
    P.P.P.S. Прошу прощения за флуд. Несколько пьян... Хочется творить добро:)
  4. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    не стал разбираться что у тебя взавпросах.. но
    ТаблицаВопросов = ВыполнитьЗапрос(Элемент.ТекущаяСтрока.Значение, Истина).Выгрузить();..... у тебя структура ТаблицаВопросов соответствует по именам колонок.. т.е. прога видит соответствия полей???

Поделиться этой страницей