|
Как присвоить полю выбора на форме документа уже найденное значение? | ☑ | ||
---|---|---|---|---|
0
AleksandrKulik
10.08.18
✎
08:07
|
Есть документ с реквизитами Название абонента(Тип СправочникСсылка.Абоненты2) и Лицевой счет(Тип Строка);
у документа есть еще и табличная часть, но мы пока о ней говорить не будем, так как вобпрос не в этом. и есть справочник Абоненты 2 где хранится информация об этих абонентах и имя абонента (стандартный реквизит Наименование) и его лицевой счет (реквизит ЛицСчет) В автоматически сгенерированной платформой форме документа у реквизита НазваниеАбонента(Вид Поле ввода) (ПутьКДанным Объект.НазваниеАбонента) есть кнопка выбора. Она прекрасно работает и позволяет выбрать нужного абонента в форме выбора. В принципе мне все так и нужно. Но стоит такая задача, что пользователи кто как... кто привык по лицевому счету выбирать, кто по названию. То есть если в пустую форму я введу лицевой счет, то процедура ПриИзменении должна найти соответствующее имя абонента и подставить это значение в поле выбора, но этого не происходит. Пишу для поля Лицевой счет следующий код: &НаСервереБезКонтекста Функция ПолучитьИмяАбонента(ЛицевойСчет) ИмяАбон = Неопределено; выбр = Справочники.Абоненты2.Выбрать(); Пока выбр.Следующий() = 1 Цикл ЛицСч = СокрЛП(выбр.ЛицСчет); Если ЛицСч = ЛицевойСчет Тогда ИмяАбон = выбр.Наименование; // Сообщить("Фирма " + выбр.Наименование); КонецЕсли; КонецЦикла; Возврат ИмяАбон; КонецФункции &НаКлиенте Процедура ЛицевойСчетПриИзменении(Элемент) ОтвФункц = ПолучитьИмяАбонента(Объект.ЛицевойСчет); Сообщить (ОтвФункц); // Сообщает правильное значение, значит до сих пор все ок. //здесь нужно както присвоить полю с выпадающим списком //выбора уже найденное значение ОтвФункц Объект.НазваниеАбонента = ОтвФункц; КонецПроцедуры Код правильно отрабатывает но проблема возникает как раз при попытке присвоить объекту (Объект.НазваниеАбонента) найденное значение. Помогите кто знает пожалуйста. |
|||
1
catena
10.08.18
✎
08:19
|
Потому что тип поля СправочникСсылка, а вы туда пихаете строку.
|
|||
2
Мимохожий Однако
10.08.18
✎
08:19
|
Как получаешь выпадающий список?
Какой тип у переменной ОтвФункц? Какой тип у реквизита НазваниеАбонента? Приведи текст возникающей ошибки |
|||
3
catena
10.08.18
✎
08:20
|
И посик через перебор выборки, приведение ссылки к строковому значению для сравнения - это жесть.
|
|||
4
AleksandrKulik
10.08.18
✎
08:31
|
Как получаешь выпадающий список?
Поставил тип поля СправочникСсылка ... Какой тип у переменной ОтвФункц? Там Строка Какой тип у реквизита НазваниеАбонента? СправочникСсылка ... Приведи текст возникающей ошибки Ошибку не выдает. просто значение не подставляется. Я понимаю что пихаю стоку в ссылку. и что из-за несоответствия типов и не работает. вопрос можно ли как то обойти эту проблему. Возможно есть решение... |
|||
5
catena
10.08.18
✎
08:33
|
(4)Конечно есть. Работать не с наименованием, а с ссылкой.
|
|||
6
AleksandrKulik
10.08.18
✎
08:33
|
И посик через перебор выборки, приведение ссылки к строковому значению для сравнения - это жесть.
Из Вашего поста я так понял что нет решения "малой кровью" в этой ситуации и решать ее нужно другим способом. |
|||
7
AleksandrKulik
10.08.18
✎
08:34
|
Конечно есть. Работать не с наименованием, а с ссылкой.
А подробнее вы не могли бы пояснить, а то я не пойму как |
|||
8
AleksandrKulik
10.08.18
✎
08:36
|
То есть ответом функции должна быть ссылка на конкретное значение реквизита в справочнике?
|
|||
9
Мимохожий Однако
10.08.18
✎
09:12
|
(8) пытаешься "впихнуть невпихуемое". Какой тип в реквизите, с таким же типом и значение присваивай.
|
|||
10
AleksandrKulik
10.08.18
✎
09:32
|
(9) Ок.
Вопрос как изменить код, что бы функция получила ссылку на найденное имя абонента. вот сейчас с этим и бодаюсь. |
|||
11
Мимохожий Однако
10.08.18
✎
09:33
|
(10) Сделай запросом для начала
|
|||
12
Mankubus
10.08.18
✎
09:37
|
(10) имяабон =выбр.Сссылка
|
|||
13
AleksandrKulik
10.08.18
✎
09:50
|
(12) Спасибо все получилось. Спасибо за помощь.
Код работает в таком виде: &НаСервереБезКонтекста Функция ПолучитьИмяАбонента(ЛицевойСчет) ИмяАбон = Неопределено; выбр = Справочники.Абоненты2.Выбрать(); Пока выбр.Следующий() = 1 Цикл ЛицСч = СокрЛП(выбр.ЛицСчет); Если ЛицСч = ЛицевойСчет Тогда ИмяАбон = выбр.Ссылка; КонецЕсли; КонецЦикла; Возврат ИмяАбон; КонецФункции &НаКлиенте Процедура ЛицевойСчетПриИзменении(Элемент) ОтвФункц = ПолучитьИмяАбонента(Объект.ЛицевойСчет); Объект.НазваниеАбонента = ОтвФункц; КонецПроцедуры |
|||
14
catena
10.08.18
✎
10:54
|
(13)Осталось переписать функцию ПолучитьИмяАбонента, например, на запрос.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |