Сохранить календарную дату без времени и расширить набор типов

Учебные задачи

Создаём тип даты с частью Дата, приводим известную дату-время, затем показываем копирование ОписаниеТипов с добавлением и вычитанием типов.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Все значения учебные и создаются в памяти; документы, регистры и рабочие данные не изменяются.

  2. Выполняйте на сервере учебной базы. Представление десятичного разделителя в сообщениях зависит от локали.


Квалификаторы = Новый КвалификаторыДаты(ЧастиДаты.Дата);
ТипДаты = Новый ОписаниеТипов("Дата", , , Квалификаторы);
ИсходнаяДата = Дата(2026, 9, 15, 15, 30, 45);
ТолькоДата = ТипДаты.ПривестиЗначение(ИсходнаяДата);
Сообщить(Формат(ТолькоДата, "ДФ=yyyy-MM-dd HH:mm:ss"));
Сообщить(Квалификаторы.ЧастиДаты);
Сообщить(ТипДаты.КвалификаторыДаты.ЧастиДаты);
ЧисловойТип = Новый ОписаниеТипов("Число");
Составной = Новый ОписаниеТипов(ЧисловойТип, "Строка");
СноваСтрока = Новый ОписаниеТипов(Составной, , "Число");
Сообщить(ЧисловойТип.СодержитТип(Тип("Строка")));
Сообщить(Составной.СодержитТип(Тип("Строка")));
Сообщить(Составной.СодержитТип(Тип("Число")));
Для Каждого РазрешённыйТип Из СноваСтрока.Типы() Цикл
    Сообщить(РазрешённыйТип);
КонецЦикла;

Разбор по шагам

  1. Дата с временем задана фиксированно, поэтому результат не зависит от текущих часов.

  2. КвалификаторыДаты передаются четвёртым параметром первого конструктора ОписаниеТипов.

  3. Приведение к части Дата удаляет время, но не выполняет преобразование часового пояса.

  4. Во втором варианте конструктора первый аргумент — существующее описание: добавляем Строка и затем вычитаем Число, не изменяя оригинал.

Как проверить результат

  1. Результат даты 2026-09-15 00:00:00; обе части даты — Дата.

  2. Проверки строкового типа: Ложь у оригинала, Истина у составного; Число также есть в составном.

  3. В СноваСтрока.Типы() остаётся только Строка.

Ожидаемый результат

Время намеренно отброшено; независимые описания типов расширены и сужены.

На что обратить внимание

  1. Часть Дата подходит для календарного дня, но не для точного момента внешнего события.

  2. Отбрасывание времени не заменяет конвертацию UTC в местный часовой пояс.

  3. Типы в составном описании — разрешённые варианты, а не одновременно несколько значений в одной переменной.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.