1С 8.3 Проверка пересечения дат в выбранном периоде - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

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С 8.3:
// Функция проверяет, есть ли пересечение заданного периода с периодами документов в базе
//
// Параметры:
//  НачПериода - Дата - начальная дата проверяемого периода
//  КонПериода - Дата - конечная дата проверяемого периода
//
// Возвращаемое значение:
//  Булево - Истина, если найдены документы с пересекающимися периодами, Ложь - в противном случае
//
Функция ЕстьПересечениеДат(НачПериода, КонПериода)

   // Создаем новый запрос к базе данных
   Запрос = Новый Запрос;

   // Устанавливаем текст запроса для поиска пересекающихся периодов
   // Запрос ищет документы, у которых:
   // 1. Документ проведен
   // 2. Начало проверяемого периода меньше конца периода документа
   // 3. Конец проверяемого периода больше начала периода документа
   Запрос.Текст =
  "ВЫБРАТЬ
    |    ВашДокумент.Ссылка
    |ИЗ
    |    Документ.ВашДокумент КАК ВашДокумент
    |ГДЕ
    |    ПлановыйГрафикРаботы.Проведен
    |    И &НачПериода < ВашДокумент.КонПериода
    |            И &КонПериода > ВашДокумент.НачПериода"

   // Устанавливаем параметры запроса
   Запрос.УстановитьПараметр("НачПериода", НачПериода);
   Запрос.УстановитьПараметр("КонПериода", КонПериода);

   // Выполняем запрос
   РезультатЗапроса = Запрос.Выполнить();

   // Возвращаем Истину, если результат запроса не пустой (есть пересечения)
   // И Ложь, если результат пустой (пересечений нет)
   Возврат Не РезультатЗапроса.Пустой();

КонецФункции
2
комментарии
Администратор
19 апр 2024
Для Антона: ничего не надо менять. Все работает
Антон
18 апр 2024
Нужно знак < изменить на
____________________
Copyright©, «Программист 1С в г.Минске», 26.10.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому