Определить минимальное значение в последовательности больше заданного

1. pentanom 24 24.12.16 11:19 Сейчас в теме
Есть регистр сведений, у которого два измерения "Объект" и "Дата".
Нужно найти для заданного объекта запись регистра с ближайшей следующий за заданной датой.
Условие: запрос не использовать.
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. vadim1011985 97 24.12.16 12:39 Сейчас в теме
Регистр не периодический ?
3. pentanom 24 24.12.16 12:52 Сейчас в теме
(2) Нет.
Это из следующей задачи: Объекты обслуживаются по заданному календарю. Нужно определить следующую дату обслуживания объектов.
4. vadim1011985 97 24.12.16 13:01 Сейчас в теме
Набор = регистрыСвединий. ВашРегистр.создатьНаборЗаписей()

МинДата=неопределено;

Набор.отбор.объект.установить(искомыйОбъект)

Набор.прочитать() ; 

Для каждого запись из набор цикл 
Если запись.дата < =заданнаядата тогда 
Продолжить
КонецЕсли; 

Если МинДата = неопределенно тогда 
МинДата = запись.Дата; 
НужнаяЗапись = запись;
ИначеЕсли МинДата> запись.Дата тогда 
НужнаяЗапись = запись; 
МинДата = запись.Дата; 
КонецЕсли;
КонецЦикла; 
Показать

Как-то так
5. pentanom 24 24.12.16 13:45 Сейчас в теме
(4) К сожалению, это длиннее, чем запросом.
Мне бы нужно было написать в условии, чтобы было короче.
Просто хочется красиво написать функцию определения этой даты, но так, чтобы ее можно было использовать и для получения последней дату обслуживания.

Если интересно, то исходная задача такая.
Есть несколько объектов, которые периодически должны обслуживаться. Для этого в конфигурации имеется справочник "Объекты контрагента". У элемента справочника есть реквизиты, среди которых есть периодичность обслуживания (через заданное количество дней, по дням недели, по календарю - заданным датам), дата последнего и следующего обслуживания и др.По заданной дате собираются задания на обслуживание объектов, которые фиксируются документами. При проведении этих документов даты последнего и следующего обслуживания должны измениться в прямом направлении (в будущее), а при отмене проведения - в обратном.
Сейчас написана следующая функция:

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


так вот все это хочется написать короче и в "прошлое".
Оставьте свое сообщение
Вакансии
Архитектор 1С
Москва
зарплата от 250 000 руб.
Полный день

1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день