1с формат даты день недели
Уроки программирования 1С: Примитивный тип данных Дата
Дата – тип данных, который задает число, месяц, год (обязательно) и часы, минуты и секунды (не обязательно) по григорианскому календарю.
На прошлых занятиях мы изучили примитивные типы данных Число и Строка, ознакомьтесь с этими материалами, прежде чем приступить к изучению этого.
В системе 1С:Предприятие 8 для хранения и управления данными используются литералы – внутренний формат данных, который удобен компьютеру, но не всегда нагляден для человека. И если для Числа и Строки литералами являлись соответственно цифры и буквы, то для Даты это строка цифр, заключенная в одинарные кавычки вида ‘ГГГГММДДччммсс’, где:
В литерале даты игнорируются все значения, отличные от цифр. Разделители в литерале можно указывать для упрощения ввода даты.
Дата(‘2019.03.23 10:45:25’) = «23.03.2019 10:45:25»
Дата(‘2019\03\23-10
25′) = «23.03.2019 10:45:25»
Для работы с примитивными данными могут применяться функции Глобального контекста – это функции, не привязанные к какому-либо объекту и работающие непосредственно с реквизитами. Свои функции Глобального контекста есть для Строки (сократить, объединить, разделить строки и др.), Числа (округлить, вычислить синус угла и др.), Даты (получить из даты год, день, получить текущую дату или дату конца года и др.), и других типов данных.
Рекомендуем ознакомиться с функциями Глобального контекста для примитивных данных в синтаксис-помощнике.
Использование функции Глобального контекста с примитивным типом данных Дата
Для примера возьмем функцию ДеньНедели, которая определяет номер дня недели для указанной даты, где 1 – понедельник, а 7 – воскресенье.
С помощью функции создадим обработку, определяющую, в какой день недели родился человек.
Создадим внешнюю обработку с двумя реквизитами:
И перенесем реквизиты на форму.
Ранее мы задавали процедуры, связанные с командами, но запускать процедуру может не только кнопка. Процедура может запускаться при определенных условиях, например, при изменении реквизита. В данном случае сделаем так, чтобы после введения даты автоматически запускалась процедура расчета дня недели.
Для этого надо правой клавишей мышки щелкнуть по реквизиту ДатаРождения и в появившемся контекстном меню выбрать событие ПриИзменении:
Выберем создание обработчика события на клиенте.
Платформа 1С:Предприятие 8 автоматически ввела часть кода обработчика, связанную с условием запуска процедуры.
Чтобы получить день недели, код должен будет содержать следующие части:
Массив данных – это универсальная коллекция значений. Нумерация элементов массива начинается с 0 в квадратных скобках. Общее число элементов массива задается в круглых скобках. В массиве могут быть любые данные, в данном случае нам необходима Строка:
Массив=Новый Массив (7);
Теперь нам с помощью функции ДеньНедели получить число, возвращаемое функцией от даты рождения.
Теперь из массива вытащим название дня недели, соответствующее реквизиту Число. При этом переменная Число может получать значения от 1(понедельник) до 7(воскресенье), поэтому для получения названия дня недели из массива уменьшим Число на 1 и присвоим полученное значение реквизиту формы НазваниеДняНедели.
Итоговый код обработчика будет выглядеть следующим образом:
Полный курс программиста 1С – с нуля до разработчика, способного решать практические учетные задачи в любой области.
Форматирование данных
Чтобы выводить реквизиты в удобной и понятной форме, используется функция Формат. Так, например, с помощью этой функции вы можете задать короткий или длинный формат отображения даты, со временем или без. Также можно форматировать и другие типы данных, например, Число (настраивать представление разрядов, отрицательных чисел, и др). Вы можете не форматировать данные перед выводом, тогда будет использоваться стандартный формат.
Ознакомьтесь с детальным описанием функции Формат в синтаксис-помощнике Глобальный контекст – Функции форматирования – Формат.
Для иллюстрации примера форматирования даты создадим функцию-обработчик &НаКлиенте, которая будет выводить дату в нужном нам формате. Для этого в обработке создадим:
Далее приступим к написанию кода обработчика. Код функции выглядит так:
Формат(Значение, ФорматнаяСтрока), где Значением может быть реквизит, а ФорматнаяСтрока – это набор правил форматирования вида «Имя=Значение; «.
Правило форматирования даты задается Именем ДФ, а Значение задается следующим синтаксисом:
При этом все другие символы, используемые при написании значения будут использованы как есть. То есть их можно применять как разделители и комментарии (исключение – символы, применяемые в синтаксисе, их нужно брать в одинарные кавычки), например:
В итоге мы оформили команду следующим образом:
Вы можете использовать собственные правила форматирования и внести изменения в наш вариант. Функция Формат отформатирует дату рождения в строку и присвоит реквизиту ОтформатированнаяДата.
Зайдите в 1С в пользовательском режиме и загрузите обработку, чтобы протестировать.
Примитивные данные типа Дата могут участвовать в различных вычислениях.
Например, необходимо получить количество дней, оставшихся до Нового года.
Для иллюстрации этого примера создадим реквизит ОсталосьДоНовогоГода типа Строка и допишем в процедуре обработчике ДатаРожденияПриИзменении(Элемент)
Код, который заполнит этот реквизит остатком дней до нового года:
В заключение хотим сказать, что представленные механизмы могут рассчитывать, например, возраст сотрудников, день их рождения, который можно связать с их поздравлением, рабочий стаж и т.д. В качестве самостоятельного задания вы можете попытаться реализовать одну из этих задач.
Освойте навыки разработчика 1С на очных специализированных курсах от крупнейшей компании-франчайзи 1С.
1с формат даты день недели
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Формат
Описание:
Формирует удобное для чтения представление значений. Полезно использование в отчетах и при прочем визуальном отображении значений.
Синтаксис:
Параметры:
Форматная строка представляет собой строковое значение, включающее параметры форматирования.
Параметры форматирования перечисляются через символ «;». Наличие параметра означает отличие форматирования от стандартного.
Если параметр не задан, то применяется стандартное форматирование, которое в основном соответствует преобразованию значения к строке. Однако для значений типа Число и Дата по умолчанию (0 и 01.01.0001 00:00:00 соответственно) будет выдаваться пустая строка.
Каждый параметр задается именем параметра, символом «=» и значением параметра. Значение параметра может указываться в одинарных или двойных кавычках. Это необходимо, если значение параметра содержит символы, используемые в синтаксисе форматной строки.
Внутри значения параметра могут указываться произвольные символы, которые при формировании результирующей строки будут отображаться как есть. Таким образом, например, можно указывать разделители часов, минут и секунд при форматировании времени. Если эти символы совпадают со значениями форматной строки, их необходимо заключать в одинарные кавычки.
Имена и значения параметров форматной строки:
Формат даты 1С использование на примерах
В статье представлены способы задать формат даты 1с 8. Для этого необходимо использовать форматную строку. Редактировать ее можно либо вручную, либо при помощи специального конструктора.
Форматные строки используются в:
При использовании функции Формат, следует помнить, что она возвращает строковое значение, т.е. представление переданной даты в определенном формате.
Формат даты 1с при помощи форматной строки
При помощи форматной строки можно задать параметры форматирования даты. Не стоит описывать их полностью вручную. Лучше всего, воспользоваться встроенным в платформу конструктором, а затем отредактировать полученную форматную строку вручную. Это сэкономит ваши силы и позволит быстро добиться результата.
То есть правильный вызов конструктора для метода Формат, выглядит так:
Конструктор форматной строки
Сам же конструктор форматной строки представляет собой набор вкладок, предназначенных для форматирования данных различных типов. Нас интересует вкладка Дата.
В первую очередь следует проверить, подходит ли для ваших целей Локальный формат даты. Если это так, то стоит воспользоваться именно им, так как он учитывает особенности построения дат для разных стран. То есть для русскоязычной версии будет отображать привычную нам дату, а для локализованных версий — привычную иностранным пользователям.
В остальных случаях можно пользоваться произвольным форматом даты. Его можно не только выбирать из выпадающего списка, но и редактировать вручную. Для редактирования используются следующие форматные коды:
Также можно добавлять в форматную строку произвольный текст, используя кавычки (если добавляемый текст не может быть интерпретирован, как составная часть даты, тогда можно обойтись и без кавычек):
Итоговый текст такой форматной строки будет выглядеть следующим образом:
Примеры использования формата дат
Приведем несколько примеров форматирования даты.
Дата без времени (05.10.2020)
Только время (12:35:50)
Месяц текстом, год полностью (Октябрь 2020)
Месяц текстом кратко, год без тысячелетия (окт. 20)
Месяц числом, через точку год полностью (10.2020)
Склонение названия месяца
При форматировании даты не всегда достаточно именительного падежа. Иногда требуется указать, к примеру, что отчет сформирован в «Октябре 2020 г.», а не в «Октябрь 2020 г.». Для решения этой проблемы подойдет впс» target=»_blank»>серверная строковая функция ПолучитьСклоненияСтроки (доступна, начиная с версии платформы 8.3.13).
Функция возвращает массив вариантов склонения строки. Подробнее прочитать про заполнение параметров можно в синтаксис помощнике.
Пример. Отформатировать дату в «месяц год», месяц в предложном падеже вывести в виде сообщения.
Функции для работы с датой в 1С
Получение частей даты
С помощью функций Год, Месяц, День, Час, Минута, Секунда из даты можно получить какую-либо ее часть:
День года и день недели
Функция День возвращает порядковый номер в месяце. То есть для 3 июня это будет 3. Функция ДеньГода вернет порядковый номер дня в году:
Для определения дня недели есть функция ДеньНедели, которая возвращает порядковый номер дня недели:
Начало и конец периода
Чтобы привести дату к началу определенного периода можно использовать функции НачалоМинуты, НачалоЧаса, НачалоДня, НачалоНедели, НачалоМесяца, НачалоКвартала, НачалоГода:
С помощью функций КонецМинуты, КонецЧаса, КонецДня, КонецНедели, КонецМесяца, КонецКвартала, КонецГода можно получить конец определенного периода:
Арифметические операции с датами
К дате можно прибавлять количество секунд, можно вычесть из одной даты другую, чтобы получить разность в секундах. Чтобы к одной дате прибавить или вычесть месяц можно использовать функцию ДобавитьМесяц:
Текущая дата
Функция ТекущаяДата возвращает системную дату компьютера. Может использоваться как на впс» target=»_blank»>сервере, так и на клиенте. Причем если впс» target=»_blank»>сервер и клиент это разные компьютеры и дата или время на них не совпадает, то данная функция вернет разные значения:
Часовые пояса
1С позволяет работать в одной информационной базе из разных часовых поясов. Часовой пояс может быть определен для:
Если часовой пояс не задан для сеанса, то используется часовой пояс информационной базы. Если для информационной базы часовой пояс тоже не задан, то используется часовой пояс впс» target=»_blank»>сервера.
Часовой пояс информационной базы сохраняется в базе данных, часовой пояс сеанса должен устанавливаться при начале каждого сеанса.
Для установки часового пояса сеанса используется функция УстановитьЧасовойПоясСеанса. Чтобы получить текущее значение часового пояса сеанса предназначена функция ЧасовойПоясСеанса:
Для работы с часовым поясом информационной базы предназначены функции УстановитьЧасовойПоясИнформационнойБазы и ПолучитьЧасовойПоясИнформационнойБазы. Изменение часового пояса информационной базы возможно только в монопольном режиме. Чтобы изменение часового пояса информационной базы вступило в силу нужно перезайти в базу.
Чтобы получить часовой пояс впс» target=»_blank»>сервера нужно использовать функцию ЧасовойПояс:
На впс» target=»_blank»>сервере для получения текущей даты и времени нужно использовать функцию ТекущаяДатаСеанса. Данная функция получает дату и время с учетом часового пояса. То есть если впс» target=»_blank»>сервер физически установлен в часовом поясе «Europe/Moscow», а подключение к нему выполняется из часового пояса «Asia/Krasnoyarsk», то функция ТекущаяДата вернет дату и время впс» target=»_blank»>сервера, что не будет корректным. А если при старте сеанса в Красноярке установить часовой пояс «Asia/Krasnoyarsk», то функция ТекущаяДатаСеанса приведет время к часовому поясу сеанса пользователя.
Чтобы узнать все возможные часовые пояса можно воспользоваться функцией ПолучитьДопустимыеЧасовыеПояса. Данная функция вернет массив со всеми возможными часовыми поясами:
С помощью функции ПредставлениеЧасовогоПояса можно получить представление часового пояса:
Универсальная дата
С помощью функции ТекущаяУниверсальнаяДата можно получить дату и время UTC. С помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах можно получить количество миллисекунд, начиная с 01.01.0001 года:
С помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах можно получить замер времени в миллисекундах:
Также есть функции МестноеВремя и УниверсальноеВремя, которые позволяют получить местное время из универсального и универсальное время из местного:
Сравнение функций
Для сравнения функций работы с часовыми поясами представим, что есть информационная база, которая физически находится в Москве. Для данной базы методом УстановитьЧасовойПоясИнформационнойБазы был установлен часовой пояс «Europe/Moscow». А также есть пользователи из Красноярска, которые тоже работают с этой информационной базой. Для них при старте системы, в модуле сеанса устанавливается часовой пояс «Asia/Krasnoyarsk» с помощью метода УстановитьЧасовойПоясСеанса. Результаты представлены в таблице, вызовы всех функций были выполнены на впс» target=»_blank»>сервере:
Форматирование даты, числа, Булево: требования по локализации
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1.1. Форматирование дат
для вывода дат следует учитывать, что в различных странах приняты различные порядок следования и разделители для составных частей даты.
Например, одна и та же дата: 20.12.2012 – для России, 12/20/2012 – для США.
Поэтому вместо явного задания формата даты рекомендуется использовать локальный формат даты (ДЛФ).
В случаях, когда использовать локальный формат даты не получатся, и требуется задать произвольный формат (ДФ) или указать представление пустой даты (ДП) нужно применять функцию НСтр к форматной строке, чтобы при локализации оставалась возможность переопределить выводимый формат:
1.2. Форматирование числа
Следует применять функцию НСтр к форматной строке в случае, когда
• для числа задается нечисловое представление нулевого значения (ЧН) ;
• указан шаблон форматирования числа (ЧФ);
• переопределяется разделитель дробной части (ЧРД).
1.3. Форматирование Булево
Для вывода Булево значения пользователю всегда применяйте функцию НСтр к форматной строке.
1.4. Не следует переопределять поведение отображения локализации данных по умолчанию – формат отображения операционной системы. При использовании функции Формат следует избегать использовать параметр «L=».
2. При задании формата в полях ввода в формах и полях отчетов на базе СКД также рекомендуется локальный формат даты. Использовать другие форматы допустимо, если по сути решаемой задачи локальный формат не подходит – тогда форматная строка будет переводиться при переводе конфигурации.
3. При переопределении стандартных представлений полей в отчетах на базе СКД следует придерживаться тех же правил, что и в коде модулей. Например, неправильно:
«N » + ВОтветНаНомер + » от » + Формат(ВОтветНаДата, «ДФ=dd.MM.yyyy»)
правильное выражение, по которому вычисляется представление поля:
4. В случае, когда требуется передача значения в машиночитаемом виде, вне зависимости от информационной системы и настроек локализации, применяемых в ней, вместо локализации значения следует выполнить сериализацию. Локализацию дат нужно использовать всегда, когда это возможно. В тех случаях, когда это технически нецелесообразно, допускается отказываться от локализации. Например, при генерации файла формата XML, поддерживаемого банк-клиентом системы, специфичной для России.
4.1. Сериализация дат
При разработке собственных форматов передачи данных между различными системами рекомендуется сериализовать дату в формате ISO: «ГГГГ-ММ-ДДTЧЧ:ММ:ССZ», например «2009-02-15T00:00:00Z» (соответствует типу dateTime схемы XML см. http://www.w3.org/TR/xmlschema-2/#dateTime).
Строка = Формат(Дата, «ДФ=гггг-ММ-ддTЧЧ:мм:сс»); // Сериализация
4.2. Сериализация числа
Строка = XMLСтрока(Число); // Сериализация
Число = XMLЗначение(Тип(«Число»), Строка); // Десериализация