- Месяц и Год в запросе
- Список дат произвольного месяца в запросе
- Функции языка запросов 1С. Работа с датами
- Функции работы с датами
- Функция Год
- Функция Квартал
- Функция Месяц
- Функция ДеньГода
- Функция День
- Функция Неделя
- Функция ДеньНедели
- Функция Час
- Функция Минута
- Функция Секунда
- Функция НачалоПериода
- Функция КонецПериода
- Функция ДобавитьКДате
- Функция РазностьДат
- Дополнение результата запроса датами в установленном периоде
- Остатки с разбивкой по периодам в запросе 1С
Месяц и Год в запросе
Добрый день,уважаемый форум!
Существует отчет Валовая прибыль(на базе универсального отчета).Необходимо разбить его данные по месяцам партий прихода. то есть группировки отчета будут в такой последовательности : Покупатель — Номенклатура -МесяцОприходования.Как сделать так, чтобы данные сортировались по дате оприходования, а в отчет выводилось например «Август 2012 г.»?
(5) taiba, Я правильно понимаю?или как иначе?
ВЫБОР
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=1 ТОГДА «Январь »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=2 ТОГДА «Февраль »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=3 ТОГДА «Март »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=4 ТОГДА «Апрель »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=5 ТОГДА «Май »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=6 ТОГДА «Июнь »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=7 ТОГДА «Июль »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=8 ТОГДА «Август »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=9 ТОГДА «Сентябрь »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=10 ТОГДА «Октябрь »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=11 ТОГДА «Ноябрь »
КОГДА МЕСЯЦ(ВложенныйЗапрос.ДатаОприходования)=12 ТОГДА «Декабрь »
КОНЕЦ + ВЫРАЗИТЬ(ГОД(ВложенныйЗапрос.ДатаОприходования)КАК СТРОКА)
Но, к сожалению, это не работает. Кстати, получается 2 поля нужно:то,которое выводить; То,по которому сортировать и то, по которому группировать(месяц и год)
(10) sweety-twetty, «не работает» — недостаточно информативный диагноз для советов 🙂
Источник
Список дат произвольного месяца в запросе
Для разворачивания остатков/приходов/расходов на каждую дату месяца в запросе требуется как минимум список дат месяца. Порывшись в интернете я нашел советы использовать для этого: а) РегистрСведений.КурсыВалют (не айс решение) б)РегистрСведений.РегламентированныйПроизводственный1Календарь (уже лучше, если он у Вас есть в конфигурации) в)заполнить список в цикле и подтянуть его в запрос (тривиально довольно) Мое решение самому создать список дат в запросе:
ВЫБРАТЬ
таб.Даты
ИЗ
(ВЫБРАТЬ
НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ) КАК Даты
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 1)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 2)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 3)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 4)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 5)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 6)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 7)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 8)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 9)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 10)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 11)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 12)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 13)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 14)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 15)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 16)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 17)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 18)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 19)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 20)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 21)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 22)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 23)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 24)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 25)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 26)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 27)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 28) > КОНЕЦПЕРИОДА(&дат1, МЕСЯЦ)
ТОГДА ДАТАВРЕМЯ(1, 1, 1)
ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 28)
КОНЕЦ
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 29) > КОНЕЦПЕРИОДА(&дат1, МЕСЯЦ)
ТОГДА ДАТАВРЕМЯ(1, 1, 1)
ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 29)
КОНЕЦ
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 30) > КОНЕЦПЕРИОДА(&дат1, МЕСЯЦ)
ТОГДА ДАТАВРЕМЯ(1, 1, 1)
ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&дат1, МЕСЯЦ), ДЕНЬ, 30)
КОНЕЦ) КАК таб
ГДЕ
таб.Даты <> ДАТАВРЕМЯ(1, 1, 1)
Можно было бы и по короче (выкинув средину), но большинству будет удобней просто скопировать в КонсольЗапросов код запроса. От сюда не далеко до списка за интервал дат месяца, за несколько месяцев. Предлагаю обсудить возможность более компактного построения запроса и другие способы получения списка дат в запросе.
Источник
Функции языка запросов 1С. Работа с датами
Функции работы с датами
Дата — один из примитивных типов данных в системе 1С:Предприятие. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Одной из первых моих статей в этой рубрике была небольшая шпаргалка по работе с датами, но о датах в запросах там было написано очень мало. В запросах 1С с датами приходится работать довольно часто, особенно когда запрос строится к объектам метаданных в которых содержится периодическая информация. Как правило это регистры (сведений, накопления, расчета, бухгалтерии).
Функция Год
Функция Квартал
Возвращает номер квартала даты (целочисленное значение от 1 до 4)
Предположим, в ЗаказПокупателя передаем заказ №100 от 12.03.2016, в этом случае наш запрос вернет НомерКвартала = 1
Функция Месяц
Принимает параметр типа ДАТА. Возвращает номер месяца даты (целочисленное значение от 1 до 12).
Запрос вернет – 6
Функция ДеньГода
Принимает параметр типа ДАТА. Возвращает номер дня в году (целочисленное значение от 1 до 366).
Запрос вернет — 175
Функция День
Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).
Запрос вернет — 23
Функция Неделя
Принимает параметр типа ДАТА. Возвращает номер недели в году.
Запрос вернет — 25
Функция ДеньНедели
Принимает параметр типа ДАТА. Возвращает номер дня недели (целочисленной значение от 1 (понедельник) до 7 (воскресенье)).
Запрос вернет — 4
Функция Час
Принимает параметр типа ДАТА. Возвращает час суток (целочисленное значение от 0 до 23).
Запрос вернет — 18
Функция Минута
Принимает параметр типа ДАТА. Возвращает минуты часа (целочисленное значение от 0 до 59).
Запрос вернет — 25
Функция Секунда
Принимает параметр типа ДАТА. Возвращает секунды минуты (целочисленное значение от 0 до 59).
Запрос вернет — 36
Функция НачалоПериода
Функция возвращает для указанной даты начало периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Запрос вернет – 01.06.2016
Функция КонецПериода
Функция возвращает для указанной даты конец периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Запрос вернет – 30.06.2016
Функция ДобавитьКДате
Функция добавляет к дате указанное количество временных интервалов.
Получаем дату 15.10.2016 0:00:00 Очень удобно, что не приходится задумываться о количестве дней в месяцах.
Количество может быть и отрицательным. Тогда отсчет интервала производится в обратную сторону.
Функция РазностьДат
Функция рассчитывает календарную разницу между двумя датами и ее нельзя использовать в местах, где необходимо рассчитать банковских или рабочих дней. Тип может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Источник
Дополнение результата запроса датами в установленном периоде
Иногда возникает необходимость вывести в отчет информацию таким образом, чтобы некоторые итоговые значения были рассчитаны на каждую дату в заданном интервале с указанной периодичностью. Например, требуется получить обороты по неделям вне зависимости от того, были ли обороты в конкретную неделю или нет. Для решения подобной задачи в языке запросов предусмотрена конструкция ПЕРИОДАМИ. Данная конструкция указывается в предложении ИТОГИ после поля «Период». После ключевого слова ПЕРИОДАМИ в скобках указывается вид периода (одно из Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие), начальная и конечные даты интересуемого периода. В случае если начальные и конечные даты не указаны, будут использованы первая и последняя даты, участвующие в результате.
ВЫБРАТЬ
УчетНоменклатурыОбороты.Период КАК Период,
УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
РегистрНакопления.УчетНоменклатуры.Обороты(, , Неделя, ) КАК УчетНоменклатурыОбороты
УПОРЯДОЧИТЬ ПО
Период
ИТОГИ СУММА(КоличествоОборот) ПО
Период ПЕРИОДАМИ(НЕДЕЛЯ,,)
Результат данного запроса будет дополнен записями на даты начала каждой недели.
Заметим, что так как для дополненных периодов в результате запроса отсутствуют детальные записи, то дополненные записи будут получаться из выборки только в том случае, если при обходе выборки будут получаться все периоды, участвующие в запросе, что достигается установкой третьего параметра функции «Выбрать» результата запроса.
ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, «Период», «ВСЕ»);
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень());
КонецЦикла;
Источник
Остатки с разбивкой по периодам в запросе 1С
Часто перед программистом 1с возникает следующая задача: в запросе требуется взять остатки регистра бухгалтерии или накопления по периодам.
Пример: Есть определенный временной интервал (полгода к примеру) и на начало каждого месяца нужно получить остатки по дебиторской задолженности с разрезами Организация, Контрагент, Договор контрагента.
Казалось бы сделать это внутри запроса несложно: нужно взять виртуальную таблицу ОстаткиИОбороты, выбрать разбивку на нужные периоды и все. Но такой метод не сработает из-за одной неприятной особенности ОстатковИОборотов, в ней не хранятся остатки по периодам для тех позиций, по которым не было оборотов.
Пример: Контрагент Иванов должен нам 100 рублей на начало года, в январе, феврале и марте его задолженность оставалась неизменной. Берем таблицу Остатки и обороты регистра бухгалтерии Хозрасчетный по счету 62 за первый квартал, в периодичности указываем значение Месяц. Выполняем запрос и получаем следующий результат:
Месяц | Нач. остаток | Приход | Расход | Кон. остаток |
---|---|---|---|---|
Январь | 100 | 0 | 0 | 100 |
Март | 100 | 0 | 0 | 100 |
Как мы видим взялись остатки только крайних периодов, а остатки февраля выпали. Что бы решить данную проблему, остатки на каждый период придется рассчитывать.
Ниже приведен запрос для конфигурации Бухгалтерия 2.0 (он также заработает для Бухгалтерии 3.0 если в запросе заменить регистр РегламентированныйПроизводственныйКалендарь на регистр ДанныеПроизводственногоКалендаря) в котором считаются остатки с разбивкой по месяцам по счету 62.
Разберем приведенный запрос по пакетам:
Здесь мы используя регистр РегламентированныйПроизводственныйКалендарь получаем все нужные нам периоды.
ОстаткиНаНачало
Получаем остатки на начало выбранного периода, а так же если остатков не было, а обороты за весь период были, добавляем нулевые остатки.
ОборотыЗаПериод
Получаем обороты за весь период с разбивкой по месяцам.
РасчетОстатковНаНачало
Сводим в одну таблицу начальный остаток и обороты за каждый месяц для расчета начальных остатков по периодам.
РасчетОстатковНаКонец
Сводим в одну таблицу начальный остаток и обороты за каждый месяц для расчета конечных остатков по периодам.
ОбщиеОстатки
Рассчитываем начальные и конечные остатки по периодам путем прибавления оборотов.
Источник