1с формат даты в запросе
Текущая дата(и время) в запросе 1С получается только в качестве параметра.
Получение дат
Как передать текущую дату в запрос?
Запрос . УстановитьПараметр ( «ТекущаяДата» , ТекущаяДата ( ) ) ;
тзРезультатЗапроса = Запрос . Выполнить ( ) . Выгрузить ( ) ;
Далее приводятся только тексты запросов.
Как получить начало текущего месяца?
Конец текущего года?
Как получить полдень текущей даты?
Добавим использование функции ДОБАВИТЬКДАТЕ(ДАТА,,ЧИСЛО)
Как получить дату без времени (0:00)
Как задать дату-константу в запросе 1С?
Возможно задать дату с точностью до секунды?
А до милисекунды?
Вычисления над датами
Разность в секундах,минутах,часах, днях, неделях получается при использовании функции РАЗНОСТЬДАТ(Дата1,Дата2,)
Как получить номер текущего месяца?
ВЫБРАТЬ
МЕСЯЦ(&ТекущаяДата) как ТекущийМесяц,
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ТекущаяДата,ГОД),КОНЕЦПЕРИОДА(&ТекущаяДата,МЕСЯЦ),МЕСЯЦ) как ПолныхПрошедшихМесяцев
Как получить день недели?
ВЫБРАТЬ
ДЕНЬНЕДЕЛИ(&ТекущаяДата) КАК НомерДня,
ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 1
ТОГДА "понедельник"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 2
ТОГДА "вторник"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 3
ТОГДА "среда"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 4
ТОГДА "четверг"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 5
ТОГДА "пятница"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 6
ТОГДА "суббота"
ИНАЧЕ "Воскресенье"
КОНЕЦ КАК НаименованиеДняНедели
Сколько осталось до Нового года?
ВЫБРАТЬ
&ТекущаяДата > ДАТАВРЕМЯ(2017, 1, 1) КАК НовыйГодНаступил,
ВЫБОР
КОГДА &ТекущаяДата > ДАТАВРЕМЯ(2017, 1, 1)
ТОГДА "Да, наступил"
ИНАЧЕ "Нет, не наступил"
КОНЕЦ КАК Ответ,
РАЗНОСТЬДАТ(&ТекущаяДата,ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2017, 1, 1),СЕКУНДА,-1),ДЕНЬ) как ОсталосьДней,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,ДЕНЬ),ЧАС) как ОсталосьЧасов,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,ЧАС),Минута) как ОсталосьМинут,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,Минута),Секунда) как ОсталосьСекунд
Что еще следует знать про дату в запросах?
Дата в запросах может фигурировать не только в полях выборки, и вычислениях, но также передаваться, как параметры виртуальных таблиц.
- для среза последних значений в регистре сведений в качестве момента на которое берется значение. Если периодичность регистра не совпадает с переданным параметром, система обрежет лишние (секунда, дни в зависимости от), округления не происходит
- для остатков регистра накопления в качестве дата остатка
- для оборотов регистров бухгалтерии или регистра накопления (НачалоПериода,КонецПериода)
- других виртуальных таблиц
Допустимо задание дат-констант и использование параметров, также обработка их выше приведенными функциями.
Но нельзя дату передать в параметры виртуальных таблиц из полученных ранее в этом запросе полей выборки.
Сортировка даты в запросе производится в рамках секунды.
Момент времени документа не является датой, он сортирует более глубже, чем дата документа, т.е. при наличии документов в одну секунду времени, сортировка по дате производится в недопустимом порядке: например в виде представления. Используйте для этого момент времени.
Внешнее представление даты определяется представлением операционной системы, управлять из запроса, а также приводить в строковое представление в классическом запросе невозможно в отличии от СКД, где возможна пост-обработка и условное оформление.
Допускается применение функции МАКСИМУМ(),МИНИМУМ() к дата в запросе, как в группировке так и в итогах запроса.
Ошибка «неверные параметры» возникает в случае, когда вместо даты передается null, число или что-то иное.
Преобразовать строку в дату в запросе
Специальных функций нет. но возможно преобразование через функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расчеты.Параметр,
Расчеты.ВерныйПараметр,
ВЫБОР
КОГДА Расчеты.символ1 = "2"
ТОГДА 2
КОГДА Расчеты.символ1 = "1"
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ * 1000 + ВЫБОР
КОГДА Расчеты.символ2 = "0"
ТОГДА 0
КОГДА Расчеты.символ2 = "1"
ТОГДА 1
КОГДА Расчеты.символ2 = "2"
ТОГДА 2
КОГДА Расчеты.символ2 = "3"
ТОГДА 3
КОГДА Расчеты.символ2 = "4"
ТОГДА 4
КОГДА Расчеты.символ2 = "5"
ТОГДА 5
КОГДА Расчеты.символ2 = "6"
ТОГДА 6
КОГДА Расчеты.символ2 = "7"
ТОГДА 7
КОГДА Расчеты.символ2 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 100 + ВЫБОР
КОГДА Расчеты.символ3 = "0"
ТОГДА 0
КОГДА Расчеты.символ3 = "1"
ТОГДА 1
КОГДА Расчеты.символ3 = "2"
ТОГДА 2
КОГДА Расчеты.символ3 = "3"
ТОГДА 3
КОГДА Расчеты.символ3 = "4"
ТОГДА 4
КОГДА Расчеты.символ3 = "5"
ТОГДА 5
КОГДА Расчеты.символ3 = "6"
ТОГДА 6
КОГДА Расчеты.символ3 = "7"
ТОГДА 7
КОГДА Расчеты.символ3 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 10 + ВЫБОР
КОГДА Расчеты.символ4 = "0"
ТОГДА 0
КОГДА Расчеты.символ4 = "1"
ТОГДА 1
КОГДА Расчеты.символ4 = "2"
ТОГДА 2
КОГДА Расчеты.символ4 = "3"
ТОГДА 3
КОГДА Расчеты.символ4 = "4"
ТОГДА 4
КОГДА Расчеты.символ4 = "5"
ТОГДА 5
КОГДА Расчеты.символ4 = "6"
ТОГДА 6
КОГДА Расчеты.символ4 = "7"
ТОГДА 7
КОГДА Расчеты.символ4 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ КАК НомерГода
ПОМЕСТИТЬ Цифры
ИЗ
Расчеты КАК Расчеты
;
Потребитель и вправду может все еще воображать, что его действия отвечают его собственным потребностям об удовлетворении своих запросов. Однако суждение это, поверхностное и весьма приблизительное, является следствием иллюзий, сложившихся в процессе управления его желаниями.
— Джон Кеннет Гэлбрейт
Добрый день.
Помогите, пожалуйста.
Есть запрос по документам - у документа есть дата (формат "Д=mm-dd-YYYY MM:HH:SS)
а мне нужно в результат запроса добавить колонку, которая содержала бы эту же дату, но только в формате "Д = mm-dd-YYYY"
мне нужно в результат запроса добавить колонку, которая содержала бы эту же дату, но только в формате "Д = mm-dd-YYYY"
(2) beldieff, ну это уже как спортивный интерес был - переросло в навязчивую идею )
понятно, что можно работать с результатом. но хотелось реализовать как то сразу - одним действием
(1) compreSSor, формат - это характеристика вывода данных. А дата - это тип. В запросе и в его результатах - данные типа "дата", никакого формата у них нет.
в результат запроса добавить колонку, которая содержала бы эту же дату, но только в формате "Д = mm-dd-YYYY"
- эта задача не имеет смысла, потому что в результате запроса дата - это значение типа "дата" и хранится оно в формате, который предусмотрен используемой СУБД.
(1) compreSSor, дата хранится не в текстовом представлении формат "Д=mm-dd-YYYY MM:HH:SS или "Д = mm-dd-YYYY"
дата хранится во внутреннем представлении, и уже при формировании строкового представления происходит форматирование в соответствии с заданным представлением
(6) beldieff, исходя из СП в (4) должно работать.
ДАТАВРЕМЯ ( , .
Функция ГОД - Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа ЧИСЛО.
Сам вначале попробовал как в (4) но не взлетело.
(8) compreSSor, И я про тоже. Исходя из СП должно катить. Видимо ДатаВремя жрет исключительно Число, ибо даже так не катит:
Выбрать ДатаВремя(&_П1,&_П2,&_П3) (какая уж речь об разыменование)
(4) compreSSor, а с чего бы ему работать-то? в документации чёрным по белому написано, что ДАТАВРЕМЯ служит для записи литерала даты
(4) compreSSor, Функция ДатаВремя() в запросе возвращает дату из целых чисел, переданных в эту функцию в качестве параметров
я просто хочу, чтобы запрос у меня содержал ещё одну колонку с форматом Дата (без времени).
но вот эта строка
(14) compreSSor, ёшкин кот! ну сразу бы так и сказали! а то мы тут в холивар скатились.
yasar92; VOPOH; Nikitos_NSK; Henistaromin; neo-ti; Insanity; Squisher; Olga_Mil; pizhenkov; 24rus; compreSSor; + 11 – Ответить
Есть периодический регистр сведений с поле "Период" и справочник с символьным кодом. Код представляет собой датой в виде ГГГГ-ММ-ДД.
Требуется связать в запросе НАЧАЛОПЕРИОДА(РегистрСведений.Период) с кодом справочника. Можно ли как-то извратиться с ВЫРАЗИТЬ(), ПОДСТРОКА() и т.д.?
Делать в справочнике дополнительное поле с типом "Дата" не хочу.
(9) Можно "переходную" таблицу из строки в дату программно создать и добавить в запрос. А там уже через соединение.
(4) Фундаментально! Не проще ли дату из строки собрать? Заодно из от проблемы 2000 и 2024 избавиться.
(6)Так преобразований меньше.
Если собирать дату нужно:
1. Разделить строку на части
2. Каждую часть преобразовать в число (прямых функций нет)
3. Из чисел через "ДАТАВРЕМЯ" собрать дату.
А тут две операции
1. Выделение части даты числом (год, месяц, дата)
2. Собираем результат через ВЫБОР и соединение строк.
(1) Можно. ПОДСТРОКА(), ВЫРАЗИТЬ() и ДАТАВРЕМЯ() вам в помощь. Искренне надеюсь что дальнейшие рекомендации излишни.
(3) Ну как с "ПОДСТРОКА" и "ДАТАВРЕМЯ" поизвращаться понятно.
А чем на может помочь "ВЫРАЗИТЬ"? В языке запросов нет преобразования типов.
ДАТАВРЕМЯ() работает только с литералами.
ВЫРАЗИТЬ() строку в число не получилось.
А если через СКД попробовать? Там же можно задействовать пользовательские функции. Только надо не отчёт, а что-то машино-читаемое, т. к. по этой выборке ещё алгоритм пробежаться должен. Это как-то надо с компоновщиком извращаться?
(9) Можно "переходную" таблицу из строки в дату программно создать и добавить в запрос. А там уже через соединение.
(10) Тогда уж проще вспомогательное поле даты в справочник прописать. Только, в отличие от Вашего решения, пользователей выгонять из базы придётся, а обидно, ведь обработка разовая. Или расширением воспользоваться?
(13) У меня так и есть, просто хочется красиво. К тому же без связи первый запрос перерабатывать будет, а меня там 20 млн. записей.
(21) Табличку можно же с любого конца построить. Как от строки в дату, так и наоборот. Естественно надо наименьшую выборку брать.
(11)т.е. поле с типом дата добавить вы не хотите ровно по той причине, что придется выгонять пользователей из БД? Серьёзно?
(15)и каким образом поле типа дата будет нарушать реляционную модель?
чтобы не было дублирования данных, значения типа дата необходимо хранить значением типа дата, а не строка, как сделано у вас.
(17) таким образом, что типа "Дата" для кода нет. Поэтому мне придётся либо проверять уникальность этого поля ручками, либо хранить 2 поля и ручками же поддерживать их соответствие.
Обидно, что в Аccess автоматическая проверка уникальности поля и условий в том числе и на несколько полей была ещё 30 лет назад.
(12) Кстати, о ТЗ. Можно и вручную пробежаться по ТЗ и найти её пересечение с другой. Связь-то мне для этого была нужна. Только всё решения какие-то неизящные.
(18)и напороться на критические ошибки при обновлении конфигурации по причине: Ошибка SDBL: Тип поля Code не совместим с типом литерала .
Значение типа Дата – один из самых простых типов данных в 1С, который встречается практически постоянно. Ее значение содержит дату григорианского календаря с 01 января 0001 года с точностью до 0,1 миллисекунды.
Создание переменной типа дата приравнивается к переменной строки цифр ‘ГГГГММДДччммсс’, где ГГГГ – год, ММ – месяц, чч – часы (в формате 24 часа), мм – минуты, сс – секунды.
Часто возникают ситуации при работе в 1С перевести строку в дату. Например, при написании даты в формате 18.12.18, 18/12/2018, или другие варианты. Если часы, минуты, секунды опустить, то они приравняются к нулю. Если мы опускаем дату, то она считается равной 1.
Далее мы рассмотрим, как можно сделать преобразование строки в дату. Это действие несложное, но требует определенных знаний. Если у вас возникнут вопросы, обращайтесь за консультацией по программе 1С к нашим специалистам – мы с радостью вам поможем.
Рассмотрим, как можно сделать преобразование строки в дату.
В последних двух примерах удаляется лишний символ в написании даты. Это может быть любой символ разделитель, главное – его или убрать, или заменить точкой.
Предположим нам надо преобразовать дату, в которой сначала указано время, а затем сама дата.
В данном примере мы заменяем символ «:» и берем 8 чисел справа (дату – год, месяц, день), затем приписываем к ним 6 чисел слева (время – часы, минуты, секунды).
Преобразовать строковое представление даты в значение типа дата, можно также используя функцию СтрВДату. Это более универсальная функция, поэтому она справляется с любым форматом написания даты, даже текстовым.
На примерах мы рассмотрели возможность преобразования строки в дату. Используя различные функции можно преобразовать строковое представление даты, введенное различными вариантами написания в значение типа дата. Такие преобразования необходимы, ведь бывает, что пользователь при вводе даты, используя дополнительную клавиатуру, установит как разделитель косую черту, запятую или другой знак, или из написанной текстом даты возникает необходимость ее преобразовать. Во всех этих случаях данные функции будут полезны.
Если у вас регулярно возникают вопросы по настройке программы, обратитесь к нашим специалистам: мы проконсультируем вас и сделаем соответствующие настройки, подобрав при этом оптимальный тариф на сопровождение 1С, исходя из ваших индивидуальных потребностей.
Тип «Дата» в 1С входит в число 4 основных типов данных наряду с числом, строкой и булево. В конфигурациях даты встречаются повсеместно – при разработке невозможно избежать работы с этим типом данных. Поэтому лучше начинать писать запросы, уже понимая, как обрабатывать даты, какие есть возможности для работы с ними, как они хранятся, а до этого «безопаснее» использовать услуги программистов по доработке 1С, которые предоставляют большинство компаний-франчайзи. Рассмотрим на примерах все нюансы написания запросов с различными датами.
Примеры работы с датами в запросах 1С
В первую очередь, необходимо получить дату в запросе в нужном формате – со временем или без него. Выполнить эту задачу можно несколькими путями:
- Передать через параметр. Получить текущую дату сеанса можно только этим методом;
- Получить дату в запросе из поля выборки;
- Преобразовать из числовых значений с помощью функции ДАТАВРЕМЯ().
Самой распространенной задачей при работе с документами является проверка на пустую дату в запросе 1С. В этом случае легче всего сравнить переменную или поле с пустой датой, которая получается с помощью функции ДАТАВРЕМЯ(1,1,1):
Аналогичной командой можно получить произвольную дату и время в запросе. При этом их можно указать с точностью до секунды, задав в качестве параметров 6 чисел. Если же используется только 3 числа, то часы, минуты и секунды будут приравнены к 0 (начало дня). Например, нам необходимо в запросе выбрать документы за первые 10 дней января 2018 года:
В запросе на встроенном языке 1С можно не только выбирать различные поля и получать параметры. Существует множество функций, облегчающих форматирование даты под нужды конкретной задачи.
Если вы часто работаете с датами в запросе, то вы должны знать эти команды:
- НАЧАЛОПЕРИОДА. В качестве параметров указывается дата и промежуток времени, в разрезе которого необходимо получить начало даты. Используется, чтобы преобразовать дату к формату без времени. Для этого необходимо задать второй параметр – «ДЕНЬ»;
- КОНЕЦПЕРИОДА. Аналогичная команда, возвращающая последнюю дату в разрезе указанных в параметрах единиц;
- ДОБАВИТЬКДАТЕ. Позволяет получить дату, большую на заданное количество указанных единиц времени. В качестве параметров функции указывают дату, единицу измерения времени и число;
- РАЗНОСТЬДАТ. Получает разницу между датами в указанных единицах измерения;
- ДЕНЬНЕДЕЛИ. Вернет порядковый номер одного из дней недели.
Грамотно применяя эти функции, разработчик может решать достаточно нетривиальные задачи. К примеру, получение наименования дня недели текущей даты в запросе в виде строки:
Преобразование типов в запросе 1С из числа или строки в дату – трудоемкое занятие. Из чисел можно получить дату с помощью функции ДАТАВРЕМЯ, из строки – комбинируя функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА ТОГДА ИНАЧЕ. Исходя из этого, разработчики предпочитают получать дату из других типов в модуле и передавать ее в запрос с помощью параметра. К сожалению, это не всегда реализуемо, поэтому приходится менять формат даты в запросе.
Есть возможность указать дату в запросе 1С в качестве параметра для получения данных из виртуальных таблиц регистров. В этой роли также можно использовать все вышеперечисленные функции. Но здесь важно не допустить, чтобы пустая дата в запросе 1С могла сказаться на конечном результате выполнения кода, поэтому обязательно надо делать проверку.
Надеемся, статья была вам полезна. Если у вас остались вопросы по указанию даты в запросе, обратитесь к нашим специалистам в рамках консультационных услуг по 1С, мы обязательно вам поможем.
Читайте также:
- Бюро обеспечения этики и добропорядочности в сфере государственного управления bios
- Torrent что это за программа и нужна ли она на компьютере
- Это специальные программы с помощью которых можно сжимать отдельные файлы или группы файлов
- Никита удалил из папки 31 файл
- Как вести статистику ставок в excel