Работа со Временем в запросах, процедурах и ф...

Работа со Временем в запросах, процедурах и функциях 1С 8.3

0
382
13.06.2020 Иван Каплин

Содержание:



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

 

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

 

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

1.    Число.

2.    Строка.

3.    Дата.

4.    Булево.

5.    NULL.

6.    Неопределенно.

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

 

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


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


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


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



 

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


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




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


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

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




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

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


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

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




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


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

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

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


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


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


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


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


Специалист компании ООО «Кодерлайн»

Каплин Иван

 

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Теги
#1С: CRM #1С: ERP #1С: ERP Управление строительной организацией #1С: ERP. Управление буровой компанией #1С: WMS Управление складом #1С: Аренда и управление недвижимостью #1С: БУХ #1С: Договорчики #1С: Документооборот #1С: ЗУП #1С: Интеграция #1С: КА #1С: Колледж #1С: Конвертация данных #1С: Модули #1С: Платформа #1С: Розница #1С: Сценарное тестирование #1С: ТОИР #1С: УАТ #1С: УКФ #1С: Университет #1С: УНФ #1С: УПП #1С: Управление строительной организацией #1С: УТ #1С: УХ #1С:ERP #1С.6-НДФЛ #ADO #APACHE #API #canonical #com-объекты #Excel #Excel в 1С #GoogleDrive #HTTP #ITIL #Koderline: Управление медиа-холдингом #Koderline: Управление проектами строительства скважин #LINUX #MS SQL Server #WEB #WEB-сервисы 1С #Word #XML #Администрирование 1С #акты в 1С #Безопасность сервера #Бесшовная интеграция #БИТ.Финанc #Битрикс24 #Блокировки в 1С #БСП #БУ #Бурение скважин #Бюджетирование #Внедрение #Внедрение ERP #Закрытие месяца #Запросы 1С #Интеграция 1С #КАК ОТРАЖАЮТСЯ ТОВАРЫ В ПУТИ 1С #Как сделать в 1С #Конвертация данных #Корпоративное сопровождение #Лизинг #Лицензии 1С #Механизм Анализа Данных в 1С #Моделирование #Модуль Диадок #МСФО #Налоги #Обмен между базами #Обновления #Оптимизация #Отпуск #Отчетность #Отчеты в 1С #Оценка задач #Перенос данных #Планирование #Полезные обработки #Правила обмена #предопределенные элементы справочников #Проводки 1С #Программирование в 1С #Программные права #Продажи #Производство #Работа с объектами в 1С #Расширение конфигурации #РСБУ #СКД #Соединение COM в 1С платформе #Сравнение конфигураций #Тестирование 1С #Техническое задание #Торговое оборудование #Транспортная логистика #Управление проектами #Финансовый учет #Хранилище настроек #Ценообразование #Экзамен 1С #Яндекс.Касса Email или телефон Работа с объектами в 1С Функциональные опции в 1С
Услуги программиста 1С
Получите специалиста  
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.