ЮНИТ 17. РАБОТА С ДАТАМИ В ЯЗЫКЕ 1С

Тип дата в языке 1С 8.3 уже знаком нам по прошлым юнитам. Сегодня мы рассмотрим более подробно операции, которые можно совершать над датами.

Итак, откуда изначально появляется тип дата в нашей программе?

Во-первых, мы можем задать значение даты прямо в коде:

ПервыйДеньЛета = '2014060 Г;

Сообщить(ПервыйДеньЛета);

В этом случае значение даты вводится в ординарных кавычках. Первые четыре числа означают год (2014), следующие два числа — месяц (06, июнь) и, наконец, последние два — день месяца (01). Таким образом мы задали 1 июня 2014 года.

Во-вторых, мы можем использовать специальную команду, формирующую значение даты:

ПервыйДеньЛета = Дата(2014, 06, 01);

Сообщить( ПервыйДеньЛета);

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

В-третьих, мы можем ввести значение даты от пользователя:

ДатаОтПользователя = '0001010Г;

ВвестиДату(ДатаОтПользователя);

ОткрытьЗначение(ДатаОтПользователя);

Тут мы сначала заводим переменную для хранения значения даты и присваиваем начальное пустое значение ('0001010 Г), а затем вызываем команду ВвестиДату, указывая в качестве параметра переменную, в которую нужно вернуть значение, введенное пользователем.

И, наконец, мы можем получить значение дата как результат работы другой команды 1 С. Например, так:

Сегодня = ТекущаяДата();

Сообщить(Сегодня);

Давайте продолжим работу с последним примером (будем дописывать в него код).

Вот как мы можем из уже готовой даты вытащить только год, месяц или число:

Сообщить(Год(Сегодня));

Сообщить(Месяц(Сегодня));

Сообщить(День(Сегодня));

А что если нужно прибавить к дате один день? Это можно сделать вот так:

Сегодня = ТекущаяДата();

Завтра = Сегодня + 24 * 60 * 60;

Сообщить(Завтра);

Почему мы прибавили именно такое число (24 * 60 * 60)? Потому что напрямую к дате можно прибавлять только секунды. А нам нужно прибавить сутки, в которых 24 часа, в часе 60 минут, в минуте 60 секунд.

Секунды можно не только прибавлять, но и отнимать от даты.

А что если нам нужно прибавить целый месяц? Конечно, и в этом случае можно посчитать количество секунд в месяце и прибавить, но гораздо проще использовать специальную команду 1С, которая как раз для этого предназначена:

Сегодня = ТекущаяДата();

ЧерезМесяц = ДобавитьМесяц(Сегодня, 1);

Команда ДобавитъМесяц в качестве параметров принимает дату, к которой нужно прибавить месяц и количество месяцев. Если указать отрицательное количество, то произойдет не прибавление, а вычитание месяцев из даты.

Даты также можно отнимать друг от друга:

РазностьДат = '2014010Г - '20100101

Сообщить(РазностьДат);

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

Какие еще есть интересные функции для работы с датой в 1 С?

Мы можем узнать день недели:

Сообщить(ДеньНедели(Сегодня));

Команда ДеньНедели возвращает число от 1 до 7. Единица обозначает понедельник, двойка — вторник, и так до воскресенья.

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

Сообщить(ДеньГода(Сегодня));

А также порядковый номер недели (к которой относится дата) в году:

Сообщить(НеделяГода(Сегодня));

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

Для отработки и закрепления материала данного юнита рекомендуется выполнить два нижеследующих задания:

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

Решение

//*** Модуль уроки ***//

Функция ДеньНеделиСтрокой(Дата) Экспорт

Если ДеньНедели(Дата) = 1 Тогда Возврат "Понедельник";

ИначеЕсли ДеньНедели(Дата) = 2 Тогда Возврат "Вторник";

ИначеЕсли ДеньНедели(Дата) = 3 Тогда Возврат "Среда";

ИначеЕсли ДеньНедели(Дата) = 4 Тогда Возврат "Четверг";

ИначеЕсли ДеньНедели(Дата) = 5 Тогда Возврат "Пятница";

ИначеЕсли ДеньНедели(Дата) = 6 Тогда Возврат "Суббота";

ИначеЕсли ДеньНедели(Дата) = 7 Тогда Возврат "Воскресенье";

КонецЕсли;

Возврат "Невозможное возможно";

КонецФункции

//*** Модуль управляемого приложения ***// Сообщить("Сегодня" +

Уроки. ДеньНеделиСтрокой(ТекущаяДата())); б) Напишите программу, которая вводит от пользователя дату его рождения и, если день его рождения в этом году уже прошел, то выводит "Ваш день рождения в этом году уже прошел!", иначе выводит количество секунд, оставшееся до дня рождения.

Решение

ДатаРождения = ’00010101’;

ВвестиДату(ДатаРождения, "Когда вы родились?");

Сегодня = ТекущаяДата();

ДеньРожденияВЭтомГоду = Дата(Год(Сегодня), Месяц(ДатаРождения),

День(ДатаРождения));

Если Сегодня > ДеньРожденияВЭтомГоду Тогда ОткрытьЗначение("Ваш день рождения в этом году уже прошел!");

Иначе

ОсталосьСекунд = ДеньРожденияВЭтомГоду - Сегодня; ОткрытьЗначение(

"До вашего дня рождения в этом году осталось " + ОсталосьСекунд + " секунд!");

КонецЕсли;

 
< Пред   СОДЕРЖАНИЕ     След >