8.х Вывод названия справочника в поле

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

  1. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, уважаемые специалисты. Сделал обработку по работе со справочниками. Форму обработки привожу на рисунке.Проблема в следующем. Для выбора нужного справочника сделал реквизит с типом СправочникСсылка. На форме обработки есть поле ввода, которое соответствует этому реквизиту(реквизит указан в свойстве Данные поля ввода). Справочник выбирается, но после выбора поле остается пустым, а надо сделать так, чтоб в нем было название выбранного справочника.Я пытался найти что то в настройках, свойствах поля ввода, но так не удалось. Помогите пожалуйста.

    Вложения:

    • Obrabotka.JPG
      Obrabotka.JPG
      Размер файла:
      121,2 КБ
      Просмотров:
      96
  2. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Ну раз поле ввода соответствует этому реквизиту, почему тогда тип СправочникСсылка? Тогда должен быть тип этого реквизита.
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Так попробуйте:
    Код:
    ЭлементыФормы.{ИмяПоляВвода}.ВыделенныйТекст = СокрЛП({ИмяРеквизита}.Метаданные());
    
  4. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

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

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Проверку добавьте:
    Код:
    ЭлементыФормы.ВыборСправочника.ВыделенныйТекст = ?(ТекЗначение = Неопределено, "", СокрЛП(ТекЗначение.Метаданные()));
    
    
  6. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Мда... рано обрадовался... реквизит не позволяет выбрать из списка...Выдается сообщение:В поле введены некорректные данные. Отменить ввод?.. Это почему происходит? что не так на этот раз? Справочник выбранный открывается, список значений заполняется реквизитами, а вот выбрать реквизит не получается - возникает вышеупомянутое сообщение...



    и составной тип для реквизита пробовал делать, куда сохраняется ссылка на выбранный справочник... Тип пробовал: СправочникСсылка+Строка..
  7. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    В свойствах поля ввода ВыборСправочника снимите птичку с РедактированиеТекста.


    Ввод по строке элемента справочника отрабатывается, а у вас там синоним справочника введен.
  8. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Да, получилось... но опять же... другая проблема... принажатии на кнопку[...] для открытия справочника в поле пишется название справочника еще раз и реквизиты еще раз выводятся... тоже не хорошо...
  9. Requin
    Offline

    Requin Опытный в 1С

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

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    показываю код:
    Код:
    Процедура ВыборСправочникаПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    НовоеЗначение=Null;
    ЭлементыФормы.ВыборСправочника.ВыделенныйТекст="";
    РеквизитСправочника.Очистить();
    ТекЗначение = Элемент.Значение;
    Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
    Если ТекЗначение = Неопределено Тогда
    РеквизитСправочника.Очистить();
    Иначе
    МетаданныеСправочника = ТекЗначение.Метаданные();
    Для каждого ТекРеквизит Из МетаданныеСправочника.Реквизиты Цикл
    РеквизитСправочника.Добавить(ТекРеквизит.Имя, ТекРеквизит);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    ЭлементыФормы.ВыборСправочника.ВыделенныйТекст = ?(ТекЗначение = Неопределено, "", СокрЛП(ТекЗначение.Метаданные()));	
    //ЭлементыФормы.ВыборСправочника.ВыделенныйТекст =ТекЗначение.Метаданные();
    КонецПроцедуры
    
  11. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    РеквизитСправочника - реквизит обработки, имеющий тип Список значений. В этот реквизит записываются реквизиты выбранного справочника и выводятся в список значений на форме, которому в качестве данных как раз и прописан упомянутый РеквизитСправочника
  12. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Как я понял, вам не нужно выбирать элемент справочника - нужен только тип справочника.
    Код:
    Процедура ВыборСправочникаПриИзменении(Элемент)
    НовоеЗначение = Неопределено;
    
    Если ТекущийСправочник = Неопределено Тогда
    РеквизитСправочника.Очистить();
    Элемент.КнопкаВыбора = Истина;
    Иначе
    Если ЭтаФорма.ТекущийЭлемент = Элемент Тогда
    РеквизитСправочника.Очистить();
    МетаданныеСправочника = ТекущийСправочник.Метаданные();
    Для каждого ТекРеквизит Из МетаданныеСправочника.Реквизиты Цикл
    РеквизитСправочника.Добавить(ТекРеквизит.Имя, ТекРеквизит);
    КонецЦикла;
    Элемент.УстановитьГраницыВыделения(1, 1, 1, СтрДлина(СокрЛП(МетаданныеСправочника)) + 1);
    Элемент.ВыделенныйТекст = СокрЛП(МетаданныеСправочника);
    Элемент.КнопкаВыбора = Ложь;
    КонецЕсли; 
    КонецЕсли;
    КонецПроцедуры
    
    И я бы добавил обработчик НачалоВыбора:
    Код:
    Процедура ВыборСправочникаНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = (ТекущийСправочник = Неопределено);
    КонецПроцедуры
    

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