1с разность дат в днях программно

Программирование в 1С для всех

В этой статье научимся узнаем, как работают даты в 1С. Тип Дата — это один из примитивных типов 1С 8.3. При помощи этого типа в программе 1С можно задать дату (например, 10 ноября 2019 года), время (например, 12 часов 32 минуты 45 секунд), а также дату с временем (например, 10 ноября 2019 года 12 часов 32 минуты 45 секунд). В этой статье мы научимся создавать переменные с типом дата, создавать реквизиты объектов с типом дата и работать на форме с этим типом. А также научимся выполнять элементарные операции над датами.

Создаем программно даты в 1С

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

ГГГГ – цифры года даты,

ММ — цифры месяца даты

ДД – цифры дня даты

ЧЧ – цифры часа от 0 до 23

ММ – цифры минут от 0 до 59

СС – цифры секунд от 0 до 59

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

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

Рассмотрим, примеры. Создадим дату со временем, дату без времени и время с пустой датой. И также все это выведем методом Сообщить. Хотя, метод Сообщить и принимает в качестве параметра тип строка, мы можем и передать в него дату, платформа 1С автоматически её конвертирует в строку.

И посмотрим, как это все вывелось.

1с разность дат в днях программно

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

Разберем еще один способ создания переменной с типом дата, это использование метода Дата. Этот метод имеет два варианта синтаксис:

СтрокаДаты – строка, которая задаётся в уже знакомом нам формате «ГГГГММДДЧЧММСС», принципы задания строки аналогичны принципам задания даты в ординарных кавычках.

Год – цифра года даты,

Месяц – цифра месяца даты,

День – цифры дня даты,

Минута – цифры минуты

Секунда – цифры секунды.

Первый три параметра являются обязательными.

Если нам нужно задать, просто дату (без времени), то будет следующий синтаксис.

А если нужно задать время, то года, месяц и день будут равны 1:

Переделаем предыдущий пример.

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

Реквизит с типом дата в объектах 1С

Для того, чтобы какой-то реквизит объекта 1С 8.3 был датой, достаточно указать ему соответствующий тип. Например, как мы это делаем со справочником.

1с разность дат в днях программно

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

1с разность дат в днях программно

В зависимости от того, какой состав даты выбран, такой вид даты и можно будет указать в форме объекта.

1с разность дат в днях программно

1с разность дат в днях программно

Состав даты Дата и время.

1с разность дат в днях программно

Причем, не имеет значения, какой состав даты выбран, дата запишется полностью в формате ГГГГММДДЧЧММСС. Просто в зависимости от состава даты, или время будет равняться нулю (если выбран состав даты Дата), или год, месяц, день будут равняться единицы.

Дата на управляемой форме 1С

На управляемую форме 1С можно поместить реквизит с типом дата, у которого, также, имеется возможность выбрать состав даты: Дата, Время, Дата и время.

1с разность дат в днях программно

Если мы поместим этот реквизит на форму, то он разместится в виде поля ввода.

1с разность дат в днях программно

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

1с разность дат в днях программно

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

А отвечает за появление этой кнопки свойство поля ввода «Кнопка выбора».

1с разность дат в днях программно

Посмотрим, как записывается дата, в зависимости от значения состава даты.

Для этого у поля ввода я создам событие при изменении.

1с разность дат в днях программно

В этом событии я напишу простой код, в котором буду в сообщении выводить реквизит управляемой формы, созданный ранее.

Посмотрим, что вернет этот метод, когда состав даты реквизита — Дата.

1с разность дат в днях программно

Когда состав даты реквизита — Время

1с разность дат в днях программно

Когда состав даты реквизита – Дата и время

1с разность дат в днях программно

Вы убедились наглядно, что независимо от состава даты, у нас дата всегда записывается в формате ГГГГММДДЧЧММСС.

Разность дат в 1С

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

Например, создадим две даты разностью в минуту, вычтем одну из другой.

И посмотрим, какая разница.

1с разность дат в днях программно

Мы получили количество секунд разности между Дата2 и Дата1. Если мы вычтем наоборот.

То поскольку Дата2 раньше на временной оси, чем Дата1, то получим разность с отрицательным знаком.

1с разность дат в днях программно

Прибавить дату 1С

Мы также, можем прибавить к дате нужное количество секунда. Делается это просто: к определенной дате, прибавляется то количество секунд, которое нам нужно.

Например, прибавим к дате минуту, час, день.

Посмотрим на результат:

1с разность дат в днях программно

Также можно и вычесть дату.

Посмотрим на результат:

1с разность дат в днях программно

Этим способом рекомендую прибавлять к датам и вычитать из дат небольшие значения (до дня), для прибавления месяцев и выше, в платформе 1С имеется способ, который будет рассмотрен в следующей статье.

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

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

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

1с разность дат в днях программно

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

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

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

1с разность дат в днях программно

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

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


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

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

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

Источник

Разность дат в запросе 1С 8.3

РазностьДат() — конструкция встроенного языка запросов 1С 8.3, с помощью которой непосредственно в запросе можно получить разницу между различными датами.

1с разность дат в днях программно

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

Дата1 и Дата2 — даты, из которых необходимо получить разность.

ЕдиницаВремени — показатель, для которого необходимо получить разность. Допустимые значения: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД.

РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2005, 09, 12, 10, 15, 34), ДАТАВРЕМЯ(2005, 09, 14, 9, 18, 06), ДЕНЬ) — вернет «2»

РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12), (ДАТАВРЕМЯ(2002, 11, 03), МЕСЯЦ) — вернет «1»

РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12), (ДАТАВРЕМЯ(2004, 11, 03), ГОД) — вернет «2»

Пример использования в рабочей конфигурации 1С для получения разности дат в днях:

ВЫБРАТЬ
ДанныеДляРасчета.Организация КАК Организация,
ДанныеДляРасчета.Склад КАК Склад,
СУММА(ДанныеДляРасчета.СтоимостьКонечныйОстаток) КАК СтоимостьОстатковЗапасов,
ДанныеДляРасчета.ДатаРасчета,
СУММА(ДанныеДляРасчета.СтоимостьРасход) КАК СебестоимостьРеализованныхТоваров,
РАЗНОСТЬДАТ(&НачалоПериода, КОНЕЦПЕРИОДА(&ДатаРасчета, ДЕНЬ), ДЕНЬ) КАК ДнейВПериодеПоЗапасам
ИЗ
(ВЫБРАТЬ
ОборотныеСредства.Организация КАК Организация,
ОборотныеСредства.Склад КАК Склад,
СУММА(ОборотныеСредства.СуммаКонечныйОстаток) КАК СтоимостьКонечныйОстаток,
&ДатаРасчета КАК ДатаРасчета,
0 КАК СтоимостьРасход
ИЗ
ОборотныеСредства КАК ОборотныеСредства

Читайте и другие статьи по запросам 1С

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

РазностьДат()

Сами формулы можешь нарисовать красивей. Но ход мыслей расчета я думаю понятен.

(4) Zircool,
Вот с этого и надо было начинать.
Берем разность дат в часах и отнимаем разность дат в днях с погрешностью в 4 часа (т.к. нам нужно в сутках 20 часов).
строка в запросе будет выглядеть следующим образом

Здесь немного другая ситуация. Смотрите например у нас 2 даты:
02.05.2012 20:00:00 и 03.05.2012 20:10:00

Получается что второго числа человек отработал 4 часа а третьего 20 часов в сумме должено получиться 24 часа, а в отчете пишет 20, т.к. 24 принимает за 20. Должно идти сокращение до 20 часов, если это сутки. Т.е. если человек отработал бы 3.05.2012 23 часа, должно взяться 20 часов.

(5) Zircool,
От блин! Что ж ты как пользователь!?
Нужную вводную информацию по частям выдаешь?
Надо было сразу описание задачи написать. (полностью)

Алгоритм описанный выше (для запроса) имеет только одну маленькую погрешность.

Расчет именно того самого «хвостика».
Т.е. когда сутки были полные. тут и гадать не стоит берем за аксиому что когда полные сутки то 24-4 = 20 часов.
А вот если тот самый преславутый «хвостик» те самые последние часы последних суток.
Тут нужно добавить следующее:
Если «хвостик» по часам меньше 20, то оставляем как есть, а если больше то вместо него ставим 20 часов.

Сначала считаем количество полных суток:

ВторойДень = НачалоДня(Дата1)+ 86400.

(округляй либо конечный результат, либо промежуточный)

(8) brunhilda,
Если для данной задачи. Точкой перевала суток будет время именно 00:00
То твой алгоритм правильней чем мой.

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

Но по уму, твой алгоритм правильней.
Сутки все таки начинаются с 00:00 и поэтому всегда будет «предхвостик» в начале перед следующими полными сутками.
Но если у них в сутках 20 часов, то фиг его знает с какого времени у них сутки начинаются 🙂

При твоих условиях и в запросе это будет выглядеть так:

Ребят спасибо за помощь, в датах у меня большой пробел)))

02.05.2012 8:00:00 | 02.05.2012 20:00:00 | 16,00

Дата1 = Выборка.ДатаВыезда;
Дата2 = Выборка.ДатаВозвращения;

Если НачалоДня(Дата1) = НачалоДня(Дата2) Тогда

ВторойДень = НачалоДня(Дата1)+ 86400;
КоличествоСуток = (НачалоДня(Дата2)-ВторойДень)/86400;

Результат = КоличествоСуток*20+ХвостикВначале+ХвостикВКонце;
ЗП = Результат * 77;

Источник

Как посчитать количество дней между датами в 1С

1. В коде модулей

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

1с разность дат в днях программно

Рисунок 1. Пример использования в коде модуля

2. В тексте запросов 1С 8.3

Язык запросов 1С 8.3 также поддерживает ряд специализированных функций для операций с датами, среди которых имеется РАЗНОСТЬДАТ, предназначенная как раз для того, чтобы определить разность между датами, переданными ей, с указанием основной единицей измерения времени:

1с разность дат в днях программно

Рисунок 2. Синтаксис функции в языке запросов

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

1с разность дат в днях программно

Рисунок 3. Пример использования в языке запросов

3. В системе компоновки данных (СКД) 1С

Язык выражений 1С СКД также поддерживает специализированные функции для работы с датами и временем, как и язык запросов 1С 8.3, среди которых имеется функция РазностьДат, но ее синтаксис имеет некоторые отличия: третий параметр, определяющий тип разности, имеет значение типа Строка.

Источник

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

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