Некоторые особенности настройки периода в СКД.
Большинство отчетов, которые разрабатываются при помощи Системы компоновки Данных (СКД) требуют от пользователя ввода периода, за который будет построен отчет.
Как правило, в СКД ввод периода организован через параметры, с помощью следующей конструкции см. Рис.1 Этот способ ввода периода считается "классическим", он описан в статье на ИТС и другой литературе, посвященной разработке в 1С, поэтому возьмём его за основу. Рассмотрим в качестве примера простой запрос, получающий все документы РеализацияТоваровУслуг за заданный период см. Рис.2
При использовании этого отчета пользователь задает период через параметры см. Рис.3 Вроде бы все корректно…, НО есть маленькая проблема:
Все дело в том, что подавляющее большинство пользователей «понимают» период не так как его «понимает» 1С, примеры:
1). Рассмотрим Рис.3
С точки зрения пользователя период не задан, то есть НЕ ОГРАНИЧЕН, то есть в отчет должны попасть ВСЕ документы без ограничения по дате.
«С точки зрения» системы 1С параметр-период задан и … обе его границы равны 01.01.0001 и в отчет, попадут только документы с пустой датой, что на практике означает, не попадет ни одного документа.
2). Рассмотрим Рис. 4
С точки зрения пользователя в отчет должны попасть все документы начиная с даты 28.01.2010.
«С точки зрения» 1С период 28.01.2010 – 01.01.0001 вызовет исключение.
Можно конечно попытаться объяснить пользователю, почему отчет не выводит те документы, которые он ожидает увидеть и как период представляется с "точки зрения" 1С, но неблагодарное это дело, да и неправильное. Хорошая программа должна быть, прежде всего, удобна пользователю, потому как программа существует для пользователя, а не наоборот, посему придется «научить» 1С понимать период так как его понимает пользователь, а именно:
1). НачалоПериода и ОкончаниеПериода не заданы -> все документы.
2). Задано только НачалоПериода –> все документы начиная с НачалаПериода
3). Кроме того будем проверять что бы ОкончаниеПериода >= НачалоПериода, и если это не выполняется то будем считать что ОкончаниеПериода не задано, т.е. 2).
Исходя из всего вышесказанного выражение для параметра ДатаОкончания :
ВЫБОР
КОГДА &Период.ДатаОкончания=ДАТАВРЕМЯ(1,1,1)
ТОГДА ДАТАВРЕМЯ(3999,12,31) ДАТАВРЕМЯ(3999,12,31,23,59,59)
ИНАЧЕ
ВЫБОР
КОГДА &Период.ДатаОкончания<&Период.ДатаНачала
ТОГДА ДАТАВРЕМЯ(3999,12,31) ДАТАВРЕМЯ(3999,12,31,23,59,59)
ИНАЧЕ
&Период.ДатаОкончания
КОНЕЦ
КОНЕЦ
Окончательный вид нашей конструкции выбора периода представлен на Рис.5
Примечание: данный механизм установки параметров предназначен для старых платформ 1С 8.1 и 8.2(и конфигураций работающих под их управлением), в более старших версиях платформы 1С имеются встроенные механизмы для контроля незаполненных параметров и прибегать к механизму описанному в данной статье нет никакой необходимости, кроме того на некоторых версиях платформы 1С возможны ошибки и некорректная работа.
Источник: http://www.obrabotki.com/1s-period-skd/