Автоматизация заполнения поля КонтактноеЛицо

1. neutrinos_vision 17.07.23 12:54 Сейчас в теме
Здравствуйте!
Мне нужно написать процедуру, которая при заполнении поля "Контрагент" будет автоматически заполнять поле "КонтактноеЛицо", если у выбранного контрагента имеется один контакт. Если имеется несколько контактов, то выводится соответствующее сообщение.



&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
  
Попытка
    КоличествоКонтактныхЛиц = ПолучитьКоличествоКонтактныхЛиц(Элемент.Значение);
    Если КоличествоКонтактныхЛиц = 1 Тогда
      Объект.КонтактноеЛицо = ПолучитьПервоеКонтактноеЛицо(Элемент.Значение);
    ИначеЕсли КоличествоКонтактныхЛиц > 1 Тогда
      Сообщить("У контрагента есть несколько контактных лиц. Выберите нужное контактное лицо вручную.");
      Элемент.УстановитьЗначение(Неопределено);
    Иначе
      Сообщить("У контрагента нет зарегистрированных контактных лиц.");
      Элемент.УстановитьЗначение(Неопределено);
    КонецЕсли;
  Исключение
    Сообщить(ОписаниеОшибки());
  КонецПопытки;
  
КонецПроцедуры

&НаСервере
Функция ПолучитьКоличествоКонтактныхЛиц(Контрагент)
  Запрос = Новый Запрос("|ВЫБРАТЬ КОЛИЧЕСТВО(Ссылка) КАК Количество
                         |ИЗ Справочник.КонтактныеЛица
                         |ГДЕ ИсточникПривлечения = &Ссылка");
  Запрос.УстановитьПараметр("Ссылка", Контрагент);
  
  Выборка = Запрос.Выполнить().Выбрать();
  Если Выборка.Следующий() Тогда
    Возврат Выборка.Количество;
  Иначе
    Возврат 0;
  КонецЕсли;
КонецФункции

Функция ПолучитьПервоеКонтактноеЛицо(Контрагент)
  Запрос = Новый Запрос("|ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка
                         |ИЗ Справочник.КонтактныеЛица
                         |ГДЕ ИсточникПривлечения = &Ссылка");
  Запрос.УстановитьПараметр("Ссылка", Контрагент);
  Возврат Запрос.Выполнить().Выгрузить()[0].Ссылка;
КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Swetlana 27 17.07.23 13:17 Сейчас в теме
в первой процедуре

У вас только 2 случая рассматривается
Создайте 3 условия
КоличествоКонтактныхЛиц = ПолучитьКоличествоКонтактныхЛиц(Элемент.Значение);
Если КоличествоКонтактныхЛиц = 1 Тогда
,,,
ИначеЕсли КоличествоКонтактныхЛиц >= 1 Тогда
...
Иначе
,,
КонецЕсли;

В следующей функции вы ошибочно получаете результат сразу количество записей
Функция ПолучитьКоличествоКонтактныхЛиц(Контрагент)
Запрос = Новый Запрос("|ВЫБРАТЬ КОЛИЧЕСТВО(Ссылка) КАК Количество
|ИЗ Справочник.КонтактныеЛица
|ГДЕ ИсточникПривлечения = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Контрагент);


Получите записи, а количество будете позже проверять
Вам же нужна запись контактного лица
Возвращайте структуру, в структуре будет контактное лицо и количество записей в выборке
neutrinos_vision; +1 Ответить
3. user1880116 17.07.23 13:32 Сейчас в теме
(2) Не в коня корм.
Эту популярную задачу уже обсуждали в в https://forum.infostart.ru/forum9/topic284382/ и в https://forum.infostart.ru/forum33/topic288129/
5. neutrinos_vision 17.07.23 16:22 Сейчас в теме
(3)
Пытаюсь решить ее своим способом, но возникает ошибка во время выбора контрагента
4. neutrinos_vision 17.07.23 14:45 Сейчас в теме
(2)
Спасибо!!
К сожалению, есть другая проблема

{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(1225)}:
Поле объекта не обнаружено (Значение)

Не подскажите, как можно это исправить?
6. user1995125 28.09.23 19:58 Сейчас в теме
(1) Сделал задание? Я просто в сборнике его нашел , не могу разобраться с автозаполнением
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот