Производит сравнение момента времени с другим моментом времени.
Синтаксис
Сравнить(<МоментВремени>)Примеры платформы
Момент1 = Новый МоментВремени(Док1.Дата, Док1);
Момент2 = Новый МоментВремени(Док2.Дата, Док2);
Если Момент1.Сравнить(Момент2) = -1 Тогда
Момент1 = Момент2;
КонецЕсли;Полное описание, параметры и ограничения
МоментВремени.Сравнить (PointInTime.Compare)
МоментВремени (PointInTime)
Сравнить (Compare)
Доступен, начиная с версии 8.0.
Синтаксис:
Сравнить(<МоментВремени>)
Параметры:
<МоментВремени> (обязательный)
Тип: МоментВремени.
Момент времени, с которым производится сравнение.
Возвращаемое значение:
Тип: Число.
-1 - если момент времени меньше другого момента времени, 0 - если момент времени равен другому моменту времени, 1 - если момент времени больше другого момента времени.
Описание:
Производит сравнение момента времени с другим моментом времени.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Момент1 = Новый МоментВремени(Док1.Дата, Док1);
Момент2 = Новый МоментВремени(Док2.Дата, Док2);
Если Момент1.Сравнить(Момент2) = -1 Тогда
Момент1 = Момент2;
КонецЕсли;
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Сравнить два момента времени: −1, 0 и 1
МоментВремени отличается от простой даты наличием необязательной ссылки. Сначала сравним собственные даты без ссылок, чтобы понять контракт Сравнить.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Выполняйте на сервере учебной базы; объекты конфигурации и файлы не нужны.
Три момента создаются прямо в коде; второй параметр конструктора намеренно не задан.
Ранний = Новый МоментВремени(Дата(2024, 2, 5, 10, 0, 0));
Поздний = Новый МоментВремени(Дата(2024, 2, 5, 11, 0, 0));
РавныйРаннему = Новый МоментВремени(Дата(2024, 2, 5, 10, 0, 0));
Сообщить(Ранний.Сравнить(Поздний) = -1);
Сообщить(Поздний.Сравнить(Ранний) = 1);
Сообщить(Ранний.Сравнить(РавныйРаннему) = 0);
Сообщить(Ранний.Сравнить(Ранний) = 0);
Сообщить(Ранний.Дата = Дата(2024, 2, 5, 10, 0, 0));
Сообщить(Ранний.Ссылка = Неопределено);
Сообщить(Поздний.Дата - Ранний.Дата = 3600);Разбор по шагам
Конструктор сохраняет дату и необязательную ссылку. Без ссылки Ссылка содержит Неопределено.
Сравнить возвращает число: −1 для меньшего, 0 для равного, 1 для большего, а не Булево.
Проверяем прямое и обратное сравнение, равенство разных объектов с одинаковыми значениями и сравнение с самим собой.
Разность именно дат показывает 3600 секунд. Результат Сравнить не является числом секунд между моментами.
Как проверить результат
Все семь логических сообщений дают Истина.
Временной интервал равен часу, но Сравнить даёт только −1/0/1.
Никакой документ, движение или ссылка на запись этим кодом не создаются.
Ожидаемый результат
Освоен трёхзначный результат сравнения на полностью воспроизводимых датах.
На что обратить внимание
Не пишите Если Ранний.Сравнить(Поздний) Тогда: результат числовой, явно сравнивайте с −1, 0 или 1.
Свойства Дата и Ссылка только читаются. Для другого значения создайте новый МоментВремени.
Сравнение момента времени не является преобразованием часовых поясов.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Получить момент двух учебных движений до записи набора
Момент записи связывает её период с регистратором. Два движения одного планового регистратора имеют разные периоды; сравниваем их, не записывая набор.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу, имя корневой конфигурации УчебныеОстатки85. Не добавляйте эти объекты в УТ/КА2/УНФ/БП. Режим управления блокировкой данных конфигурации — Управляемый.
Документы → Добавить: УчебноеДвижение85. Номер: Строка длиной 40, автонумерация выключена. Модули объекта и менеджера оставьте пустыми; не добавляйте обработчики, подписки и обязательные пользовательские реквизиты.
Регистры накопления → Добавить: УчебныеОстатки85. Вид регистра Остатки. Единственное измерение КодТовара: Строка 50, индексировать, проверка заполнения Показывать ошибку. Единственный ресурс Количество: Число 12,3, неотрицательное. Дополнительных реквизитов нет.
В списке регистраторов выберите только собственный документ УчебноеДвижение85. Оставьте модули регистра пустыми, использование итогов включённым. Планы обмена, разделители, историю данных и фоновые задания для урока не создавайте.
Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду собственной обработки. Фрагмент вставьте внутрь ВыполнитьПример() Экспорт; запускайте задачи по отдельности.
Первые задачи работают с незаписанными наборами. Только задачи с пометкой «в собственной транзакции» временно записывают два собственных документа и движения, затем обязательно отменяют транзакцию. В рабочей базе этот код не запускайте.
Если Метаданные.Документы.Количество() <> 1
Или Метаданные.РегистрыНакопления.Количество() <> 1
Или Метаданные.Документы.Найти("УчебноеДвижение85") = Неопределено Тогда
ВызватьИсключение "Разрешены только собственный учебный документ и регистр";
КонецЕсли;
Описание = Метаданные.РегистрыНакопления.Найти("УчебныеОстатки85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Сначала создайте собственный учебный регистр";
КонецЕсли;
Если Описание.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки
Или Описание.Измерения.Количество() <> 1
Или Описание.Ресурсы.Количество() <> 1
Или Описание.Реквизиты.Количество() <> 0
Или Описание.Измерения.Найти("КодТовара") = Неопределено
Или Описание.Ресурсы.Найти("Количество") = Неопределено Тогда
ВызватьИсключение "Нужен регистр остатков с КодТовара и Количество";
КонецЕсли;
Менеджер = РегистрыНакопления.УчебныеОстатки85;
Код = "TRAIN-" + Строка(Новый УникальныйИдентификатор);
СсылкаНаНесохраненный = Документы.УчебноеДвижение85.ПолучитьСсылку(Новый УникальныйИдентификатор);
Набор = Менеджер.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаНесохраненный);
Приход = Набор.ДобавитьПриход();
Приход.Период = Дата(2026, 9, 15, 10, 0, 0);
Приход.Регистратор = СсылкаНаНесохраненный;
Приход.Активность = Истина;
Приход.КодТовара = Код;
Приход.Количество = 3;
Расход = Набор.ДобавитьРасход();
Расход.Период = Дата(2026, 9, 15, 11, 0, 0);
Расход.Регистратор = СсылкаНаНесохраненный;
Расход.Активность = Истина;
Расход.КодТовара = Код;
Расход.Количество = 1;
МоментПрихода = Приход.МоментВремени();
МоментРасхода = Расход.МоментВремени();
Сообщить(МоментПрихода.Дата = Приход.Период);
Сообщить(МоментРасхода.Дата = Расход.Период);
Сообщить(МоментПрихода.Ссылка = Приход.Регистратор);
Сообщить(МоментРасхода.Ссылка = Расход.Регистратор);
Сообщить(МоментПрихода.Сравнить(МоментРасхода) = -1);
Сообщить(МоментРасхода.Сравнить(МоментПрихода) = 1);
Сообщить(Набор.Количество() = 2);
Сообщить(СсылкаНаНесохраненный.ПолучитьОбъект() = Неопределено);Разбор по шагам
В собственной схеме создаём набор с приходом в 10:00 и расходом в 11:00. Один случайный плановый регистратор назначен обеим строкам.
МоментВремени вызывается у записи регистра, не у самого набора и не у количества товара.
Проверяем Дата/Ссылка результата отдельно. Различные периоды дают прямое сравнение −1 и обратное 1.
Плановый регистратор и набор не записаны. Последняя проверка подтверждает отсутствие документа по собственной ссылке.
Как проверить результат
Все восемь логических сообщений дают Истина.
Набор содержит две строки в памяти; моменты содержат их периоды и одного регистратора.
Временные движения и документ не появляются в базе.
Ожидаемый результат
Разобран момент записи накопления на собственных незаписанных движениях.
На что обратить внимание
Дата момента записи относится к её Период, а не автоматически к дате уже существующего документа.
Для независимого регистра сведений этот метод использовать нельзя: его контракт требует Подчинение регистратору.
Проверка момента не рассчитывает остатки и не подтверждает проведённость документа.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.