Готовишься к экзамену?
Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.
Вы дорабатываете автозаполнение документа «Ведомость в кассу» и в модуле формы вычисляете момент времени для служебной отметки. Переменная ДатаВыплаты имеет тип «Дата» (состав значения — только дата) и равна 01.03.2021 00:00:00. Чему будет равно выражение ДатаВыплаты + 20?
01.03.2021 00:00:20 (к исходной дате прибавится 20 секунд).
Правильно: во встроенном языке 1С при сложении значения типа «Дата» с числом это число трактуется как количество секунд, которое нужно прибавить к дате. Поэтому к 01.03.2021 00:00:00 добавится 20 секунд и получится 01.03.2021 00:00:20.
Будет ошибка, потому что нельзя складывать дату и число.
Неправильно: для типа «Дата» в 1С определена операция сложения с числом, и число интерпретируется как секунды. Ошибка возникла бы в других ситуациях (например, при некорректных типах или неверном порядке операндов в некоторых выражениях), но не в этом примере.
21.03.2021 00:00:00 (прибавится 20 дней).
Неправильно: прибавляется не количество дней, а количество секунд. Чтобы добавить 20 дней, пришлось бы прибавлять 20 * 24 * 60 * 60 секунд или использовать специализированные функции/методы добавления интервалов.
01.03.2021 20:00:00 (прибавится 20 часов).
Неправильно: 20 часов - это 72 000 секунд. В выражении прибавляется только 20 секунд, поэтому время изменится на 00:00:20, а не на 20:00:00.
01.03.2041 00:00:00 (прибавится 20 лет).
Неправильно: число при сложении с датой не является «годами». Для сдвига даты на годы/месяцы применяют другие подходы (например, функции добавления месяцев/лет), а обычное «+ число» всегда работает как прибавление секунд.
Пояснение
Расширенная подсказка (полезно для автозаполнения «Ведомости в кассу»):
1) Почему результат именно со временем
В 1С значение типа «Дата» всегда хранит не только календарную дату, но и время. Даже если у переменной «состав даты» задан как «Дата», платформа воспринимает ее как момент времени (обычно 00:00:00) и позволяет выполнять арифметику.
2) Главное правило арифметики с датами
Операция «Дата + Число» добавляет к дате секунды. Это удобно, когда в алгоритмах автозаполнения нужно:
- сдвинуть момент времени на небольшое значение (например, на 1-30 секунд);
- сформировать уникальный «момент» для отметки выполнения/логирования;
- аккуратно разнести по времени несколько действий в одном сценарии (в пределах одной минуты).
3) Как правильно добавлять дни/часы, если нужно именно это
- 1 час = 3600 секунд → Дата + 3600
- 1 день = 86400 секунд → Дата + 86400
Если требуются месяцы/годы, лучше применять специализированные функции добавления интервалов (а не умножать секунды), чтобы корректно учитывать разную длину месяцев.
4) Связь с автозаполнением «Ведомости в кассу» (лучшие практики)
Автозаполнение ведомости зависит от корректно указанного «Месяца выплаты», вида выплаты и наличия сумм к выплате. В доработках часто добавляют проверки дат/периодов и формируют отборы по моменту времени. Чтобы не получить «пустую ведомость», важно:
- правильно определять границы периода (например, «начало/конец дня» или «месяц выплаты»);
- не путать прибавление секунд с прибавлением дней/часов при вычислении дат для отборов;
- помнить, что даже «дата без времени» фактически имеет время 00:00:00, и небольшие сдвиги могут влиять на сравнения «<= / <» в условиях отбора.
Итог: выражение «ДатаВыплаты + 20» добавляет ровно 20 секунд. Это типовая особенность встроенного языка и часто встречается в прикладных доработках, в том числе связанных с заполнением и проверками в «Ведомости в кассу».