Особенность задания периода в запросе в СКД

11.11.22

Разработка - Запросы

Не используйте предопределённые названия переменных НачалоПериода, КонецПериода в текстах запросов в СКД. Остальное можно не читать.

Собственно, в описании этой "статьи" написано.

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

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

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

Но выглядит это совершенно не очевидно.

Используйте ДатаНач,ДатаКон и т.п. и всё будет хорошо.

Как НЕ НАДО делать:


ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1 КАК Субконто,
    ХозрасчетныйОбороты.КоличествоКорОборот КАК Количество,
    NULL КАК Количество_1
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода,&КонецПериода, , , , , , ) КАК ХозрасчетныйОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1,
    NULL,
    ХозрасчетныйОбороты.КоличествоКорОборот
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(ДобавитьКДате(&НачалоПериода,Год,-1),ДобавитьКДате(&КонецПериода,Год,-1), , , , , , ) КАК ХозрасчетныйОбороты

Текстовые параметры, определяющие дату начала и конца периода, будут проигнорированы, и туда подставятся напрямую значения параметров НачалоПериода, КонецПериода, а поскольку мы сами задействовали их в первом запросе, то они будут заданы.

Правильно:

ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1 КАК Субконто,
    ХозрасчетныйОбороты.КоличествоКорОборот КАК Количество,
    NULL КАК Количество_1
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач,&ДатаКон, , , , , , ) КАК ХозрасчетныйОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1,
    NULL,
    ХозрасчетныйОбороты.КоличествоКорОборот
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(ДобавитьКДате(&ДатаНач,Год,-1),ДобавитьКДате(&ДатаКон,Год,-1), , , , , , ) КАК ХозрасчетныйОбороты

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

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

СКД запрос период

См. также

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

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

10000 руб.

02.09.2020    139651    767    391    

800

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

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

2 стартмани

11.12.2023    9385    21    John_d    25    

124

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    17711    skovpin_sa    14    

102

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

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    5547    KVIKS    15    

81

Запросы HighLoad оптимизация Программист Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    20608    Филин    37    

118

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

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    7776    echo77    6    

81

Запросы Инструментарий разработчика Программист Бесплатно (free)

Список всех популярных обработок.

17.03.2023    44781    kuzyara    87    

187
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dhurricane 11.11.22 11:23 Сейчас в теме
Держите способ использовать стандартные имена, если все таки очень не хочется от них отказываться:
ВЫБРАТЬ
	ХозрасчетныйОбороты.Субконто1 КАК Субконто,
	ХозрасчетныйОбороты.КоличествоКорОборот КАК Количество
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты КАК ХозрасчетныйОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ХозрасчетныйОбороты.Субконто1,
	ХозрасчетныйОбороты.КоличествоКорОборот
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты({(ДОБАВИТЬКДАТЕ(&НачалоПериода, ГОД, -1))}, {(ДОБАВИТЬКДАТЕ(&КонецПериода, ГОД, -1))}, , , , , , ) КАК ХозрасчетныйОбороты
Показать

А вообще, я бы обобщил Ваш совет до следующих:
- разберитесь, как работает автозаполнение в СКД;
- научитесь пользоваться расширением языка запросов для компоновки данных.
ixijixi; JohnyDeath; DrAku1a; bilex; surikateg; agentz; +6 Ответить
2. slicem 9 11.11.22 12:23 Сейчас в теме
RTFM это универсальный совет. Но шибко широкий. Не всегда выходит им воспользоваться по разным причинам. Про стандартные имена интересно, спасибо.
xantif_2000; +1 Ответить
3. TMV 14 12.11.22 07:37 Сейчас в теме
Да просто галку снимите Автозаполнение и используйте какие угодно имена.
4. slicem 9 14.11.22 04:08 Сейчас в теме
(3) Статья не про то, как использовать другие имена, а про то как избежать неочевидной ловушки.
5. Бубузяка 62 14.11.22 11:35 Сейчас в теме
Пропишите параметры в сигнатурах {} и получит параметры,не обязательные для заполнения.
Прикрепленные файлы:
8. slicem 9 15.11.22 04:29 Сейчас в теме
(5) Вы не поняли. Если включить автозаполнение, то параметры НачалоПериода и КонецПериода (И Период для таблицы остатков) создадутся автоматически. Их можно будет сделать необязательными для заполнения, невидимыми и игнорировать. НО!!! Если их заполнить, то всё что вы понаписали в описании таблиц остатков и оборотов будет проигнорированно, и именно значения этих стандартных параметров будут подставлены.
Т.е. вы написали хххххх.хххххх.Обороты(&Выражение1,&Выражение2), а отработает словно написано хххххх.хххххх.Обороты(&НачалаоПериода,&КонецПериода). Причём, Выражение1, может даже включать НачалаоПериода. См(0).
6. tamepjlah 3 14.11.22 11:37 Сейчас в теме
После того, как несколько раз нарвался на то, что ДатаНач в консоле, в окне параметров, создается ниже, чем ДатаКон (также как НачалоПериода и КонецПериода) и я ДатеНач указывать 31.10.2022 23:59:59, а ДатеКон указывал 01.10.2022 - стал использовать параметры ДатаНачала и ДатаОкончания.
adhocprog; +1 Ответить
7. slicem 9 15.11.22 04:16 Сейчас в теме
(6) В настройках СКД параметры можно двигать относительно друг друга в списке вверх/вниз стрелочками. Их видно на скриншоте в (5)
9. tamepjlah 3 15.11.22 06:37 Сейчас в теме
(7) я про ситуацию, когда пишешь запрос в консоли запросов и не всегда помнишь, что первой в списке параметров указана ДатаКон
Прикрепленные файлы:
10. Бубузяка 62 15.11.22 09:56 Сейчас в теме
(8) Я знаю как это работает. Я так же знаю, что в СКД удобно использовать необязательные параметры и это благотворно влияет на формирование виртуальных таблиц. На пример, если вам нужно получить остаток на текущий момент, то не надо передавать Период в Остатки, а вызывать таблицу без периода. Правильно пользуйтесь СКД и не будет "особенностей".
Оставьте свое сообщение