1С время без секунд: Как получить дату и время без секунд в 1с 8?
Функция формат в 1С — дата, время, числа, булево, строка
Функция Формат в 1С 8.3 предоставляет достаточно интересный инструмент разработчику для форматирования значений. Особенно часто эта функция используется для вывода примитивных типов данных (даты, времени, чисел, строки, булево) в нужном формате.
Рассмотрим подробнее функцию и способ составления форматной строки.
Функция Формат()
Синтаксис функции достаточно прост:
Формат(<Значение>,<Форматная строка>)
Значение — форматируемое значение, Форматная строка — строка, заданная определенным образом, из которой формируется правило обработки формата.
Самое интересное — форматная строка. Рассмотрим её подробнее.
Конструктор форматной строки
Для облегчения труда разработчика фирма 1С встроила в платформу специальный конструктор форматной строки.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Для запуска конструктора достаточно вызвать контекстное меню (правая кнопка мыши) и выбрать в списке «Конструктор форматной строки»:
Сам конструктор выглядит следующим образом:
Где необходимо выбрать нужную Вам вкладку в зависимости от типа данных — Число, Дата или Булево.
Рассмотрим использование функции на примерах.
Формат даты в 1С на примере месяца: прописью, без времени
Получить формат даты без времени:
Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") // "25.02.2015"
Формат даты 1С, где месяц прописью:
Формат(ТекущаяДата(), "ДЛФ=DD") // "25 февраля 2015"
Формат времени без даты, только час, минута и секунда:
Формат(ТекущаяДата(), "ДЛФ=T") // "20:15:43"
Примеры формата числа
Получим формат числа с двумя точками после запятой:
Формат(100500, "ЧДЦ=2") // "100 500,00"
Число без неразрывных пробелов:
Формат(100500, "ЧГ=") // "100500"
Использование запятой вместо точки для дробной части:
Формат(100500, "ЧДЦ=2; ЧРД=,") // "100 500,00"
Округление числа (не математическое) до целых:
Формат(100500.99, "ЧДЦ=") // "100 500"
Вывод лидирующих нулей без неразрывных пробелов:
Формат(100500, "ЧЦ=9; ЧВН=; ЧГ=") // "000100500"
Читайте также другие статьи по конфигурированию 1С.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
работа с датами в 1С
Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 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С. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. С более полным перечнем на примерах вы можете ознакомиться в справочнике по языку (ссылка).
Пройдите тест
а) Напишите функцию, которая принимает дату и возвращает день недели, на который приходится дата в строковом виде (например, понедельник). Теперь, используя эту функцию, напишите программу, которая выводит пользователю какой сегодня день недели.
Как перевести секунды в часы и минуты? —
Иногда возникают задачи, требующие перевода интервала, представленного в секундах, в пригодном для восприятия виде. Стандартных функций для этого нет, поэтому придется экспериментировать самим. Давайте представим, что у нас есть переменная, содержащая наш интервал:
КоличествоСекунд = 7210;
Все мы знаем, что в одном часе 3600 секунд (60 минут по 60 секунд), поэтому, если мы разделим наш интервал на 3600, то получим в целой части количество часов, а в остатке количество секунд, которые могут быть и минутами, и секундами:
//получаем часы Часы = Цел(КоличествоСекунд / 3600); //считаем остаток ОстатокСекунд = КоличествоСекунд - Часы * 3600; //или ОстатокСекунд = КоличествоСекунд % 3600;
В идеале нам нужны только два оператора:
- оператор деления
/
- оператор остатка от деления
%
Теперь нам нужно аналогичным образом получить количество минут:
//получаем минуты Минуты = Цел(ОстатокСекунд / 60);//в минуте 60 сек
Ну, а остаток — это наши секунды:
Секунды = ОстатокСекунд % 60;
Давайте посмотрим, что мы получили:
Сообщить("" + Часы + " часов, " + Минуты + " минут, " + Секунды + " секунд"); //Результат: // 2 часов, 0 минут, 10 секунд
Если собрать все воедино, наша функция будет выглядеть так:
Функция ПериодЧасыМинутыСекунды(Знач КоличествоСекунд) Перем Часы, Минуты, Секунды; //получаем часы Часы = Цел(КоличествоСекунд / 3600); //считаем остаток КоличествоСекунд = КоличествоСекунд % 3600; //получаем минуты Минуты = Цел(КоличествоСекунд / 60);//в минуте 60 сек //остались секунды Секунды = КоличествоСекунд % 60; Возврат ("" + Часы + " часов, " + Минуты + " минут, " + Секунды + " секунд"); КонецФункции
Попробуйте самостоятельно доработать ее так, чтобы она считала еще и количество дней)
Читайте также:
Как сделать паузу в коде 1с 8
Эта статья расскажет о способах написания пауз на встроенном языке 1С:Предприятие 8, их достоинствах и недостатках. Также Вы узнаете, какой способ является самым оптимальным с точки зрения потребляемых ресурсов компьютера.
Использование пауз в 1С — стародавняя головная боль. До сих пор этот механизм никак не реализован на уровне платформы. Поэтому программистам приходится изобретать велосипеды и ходить по граблям.
1). Использование целочисленных циклов
Самый старый (встречал такие шедевры еще на платформе 1с:Предприятие 7.7), самый грубый и самый ресурсоемкий способ — использование цикла, ограниченного целым числом:
Функция Тест(Параметр = 0) ... Для Инд = 1 По 1000 Цикл //пока выполняется цикл поток прерван КонецЦикла; ... КонецФункции
Грубый — потому что невозможно точно предсказать, сколько будет длиться цикл, ведь скорость его выполнения напрямую зависит от вычислительной мощности компьютера. Ресурсоемкий — потому что процесс 1С занимает 100% ресурсов ПК.
Его мы однозначно отметаем!
2). Использование цикла с датой
Другой древний способ, чуть более точный, но такой же ресурсоемкий — использование цикла, ограниченного датой:
Функция Тест(Параметр = 0) ... ДатаКон = ТекущаяДата() + 1;//1 секундой больше Пока ТекущаяДата() < ДатаКон Цикл //пока выполняется цикл поток прерван КонецЦикла; ... КонецФункции
По-прежнему, точность данного алгоритма оставляет желать лучшего, т.к. погрешность может составлять 100 и более миллисекунд. Да и быстродействие не на высоте.
Его мы тоже отметаем!
3) Использование обработчиков ожидания
При работе с формами для реализации повторяющихся во времени действий, можно воспользоваться механизмом обработчиков ожидания:
Функция Тест(Параметр = 0) //подключаем периодический обработчик ожидания каждые 500 мсек ПодключитьОбработчикОжидания("ОбработчикОжидания", 0.5); КонецФункции Процедура ОбработчикОжидания() Экспорт ... КонецПроцедуры
В данном примере мы определили экспортную процедуру ОбработчикОжидания()
модуля формы, а затем подключили ее на повторный вызов каждые 500 миллисекунд, используя метод ПодключитьОбработчикОжидания()
.
Из плюсов метода: точность и низкое потребление ресурсов ПК. Из недостатков этого метода можно отметить ограниченность его использования только клиентской частью приложения (на сервере обработчики ожидания не работают). Кроме того, его невозможно использовать для вставки в выполняемый код, т.к. обработчики 1С задействованы только в свободное от основных вычислений время.
4) Использование скриптов WShell
Паузу можно реализовать с помощью VBScript
и методов COM-объекта WScript.Shell
. Ниже приведена готовая процедура, лишенная описанных ранее недостатков:
Процедура ПаузаИсполнения(Секунд) Экспорт Перем ИмяВременногоФайла; //имя файла, куда сохраним скрипт ИмяВременногоФайла = ПолучитьИмяВременногоФайла("vbs"); Попытка Скрипт = Новый ТекстовыйДокумент; Скрипт.УстановитьТекст("WScript.sleep " + XMLСтрока(Цел(Секунд * 1000))); Скрипт.Вывод = ИспользованиеВывода.Разрешить; Скрипт.Записать(ИмяВременногоФайла, КодировкаТекста.Системная); WshShell=Новый COMОбъект("WScript.Shell"); WshShell.Run("wscript.exe """ + ИмяВременногоФайла + """", 0, -1); //удаляем временный файл УдалитьФайлы(ИмяВременногоФайла); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры//ПаузаИсполнения()
Но у приведенной процедуры есть свои недостатки: вряд ли удастся использовать ее на платформе Linux или веб-клиенте.
Время
— Java 8 DateTimeFormatter с дополнительной частью без секунд
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
секунд Javascript в минуты и секунды
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
c # — дни, часы, минуты, секунды между двумя датами
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
java — Преобразовать значение секунд в часы минуты секунды?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира
.