1С 8.3 Проверка пересечения дат в выбранном периоде
Данные > Примеры кода 1С > 1С 8.3 Дата и время
Перейти в основной раздел:


Функция определяет вхождение одного временного периода в другой.
Период №1: НачПериода1 - КонПериода1
Период №2: НачПериода2 - КонПериода2
Проверка периода на вхождение одной даты в другую в 1С 8.3:
Функция ВычислениеПересеченияПериодов(НачПериода1, КонПериода1, КонПериода2, НачПериода2) Экспорт
ПериодыПересекаются = Ложь;
Если Макс(НачПериода1,НачПериода2) < Мин(КонПериода1,КонПериода2) Тогда
ПериодыПересекаются = Истина;
КонецЕсли;
// или ПериодыПересекаются = Макс(НачПериода1, НачПериода2) < Мин(КонПериода1, КонПериода2);
Возврат ПериодыПересекаются;
КонецФункции
&НаКлиенте
Процедура Тест()
НачДата1 = Дата(2021, 10, 26);
КонДата1 = Дата(2021, 11, 22);
НачДата2 = Дата(2021, 10, 28);
КонДата2 = Дата(2021, 12, 03);
Сообщить(ВычислениеПересеченияПериодов(НачДата1, КонДата1, КонДата2, НачДата2)); // Да
НачДата1 = Дата(2021, 10, 26);
КонДата1 = Дата(2021, 11, 22);
НачДата2 = Дата(2021, 11, 23);
КонДата2 = Дата(2021, 12, 03);
Сообщить(ВычислениеПересеченияПериодов(НачДата1, КонДата1, КонДата2, НачДата2)); // Нет
КонецПроцедуры
ПериодыПересекаются = Ложь;
Если Макс(НачПериода1,НачПериода2) < Мин(КонПериода1,КонПериода2) Тогда
ПериодыПересекаются = Истина;
КонецЕсли;
// или ПериодыПересекаются = Макс(НачПериода1, НачПериода2) < Мин(КонПериода1, КонПериода2);
Возврат ПериодыПересекаются;
КонецФункции
&НаКлиенте
Процедура Тест()
НачДата1 = Дата(2021, 10, 26);
КонДата1 = Дата(2021, 11, 22);
НачДата2 = Дата(2021, 10, 28);
КонДата2 = Дата(2021, 12, 03);
Сообщить(ВычислениеПересеченияПериодов(НачДата1, КонДата1, КонДата2, НачДата2)); // Да
НачДата1 = Дата(2021, 10, 26);
КонДата1 = Дата(2021, 11, 22);
НачДата2 = Дата(2021, 11, 23);
КонДата2 = Дата(2021, 12, 03);
Сообщить(ВычислениеПересеченияПериодов(НачДата1, КонДата1, КонДата2, НачДата2)); // Нет
КонецПроцедуры
Проверка пересечения периодов (интервалов дат) с помощью запроса в 1С 8.3:
// Функция проверяет, есть ли пересечение заданного периода с периодами документов в базе
//
// Параметры:
// НачПериода - Дата - начальная дата проверяемого периода
// КонПериода - Дата - конечная дата проверяемого периода
//
// Возвращаемое значение:
// Булево - Истина, если найдены документы с пересекающимися периодами, Ложь - в противном случае
//
Функция ЕстьПересечениеДат(НачПериода, КонПериода)
// Создаем новый запрос к базе данных
Запрос = Новый Запрос;
// Устанавливаем текст запроса для поиска пересекающихся периодов
// Запрос ищет документы, у которых:
// 1. Документ проведен
// 2. Начало проверяемого периода меньше конца периода документа
// 3. Конец проверяемого периода больше начала периода документа
Запрос.Текст =
"ВЫБРАТЬ
| ВашДокумент.Ссылка
|ИЗ
| Документ.ВашДокумент КАК ВашДокумент
|ГДЕ
| ПлановыйГрафикРаботы.Проведен
| И &НачПериода < ВашДокумент.КонПериода
| И &КонПериода > ВашДокумент.НачПериода"
// Устанавливаем параметры запроса
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
// Выполняем запрос
РезультатЗапроса = Запрос.Выполнить();
// Возвращаем Истину, если результат запроса не пустой (есть пересечения)
// И Ложь, если результат пустой (пересечений нет)
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
//
// Параметры:
// НачПериода - Дата - начальная дата проверяемого периода
// КонПериода - Дата - конечная дата проверяемого периода
//
// Возвращаемое значение:
// Булево - Истина, если найдены документы с пересекающимися периодами, Ложь - в противном случае
//
Функция ЕстьПересечениеДат(НачПериода, КонПериода)
// Создаем новый запрос к базе данных
Запрос = Новый Запрос;
// Устанавливаем текст запроса для поиска пересекающихся периодов
// Запрос ищет документы, у которых:
// 1. Документ проведен
// 2. Начало проверяемого периода меньше конца периода документа
// 3. Конец проверяемого периода больше начала периода документа
Запрос.Текст =
"ВЫБРАТЬ
| ВашДокумент.Ссылка
|ИЗ
| Документ.ВашДокумент КАК ВашДокумент
|ГДЕ
| ПлановыйГрафикРаботы.Проведен
| И &НачПериода < ВашДокумент.КонПериода
| И &КонПериода > ВашДокумент.НачПериода"
// Устанавливаем параметры запроса
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
// Выполняем запрос
РезультатЗапроса = Запрос.Выполнить();
// Возвращаем Истину, если результат запроса не пустой (есть пересечения)
// И Ложь, если результат пустой (пересечений нет)
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
2
комментарии
Администратор
19 апр 2024
Для Антона: ничего не надо менять. Все работает
Антон
18 апр 2024
Нужно знак < изменить на
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник