8.х Присвоение типа элементу

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

  1. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, уважаемые специалисты. Помогите пожалуйста. У меня такая задача. Есть список значений , в который выведены реквизиты справочника. Есть поле ввода для задания нового значения реквизита. Вопрос в следующем: как программно присвоить полю ввода тип реквизита, выбранного из списка значений?
  2. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    1) В свойствах поля ввода, где у Вас изменяемый реквизит, очистите свойство "Данные".
    2) В событии "Выбор" табличного поля со списком реквизитов напишите:
    Код:
    ЭлементыФормы.ИменяемыйРеквизит.ТипЗначения = ВыбраннаяСтрока.Значение.Тип;
    
    
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    [off]
    Вы бы может лучше все свои вопросы в одной теме свели. А то получается, кроме этой еще 4 темы под одну задачу.[/off]
  4. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Большое всем спасибо за помощь.Учту замечание на будущее)) - насчет тем:)
  5. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Возникла еще одна трудность. Я присвоил тип полю ввода. Теперь надо, по условию задачи, изменить все значения выбранного реквизита в справочнике на значение,выбранное в поле. Делаю так:+
    Код:
    ТекРеквизит=ЭлементыФормы.ЭлементыСпр.ТекущиеДанные;
    Сообщить(ВыбранныйЭлемент);
    Сообщить(ТекРеквизит);
    Справочники[ВыбранныйЭлемент.Значение.Имя].ВыбратьЭлементы();
    Пока Справочники[ВыбранныйЭлемент.Значение.Имя].ПолучитьЭлементы()=1 Цикл
    Справочники[ВыбранныйЭлемент.Значение.Имя].ТекРеквизит =ЭлементыФормы.НовоеЗначение.Значение;
    Справочники[ВыбранныйЭлемент.Значение.Имя].Записать();
    КонецЦикла; 
    
    В результате выполнения получаю ошибки... не работает
    ВыбранныйЭлемент - выбранный справочник из списка значений:
    Код:
    ВыбранныйЭлемент = ВыбрСправочники.ВыбратьЭлемент("Выбор объекта: Справочник", ЭлементыФормы.ВыбрСправочники.ТекущиеДанные);
    Если ВыбранныйЭлемент <> Неопределено Тогда
    Справочники[ВыбранныйЭлемент.Значение.Имя].ПолучитьФормуСписка().Открыть();
    КонецЕсли;
    
    ТекРеквизит - выбранный реквизит из спика значений для выбранного ранее справочника.
    Получаю ошибку:Метод объекта не обнаружен (ВыбратьЭлементы)...как надо делать ? я уже запутался со всем этим...
  6. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Это ж не 7-ка:
    Код:
    Выборка = Справочники[ВыбранныйЭлемент.Значение.Имя].Выбрать();
    Пока Выборка.Следующий() Цикл
    Объект =  Выборка.ПолучитьОбъект();
    Объект[ТекРеквизит] = ЭлементыФормы.НовоеЗначение.Значение;
    Объект.Записать();
    КонецЦикла;
    
    
    [off]
    Синтакс-помощник в помощь :angry: [/off]
  7. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    не работает. Оишибка:{Форма.Форма(11)}: Получение элемента по индексу для значения не определено
    Объект[ТекРеквизит] = ЭлементыФормы.НовоеЗначение.Значение
  8. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Что такое ТекРеквизит? Тип какой? Может так попробовать?
    Код:
    Объект.ТекРеквизит = ЭлементыФормы.НовоеЗначение.Значение
    
    
    либо через имя
    Код:
    Объект[ТекРеквизит.Имя] = ЭлементыФормы.НовоеЗначение.Значение
    
    
  9. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Переменной
    Код:
    ТекРеквизит
    
    присваивается значение , выбранное в списке значений, в который выводятся реквизиты справочника
  10. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Выложите свою обработку.
  11. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    попробовал - не работает.. ошибка:
    {Форма.Форма(11)}: Поле объекта не обнаружено (Имя)
    Объект[ТекРеквизит.Имя] = ЭлементыФормы.НовоеЗначение.Значение;
  12. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Показывайте код заполнения списка значений с реквизитами справочника.
  13. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Справочник выбираю так:
    Код:
    ВыбранныйЭлемент = ВыбрСправочники.ВыбратьЭлемент("Выбор объекта: Справочник", ЭлементыФормы.ВыбрСправочники.ТекущиеДанные);
    Если ВыбранныйЭлемент <> Неопределено Тогда
    Справочники[ВыбранныйЭлемент.Значение.Имя].ПолучитьФормуСписка().Открыть();
    КонецЕсли;
    
    Далее заполняю список значений реквизитами выбранного справочника:
    Код:
    Для каждого Рекв Из Метаданные.Справочники[ВыбранныйЭлемент.Значение.Имя].Реквизиты Цикл
    ЭлементСписка =ЭлементыСпр.Добавить(Рекв);
    КонецЦикла;
    
    Элементы, куда выводятся список справочников и список реквизитов являются элементами экранной формы.Не следует ли делать это всё через реквизиты формы?
  14. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Заполняйте список значений так:
    Код:
    ЭлементСписка =ЭлементыСпр.Добавить(Рекв.Имя, Рекв);
    
    Тогда изменение реквизита:
    Код:
    Объект[ТекРеквизит.Значение] = НовоеЗначение.Значение;
    
    И колонку Значение табличного поля списка значений на форме замените на Представление.
    Посмотреть вложение 8706

    Вложения:

    • 0050.PNG
      0050.PNG
      Размер файла:
      6,4 КБ
      Просмотров:
      9
  15. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Я создал реквизит обработки,имеющий тип СправочникСсылка , который должен содержать ссылку на выбранный справочник. На форму поместил поле, которое связал с этим реквизитом. Проблема состоит теперь в переборе реквизитов выбранного справочника.Делал так:
    Код:
    Процедура ВыбСправочникПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    НовыйСпр=Элемент.Значение;
    Для Каждого Рекв Из Метаданные.Справочники.НовыйСпр.Реквизиты Цикл
    //ЭлементСписка =ЭлементыСпр.Добавить(Рекв);
    ЭлементСписка =РеквизитСправочника.Добавить(Рекв.Имя, Рекв);
    КонецЦикла;
    КонецПроцедуры
    
    В цикле и так пробовал писать:
    Код:
    Для Каждого Рекв Из Метаданные.Справочники[НовыйСпр].Реквизиты Цикл
    
    получаю ошибку:
    {Форма.Форма(67)}: Поле объекта не обнаружено (НовыйСпр)
    Для Каждого Рекв Из Метаданные.Справочники.НовыйСпр.Реквизиты Цикл


    В целом я создал три реквизита: для хранения выбранного справочника, выбранного реквизита справочника и записи нового значения выбранного реквизита.. Начальник сказал, что делать надо именно так, а то мол без реквизитов получается, что все происходит на форме, а в базе данных - нет..
  16. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Та же проблема, что и со списком значений реквизитов. У вас в списке значений находятся значения представлений справочников (синонимы), а не их имена.
    Поэтому при заполнении списков значений в поле Значение заполняйте имя, а в Представление его синоним:
    Код:
    ВыбСправочник.Добавить(Спр.Имя, Спр);
    
    Соответственно, нужно будет обращаться к справочнику по его имени:
    Код:
    НовыйСпр = Элемент.Значение;
    Для Каждого Рекв Из Метаданные.Справочники[НовыйСпр].Реквизиты Цикл
    КонецЦикла;
    
  17. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    нет, наверное проблема в другом...я сделал поле, тип которого СправочникСсылка.Я не заполняю это поле, а выбираю справочник из списка, нажав кнопку справа в этом поле() кнопка со значком"Т") И соответственно в обработчике этого поля ввода ПриИзменении пытался заполнить в список реквизиты выбранного таким образом справочника. Для записи реквизитов справочника я создал реквизит обработки РеквизитСправочника с типом данных Произвольный. Получается, наверное, что реквизиты справочника надо записать в реквизит обработки РеквизитСправочника... как быть с этим?
  18. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    вот код обработчика ПриИзменении поля ВыбСправочник, которое имеет тип СправочникСсылка и именно из него я выбираю справочник. Данные для этого поля - реквизит обработки ТекущийСправочник с типом СправочникСсылка (привожу его еще раз):
    Код:
    Процедура ВыбСправочникПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    НовыйСпр=Элемент.Значение;
    Для Каждого Рекв Из Метаданные.Справочники.НовыйСпр.Реквизиты Цикл
    //ЭлементСписка =ЭлементыСпр.Добавить(Рекв);
    ЭлементСписка =РеквизитСправочника.Добавить(Рекв.Имя, Рекв);
    КонецЦикла;
    КонецПроцедуры
    
  19. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А почему тип реквизита РеквизитСправочника Произвольный? Я так понимаю вам нужны все реквизиты справочника? А это коллекция значений и вам нужны имена реквизитов. Список значений для этого как раз подойдет.
    Вот код заполнения списка значений РеквизитСправочника при изменении типа справочника в поле ВыбСправочник:
    Код:
    Процедура ВыбСправочникПриИзменении(Элемент)
    ТекЗначение = Элемент.Значение;
    Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
    Если ТекЗначение = Неопределено Тогда
    РеквизитСправочника.Очистить();
    Иначе
    МетаданныеСправочника = ТекЗначение.Метаданные();
    Для каждого ТекРеквизит Из МетаданныеСправочника.Реквизиты Цикл
    РеквизитСправочника.Добавить(ТекРеквизит.Имя, ТекРеквизит);
    КонецЦикла; 
    КонецЕсли;
    КонецЕсли; 
    КонецПроцедуры
    
  20. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Спасибо больше, попробую так))

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