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

07.02.18

Разработка - СКД

В этой статье рассмотрены некоторые особенности настройки периода при использовании Системы Компоновки Данных (СКД), проблемы которые возникают из-за различия в понятии периода между рядовым пользователем и системой 1С, а так же предложены пути их решения.

Скачать файл

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

Наименование По подписке [?] Купить один файл
SKD_Period_1s.rar
.rar 2,63Kb
15
15 Скачать (2 SM) Купить за 2 150 руб.

 

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

Большинство отчетов, которые разрабатываются при помощи Системы компоновки Данных (СКД) требуют от пользователя ввода периода, за который будет построен отчет.

Как правило, в СКД ввод периода организован через параметры, с помощью следующей конструкции см. Рис.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/

скд период настройка

См. также

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    156552    849    398    

855

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

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

15.05.2024    8084    implecs_team    6    

46

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    6747    52    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3087    4    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10583    23    John_d    25    

124

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

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

05.12.2023    7700    PROSTO-1C    14    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alex_art 14 28.01.10 19:33 Сейчас в теме
хорошая мысль .... вы думаете СКД дольше 4000-х тясячного года не протянет ? :))))
2. ll13 1067 28.01.10 21:20 Сейчас в теме
(1) Я оптимист и конечно же уверен, что СКД протянет дольше 4000-х тясячного года, да вот беда - максимальная дата которую возвращает функция ДАТАВРЕМЯ - это 31.12.3999 :(
то есть ДАТАВРЕМЯ(3999,12,31) вернет 31.12.3999, а вот ДАТАВРЕМЯ(4000,1,1) - уже вызовет ошибку :)
SunShinne; +1 Ответить
3. vvr908 449 29.01.10 00:11 Сейчас в теме
Спасибо, четко и по делу. Удобно сделать все это в рамках СКД и не заморачиваться на переделку периода в форме отчета.
4. rostova.it@gmail.com 03.02.10 14:31 Сейчас в теме
и на какой ерунде люди только плюсы не рубят....
ivangrant; SadrA; DmitrySinichnikov; Герасим; kuzyara; Spacer; +6 Ответить
5. e-tixom 108 04.02.10 14:31 Сейчас в теме
Не плохо было бы еще научить 1С понимать, что время окончания периода это 23:59:59, а не 00:00:00.
6. ll13 1067 04.02.10 14:47 Сейчас в теме
(5) В СКД, при использовании типа СтандартныйПериод,
ДатаНачала - имеет время 00:00:00, а ДатаОкончания - 23:59:59
Учите матчасть :D
7. e-tixom 108 04.02.10 15:34 Сейчас в теме
(6)Да уж понятно, что речь идет не о стандартном периоде, не тормозите!
8. ll13 1067 04.02.10 16:03 Сейчас в теме
(7) А..., Вас наверное смущает ДАТАВРЕМЯ(3999,12,31) ?
Если вы столь щепетильны используйте ДАТАВРЕМЯ(3999,12,31,23,59,59) или КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(3999,12,31), "ДЕНЬ"))
9. e-tixom 108 05.02.10 08:24 Сейчас в теме
(8) Спасибо, что подсказали!. А смущает не меня, а пользователя, мы ведь собственно для них делаем. :D
10. Hron 19.02.10 20:17 Сейчас в теме
Спасибо, очень полезная вещь, теперь не будут смущать пустые отчеты при не указанном периоде ;)
11. detec 136 20.03.10 00:22 Сейчас в теме
Что мешает программисту в закладке "Параметры" указать какое-нибудь значение стандартного периода? Например, прошлый месяц? Оно потом подставляется у пользователя в режиме Предприятие.

Лично я всегда прописываю дату начала как НАЧАЛОПЕРИОДА(&Период.ДатаНачала, "ДЕНЬ"), и по аналогии - дату конца.
12. ll13 1067 20.03.10 00:39 Сейчас в теме
А что мешает программисту НЕ указывать "какое-нибудь значение стандартного периода? Например, прошлый месяц? " что бы оно потом НЕ подставлялось у пользователя в режиме Предприятие ?
13. artbear 1563 09.10.10 11:08 Сейчас в теме
(0) Что исправил в статье?
14. sant78 09.01.12 12:51 Сейчас в теме
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Ссылка,
РеализацияТоваровУслуг.Дата КАК Дата
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
{ГДЕ
(РеализацияТоваровУслуг.Дата >= &ДатаНач),
(РеализацияТоваровУслуг.Дата <= &ДатаКон)}

УПОРЯДОЧИТЬ ПО
Дата,
Ссылка

Это текст запроса, без всяких заморочек.

ЕСЛИ Пользователь ИДИОТ ТОГДА //и ставит значение ДатаНач больше ДатаКон
ему пора подумать о смене профессии
ИНАЧЕ
Пользователь не зря получает зар. плату
КОНЕЦЕСЛИ;
Прикрепленные файлы:
Anchoret; +1 Ответить
15. ll13 1067 10.01.12 10:52 Сейчас в теме
(14)Прочитай статью 15 раз, особенно её вступительную часть, которая касается восприятия информации пользователями ...
38. Serg2000mr 634 18.03.24 20:08 Сейчас в теме
(14) Для SQL есть разница между ГДЕ (РеализацияТоваровУслуг.Дата >= &ДатаНач) И (РеализацияТоваровУслуг.Дата <= &ДатаКон) и оператором МЕЖДУ. Во втором случае используются индексы.
16. Borunmeert 11 07.02.14 13:09 Сейчас в теме
Не работает условие, что то не то!
SashaSashaSashka; gorin; pass_developer; +3 Ответить
17. Brawler 458 29.06.15 10:57 Сейчас в теме
Сегодня словил ситуевину на 8.3.6.2076, может и раньше было не знаю, никто не жаловался ибо пока только к 8.3.6 готовлюсь, перелопачивают вешние обработки чтобы работали под БСП 2.3.1.

в общем есть простой отчет на СКД, параметры заданы как на первом фото этой публикации, и не пашет)))
на 8.3.5 пашет, а на 8.3.6.2076 нет)) с потугами качаю 8.3.6.2100 (инет еле жив), может 1С исправили это дело, а пока наблюдаю сообщение "Не установлено значение параметра "Начало периода""
22. RomanRomans 24.10.15 00:05 Сейчас в теме
(17) Brawler, пробовал на 8.3.6.2299 - тот же результат 'Не установлено значение параметра "Конец периода" '.

Причем не заполняется параметр с выражением "&СтандартныйПериод.ДатаОкончания", а параметр с выражением "&СтандартныйПериод.ДатаОкончания" заполняется исправно
23. insurgut 208 24.10.15 07:52 Сейчас в теме
(22) RomanRomans, платформа тут ни при чем, прочтите мой комментарий
18. insurgut 208 09.07.15 12:41 Сейчас в теме
Та же ерунда, 8.3.5.1482, когда очищаю дату начала - вылетает ошибка:
Ошибка исполнения отчета
по причине:
Параметр не найден "Период.ДатаНачала"
19. insurgut 208 09.07.15 12:46 Сейчас в теме
Что-то вообще тут ничего не работает, дата окончания пустая - а все равно конец 3999 года не берется...
20. insurgut 208 09.07.15 13:19 Сейчас в теме
Непонятно, за что плюсы понаставили. Чтобы работало, необходимо условие по дате в фигурные скобки взять просто и никаких условий на дату начала и окончания не устанавливать прото...

Пример запроса СКД:
ВЫБРАТЬ
	ЧекККМСкидки.СкидкаНаценка,
	ЧекККМСкидки.Ссылка,
	ЧекККМСкидки.Сумма
ИЗ
	Документ.ЧекККМ.Скидки КАК ЧекККМСкидки
{ГДЕ
	(ЧекККМСкидки.Ссылка.Дата >= &ДатаНачала),
	(ЧекККМСкидки.Ссылка.Дата <= &ДатаОкончания)}
Показать


В параметрах ДатаНачала = &Период.ДатаНачала, а ДатаОкончания = &Период.ДатаОкончания (обращаю внимание, что никаких КонецПериода использовать не надо при использовании стандартного периода).

Все просто и никаких заморочек.
Swamt; amatoravg; Dzamba; jaroslav.h; proforg; lemilk; nick_krsk; SuhoffGV; jobkostya1c_ERP; okulus; Spacer; ShootNICK; Craig; +13 Ответить
21. Craig 275 16.08.15 16:39 Сейчас в теме
(20) insurgut, А вот за пояснение для чего нужны {} скобки отдельное спасибо!!!
33. GetNight 48 10.09.19 17:21 Сейчас в теме
(20) Как оказалось, крайне важно задать эти параметры:



Если Дата1 и Дата2 поставить Всегда, то, будучи внутри {}, будут ВСЕГДА подтягиваться, даже если
пустые... следовательно, описанного эффекта не будет.

Или если СтандартныйПериод поставить Авто, то будет то же самое...
34. insurgut 208 10.09.19 18:09 Сейчас в теме
(33) само собой - если ставить ВСЕГДА, то это будет аналогично тому, что прописывать условия без фигурных скобок. Вся суть фигурных скобок как раз в необязательности параметра.
24. killstrike 15.01.16 13:02 Сейчас в теме
То есть скопипастил (источник хоть указал и то дело), а здесь выложил за 2 sm? Однако.
25. premierex 204 31.01.17 15:02 Сейчас в теме
(0) 3). "Кроме того будем проверять что бы ОкончаниеПериода >= НачалоПериода, и если это не выполняется то будем считать что ОкончаниеПериода не задано, т.е. 2)."

И что получится? Пользователь захотел сформировать отчет за определенный период позапрошлого года, ошибся в дате окончания (установил меньше даты начала) и сидит, ждёт пока его отчет сформируется за период с позапрошлого года по текущую дату. Безо всяких предупреждений со стороны программы. Тоже, как мне кажется, "неблагодарное это дело, да и неправильное". В СКД есть флаг запрета незаполненных значений, на некорректно заданный период тоже выводится ошибка формирования, так что пару-тройку раз пользователь ошибку "словит", и в дальнейшем уже будет очень внимательно подходить к заполнению параметров отчета.
26. DamirI 08.02.18 16:08 Сейчас в теме
Коллеги, приветствую!

Платформа 8.3.10.2580.

В СКД отчете имеется запрос с условием по периоду ДатаНачала и ДатаОкончания. В запросе определил условие:

ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения >= &ДатаНачала
	И ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения <= &ДатаОкончания


Необходимо, чтобы была возможность не заполнять параметр ДатаОкончания.

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

Подскажите где что делаю не правильно.


Спасибо.
Прикрепленные файлы:
27. DamirI 09.02.18 19:37 Сейчас в теме
28. Brawler 458 09.02.18 20:26 Сейчас в теме
(27) Сделайте так чтобы юзер указывал сам даты в двух ваших параметрах, то есть не используйте стандартный параметр Период.
У вас будет на самом деле все так же три параметра:
ДатаНачала
ДатаОкончания
ДатаОкончанияВычисляемая (невидимый параметр и используется в запросе) вычисляется по формуле похожей как у вас там уже написана и считается от видимого параметра ДатаОкончания
29. DamirI 10.02.18 09:45 Сейчас в теме
(28) К сожалению, тут важно использовать стандартный период, с его возможностями интерактивного выбора периода - месяц, квартал,, год и тд.
Прикрепленные файлы:
36. Westbound 15.01.20 12:04 Сейчас в теме
(29) такая же ошибка, причем раньше все работало. Может от платформы зависит...
30. RimidalV 22.05.18 07:51 Сейчас в теме
(27)
Добавьте условие
.........
ИЛИ &ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1))
31. Craig 275 25.01.19 14:14 Сейчас в теме
(0) Автор - убери пожалуйста из статьи зачеркнутый текст ДАТАВРЕМЯ(3999,12,31). Копипастом пользоваться не удобно.
Оставь только правильный вариант.
32. user846872 14.02.19 12:46 Сейчас в теме
Гм...
Или я чего-то не понимаю, или можно просто задать для параметра начала периода не только выражение, но и значение. Например, (1999,01,01). Тогда, если с параметра СтандартныйПериод пользователь уберёт галку, период установится с 1999 по 3999, что будет равносильно варианту "включить всё".
И никаких проблем с потерей параметров. Вот только что проверил.
35. VKuser514865 09.10.19 17:11 Сейчас в теме
Добрый день, подскажите, пожалуйста, как быть? Если в параметрах Начало и Конец убираю галки, то система выдает то что на скринах, а если оставляю все галки, то отчет то вроде и работает, но периоды приходится выбирать по 2 раза... Как это можно поправить?
Прикрепленные файлы:
37. user1882637 08.12.22 17:56 Сейчас в теме
В вер. 8.3.22

Если параметр &Период.ДатаОкончания и &Период.ДатаНачала не заполнен на форме, то прямое использование параметра в условии построения выражения, как в примере

ВЫБОР

КОГДА &Период.ДатаОкончания=ДАТАВРЕМЯ(1,1,1) .....

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