1с формат даты
В 1с есть такие вещи, которые программист не обязан знать на зубок, но всегда должен иметь под рукой. Формат даты в 1с это одно из тех мест, которые я всегда ищу в интернете. Никак не могу запомнить нужные мне форматы, но оно и не надо! Сегодня исправим этот пробел знаний и сделаем заметку о часто используемых форматах даты как в запросе так и непосредственно в самом коде конфигурации.
Первое что нужно знать, если мы хотим получить какой-либо формат даты, то сначала нужно воспользоваться конструктором форматной строки и попробовать его сформировать там:
В итоге мы получим готовую форматную строку. Ну либо можно воспользоваться просто готовыми заготовками с самыми востребованными форматами дат для программирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //#дата строкой '' фДата = '20200311093000'; //тип Дата //11.03.2020 9:30:00 //#Пустая дата фДата = Дата(1,1,1); //01.01.0001 0:00:00 фДата = '00010101000000'; //01.01.0001 0:00:00 //#Полная дата без символов "." ":" " ". К примеру для формирования имени файла для сохранения фДата = Формат(ТекущаяДата(), "ДФ=ггггММддЧЧммсс"); //20200311130045 //#Формат даты без времени фДата = Формат(ТекущаяДата(), "ДФ=ггггММдд"); //20200311 фДата = Формат(ТекущаяДата(), "ДФ=гггг.ММ.дд"); //2020.03.11 фДата = Формат(ТекущаяДата(), "ДЛФ=D"); //11.03.2020 фДата = Формат(ТекущаяДата(), "ДЛФ=DD"); //11 марта 2020 г. фДата = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy"); //11.03.2020 //формат времени без даты фДата = Формат(ТекущаяДата(), "ДЛФ=T"); //13:00:59 фДата = Формат(ТекущаяДата(), "ДЛФ=В"); //13:01:05 //******************ДФ (DF) - формат даты.********************** //д (d) - день месяца (цифрами) без лидирующего нуля; //дд (dd) - день месяца (цифрами) с лидирующим нулем; //ддд (ddd) - краткое название дня недели *); //дддд (dddd) - полное название дня недели *); //М (m) - минута без лидирующего нуля; //ММ (mm) - минута с лидирующим нулем; //МММ (MMM) - краткое название месяца *); //ММММ (MMMM) - полное название месяца *); //к (q) - номер квартала в году; //г (y) - номер года без века и лидирующего нуля; //гг (yy) - номер года без века с лидирующим нулем; //гггг (yyyy) - номер года с веком; //ч (h) - час в 12-часовом варианте без лидирующих нулей; //чч (hh) - час в 12-часовом варианте с лидирующим нулем; //Ч (H) - час в 24-часовом варианте без лидирующих нулей; //ЧЧ (HH) - час в 24-часовом варианте с лидирующим нулем; //м (m) - минута без лидирующего нуля; //мм (mm) - минута с лидирующим нулем; //с (s) - секунда без лидирующего нуля; //сс (ss) - секунда с лидирующим нулем; //вв (tt) - отображение половины дня AM/PM (действительно только для языков конфигурирования, поддерживающих 12 часовой вариант представления времени). //******************ДЛФ (DLF) - локальный формат даты. Указывается вариант отображения частей даты.****************** //Д (D) - дата (цифрами); //ДД (DD) - длинная дата (месяц прописью); //В (T) - полное время, дата может объединяться со временем; //ДВ (DT) - дата время. //Пример: выражение Формат('20051120140323',"ДЛФ=ДДВ") имеет значение "20 ноября 2005 г. 14:03:23". //Важно! Порядок следования опций форматной строки для ДЛФ <дата + время> (ДВ или ДДВ) не может быть изменен. //ДП (DE) - строка, представляющая пустую дату (например, Формат('00010101000000' ,"ДП=""пустая дата""") вернет строку "пустая дата"). КонецПроцедуры |
Формат даты в 1с может быть задан и в более сложном исполнении:
1 2 3 4 5 6 7 8 9 10 |
&НаКлиенте Процедура ПриОткрытии(Отказ) фДата = Формат(ТекущаяДата(), "ДФ=""дд ММММ гггг ' это наш год! ' ЧЧ:мм:сс ' это какое то время! '"""); //11 марта 2020 это наш год! 13:22:17 это какое то время! фДата = Формат(ТекущаяДата(), "ДФ=""дд!!ММММ!!гггг ' это наш год! ' ЧЧ/мм/сс ' это какое то время! '"""); //11!!марта!!2020 это наш год! 13/22/28 это какое то время! КонецПроцедуры |
Используя выше полученную информацию (комментарии из справки), мы можем легко получить из даты год, месяц, день…:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
&НаКлиенте Процедура ПриОткрытии(Отказ) фДата = Формат(ТекущаяДата(), "ДФ=г"); //год 20 фДата = Формат(ТекущаяДата(), "ДФ=гг");//год 20 фДата = Формат(ТекущаяДата(), "ДФ=м"); //минута 22 фДата = Формат(ТекущаяДата(), "ДФ=М"); //месяц 3 фДата = Формат(ТекущаяДата(), "ДФ=дддд"); //среда фДата = Формат(ТекущаяДата(), "ДФ=чч"); //час 01 КонецПроцедуры |
Так же для получения частей даты, можно воспользоваться функциями для работы со значениями типа ‘Дата’:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
фДата = ТекущаяДата(); Сообщить(Год(фДата)); Сообщить(Месяц(фДата)); Сообщить(День(фДата)); Сообщить(Час(фДата)); Сообщить(Минута(фДата)); Сообщить(Секунда(фДата)); Сообщить(НачалоГода(фДата)); Сообщить(НачалоКвартала(фДата)); Сообщить(НачалоМесяца(фДата)); Сообщить(НачалоНедели(фДата)); Сообщить(НачалоДня(фДата)); Сообщить(НачалоЧаса(фДата)); Сообщить(НачалоМинуты(фДата)); Сообщить(КонецГода(фДата)); Сообщить(КонецКвартала(фДата)); Сообщить(КонецМесяца(фДата)); Сообщить(КонецНедели(фДата)); Сообщить(КонецДня(фДата)); Сообщить(КонецЧаса(фДата)); Сообщить(КонецМинуты(фДата)); Сообщить(НеделяГода(фДата)); Сообщить(ДеньГода(фДата)); Сообщить(ДеньНедели(фДата)); |
О том, как проверить дату на пустое значение (в том числе и в запросе) можете прочитать в этой заметки.
Работать с датой в запросе тоже очень просто. Для этого нужно понимать как работают функции для работы с датой в запросе:
Используя такие функции как ‘РАЗНОСТЬДАТ’, ‘НАЧАЛОПЕРИОДА’, ‘ДОБАВИТЬКДАТЕ’ вы легко получите нужный результат:
1 2 3 4 5 6 7 8 9 |
ТекстЗапроса = "ВЫБРАТЬ | ГОД(АвансовыйОтчет.Дата) КАК Поле1, | ДЕНЬГОДА(АвансовыйОтчет.Дата) КАК Поле2, | НАЧАЛОПЕРИОДА(АвансовыйОтчет.Дата, ДЕНЬ) КАК Поле3, | НАЧАЛОПЕРИОДА(АвансовыйОтчет.Дата, ГОД) КАК Поле4, | РАЗНОСТЬДАТ(АвансовыйОтчет.Дата, АвансовыйОтчет.Дата, ЧАС) КАК Поле5, | ДОБАВИТЬКДАТЕ(АвансовыйОтчет.Дата, ДЕНЬ, 1) КАК Поле6 |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет" |
Допустим нам нужно получить разность дат в запросе между датой документа и датой расхода (дата платежа) в днях. Используя функцию ‘РАЗНОСТЬДАТ’ мы легко выполним данную задачу:
В общем ребят, тема не сложная. И в этой заметки разберется любой, даже новичок. Работать с датой в 1с просто! Всем удачи!