Запросы 1С

1. mark2_tourer 24.12.23 20:07 Сейчас в теме
Приветствую! Столкнулся с непонятной мне проблемой. Есть 2 реквизита: Получатель и ПочтаПолучателя. При выборе получателя срабатывает запрос и подставляется почта получателя, выбранная по умолчанию в справочнике Получатели. При запуске программы, я выбираю одного получателя и запрос срабатывает - подставляется его почта. А вот если выбрать другого второго получателя, то почта в реквизите ПочтаПолучателя не меняется. При перезапуске программы при выборе второго получателя в реквизит ПочтаПолучателя подставляются данные первого... Я реально не понимаю в чем дело. Пытался решить проблему, вызвав функцию "ЭтаФорма.ОбновитьОтображениеДанных()", но и это не помогло...

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

&НаКлиенте
Процедура ПолучательПриИзменении(Элемент)
	ПолучательПриИзмененииНаСервере(Получатель, ПочтаПолучателя);
	//ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 24.12.23 21:57 Сейчас в теме
(1) Не вижу указания получателя в запросе.
3. jmw 61 25.12.23 06:09 Сейчас в теме
Да и вообще, зачем запрос к почтовым ящикам, если получатель известен и у него задан почтовый ящик по умолчанию?
Вот и берите его сразу.
4. mark2_tourer 25.12.23 06:58 Сейчас в теме
(3) Таким образом?

&НаСервереБезКонтекста
Процедура ПолучательПриИзмененииНаСервере(Получатель, ПочтаПолучателя)
	Если Получатель.ПочтовыеЯщики.Количество() > 0 Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	Получатели.Наименование КАК Наименование,
		|	Получатели.ПочтовыеЯщики.(
		|		Почта КАК Почта
		|	) КАК ПочтовыеЯщики
		|ИЗ
		|	Справочник.Получатели КАК Получатели
		|ГДЕ
		|	Получатели.ПочтовыеЯщики.Ссылка = &Ссылка
		|	И Получатели.ПочтовыеЯщики.ПоУмолчанию = &Истина";
		
		Запрос.УстановитьПараметр("Ссылка", Получатель);
		Запрос.УстановитьПараметр("Истина", Истина);
		РезультатЗапроса = Запрос.Выполнить().Выбрать();
		РезультатЗапроса.Следующий();
		ПочтаПолучателя = РезультатЗапроса.Почта;
	Иначе 
		Сообщить("У выбранного пользователя не указана почта");
		ПочтаПолучателя = "";
	КонецЕсли;
КонецПроцедуры
Показать
5. starjevschik 25.12.23 08:18 Сейчас в теме
тут больше вопрос к самой идее. Что-то должно обновиться на форме, а некий запрос вызывается без контекста, т.е. ничего не знает о форме, а форма ничего не знает об этом запросе. Представляется очевидным, что для обновления чего-либо на форме должны вызываться какие-то методы, имеющие отношение к форме, разве нет?
6. mark2_tourer 25.12.23 09:03 Сейчас в теме
(5) Я, честно говоря, не знаю... Может можно другим способом отобразить почту получателя в реквизите?
7. yispepotri 25.12.23 09:13 Сейчас в теме
(6) в вашем контексте мне кажется достаточно добавить как у вас в процедуру "ПолучательПриИзменении", т.е. когда меняете реквизит получателя, динамически на форме проставляется почта этого получателя, которая выбирается из запроса
&НаСервере
8. mark2_tourer 25.12.23 16:51 Сейчас в теме
(7) Проблема решена

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


  |ГДЕ
  |    Получатели.Ссылка= &Получатель



Запрос.УстановитьПараметр("Получатель", Получатель);

Показать


а если будет нужно именно Наименование, то оставить его в выборке
Оставьте свое сообщение

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