8.х Создать список значений

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

  1. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Добрый день.
    Мне необходимо программно создать на форме (управляемой) элемент связанный с реквизитом типа "список значений". В списке значений значения могут принимать только определенный тип.
    Как задать тип значений в конфигураторе знаю.
    Снимок.JPG
    А как сделать это программно? Вот мой кусок кода, но при попытке добавить в список значений новое значение, просит указать тип добавляемого значения. Хочу, чтоб тип был явно зафиксирован.
    Код:
    Массив = Новый Массив;
    Массив.Добавить(Тип("СписокЗначений"));
    ТипЗначенияСвойства = Новый ОписаниеТипов(Массив);
    Реквизит = Новый РеквизитФормы(СтрРеквизит.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , СтрРеквизит.Наименование, Истина);
    Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты)
    Элемент = Форма.Элементы.Добавить(СтрРеквизит.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель);
  2. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Ну а так не сработает?
    Код:
    ИмяВашегоРеквизита.ТипЗначения = Новый ОписаниеТипов("СправочникОбъект.ЗначенияСвойствОбъектов");
    Только это делать уже после того как он на форме создан.
    Svb нравится это.
  3. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Он это кто? :) Реквизит формы или элемент формы?
    Вот так выдает ошибку отображения типов при открытии формы.
    Код:
    Массив = Новый Массив;
    Массив.Добавить(Тип("СписокЗначений"));
    ТипЗначенияСвойства = Новый ОписаниеТипов(Массив);
    Реквизит = Новый РеквизитФормы(СтрРеквизит.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , СтрРеквизит.Наименование, Истина);
    Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты)
    Элемент = Форма.Элементы.Добавить(СтрРеквизит.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель);
    Форма.ДополнительныйРеквизитЗначение3.ТипЗначения = ТипЗначенияСвойства;
  4. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Так в последней строке присваивается описание типов "массив", а нужно "СправочникОбъект....."

    P.S. "он" - это реквизит )))))))
  5. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Это я уже в процессе экспериментов пробовал...
    С Вашим варианто та же ошибка.
    --- Объединение сообщений, 31 июл 2014 ---
    Так тоже ругается
    Последнее редактирование: 31 июл 2014
  6. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    А почему именно "СправочникОбъект"? Почему не "СправочникСсылка"?
    --- Объединение сообщений, 31 июл 2014 ---
    Я сейчас набросал обработку, тип данных "...Объект" в принципе работать не будет, даже если не программно создавать, а интерактивно (в целом логично, этот тип в тонком клиенте не доступен). Попробуйте ссылку в тип присваивать.
  7. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Вот так точно работает.
    Код:
       
        ДобавляемыеРеквизиты = Новый Массив;
        ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("НовыйРеквизит", Новый ОписаниеТипов("СписокЗначений"), "", "Новый Реквизит"));
        ИзменитьРеквизиты(ДобавляемыеРеквизиты);
       
        ЭтаФорма.НовыйРеквизит.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
       
        Элемент = Элементы.Добавить("ЭлементНовыйРеквизит", Тип("ТаблицаФормы"));
        Элемент.ПутьКДанным = "НовыйРеквизит";
        Элемент.Отображение = ОтображениеТаблицы.Список;
       
        мКолонкаТаблицы1 = Элементы.Добавить("Колонка_Номенклатура", Тип("ПолеФормы"), Элемент);
        мКолонкаТаблицы1.Заголовок = "Номенклатура";
        мКолонкаТаблицы1.ПутьКДанным = "НовыйРеквизит.Значение";
        мКолонкаТаблицы1.Вид = ВидПоляФормы.ПолеВвода;
    
  8. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Нашлепал я тут чего-то. Ошибка отображения типов стала возникать по другой причине. Разберусь с ней, продолжу пробовать с типом.
  9. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Thelearning, спасибо! В таком варианте работает как надо!
    Код:
    ИмяВашегоРеквизита.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
  10. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    В продолжении темы еще вопрос.
    Теперь хочу сделать, чтобы при заполнении списка значений на форме (о котором шла речь выше) из справочника "Значения свойств номенклатуры" работал отбор.
    На примере картинок:
    1. Вот для дополнительного реквизита "Тест" созданы два значения "Х (тест)" и "В (тест)".
    Снимок2.JPG
    2. Созданный программным способом реквизит (тип "список значений") и элемент на форме "Тест". На картинке видно, что при выборе значения не происходит отбор.
    Снимок.JPG

    Можно ли задать отбор для списка значений созданного программно?

    В УТ 11 при программном создании элемента формы для реквизита типа "Справочник.ЗначенияСвойствОбъекта", а не "СписокЗначений" как у меня, используется такой код:
    , где СтрРеквизит.Свойство это ПланВидовХарактеристикСсылка.ДополнительныеРеквизитвыИСведения.
    В моем случае это не работает...
  11. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Вот такой вариант рабочий:
    Код:
    Форма[СтрРеквизит.ИмяРеквизитаЗначение].ДоступныеЗначения = ПолучитьСписокДоступныхЗначений(СтрРеквизит.Свойство);
    ..........
    Функция ПолучитьСписокДоступныхЗначений(ВладелецЗначений)
       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ЗначенияСвойствОбъектов.Ссылка
                       |ИЗ
                       |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                       |ГДЕ
                       |    ЗначенияСвойствОбъектов.Владелец = &ВладелецЗначений";
                      
        Запрос.УстановитьПараметр("ВладелецЗначений", ВладелецЗначений);
        Выборка = Запрос.Выполнить().Выбрать();
       
        ДоступныеЗначения =  новый СписокЗначений;
        Пока Выборка.Следующий() Цикл
            ДоступныеЗначения.Добавить(Выборка.Ссылка);
        КонецЦикла;
       
        Возврат ДоступныеЗначения;
           
    КонецФункции
    Но все-таки, можно с помощью отбора решить вопрос?

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