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