1с в скд дату выразить как дата а не дата время

Обновлено: 04.07.2024

Войдите как ученик, чтобы получить доступ к материалам школы

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

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

Функции для работы с датой в запросе

На сегодняшнем уроке мы разберём функции для работы с реквизитами типа Дата в запросах.

Мы уже сталкивались с этим типом, например, когда выводили реквизит Дата у документов.

Функция ДАТАВРЕМЯ

И самая первая функция, которую нам следует разобрать - это, конечно же, ДАТАВРЕМЯ.

В качестве параметров она принимает целочисленные Год , Месяц , День , Час , Минута и Секунда . Последние три параметра являются необязательными.

Назначение функции ДАТАВРЕМЯ состоит в конструировании даты по её отдельным компонентам.

Таким образом следующий запрос

вернёт нам таблицу с типом поля ДАТА и значением 1 февраля 2013 года:

Значение часов, минут и секунд равно нулю, так как мы их не указали при вызове функции (последние три параметра).

Отступление

Отдельно обращаю ваше внимание на текст предыдущего запроса. Мы получаем таблицу как бы "из воздуха", не указывая в секции ИЗ источник данных.

Получается, что вовсе необязательно делать запрос к реально существующим таблицам базы данных. Можно конструировать эти таблицы самостоятельно, задавая константные значения полей.

Например, так (поля типа ЧИСЛО):

Или так (поля типа СТРОКА):

03

Или вообще вот так (поля разных типов):

04

Вернёмся к функциям для работы с датой.

Функция ГОД

Принимает параметр типа ДАТА. Возвращает год.

Функция КВАРТАЛ

Принимает параметр типа ДАТА. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Возвращает номер квартала даты (целочисленное значение от 1 до 4).

Функция МЕСЯЦ

Принимает параметр типа ДАТА. Возвращает номер месяца даты (целочисленное значение от 1 до 12).

Функция ДЕНЬГОДА

Принимает параметр типа ДАТА. Возвращает номер дня в году (целочисленное значение от 1 до 366).

Функция ДЕНЬ

Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).

Функция НЕДЕЛЯ

Принимает параметр типа ДАТА. Возвращает номер недели в году.

Функция ДЕНЬНЕДЕЛИ

Принимает параметр типа ДАТА. Возвращает номер дня недели (целочисленной значение от 1 (понедельник) до 7 (воскресенье)).

Функция ЧАС

Принимает параметр типа ДАТА. Возвращает час суток (целочисленное значение от 0 до 23).

Функция МИНУТА

Принимает параметр типа ДАТА. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Возвращает минуты часа (целочисленное значение от 0 до 59).

Функция СЕКУНДА

Принимает параметр типа ДАТА. Возвращает секунды минуты (целочисленное значение от 0 до 59).

Функция НАЧАЛОПЕРИОДА

Принимает параметр типа ДАТА и тип периода (одно из значений МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ).

Функция предназначена для получения даты начала периода по дате, принадлежащей этому периоду.

Функция КОНЕЦПЕРИОДА

Принимает параметр типа ДАТА и тип периода (одно из значений МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ).

Функция предназначена для получения даты конца периода по дате, принадлежащей этому периоду. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Функция ДОБАВИТЬКДАТЕ

Принимает параметр типа ДАТА , тип увеличения (одно из значений СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ) и величину увеличения (целочисленное значение).

Функция предназначена для прибавления к дате некоторой величины.

Функция РАЗНОСТЬДАТ

Принимает два параметра типа ДАТА и третий параметр тип разности (одно из значений СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД).

Функция предназначена для получения разницы между двумя датами (вторым и первым параметром).

В функции можно передавать не только константы, но и поля таблиц

Отдельно обращаю ваше внимание, что в функции можно передавать не только даты, сконструированные при помощи ДАТАВРЕМЯ, но и свойства объектов, которые мы запрашиваем из базы, имеющие тип ДАТА.

К примеру, если мы запрашиваем документы и нам известно, что свойство Дата у документа имеет тип ДАТА, это означает, что мы можем использовать его в качестве параметров для функций работающих с датой.

03

Ещё раз : когда мы конструируем дату при помощи функции ДАТАВРЕМЯ, задавая конкретные значения года, месяца и числа, то получаем значение даты, которое жёстко прописано в коде и уже никогда не изменится.

Когда же мы пишем Дата, то в случае выборки из документов это означает, что вместо Дата будут подставляться даты из документов, забитых в базе.

Поэтому даты, заданные первым способом называются константными (то есть постоянными), а вторые нет.

Как вы понимаете, ничто нам не мешает использовать одновременно оба типа дат:

murderface --> murderface



Просмотр профиля

Есть поля:
- поле типа Дата. Состав даты - Дата. Формат - ДФ=dd.MM.yyyy.
- поле типа Дата. Состав даты - Время.

Заполняются на форме без проблем в нужном формате, а вот в отчете вместе с датой отображается время(а так, как оно не указывалось - 00:00:00) а вместе с временем - дата(аналогично 01.01.0001).

Подскажите, пожалуйста, как вывести в отчете дату и время в том формате, в котором нужно?

P.S. Формат даты писал в надежде, что это исправит ситуацию, но.

logist --> logist



Просмотр профиля murderface --> murderface



Просмотр профиля

Залез в настройки отчета. Указал для поля с датой тип значения и маску. Тоже не спасло.


в маске указал dd.MM.yyyy

logist --> logist



Просмотр профиля Вы указали Параметры редактирования, а надо Оформление. murderface --> murderface



Просмотр профиля Вы указали Параметры редактирования, а надо Оформление

На этой же вкладке указал в Оформлении "тип данных" ДФ=dd.MM.yyyy. Все равно выводит время.

logist --> logist



Просмотр профиля Что такое "тип данных"? Там открывается окно в котором надо выбрать "Формат" и указать нужный формат. murderface --> murderface



Просмотр профиля Что такое "тип данных"? Там открывается окно в котором надо выбрать "Формат" и указать нужный формат.

Да, формат, прошу прощения.


Вот так указал и все равно выводит время:

reneval --> reneval



Просмотр профиля

Если правильно заполнен состав даты (в колонке "тип значения") и оформление (в "Оформлении) - будет работать.

так что, либо Вы оформление не тому полю ставите либо в данных какой-то косяк.
Или отчет меняете и не открываете его заново.
На картинке, кста, "ВремяПримерки" незаполнено, соответственно там будет выводиться и время и дата.

Как вариант уберите все оформление, оставьте только состав даты.

murderface --> murderface



Просмотр профиля

Если правильно заполнен состав даты (в колонке "тип значения") и оформление (в "Оформлении) - будет работать.

так что, либо Вы оформление не тому полю ставите либо в данных какой-то косяк.
Или отчет меняете и не открываете его заново.
На картинке, кста, "ВремяПримерки" незаполнено, соответственно там будет выводиться и время и дата.

Как вариант уберите все оформление, оставьте только состав даты.

Со временем ничего не делаю, пока дата коряво отображается.


Само поле ДатаПримерки:

Настройка Оформления в отчете - выше.

Отчет не меняю. Там пока обычная выборка. В документе дата указывается как дата формата дд.мм.гггг

reneval --> reneval



Просмотр профиля

Вот такого плана строка будет "Выплачено № " + ВзаиморасчетыСРаботникамиОрганизаций.Ведомость.Номер + " " + <тут дата> + " " + <тут продолжение, комментарий и др., не важно> НачалоПериода? Не понял, все равно ведь дата будет

ну так и формируй при выводе. и добавь в конце - "целую, т.Сухов"

Я не хочу, там уже все есть. Проблема, что преобразование идет через ВЫБОР КОГДА, при этом куча левых соединений получается и в результате влияет производительность снижается

> преобразование идет через ВЫБОР КОГДА Приведи кусок.

В СКД можно. ВЫБОР КОГДА МаршрутныйЛист ЕСТЬ НЕ NULL ТОГДА "Марш.лист " + СТРОКА(МаршрутныйЛист.Номер) + " от " + ФОРМАТ(МаршрутныйЛист.Дата, "ДФ = дд.ММ.гггг") КОНЕЦ

Попробуй использовать функции языка запросов 1С: День, Месяц, Год, Выразить

это же элементарно, Ватсон. Делаешь три колонки: "Выплачено №", номер и дата. И между ними убираешь линии, чтобы в отчете они смотрелись как одна колонка. Никто и не догадается, что там подмена.

Вчерась попытался просто в запросе написать Выразить(МоеПоле КАК Строка) где МоеПоле это число. Был послан по несоответсвию типов :)

надо было сначала почитать литературу про команду ВЫРАЗИТЬ.

это понятно, но запросов много в объединении, это часть проблемы. Вторая - с настройками возиться долго. Мне нужно было простое решение, как обычно) Перелопатить весь отчет можно, но если есть более простой способ, потом будет обидно

А вот англоязычному выразить-cast все не почем :) select cast(_Fld17394 as char) from _document777.

Ктати если кто отgишет что надо сделать чтобы взлетело: Выразить(МоеполеЧисло КАК Строка) Из Документ.Док буду признателен.

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

Читайте также: