Запрос выдающий данные на каждую дату периода

18.11.11

Разработка - Запросы

Пример простого запроса для извлечения данных на каждую дату в периоде. Применимо в специфичных случаях использования СКД и при формировании отчетов.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Текст запроса
.txt 1,73Kb
187
187 Скачать (1 SM) Купить за 1 850 руб.

Пример простого запроса для извлечения данных на каждую дату в периоде.

Применимо в специфичных случаях использования СКД и при формировании отчетов.  Принцип работы достаточно прост -  все даты берутся из регистра "РегламентированныйПроизводственныйКалендарь", что в общем логично - а затем посредством объединения присоединяются к данным. Всё ужасно просто - но часто бывает что достаточно тривиальные и лежащие на поверхности вещи в голову приходят не сразу Smile. Может кому-то и пригодиться....

Текстовой файл содержит текст запроса. В качестве примера используется извлечение остатка товара по партиям на конец каждого дня. В запросе используется три таблицы : РегламентированныйПроизводственныйКалендарь - для получения списка дат и соединение двух одинаковых таблиц ОстаткиИОбороты с периодичностью День  - для получения таблицы периодов в рамках которых не происходило изменений количества.... ну а далее простое соединение полученного - результат представлен на скриншоте.

 

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169303    937    403    

905

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    11395    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    6339    XilDen    36    

83

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    9071    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2727    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    10220    implecs_team    6    

48

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3625    andrey_sag    10    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Famza 85 18.11.11 11:23 Сейчас в теме
Уже только за одну "Единую Гвинею" можно плюсовать. Жжешь! :D
2. ildarovich 7939 18.11.11 11:43 Сейчас в теме
Можно обойтись и без производственного календаря (а вдруг его нет в конфигурации или он неправильно заполнен). Для этого можно сформировать искусственную таблицу дат в заданном диапазоне с помощью запроса наподобие Порождающий запрос. В комментариях к указанной статье приведены другие решения той же задачи:Комментарий со ссылками.
Dmitryiv; boln; +2 Ответить
4. alexkutuzov 45 18.11.11 13:19 Сейчас в теме
(2) ildarovich, В том то и смысл чтобы не создавать таблицу, а воспользоваться тем что уже есть. Зачем порождать таблицу описаными изуверствами - можно закинуть во временную таблицу запроса любую таблицу значений (важно только чтобы для каждой колонки был указан тип данных)

Запрос = Новый Запрос("ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_Таблица ИЗ &ТаблицаЗначений; 
                  |    ВЫБРАТЬ Дата, .... ИЗ ВТ_Таблица ... и т.д.");
Запрос.УстановитьПараметр("ТаблицаЗначений", ТаблицаЗначений);


Да и собственно производственный календарь тут ни причем - главное что идею Вы поняли, а что и как прицепить в запросе не так уж и важно.
MrFlanker; +1 1 Ответить
3. Mudrii_Gankster 18.11.11 13:02 Сейчас в теме
Спасибо за запросик, потестю
5. Smaylukk 186 18.11.11 21:12 Сейчас в теме
Вот как раз забросить во временную таблицу запроса таблицу значений с датами в СКД нельзя сделать. Разве что через набор данных "Объект" (по крайней мере в 8.1 так). А это в свою очередь убивает всю простоту. Да и как уже отметили - не во всех конфигурациях есть требуемые регистры.
6. Boroda 90 19.11.11 12:56 Сейчас в теме
А для ЗУП (или УПП) очень даже, думаю, подойдёт! Тем более задач по работе с календарём - море, т.к. почти все расчёты основаны на рабочем времени. И зачастую требуется привести фактическое рабочее время к плановому, к норме. Так что, и за идею, и за саму обработку ПЛЮС.
7. Angeros 21.11.11 05:21 Сейчас в теме
8. WellMaster 104 24.11.11 15:23 Сейчас в теме
Суть задачи понял, когда-то пытался решить на запросах - не решил. Пришлось кодом 1с на каждый день периода запускать запрос (грубо, долго, но работает).
Предлагаемое решение не понял (никак не соображу, за счет чего в результирующей таблице появляются строки с датами, по которым не было движений регистра накоплений). Курю запрос дальше.
9. JER_MARK 25.11.11 17:22 Сейчас в теме
Ага, вот эта генерация чисел - мудро конечно, но все-таки легче набросать производственный календарь ))) Мне это попалось при подготовке к экзамену по 1с:спец
10. Laertid 100 17.01.12 16:33 Сейчас в теме
Вообще-то СКД умеет из виртуального регистра ОстаткиИОбороты напрямую доставать остатки. А чтобы добавить недостающие дни, надо в группировке Дата во вкладочке группировка в Дополнение выбрать День, а в данных с остатками в описнании данных (там, где выбирается Период/измерение/Остаток) выбрать как раз остаток. Тогда СКД добавит дни без оборотов.
И более того, она будет правильно считать итоги по начальным-конечным остаткам >_< Не знаю, как оно реализовано у Вас (нет валюты скачать файлик глянуть), но судя по описанию - тем же способом, к которому пришел и я в конце концов. *пересечение одинаковых таблиц по неравенству в дате в условиях, правильно?*

*к сожалению, посмотреть файлик не могу, так что если я не прав - извиняюсь, но тогда ваша идея усложнена, мне кажется. Одна таблица ОстаткиИОбороты в СКД работает наилучшим способом, если вы хотите получить ежедневные остатки.
Spacer; alenakrr; +2 Ответить
11. kostik_love 317 22.09.17 06:49 Сейчас в теме
первый набор записей- периоды
ВЫБРАТЬ
	0 КАК Цифра
ПОМЕСТИТЬ Единицы

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Десятки.Цифра * 10 КАК Цифра
ПОМЕСТИТЬ Десятки
ИЗ
	Единицы КАК Десятки
ГДЕ
	Десятки.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Сотни.Цифра * 10 КАК Цифра
ПОМЕСТИТЬ Сотни
ИЗ
	Десятки КАК Сотни
ГДЕ
	Сотни.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Тысячи.Цифра * 10 КАК Цифра
ПОМЕСТИТЬ Тысячи
ИЗ
	Сотни КАК Тысячи
ГДЕ
	Тысячи.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДесяткиТысяч.Цифра * 10 КАК Цифра
ПОМЕСТИТЬ ДесяткиТысяч
ИЗ
	Тысячи КАК ДесяткиТысяч
ГДЕ
	ДесяткиТысяч.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СотниТысяч.Цифра * 10 КАК Цифра
ПОМЕСТИТЬ СотниТысяч
ИЗ
	ДесяткиТысяч КАК СотниТысяч
ГДЕ
	СотниТысяч.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра) КАК ДатаПериода
ПОМЕСТИТЬ Календарь
ИЗ
	СотниТысяч КАК СотниТысяч,
	ДесяткиТысяч КАК ДесяткиТысяч,
	Тысячи КАК Тысячи,
	Сотни КАК Сотни,
	Десятки КАК Десятки,
	Единицы КАК Единицы
ГДЕ
	СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(Календарь.ДатаПериода, МЕСЯЦ) КАК Период // указываем периодичность- в данном случае каждый месяц
ИЗ
	Календарь КАК Календарь

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

второй набор данных- РС из которого получаем срез
ВЫБРАТЬ
	&Период,
	СотрудникиСрезПоследних.Организация,
	СотрудникиСрезПоследних.Подразделение,
	СотрудникиСрезПоследних.ФизЛицо.Пол КАК Пол,
	1 КАК Количество,
	СотрудникиСрезПоследних.Регистратор
ИЗ
	РегистрСведений.Сотрудники.СрезПоследних(
			&Период,) КАК СотрудникиСрезПоследних
ГДЕ
	НЕ СотрудникиСрезПоследних.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
Показать


связываем эти отборы как показано на картинке
Прикрепленные файлы:
Оставьте свое сообщение