Некоторые особенности настройки периода в Системе Компоновки Данных 1С

Некоторые особенности настройки периода в Системе Компоновки Данных 1С

В этой статье рассмотрены некоторые особенности настройки периода при использовании Системы Компоновки Данных (СКД), проблемы которые возникают из-за различия в понятии периода между рядовым пользователем и системой 1С, а так же предложены пути их решения.
Большинство отчетов, которые разрабатываются при помощи Системы компоновки Данных (СКД) требуют от пользователя ввода периода, за который будет построен отчет. Как правило, в СКД ввод периода организован через параметры, с помощью следующей конструкции см. Рис.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,23,59,59)
  ИНАЧЕ
    ВЫБОР
      КОГДА &Период.ДатаОкончания<&Период.ДатаНачала
         ТОГДА ДАТАВРЕМЯ(3999,12,31,23,59,59)
      ИНАЧЕ
         &Период.ДатаОкончания
    КОНЕЦ
КОНЕЦ

Окончательный вид нашей конструкции выбора периода представлен на Рис.5

Скачать обработку

Если публикация помогла Вам справится с проблемой, решить задачу или расширить свои знания - поддержите автора.

Комментарии:

  1. Вадим Геннадьевич:

    ВЫБОР
    КОГДА &Период.ДатаОкончания=ДАТАВРЕМЯ(1,1,1) ИЛИ &Период.ДатаОкончания<&Период.ДатаНачала
    ТОГДА ДАТАВРЕМЯ(3999,12,31,23,59,59)
    ИНАЧЕ
    &Период.ДатаОкончания
    КОНЕЦ
    КОНЕЦ — помойму так проще меньше букоф

  2. vic:

    Простая же команда, почему не срабатывает?
    КонецПериода(&КонецПериода,День)

Оставить комментарий