Что такое момент времени 1с

Обновлено: 04.07.2024

Момент времени:
Фирма 1С описывает так:
Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени.
Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.

А своими словами:
Момент времени - комбинация даты и ссылки на документ. Позволяет разделить и упорядочить документы в пределах одной секунды, выстраивая все документы в однозначную последовательность. Получение данных при проведении на момент времени гарантирует, что будут учтены движения сделанные в ту же секунду что и проводимый документ, но находящиеся перед ним.
Но есть особенность - документы проведенные в одну и ту же секунду располагаются в произвольном порядке, а не в порядке их физического создания (как было в 7.7).

МоментВремени() - это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница
Код 1C v 8.х

При получение остатков:
"Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

Граница:
Предназначен для получения и хранения границы некоторого интервала значений. Содержит граничное значение интервала, а также признак включения или исключения граничного значения в интервал.
Используется в качестве значений свойств и параметров методов других объектов, имеющих тип Граница.
Граница используется в тех случаях, когда важно указание включения или исключения граничного значения, например при получении остатков и оборотов регистров накопления, срезов и значений регистров сведений, для задания интервалов запросов.

ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая - Граница включает граничное значение.
ВидГраницы.Исключая - Граница исключает граничное значение.
Код 1C v 8.х


Пример получения остатков на дату документа, включая его движения
Код 1C v 8.х

Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х

Момент времени:
Фирма 1С описывает так:
Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени.
Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.

А своими словами:
Момент времени - комбинация даты и ссылки на документ. Позволяет разделить и упорядочить документы в пределах одной секунды, выстраивая все документы в однозначную последовательность. Получение данных при проведении на момент времени гарантирует, что будут учтены движения сделанные в ту же секунду что и проводимый документ, но находящиеся перед ним.
Но есть особенность - документы проведенные в одну и ту же секунду располагаются в произвольном порядке, а не в порядке их физического создания (как было в 7.7).

МоментВремени() - это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница
Код 1C v 8.х

При получение остатков:
"Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

Граница:
Предназначен для получения и хранения границы некоторого интервала значений. Содержит граничное значение интервала, а также признак включения или исключения граничного значения в интервал.
Используется в качестве значений свойств и параметров методов других объектов, имеющих тип Граница.
Граница используется в тех случаях, когда важно указание включения или исключения граничного значения, например при получении остатков и оборотов регистров накопления, срезов и значений регистров сведений, для задания интервалов запросов.

ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая - Граница включает граничное значение.
ВидГраницы.Исключая - Граница исключает граничное значение.
Код 1C v 8.х


Пример получения остатков на дату документа, включая его движения
Код 1C v 8.х

Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х

Момент времени:
Фирма 1С описывает так:
Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени.
Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.

А своими словами:
Момент времени - комбинация даты и ссылки на документ. Позволяет разделить и упорядочить документы в пределах одной секунды, выстраивая все документы в однозначную последовательность. Получение данных при проведении на момент времени гарантирует, что будут учтены движения сделанные в ту же секунду что и проводимый документ, но находящиеся перед ним.
Но есть особенность - документы проведенные в одну и ту же секунду располагаются в произвольном порядке, а не в порядке их физического создания (как было в 7.7).

МоментВремени() - это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница
Код 1C v 8.х

При получение остатков:
"Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

Граница:
Предназначен для получения и хранения границы некоторого интервала значений. Содержит граничное значение интервала, а также признак включения или исключения граничного значения в интервал.
Используется в качестве значений свойств и параметров методов других объектов, имеющих тип Граница.
Граница используется в тех случаях, когда важно указание включения или исключения граничного значения, например при получении остатков и оборотов регистров накопления, срезов и значений регистров сведений, для задания интервалов запросов.

ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая - Граница включает граничное значение.
ВидГраницы.Исключая - Граница исключает граничное значение.
Код 1C v 8.х


Пример получения остатков на дату документа, включая его движения
Код 1C v 8.х

Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х

Для документа реквизит Дата включает в себя дату и время с точностью до секунды. При этом в случае неоперативного проведения документов возможна ситуация, когда для двух и более документов установлена одинаковая дата и одинаковое время:

Список документов с одинаковой датой и временем

Рисунок 1 – Список документов с одинаковой датой и временем

Чтобы данные документы разместить в хронологическом порядке, платформа использует объект Момент времени:

Расположение документов на оси времени

Рисунок 2 – Расположение документов на оси времени

Момент времени создается платформой автоматически, и изменить его в пределах одной секунды невозможно. Изменить хронологию документов можно, только переместив дату одного из документов на следующую секунду.

Момент времени представляет собой поле Дата+Ссылка:

Представление момента времени

Рисунок 3 – Представление момента времени

Момент времени используется для решения следующих задач:

  • Отображение списков документов в хронологическом порядке
  • Получение остатков из регистров на момент времени документа
  • Сортировка документов в запросе в хронологическом порядке.

Принципиален вопрос, как получать остатки из регистров накопления: на Дату документа или на Момент времени?

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

В этой статье рассмотрим работу со Временем в запросах 1С и встроенном языке 1С 8.3.

1. Дата-Время в процедурах и функциях 1С

Всего во встроенном языке 1С 8.3 существует 7 примитивных типов данных:

7. Тип (используется для сравнения с типом объекта метаданных).

Дата может быть как Дата-Дата (это значит, что в переменной есть только год, месяц и день), так и Дата-Время в 1С (это значит, что используется год, месяц, день, час, минута и секунда).

Дата-Дата выглядит как [00010101], где первые четыре символа – это год, потом два символа месяц и еще два символа дня (ГГГГММДД).

А вот Дата-Время в 1С выглядит как [00010101000000], где первые 8 символов это дата, а остальное это время: час, минута, секунда.

Для того чтобы правильно задавать значение Дата, нужно указывать значение переменной в одинарных кавычках. Например:



Для описания даты существует два способа. Один из них с использованием литерала. Литерал пишется в одинарных кавычках.

При необходимости можно указать и время, т.к. в системе 1С:Предприятие 8.3 любая дата содержит в себе и дату, и время. Например:



Второй способ определения даты – это использование функции глобального контекста Дата(<Значение>). В этом случае мы передаем в качестве параметров этой функции то же самое: год, месяц, день через запятую.

Также можно указать время. Если его не указывать, тогда оно будет равно по умолчанию.

В системе 1С:Предприятие 8.3 пустая дата – это самое начало календаря. Варианты записи:



И та и другая запись даст одинаковый результат, и эта дата будет считаться «пустой».

Удобство функции Дата в 1С (<Значение>) в том, что мы можем передавать в нее не конкретные значения, а какие-то переменные. Т.е., иногда мы дату конструируем, собирая разные переменные.

Для даты применимы арифметические операции сложения и вычитания. Операция сложения прибавляет к дате указанное количество секунд, вычитание же действует соответственно.

Также имеются различные свойства и методы. Пример:



В возвращаемом значении указанное Время не будет изменено. При указании Количества месяцев:

а) равного нулю, будет возвращен первый день месяца, указанного в Дата 1С.

б) числом со знаком минус – вычитает из Даты указанное число месяцев.

в) числом – прибавляет к Дате указанное число месяцев.

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

Так как остальные арифметические действия не требуют специальных подборов и проверок, то, например, прибавление к Дате количества дней не выделено в отдельный метод. Поэтому при необходимости расчетов рекомендуется писать свои небольшие вспомогательные функции общего назначения.

На практике, получая данные к обработке, мы видим чаще всего именно текст. Но не всегда значения являются Строкой. И для этих случаев необходимо написать алгоритм приведения к типам 1С. Так как во встроенном языке 1С при выполнении операции присвоения в том числе присваивается и Тип данных, то достаточно распознать и правильно присвоить временной переменной значение с необходимым типом. Для того чтобы это можно было использовать в более чем одном месте, алгоритм можно выделить в общий модуль 1С 8.3. При этом общий модуль 1С 8.3 должен быть со свойствами Клиент, Сервер или Клиент+Сервер.





В следствии такого усложнения требуется сначала проверять «на число». Причем довольно тривиальным способом. А именно, полученное Значение поместить в цикл, где с помощью метода СтрЗаменить() заменяем цифры от 0 до 9, точку и запятую (в программировании и западных системах принято разделять целую и десятичную часть именно точкой, а разряды разделять запятыми) значением «» (т.е. пустым значением). Таким образом, если у нас Значение останется пустым – это точно будет число. Но тогда мы только исключаем Булево и Строку, но не можем исключить Дату. Вот тогда мы будем проверять Значение на тип Дата 1С.

Здесь мы можем проверить «на длину», зная, что Дата — это всегда 8 символов. Иногда входящие данные могут быть «со временем». Тогда мы добавляем еще 6 символов. Таким образом, необходимо будет проверить «на длину», так как нужно будет понять, сколько разделителей будет в данных. В Дате можно заменить разделитель на точку, слэш (« / »), а также убрать его вовсе. Однако «во времени» необходимо будет убрать разделитель или также заменить на слэш и двоеточие, плюс - проверить на разрыв между датой и временем.

В данный момент преобразования типовыми методами не всегда работают как требуется. Поэтому Ваша смекалка при написании алгоритма приведения безусловно поможет.

2. Дата-Время в Запросах 1С

После проведения значения в тип Дата в 1С можно продолжить работать с ним. И теперь рассмотрим применение дата-время в запросах 1С. В Объекте Метаданных Дата-Время в 1С хранится в разных контейнерах. Например, для Документов имеется Стандартный реквизит Дата и тип МоментВремени.

Дата имеет те же свойства, что рассмотрены выше.

МоментВремени – это особое «Время». Оно включает в себя Дата-Время объекта, и его Ссылку. Это сделано для однозначного определения Момента на векторе времени. Так как несколько объектов могут иметь одинаковые Дата-Время (в клиент-серверном варианте работы), то потребовалось уточнение – и тогда добавили Ссылку. Ссылка сама по себе тоже уникальный реквизит, содержащий в числе прочего и GUID объекта.

Таким образом мы имеем не только Дату, но и более точный МоментВремени. И тогда в Запросе мы работаем с объектом для Проведения, то необходимо для большей точности использовать именно МоментВремени.

Сам МоментВремени предназначен для хранения (как описано выше) и получения момента времени объекта. Используется как метод МоментВремени(), возвращающий значение момента времени объекта ПЕРЕД самой позицией Документа на векторе времени (в таком случае говорят о «Границе слева»). Также существует момент времени объекта НЕПОСРЕДСТВЕННО в позиции Документа на векторе времени (в этом случае говорят о «Границе включая»).

Момент времени как часть понятия Времени требуется для правильного поиска данных в БД, с включением или без такового точки Времени. Для этого используется конструкция «Граница». Конструкция выглядит так:



Данная конструкция задает особый параметр Времени, используемый, преимущественно в Запросах. Первый параметр конструкции – это значение Дата-Время в 1С, которое будет взято для определения границы. Второй – это сам вид границы, который будет применяться.

Вид границы может быть:

1. «Включая» — это значит, что граница будет взята на точку Дата-Время в 1С.

2. «Исключая» — это значит, что граница будет взята ДО точки Дата-Время, т.е. «Граница слева».

Вообще эта ситуация довольно сложна в понимании. Ведь как можно считать саму секунду, но не включая ее – не так очевидно. Для большего понимания нарисуем:



На Рисунке схематично показано, что можно считать Границей Включая и Исключая. При этом если мы исключаем из границы точку времени, то все объекты, у которых момент времени попадает на такую точку, будут игнорированы. С включением в границу все строго наоборот.

Такая точность требуется для построения запроса с использованием Регистров накоплений, чтобы однозначно понимать вовлеченные документы в рамках указанной в параметрах границы.



Также работа с типом Дата в Запросах похожа на описание на встроенном языке в процедурах и функциях 1С 8.3. Однако есть некоторые ограничения по работе внутри Запроса. Поэтому в конструкторе Произвольных выражений можно вычленять и оперировать составными частями Дата-Время, используя широкий набор функций, например: ГОД, ЧАС, МИНУТА, ДОБАВИТЬКДАТЕ, РАЗНОСТЬДАТ, ДАТАВРЕМЯ и другие. Описание каждого метода можно с легкостью найти в сети и справочной информации.

Видим, что работа с Датой является непростой и имеет множество тонкостей. Обследуя поставленную задачу, нельзя пренебрегать такими тонкостями, чтобы в результате разработанного алгоритма не возникали ошибки.

Читайте также: