Задать вопрос
Mag1str
@Mag1str

Как достать значение с регистра сведений в 1с?

В поле АктуальнаяПодписка нужно подтягивать значение Подписка с регистра сведений по срезу последних
документ в которой нужно подтягивать
61c353cd0bfcd214980961.png

регистр сведений
61c353801afcc347800127.png


Написал вот такой код. Что-то не так с запросом
&НаСервере
Процедура ПользовательПриИзмененииНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПодпискиПользователейСрезПоследних.Подписка КАК Подписка
		|ИЗ
		|	РегистрСведений.ПодпискиПользователей.СрезПоследних КАК ПодпискиПользователейСрезПоследних
		|ГДЕ
		|	ПодпискиПользователейСрезПоследних.Пользователь = &Пользователь";
	
	Запрос.УстановитьПараметр("Пользователь", Объект.Пользователь.Наименование);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	
	Если Объект.Пользователь.Наименование = Объект.Пользователь.Наименование Тогда
		
		ЭтотОбъект["АктуальнаяПодписка"] = ВыборкаДетальныеЗаписи.Подписка;
		
	КонецЕсли;
	
КонецПроцедуры
  • Вопрос задан
  • 1153 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
nki
@nki
bezkart.ru готовая система лояльности
Пользователь должен быть ссылкой на него, а не наименованием.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@WaterSmith
Android-разработчик. Java, Kotlin
С запросом всё так, точнее не так, но не заполняется оно у вас не поэтому.
Выборку то нужно обходить. Если вы уверены что там у вас одна запись, то вот так:
ВыборкаДетальныеЗаписи.Следующий();
ЭтотОбъект["АктуальнаяПодписка"] = ВыборкаДетальныеЗаписи.Подписка;

И у вас там условие странное.
Ответ написан
@Dementor
программист, архитектор, аналитик
1) При использовании виртуальных таблиц, таких как как СрезПоследних, отбор лучше указывать в параметрах виртуальной таблицы. Иначе при создании виртуальной таблицы тратится лишнее время на отбор записей, которые в принципе не нужны.

2) Судя по скрину в комментарии, "Пользователь" и "Подписка" - это измерения. Следовательно в срезе последних для одного пользователя может быть несколько подписок и не все из них будут актуальными. Условие по актуальности нужно прописать в условии запроса и передать туда параметром дату актуальности документа (в зависимости от задачи может не равняться текущему времени)

3) Чтобы получать доступ к данным выборки запроса, следует использовать метод Следующий()
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
ВыборкаДетальныеЗаписи.Следующий(); // позиционирование на первую запись
ВыборкаДетальныеЗаписи.Следующий(); // позиционирование на вторую запись
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы