Как указать дату в 1с
Перейти к содержимому

Как указать дату в 1с

  • автор:

Как указать дату в 1с

Дата публикации 22.09.2023

Использован релиз 3.0.142

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

Если вводится большое количество документов с датой, отличной от текущей, то на период такой работы удобно в качестве рабочей даты программы установить произвольную дату:

  • Раздел: ГлавноеПерсональные настройки.
  • В открывшейся форме установите переключатель «Рабочая дата» в положение:
    • «Другая дата» – если необходимо установить произвольную дату, отличную от текущей даты компьютера (все документы будут создаваться на указанную произвольную дату).
    • «Текущая дата компьютера» – если необходимо вернуть текущую дату компьютера для автоматической подстановки в новые документы (все документы будут создаваться на текущую дату компьютера).

    Подпишитесь на новости

    Не пропускайте последние новости — подпишитесь
    на бесплатную рассылку сайта:

    • десятки экспертов ежедневно мониторят изменения законодательства и судебную практику;
    • рассылка бесплатная, независимо от наличия договора 1С:ИТС;
    • ваш e-mail не передается третьим лицам;

    Функции дат в 1С

    В прошлой статье мы узнали, что такое дата и как с неё работать. В этой статье изучим основные функции работы с датами в 1С 8.3.

    Текущая дата в 1С

    В 1С имеется возможность получить текущую дату, ту дату, которая выставлена в данный момент в операционной системе компьютера. Делается это при помощи метода ТекущаяДата.

    Этот метод является функцией, не имеет параметров и с его помощью можно получить текущую дату в 1С 8.3.

    ТекДата = ТекущаяДата(); Сообщить("Текущая дата: " + ТекДата); 

    Посмотрим, что возвращает этот код

    Текущая дата в 1С

    Как вы могли заметить, текущая дата получена в полном формате (год, месяц, день, час, минута и секунда), т.е. текущая дата у нас возвращается с точностью до секунды.

    Определить год, месяц, день, час, минуту и секунду даты в 1С

    В платформе 1С имеются методы, которые возвращают числовое представление года, месяца, дня, часа, минут и секунды определенной даты. Данные методы так и называются

    Год() – возвращает год даты

    Месяц() – возвращает месяц даты

    День() – возвращает день даты

    Час() – возвращает час даты

    Минута() – возвращает минут даты

    Секунда() – возвращает секунду даты

    Рассмотрим пример, в котором возьмем текущую дату и вернем год, месяц, час, минуту и секунду этой даты.

    ТекДата = ТекущаяДата(); Тек_Год = Год(ТекДата); Тек_Месяц = Месяц(ТекДата); Тек_День = День(ТекДата); Тек_Час = Час(ТекДата); Тек_Минута = Минута(ТекДата); Тек_Секунда = Секунда(ТекДата); Сообщить("У даты " + ТекДата + ", год: " + Тек_Год + ", месяц: " + Тек_Месяц + ", день: " + Тек_День + ", час: " + Тек_Час + ", минута: " + Тек_Минута + ", секунда: " + Тек_Секунда); 

    И результат работы этого кода.

    Методы 1С год, месяц, день, число, минута, секунда

    Дата начала и дата конца периода в 1С

    В платформе 1С 8.3. имеется возможность определить начало и конец периода даты, которому она принадлежит.

    Возьмем, например, дату 10.09.2017 – начала месяца этой даты будет 01.09.2017, а начало года – 01.01.2017. И противоположное, у этой даты конец месяца – 30.09.2017, а конец года -31.12.2017.

    Делается это при помощи следующих методов:

    • НачалоГода() — возвращает начало года даты
    • НачалоКвартала() — возвращает начало квартала даты
    • НачалоМесяца() — возвращает начало месяца даты
    • НачалоНедели() — возвращает начало недели даты
    • НачалоДня()- возвращает начало дня даты
    • НачалоЧаса() — возвращает начало часа даты
    • НачалоМинуты() — возвращает начало минуты даты

    И противоположные методы:

    • КонецГода() — возвращает конец года даты
    • КонецКвартала() — возвращает конец квартала даты
    • КонецМесяца() — возвращает конец месяца даты
    • КонецНедели() — возвращает конец недели даты
    • КонецДня() — возвращает конец дня даты
    • КонецЧаса() — возвращает конец часа даты
    • КонецМинуты() — возвращает конец минуты даты

    Данные методы являются функциями, которые имеют один параметр с типом дата и возвращают соответствующую дату.

    Рассмотрим пример, в котором будем получать начало и конец квартала текущей даты, начало и конец недели текущей даты, и начало и конец часа текущей даты. В этом примере будет шесть методов: НачалоКвартала, НачалоНедели, НачалоЧаса, КонецКвартала, КонецНедели, КонецЧаса. Остальные методы определения начала и конца периода работают аналогично.

    ТекДата = ТекущаяДата(); НачКвартала = НачалоКвартала(ТекДата); НачНедели = НачалоНедели(ТекДата); НачЧаса = НачалоЧаса(ТекДата); КонКвартала = КонецКвартала(ТекДата); КонНедели = КонецНедели(ТекДата); КонЧаса = КонецЧаса(ТекДата); Сообщить("У даты " + ТекДата + " начало квартала: " + НачКвартала + " конец квартала: " + КонКвартала); Сообщить("У даты " + ТекДата + " начало недели: " + НачНедели + " конец недели: " + КонНедели); Сообщить("У даты " + ТекДата + " начало часа: " + НачЧаса + " конец часа: " + КонЧаса); 

    И результат работы этих методов.

    Дата начала и дата конца периода

    Неделя года, день года и день недели

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

    НеделяГода() – возвращает порядковый номер недели в году, на которую приходится дата.

    ДеньГода() – возвращает порядковый номер дня года указанной даты.

    ДеньНедели() – возвращает порядковый номер дня недели указанной даты.

    Сделаем пример, в котором у текущей даты определим какой день недели (понедельник, вторник и т.д.), какой день года, и какая неделя в году.

    ТекДата = ТекущаяДата(); НеделяГода = НеделяГода(ТекДата); ДеньГода = ДеньГода(ТекДата); ДеньНедели = ДеньНедели(ТекДата); Если ДеньНедели = 1 Тогда СообщениеДня = "сегодня понедельник"; ИначеЕсли ДеньНедели = 2 Тогда СообщениеДня = "сегодня вторник"; ИначеЕсли ДеньНедели = 3 Тогда СообщениеДня = "сегодня среда"; ИначеЕсли ДеньНедели = 4 Тогда СообщениеДня = "сегодня четверг"; ИначеЕсли ДеньНедели = 5 Тогда СообщениеДня = "сегодня пятница"; ИначеЕсли ДеньНедели = 6 Тогда СообщениеДня = "сегодня суббота"; ИначеЕсли ДеньНедели = 7 Тогда СообщениеДня = "сегодня воскресенье"; КонецЕсли; Сообщить("У даты " + ТекДата + " " + СообщениеДня + ", день года: " + ДеньГода + ", неделя года: " + НеделяГода); 

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

    Неделя года, день года и день недели

    Добавить месяц к дате в 1С

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

    ТекДата = ТекущаяДата(); ТекДатаПлюсЧас = ТекДата + 3600; 

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

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

    Этот метод является функцией, возвращает переменную с типом дата и имеет следующий синтаксис:

    Этот метод добавляет или вычитает из даты в первом параметре количество месяцев из второго параметра.

    Рассмотрим пример: добавим к текущей дате месяц и год, а также вычтем из текущей даты месяц и год.

    ТекДата = ТекущаяДата(); ТекДатаПлюсМесяц = ДобавитьМесяц(ТекДата,1); ТекДатаМинусМесяц = ДобавитьМесяц(ТекДата,-1); ТекДатаПлюсГод = ДобавитьМесяц(ТекДата,12); ТекДатаМинусГод = ДобавитьМесяц(ТекДата,-12); Сообщить("Текущая дата: " + ТекДата + ", ""+"" месяц: " + ТекДатаПлюсМесяц + ", ""-"" месяц: " + ТекДатаМинусМесяц); Сообщить("Текущая дата: " + ТекДата + ", ""+"" год: " + ТекДатаПлюсГод + ", ""-"" год: " + ТекДатаМинусГод); 

    И результат этого кода:

    Добавить месяц к дате

    Другие статьи о примитивных типах:

    Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
    Книга «Программировать в 1С за 11 шагов»

    Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

    Программировать в 1С за 11 шагов

    Книга написана понятным и простым языком — для новичка.

    1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
    2. Научитесь понимать архитектуру 1С;
    3. Станете писать код на языке 1С;
    4. Освоите основные приемы программирования;
    5. Закрепите полученные знания при помощи задачника.

    О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

    Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

    Основы разработки в 1С такси

    1. Очень доступный и понятный язык изложения
    2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
    3. Поймете идеологию управляемого приложения 1С
    4. Узнаете, как разрабатывать управляемое приложение;
    5. Научитесь разрабатывать управляемые формы 1С;
    6. Сможете работать с основными и нужными элементами управляемых форм
    7. Программирование под управляемым приложением станет понятным

    Промо-код на скидку в 15% — 48PVXHeYu

    Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
    Только для читателей моего блога,
    промо-код на скидку в 300 рублей на весь комплект: blog


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

    можно оплатить вручную:

    Яндекс.Деньги — 410012882996301
    Web Money — R955262494655

    Вступайте в мои группы:

    Программная работа с датой

    Тип данных Дата позволяет привязывать события учета к шкале времени. Для этого значения типа Дата могут хранить три варианта даты:

    • только дату 01.01.2020
    • только время 10:30:00
    • дату и время 01.01.2020 10:30:00

    На физическом уровне (в таблицах базы данных) тип Дата хранится в числовом виде, представляя количество секунд, прошедшее с 1 января 0001 года. Верхняя граница технически ограничена значением 31.12.3999 23:59:59

    Дату в коде можно представить двумя способами:

    1. Как литерал, заключенный в одинарные кавычки: ‘20200101’ — только дата; ‘20200101103000’ — дата и время
    2. С помощью функции Дата(), конструирующей дату из составных частей: Дата(2020, 1, 1) — только дата; Дата(2020, 1, 1, 10, 30, 0) — дата и время

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

    20200101103000 (дата + время) ГГГГ----------- номер года ММ--------- номер месяца ДД------- номер дня месяца чч----- час мм--- минута сс- секунда

    Операции с датой

    Сложение

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

    НоваяДата = НачалоЧаса(ТекущаяДата()) + 3600; 

    Здесь важно соблюдать последовательность операндов: на первом месте должна идти дата, а затем число. Например, следующий код будет ошибочным:

    НоваяДата = 3600 + ТекущаяДата();//неверно. 

    Причем, с ошибкой Вы столкнетесь только на этапе выполнения программы!

    Вычитание

    Вычитание — операция обратная от сложения. Это равноценно тому, что мы прибавляли бы к дате отрицательное значение. Здесь также важно соблюдать последовательность:

    НоваяДата = НачалоЧаса(ТекущаяДата()) - 3600; 

    Кроме того, можно из одной даты, вычесть другую и мы получим длину интервала в секундах:

    ДатаНачала = Дата(2020,1,1,10,30,0); ДатаОкончания = Дата(2020,1,1,11,30,0); ДлинаИнтервала = ДатаОкончания - ДатаНачала; Сообщить(ДлинаИнтервала); //Результат: // 3 600 

    Склеивание (конкатенация)

    В том случае, если вы работаете со строковыми представлениями даты, возможна обычная конкатенация (склеивание) строк:

    НачалоДня = "20200101"; ДесятьЧасов = "100000"; НоваяДата = НачалоДня + ДесятьЧасов; Сообщить(Дата(НоваяДата)); //результат: 01.01.2020 10:00:00 

    Функции работы с датой

    Дата() функция преобразования к типу дата
    ТекущаяДата() возвращает текущую дату
    НачалоДня() возвращает дату и время начала дня для даты
    КонецДня() возвращает дату и время конца дня для даты
    ДобавитьМесяц() добавляет к дате целое число месяцев
    ДеньНедели() возвращает номер дня недели для даты

    Внимание! В таблице перечислены не все функции работы с датой

    1С 8.3 Дата и время — Программист 1С Минск. Автоматизация бизнеса.

    ПРИМЕРЫ КОДА 1С

    Дата в 1С 8.3 — это примитивный тип данных, который всегда имеет формат: год, месяц, день, час, минута, секунда. Поэтому переменная типа дата содержит не только дату, но и время. Простой способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках вида ‘ГГГГММДДччммсс’ (если часы, минуты и секунды не указывать, то они приравниваются к 00:00:00) где:

    ГГГГ — четыре цифры года (включая тысячелетие и век);
    ММ — две цифры месяца;
    ДД — две цифры даты;
    чч — две цифры часа (в 24-х часовом формате);
    мм — две цифры минут;
    сс — две цифры секунд.

    Оглавление:

    ✔ Работа с датой и временем

    Работа с датой и временем в 1С 8.3:

    &НаКлиенте
    Процедура РаботаСДатойИВременем ( Команда )

    // Установка даты в переменную
    ТолькоДата = ‘20200415’ ; // 15.04.2020

    // Преобразование строки в дату
    ТолькоДата = Дата ( «20200415» ); // 15.04.2020

    // Преобразование чисел в дату отдельными частями
    ТолькоДата = Дата ( 2020 , 04 , 15 ); // 15.04.2020

    // Установка в дате: часы, минуты и секунды
    ДатаВремя = ‘20200415162703’ ; // 15 апреля 2020 г. 16 ч. 27 мин. 03 сек.

    // Получение года (месяца, дня, часа, минуты, секунды) у даты
    Год_Даты = Год ( ДатаВремя ); // 2020
    Месяц_Даты = Месяц ( ДатаВремя ); // 4
    День_Даты = День ( ДатаВремя ); // 15
    Час_Даты = Час ( ДатаВремя ); // 16
    Минута_Даты = Минута ( ДатаВремя ); // 27
    Секунда_Даты = Секунда ( ДатаВремя ); // 03

    // Прибавление к дате 3 секунды
    Сообщить ( ДатаВремя + 3 ); // 15.04.2020 16:27:06

    // Прибавление к дате два месяца
    Сообщить ( ДобавитьМесяц ( ДатаВремя , 2 )); // 15.06.2020 16:27:03

    // Вычитание от даты одного месяца
    Сообщить ( ДобавитьМесяц ( ДатаВремя , — 1 )); // 15.03.2020 16:27:03

    // Получение текущей (рабочей) даты
    Сообщить ( ТекущаяДата ());

    Прибавить день к дате или вычесть день из даты в 1С 8.3:

    // вариант 1:
    &НаКлиенте
    Процедура ОперацииДеньДата ( Команда )

    Сообщить ( МатематикаДень ( ‘20200415’ , 1 )); //16.04.2020 0:00:00
    Сообщить ( МатематикаДень ( ‘20200415’ , — 1 )); //14.04.2020 0:00:00

    &НаКлиенте
    Функция МатематикаДень ( Дата , ЧислоДней )

    Возврат Дата + 86400 * ЧислоДней ; // 86400 сек.

    // или вариант 2 (менее универсальный):
    &НаКлиенте
    Функция ПолучитьСледующийДень ( Дата )

    // с помощью функции КонецДня прибавляем секунду к 15.04.2020 23:59:59

    Возврат КонецДня ( Дата )+ 1 ; // и получаем следующий день 16.04.2020 00:00:00

    КонецФункции
    Дополнительные функции при работе с датой в 1С 8.3:

    &НаКлиенте
    Процедура ДополнительныеФункцииДаты ( Команда )

    // Указываем дату явно:
    ДатаВремя = ‘20200415162703’ ; // 15 апреля 2020 г. 16:27:03
    //или
    ДатаВремя = ‘2020.04.15:16:27:03’ ; // 15 апреля 2020 г. 16:27:03

    Сообщить ( ДеньГода ( ДатаВремя )); // 15

    Сообщить ( ДеньНедели ( ДатаВремя )); // 3 — Среда (нумерация с понедельника «1»)

    Сообщить ( НеделяГода ( ДатаВремя )); // 3 Неделя

    Сообщить ( НачалоГода ( ДатаВремя )); // 01.01.2020 0:00:00
    Сообщить ( КонецГода ( ДатаВремя )); // 31.12.2020 23:59:59

    Сообщить ( НачалоКвартала ( ДатаВремя )); // 01.04.2020 0:00:00
    Сообщить ( КонецКвартала ( ДатаВремя )); // 30.06.2020 23:59:59

    Сообщить ( НачалоМесяца ( ДатаВремя )); // 01.04.2020 0:00:00
    Сообщить ( КонецМесяца ( ДатаВремя )); // 30.04.2020 23:59:59

    Сообщить ( НачалоНедели ( ДатаВремя )); // 13.04.2020 0:00:00
    Сообщить ( КонецНедели ( ДатаВремя )); // 19.04.2020 23:59:59

    Сообщить ( НачалоДня ( ДатаВремя )); // 15.04.2020 0:00:00
    Сообщить ( КонецДня ( ДатаВремя )); // 15.04.2020 23:59:59

    Сообщить ( НачалоЧаса ( ДатаВремя )); // 15.04.2020 16:00:00
    Сообщить ( КонецЧаса ( ДатаВремя )); // 15.04.2020 16:59:59

    Сообщить ( НачалоМинуты ( ДатаВремя )); // 15.04.2020 16:27:00
    Сообщить ( КонецМинуты ( ДатаВремя )); // 15.04.2020 16:27:59

    Преобразование в дату десятисимвольной строки в 1С 8.3:

    &НаКлиенте
    Процедура ПреобразованиеВДатуСтроки10Симв ( Команда ) // «15.04.2020» преобразуем в ‘15.04.2020 0:00:00’

    // Строковая дата без времени преобразовывается в дату со временем:
    СтрокаДаты = «15.04.2020» ;
    ТолькоДата = Дата ( Сред ( СтрокаДаты , 7 , 4 )+ Сред ( СтрокаДаты , 4 , 2 )+ Сред ( СтрокаДаты , 0 , 2 )); // формат даты ‘15.04.2020 0:00:00’

    Проверка на пустое значение даты (заполнение) в 1С 8.3:

    &НаКлиенте
    Процедура ПроверкаНаПустоеЗначениеДаты ( Команда )

    //способ №1
    Если ПустаяДата = ‘00010101’ Тогда // или ‘00010101000000’
    Сообщить ( «Эта дата пустая» );
    КонецЕсли;

    //способ №2
    Если ПустаяДата = ‘0001–01–01’ Тогда
    Сообщить ( «Эта дата пустая» );
    КонецЕсли;

    //способ №3
    Если ПустаяДата = Дата ( 1 , 1 , 1 ) Тогда // или Дата(1, 1, 1, 0, 0, 0)
    Сообщить ( «Эта дата пустая» );
    КонецЕсли;

    //способ №4
    Если НЕ ЗначениеЗаполнено ( ПустаяДата ) Тогда
    Сообщить ( «Эта дата пустая» );
    КонецЕсли;

    Проверка на пустое значение даты в Запросе в 1С 8.3:

    &НаСервере
    Процедура ПроверкаНаПустоеЗначениеДатыВЗапросе ( Команда )

    //способ №1
    Запрос = Новый Запрос ( «ВЫБРАТЬ
    | ДатаРегистрацииЕГР
    | ИЗ
    | Справочник.Контрагенты
    | ГДЕ
    | ДатаРегистрацииЕГР = &ПустаяДата» ;
    Запрос . УстановитьПараметр ( «ПустаяДата» , ‘00010101’ );

    //способ №2
    Запрос = Новый Запрос ( «ВЫБРАТЬ
    | ДатаРегистрацииЕГР
    | ИЗ
    | Справочник.Контрагенты
    | ГДЕ
    | ДатаРегистрацииЕГР = ДАТАВРЕМЯ(1,1,1,0,0,0)» ;
    // или ДАТАВРЕМЯ(0001,01,01,0,0,0) или ДАТАВРЕМЯ(1,1,1)

    РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
    Пока Записи . Следующий () Цикл
    // Обход результата запроса по каждой записи в полученной выборке
    КонецЦикла;

    Сложение двух дат в 1С 8.3:

    &НаКлиенте
    Функция СложениеДат ( Команда )

    ПустаяДата = ‘00010101’ ;
    Дата1 = ‘20200415’ ; // 15.04.2020
    Дата2 = ‘20220214’ ; // 14.02.2022

    Результат = ПустаяДата + ( Дата1 — ПустаяДата ) + ( Дата2 — ПустаяДата );

    Сообщить ( «Дата fs10lh1-5 cf2″>+ Результат ); // Дата = 29.05.4041 0:00:00

    Сравнение двух дат в 1С 8.3:

    &НаКлиенте
    Процедура СравнениеДат ( Команда )

    Дата1 = ‘20200415’ ; // 15.04.2020
    Дата2 = ‘20200415’ ; // 15.04.2020

    Если Дата1 . Сравнить ( Дата2 ) = 0 Тогда
    Сообщить ( «Даты равны» );
    КонецЕсли;

    Расчет количества дней между датами в 1С 8.3:

    &НаКлиенте
    Процедура РасчетКоличестваДнейМеждуДатами ( Команда )

    ДатаНач = ‘20200415’ ;
    ДатаКон = ‘20200417’ ;

    РазницаВСекундах = ДатаКон — ДатаНач ; // 172800 секунды
    РазницаВДнях = Цел ( РазницаВСекундах / 86400 ); // 2 дня

    Расчет количества дней между датами ЗАПРОСОМ в 1С 8.3:

    &НаКлиенте
    Процедура РасчетКоличестваДнейМеждуДатамиЗапросом ( Команда )

    ДатаНач = ‘20200415’ ;
    ДатаКон = ‘20200417’ ;

    Сообщить ( РазницаДатНаСервере ( ДатаНач , ДатаКон , «ДЕНЬ» )); //2 дня

    &НаСервере
    Функция РазницаДатНаСервере ( ДатаНач , ДатаКон , СтрПериод )

    //СтрПериод — может быть «ДЕНЬ», «НЕДЕЛЯ», «МЕСЯЦ», «ГОД»
    Запрос = Новый Запрос ( «ВЫБРАТЬ РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, » + СтрПериод + «) КАК РазностьДат» );
    Запрос . УстановитьПараметр ( «ДатаНач» , ДатаНач );
    Запрос . УстановитьПараметр ( «ДатаКон» , ДатаКон );

    Возврат Запрос . Выполнить (). Выгрузить ()[ 0 ]. РазностьДат ;

    Узнать текущую дату в миллисекундах в 1С 8.3:

    &НаКлиенте
    Процедура УзнатьТекущуюДатуВМиллисекундах ( Команда )

    Сообщить ( ТекущаяУниверсальнаяДатаВМиллисекундах ()); //79 452 791 027 745

    // Примечание: не совершайте чужих ошибок:
    //
    // Чтобы упорядочить данные в порядке поступления, разработчик добавил измерение МоментВремени И заполнил его

    // из ТекущаяУниверсальнаяДатаВМиллисекундах(). При поступлении пакета разные наборы данных зарегистрировались одной миллисекундой

    // (см.скриншот ниже).
    //
    // Всё работало, до тех пор, пока в обмен не добавили сценарий «удаляем данные, затем добавляем данные».

    // Появилась плавающая ошибка — часть данных теряется. На самом деле данные сперва приходят, потом удаляются, т.к. нарушен порядок.
    //
    // Вывод: точности миллисекунд может быть недостаточно.

    // Вариант решения, например — добавить поле с порядковым номером записи, по всем записям или в рамках секунды.

    Момент времени в 1С 8.3:

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

    Функция СравнитьДваДокумента ( Док1 , Док2 )

    // У «Док1» и «Док2» одинаковая дата и время: 15.04.2020 23:59:59
    РезультатСравнения = Док1 . МоментВремени (). Сравнить ( Док2 . МоментВремени () );

    Сообщить ( РезультатСравнения );
    Возврат РезультатСравнения ;

    // Распространенная ошибка в формировании движений документов по регистрам:

    // Не знать, что в 1 секунде времени может быть несколько тысяч документов, и для определения последовательности

    // использовать поле «Дата» из документа. Необходимо использовать МоментВремени(), который равен Дата + Ссылка.

    // И еще нужно иметь ввиду, что Ссылка — это не только УИД, но и идентификатор типа документа.

    // Поэтому при упорядочивании внутри одной секунды сначала идут документы одного типа, а потом уже другого.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *