gifts2017

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

Опубликовал Александр Кутузов (alexkutuzov) в раздел Программирование - Практика программирования

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

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

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

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

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Текст запроса
.txt 1,73Kb
18.11.11
127
.txt 1,73Kb 127 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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


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

*к сожалению, посмотреть файлик не могу, так что если я не прав - извиняюсь, но тогда ваша идея усложнена, мне кажется. Одна таблица ОстаткиИОбороты в СКД работает наилучшим способом, если вы хотите получить ежедневные остатки.
Spacer; alenakrr; +2 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа