Приветствую! Столкнулся с непонятной мне проблемой. Есть 2 реквизита: Получатель и ПочтаПолучателя. При выборе получателя срабатывает запрос и подставляется почта получателя, выбранная по умолчанию в справочнике Получатели. При запуске программы, я выбираю одного получателя и запрос срабатывает - подставляется его почта. А вот если выбрать другого второго получателя, то почта в реквизите ПочтаПолучателя не меняется. При перезапуске программы при выборе второго получателя в реквизит ПочтаПолучателя подставляются данные первого... Я реально не понимаю в чем дело. Пытался решить проблему, вызвав функцию "ЭтаФорма.ОбновитьОтображениеДанных()", но и это не помогло...
&НаСервереБезКонтекста
Процедура ПолучательПриИзмененииНаСервере(Получатель, ПочтаПолучателя)
//ПочтаПолучателя = Справочники.Получатели.ПустаяСсылка();
Если Получатель.ПочтовыеЯщики.Количество() > 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПолучателиПочтовыеЯщики.Почта КАК Почта
|ИЗ
| Справочник.Получатели.ПочтовыеЯщики КАК ПолучателиПочтовыеЯщики
|ГДЕ
| ПолучателиПочтовыеЯщики.ПоУмолчанию = &Истина";
Запрос.УстановитьПараметр("Истина", Истина);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
РезультатЗапроса.Следующий();
ПочтаПолучателя = РезультатЗапроса.Почта;
Иначе
Сообщить("У выбранного пользователя не указана почта");
ПочтаПолучателя = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучательПриИзменении(Элемент)
ПолучательПриИзмененииНаСервере(Получатель, ПочтаПолучателя);
//ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Таким образом?
&НаСервереБезКонтекста
Процедура ПолучательПриИзмененииНаСервере(Получатель, ПочтаПолучателя)
Если Получатель.ПочтовыеЯщики.Количество() > 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Получатели.Наименование КАК Наименование,
| Получатели.ПочтовыеЯщики.(
| Почта КАК Почта
| ) КАК ПочтовыеЯщики
|ИЗ
| Справочник.Получатели КАК Получатели
|ГДЕ
| Получатели.ПочтовыеЯщики.Ссылка = &Ссылка
| И Получатели.ПочтовыеЯщики.ПоУмолчанию = &Истина";
Запрос.УстановитьПараметр("Ссылка", Получатель);
Запрос.УстановитьПараметр("Истина", Истина);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
РезультатЗапроса.Следующий();
ПочтаПолучателя = РезультатЗапроса.Почта;
Иначе
Сообщить("У выбранного пользователя не указана почта");
ПочтаПолучателя = "";
КонецЕсли;
КонецПроцедуры
Показать
тут больше вопрос к самой идее. Что-то должно обновиться на форме, а некий запрос вызывается без контекста, т.е. ничего не знает о форме, а форма ничего не знает об этом запросе. Представляется очевидным, что для обновления чего-либо на форме должны вызываться какие-то методы, имеющие отношение к форме, разве нет?
(7) Проблема решена
&НаСервереБезКонтекста
Процедура ПолучательПриИзмененииНаСервере(Получатель, ПочтаПолучателя)
Если Получатель.ПочтовыеЯщики.Количество() > 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Получатели.ПочтовыеЯщики.(
| Почта КАК Почта
| ) КАК ПочтовыеЯщики,
| Получатели.Наименование КАК Наименование
|ИЗ
| Справочник.Получатели КАК Получатели
|ГДЕ
| Получатели.Наименование = &Наименование
| И Получатели.ПочтовыеЯщики.ПоУмолчанию = &Истина";
Запрос.УстановитьПараметр("Истина", Истина);
Запрос.УстановитьПараметр("Наименование",Получатель.ПолучитьОбъект().Наименование);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Количество() <> 0 Тогда
Пока РезультатЗапроса.Следующий() Цикл
ПочтовыйЯщик = РезультатЗапроса.ПочтовыеЯщики.Выбрать();
ПочтовыйЯщик.Следующий();
ПочтаПолучателя = ПочтовыйЯщик.Почта;
КонецЦикла;
Иначе
Сообщить("У выбранного пользователя не указана почта");
ПочтаПолучателя = "";
КонецЕсли;
КонецЕсли;
//Вариант №2
//Для каждого ПочтовыеЯщики из Получатель.ПолучитьОбъект().ПочтовыеЯщики Цикл
// Если ПочтовыеЯщики.ПоУмолчанию = Истина Тогда
// ПочтаПолучателя = ПочтовыеЯщики.Почта;
// КонецЕсли;
//КонецЦикла;
КонецПроцедуры
Показать
(8)ну допустим, правда не совсем понимаю почему в запрос передается наименование, не лучше было бы в таком варианте?
а если будет нужно именно Наименование, то оставить его в выборке
|ГДЕ
| Получатели.Ссылка= &Получатель
Запрос.УстановитьПараметр("Получатель", Получатель);
Показатьа если будет нужно именно Наименование, то оставить его в выборке
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот