User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive
 

Добрый день.

Сегодня мы решим следующую задачу: в запросе без обращения к данным получим таблицу состоящую из одной колонки, в которой будут все даты, за указанный период.

Для чего это нужно? спросите Вы. А я скажу: для формирования отчетов, в которых информация выводится за каждый день. Например какой-нибудь табель или продажи по дням. Короче, те случаи, когда дни, за которые нет данных, тоже должны быть в отчете. Для формирования таких отчетом мы вяжем ЛЕВЫМ соединением таблицу дат и таблицу данных по дате, и, даже если данных за эту дату нет, мы в результатах выполнения запроса получим строчку, в которой заполнена дата, а данных нет, что собственно и требуется.

В типовой конфигурации 1С зарплата и управление персоналом для этих целей обычно используют регистр сведений "производственный календарь". В нем есть все дни за каждый день. Еще из него, помимо даты, можно вытащить другие полезные данные (праздники, норма часов...). Но во первых календарь может и не присутствовать в нашей конфигурации, во вторых он может быть не заполнен за нужный период, в третьих это обращение к данным БД, что не так экономично в плане ресурсов.

Ну что, хватит демагогии, поехали!



Имеем два параметра &НачалоПериода и &ОкончаниеПериода.

ВЫБРАТЬ
 НАЧАЛОПЕРИОДА(&НачалоПериода, День) КАК День
УПОРЯДОЧИТЬ ПО
 День
ИТОГИ ПО
 День ПЕРИОДАМИ(ДЕНЬ
, &НачалоПериода, &ОкончаниеПериода)

 Чтобы написать такое в конструкторе, добавляем поле, пишем в него формулу. На закладке "Объединения/Псевдонимы" задаем нормальный синоним вместо "Поле1". На закладке порядок тащим его двойным щелчком. На закладке итоги тащим его в группируемые поля. Выделяем его там. В этот момент появляется галка "периодами". Выбирается интервал -  День, указываем параметры начала периода и конца.

Авторизуйтесь пожалуйста

Comments   

+21 # pollackj 2015-01-01 01:56
Не работает :cry:
-24 # Антон Филоненко 2015-01-03 21:02
проверю, еще раз, но работало