[Alimir_BootModal_Login]

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

Автор уроков и преподаватель школы: Владимир Милькин

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

Работа с датами в 1С

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

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

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

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

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

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

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

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

ДатаОтПользователя = '00010101';
ВвестиДату(ДатаОтПользователя);
ОткрытьЗначение(ДатаОтПользователя);

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

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

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

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

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

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

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

Сегодня = ТекущаяДата();
Завтра = Сегодня + 24 * 60 * 60;
Сообщить(Завтра);

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

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

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

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

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

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

РазностьДат = '20140101' - '20100101';
Сообщить(РазностьДат);

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

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

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

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

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

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

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

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

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

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

Пройдите тест

Начать тест

Домашнее задание

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

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

б) Напишите программу, которая вводит от пользователя дату его рождения и, если день его рождения в этом году уже прошёл, то выводит "Ваш день рождения в этом году уже прошёл!", иначе выводит количество секунд оставшееся до дня рождения.

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