ошибка в запросе .следующий()

1. user2109808 20.01.25 11:54 Сейчас в теме
&НаКлиенте
Процедура Изменить(Команда, Результат)  Экспорт
	
	ДатаИзмененияСостава = ПолучитьПоследнююДатуЗаписи(Результат); // переменная для помещения последней записи в регистр 
	СледующаяДата = ДатаИзмененияСостава + (7*24*3600); //плюс неделя
	Разница = СледующаяДата - ТекущаяДата();
	Если Разница > 0 Тогда  
		Разница = РазбитьСекунды(Разница);   
	//	Элементы.ГруппаШапки.Доступность =  Ложь;
	//	Элементы.ГруппаДанных.Доступность = Ложь;
	//	Элементы.Детали.Доступность =       Ложь;
		ПоказатьПредупреждение(,"До изменения осталось " + Разница, 60, "Изменения запрещены!"); 
	Иначе 
		ОткрытьФорму("РегистрСведений.Спецификация.ФормаЗаписи");
	КонецЕсли;
КонецПроцедуры   


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

Показать



пытаюсь получить последнюю запись с РС. допустим выбираешь документ спецификации, нажимаешь на кнопку Изменить , код выше должен брать последнюю запись из рс с той деталью что в документе прописана , к примеру системный блок №1, он ищет по нему запись и потом считает сколько времени прошло с создания спецификации этого блока. если прошла неделя то он разрешает изменить или внести новую спецификацию.
проблема в том что этот код просматривает все записи и выдает самую большую дату, в итоге я получаю на все документы один и тот же запрет, осталось 6 дней 15 часов и т д секунд. Как исправить?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 81 20.01.25 11:58 Сейчас в теме
(1) Очевидно, задать отбор по нужному системному блоку.
3. user2109808 20.01.25 12:44 Сейчас в теме
(2)
&НаСервере 
Функция ПолучитьПоследнююДатуЗаписи(Дата, СистемныйБлок)
		
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СпецификацияСрезПоследних.ДатаСпецификации КАК Дата,
		|	СпецификацияСБ.СистемныйБлок КАК СистемныйБлок
		|ИЗ
		|	Документ.СпецификацияСБ КАК СпецификацияСБ
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Спецификация.СрезПоследних(&Дата, СистемныйБлок = &СистемныйБлок) КАК СпецификацияСрезПоследних
		|		ПО (СпецификацияСрезПоследних.Регистратор = СпецификацияСБ.Ссылка)
		|ГДЕ
		|	СпецификацияСБ.Проведен";
	
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("СистемныйБлок", СистемныйБлок);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Дата = ВыборкаДетальныеЗаписи.Дата;
	КонецЦикла;
	
	Возврат Дата;
	
КонецФункции
Показать



он перебирает все документы и выбирает документ с другим блоком и другим временем. как мне выбрать нужную запись??
4. user2107191 20.01.25 12:50 Сейчас в теме
(3)
он перебирает все документы
Ну так а накой ты в запросе используешь таблицу всех документов?
5. user2109808 20.01.25 13:04 Сейчас в теме
(4) просто из регистра что ли выбирать?
7. user2107191 20.01.25 13:07 Сейчас в теме
(5) Ну ты же в первом варианте выбирал просто из регистра, и тебя это никак не смущало. Что-то случилось за это время?
10. user2109808 20.01.25 13:14 Сейчас в теме
(7) ну я подумал что надо из связать как-то если берет не те данные
11. user2107191 20.01.25 13:23 Сейчас в теме
(10) Тебе сказали поставить отбор на нужные данные.
Ты если одной рукой спрашиваешь совета, то зачем оставшейся конечностью ломаешь исходник?
Как тебе помогать, если ты спрашиваешь совет для одного запроса, а применяешь его совсем в другом запросе?
13. user2109808 20.01.25 13:43 Сейчас в теме
(11)
&НаСервере 
Функция ПолучитьПоследнююДатуЗаписи(Ссылка, Дата, СистемныйБлок)  

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


ПРАВИЛЬНО ПОСТАВИЛ?
14. Sashares 33 20.01.25 13:48 Сейчас в теме
(13)
| ТИПЗНАЧЕНИЯ(СпецификацияСрезПоследних.Регистратор) = ТИП(ДОКУМЕНТ.СПЕЦИФИКАЦИЯСБ)
| И СпецификацияСрезПоследних.Регистратор.Ссылка = &Ссылка

Лишнее, имхо
15. user2109808 20.01.25 13:50 Сейчас в теме
(14) почему жалуется на ""Преобразование значения к типу Число не может быть выполнено", и дату вообще не получает"
строка СледующаяДата = ДатаИзмененияСостава + (7*24*3600); //плюс неделя
16. Sashares 33 20.01.25 13:57 Сейчас в теме
(15) Потому что если выборка пустая, функция вернет Неопределено.
А прибавлять число к Неопределено нельзя.
Почему выборка пустая - вопрос не ко мне.
17. user2109808 20.01.25 13:59 Сейчас в теме
(16) Ошибка чтения значения
18. user2109808 20.01.25 14:01 Сейчас в теме
(16) консоль выдала результат, запрос ничего
19. Sashares 33 20.01.25 14:02 Сейчас в теме
(18) Значит параметры запроса отличаются.
12. Bukaska 147 20.01.25 13:25 Сейчас в теме
(3) А какую вам нужно? Не до конца понимаю ваше ТЗ. Вам нужно по текущему документу? Тогда добавьте в условия Ссылку на документ и Запрос.УстановитьПараметр() - нужная ссылка на ваш текущий документ
6. пользователь 20.01.25 13:07
Сообщение было скрыто модератором.
...
8. пользователь 20.01.25 13:08
Сообщение было скрыто модератором.
...
9. пользователь 20.01.25 13:11
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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