Вход | Регистрация

1С:Предприятие ::

Метки: 

Как присвоить полю выбора на форме документа уже найденное значение?

Я
   AleksandrKulik
 
10.08.18 - 08:07
Есть документ с реквизитами Название абонента(Тип СправочникСсылка.Абоненты2) и Лицевой счет(Тип  Строка); 
у документа есть еще и табличная часть, но мы пока о ней говорить не будем, так как вобпрос не в этом.
и есть справочник Абоненты 2 где хранится информация об этих абонентах и имя абонента (стандартный реквизит Наименование) и его лицевой счет (реквизит ЛицСчет)
В автоматически сгенерированной платформой форме документа у реквизита НазваниеАбонента(Вид Поле ввода) (ПутьКДанным Объект.НазваниеАбонента) есть кнопка выбора.
Она прекрасно работает и позволяет выбрать нужного абонента в форме выбора. В принципе мне все так и нужно.
Но стоит такая задача, что пользователи кто как... кто привык по лицевому счету выбирать, кто по названию.
То есть если в пустую форму я введу лицевой счет, то процедура ПриИзменении должна найти соответствующее имя абонента и подставить это значение в поле выбора, но этого не происходит.

Пишу для поля Лицевой счет следующий код:

&НаСервереБезКонтекста
Функция ПолучитьИмяАбонента(ЛицевойСчет)
    ИмяАбон = Неопределено;
    выбр = Справочники.Абоненты2.Выбрать();
    Пока выбр.Следующий() = 1 Цикл
        ЛицСч = СокрЛП(выбр.ЛицСчет);
        Если ЛицСч = ЛицевойСчет Тогда 
            ИмяАбон = выбр.Наименование;
            // Сообщить("Фирма " + выбр.Наименование);

        КонецЕсли;
    КонецЦикла; 
    Возврат ИмяАбон; 
КонецФункции

&НаКлиенте
Процедура ЛицевойСчетПриИзменении(Элемент)
        
    ОтвФункц = ПолучитьИмяАбонента(Объект.ЛицевойСчет);
    Сообщить (ОтвФункц);
    // Сообщает правильное значение, значит до сих пор все ок.

    //здесь нужно както присвоить полю с выпадающим списком 

    //выбора уже найденное значение    ОтвФункц

    Объект.НазваниеАбонента = ОтвФункц;
КонецПроцедуры

Код правильно отрабатывает но проблема возникает как раз при попытке присвоить объекту (Объект.НазваниеАбонента) найденное значение.
Помогите кто знает пожалуйста.
 
  Рекламное место пустует
   catena
 
1 - 10.08.18 - 08:19
Потому что тип поля СправочникСсылка, а вы туда пихаете строку.
   МимохожийОднако
 
2 - 10.08.18 - 08:19
Как получаешь выпадающий список?
Какой тип у переменной ОтвФункц?
Какой тип у реквизита НазваниеАбонента?
Приведи текст возникающей ошибки
   catena
 
3 - 10.08.18 - 08:20
И посик через перебор выборки, приведение ссылки к строковому значению для сравнения - это жесть.
   AleksandrKulik
 
4 - 10.08.18 - 08:31
Как получаешь выпадающий список?
Поставил тип поля СправочникСсылка ...
Какой тип у переменной ОтвФункц?
  Там Строка 
Какой тип у реквизита НазваниеАбонента?
СправочникСсылка ...
Приведи текст возникающей ошибки
Ошибку не выдает. просто значение не подставляется.


Я понимаю что пихаю стоку в ссылку. и что из-за несоответствия типов и не работает. вопрос можно ли как то обойти эту проблему. Возможно есть решение...
   catena
 
5 - 10.08.18 - 08:33
(4)Конечно есть. Работать не с наименованием, а с ссылкой.
   AleksandrKulik
 
6 - 10.08.18 - 08:33
И посик через перебор выборки, приведение ссылки к строковому значению для сравнения - это жесть.

Из Вашего поста я так понял что нет решения "малой кровью" в этой ситуации и решать ее нужно другим способом.
   AleksandrKulik
 
7 - 10.08.18 - 08:34
Конечно есть. Работать не с наименованием, а с ссылкой.

А подробнее вы не могли бы пояснить, а то я не пойму как
   AleksandrKulik
 
8 - 10.08.18 - 08:36
То есть ответом функции должна быть ссылка на конкретное значение реквизита в справочнике?
   МимохожийОднако
 
9 - 10.08.18 - 09:12
(8) пытаешься "впихнуть невпихуемое". Какой тип в реквизите, с таким же типом и значение присваивай.
   AleksandrKulik
 
10 - 10.08.18 - 09:32
(9) Ок.

Вопрос как изменить код, что бы функция получила ссылку на найденное имя абонента. вот сейчас с этим и бодаюсь.
 
  Рекламное место пустует
   МимохожийОднако
 
11 - 10.08.18 - 09:33
(10) Сделай запросом для начала
   Mankubus
 
12 - 10.08.18 - 09:37
(10) имяабон =выбр.Сссылка
   AleksandrKulik
 
13 - 10.08.18 - 09:50
(12) Спасибо все получилось. Спасибо за помощь.
Код работает в таком виде:

&НаСервереБезКонтекста
Функция ПолучитьИмяАбонента(ЛицевойСчет)
    ИмяАбон = Неопределено;
    выбр = Справочники.Абоненты2.Выбрать();
    Пока выбр.Следующий() = 1 Цикл
        ЛицСч = СокрЛП(выбр.ЛицСчет);
        Если ЛицСч = ЛицевойСчет Тогда 
            ИмяАбон = выбр.Ссылка;
        КонецЕсли;
    КонецЦикла; 
    Возврат ИмяАбон; 
КонецФункции

&НаКлиенте
Процедура ЛицевойСчетПриИзменении(Элемент)
    ОтвФункц = ПолучитьИмяАбонента(Объект.ЛицевойСчет);
    Объект.НазваниеАбонента = ОтвФункц;
КонецПроцедуры
   catena
 
14 - 10.08.18 - 10:54
(13)Осталось переписать функцию ПолучитьИмяАбонента, например, на запрос.


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует