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