Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

СКД - необязательный отбор по периоду

СКД - необязательный отбор по периоду
Я
   Dmitriy_ Kolesnikov
 
30.05.18 - 07:04
В наборе данных есть реквизит ДатаПриказа.
Мне надо сделать необязательный отбор по этому периоду, то есть отключаемый.
Для этого я создаю новый параметр ПериодДатыПриказа типа СтандартныйПериод.
Но я не могу использовать его напрямую в отборе по дате.
Поэтому я создаю ещё два параметра: НачалоПериодаДатыПриказа и КонецПериодаДатыПриказа, обращающихся к этому периоду.

Если установлен период и установлены два отбора по дате приказа (на больше и меньше дат начала и окончания периода) - всё работает.
Если же отборы установлены, а период нет - результат отчета пустой.

Вопрос: как сделать так, чтобы если пользователь включает период - включались два отбора, если отключает - они соответственно отключались?

Если я правильно понимаю, это можно сделать только в коде.
Или подскажите красивое решение с использованием параметра типа СтандартныйПериод.
 
 
   SleepyHead
 
1 - 30.05.18 - 07:41
(0) Добавь отбор в СКД , нажми правую кнопку мышки и выбери пункт "Свойства элемента пользовательских настроек".

Дальше, я думаю, сам разберешься.
   SleepyHead
 
2 - 30.05.18 - 07:42
(0) И поиграйся с группировками отборов И/ИЛИ, ну или на худой конец с вычисляемыми полями и отбором по ним.
   DrShad
 
3 - 30.05.18 - 08:02
запрос в студию
   Dmitriy_ Kolesnikov
 
4 - 30.05.18 - 08:03
(1) там нечем играться. Я этот отбор скрываю от пользователя. (недоступен) Он должен автоматически выполняться только если задан период. Если флаги периода не установлены - отбор не должен производиться.
Два отбора по произвольной дате, объединенных группой И, выглядят как простой флаг. При этом отбор на Больше и на Меньше можно включать\отключать независимо друг от друга. Поэтому не вижу смысла.
Проблема в том, что всё это некрасиво. Красиво выглядит Стандартный Период.
   Dmitriy_ Kolesnikov
 
5 - 30.05.18 - 08:06
(2) последняя таблица типового отчета ФактическиеОтпуска в ЗУП:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ФактическиеОтпускаСотрудников.Сотрудник КАК Сотрудник,
    ФактическиеОтпускаСотрудников.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    ФактическиеОтпускаСотрудников.ДатаНачала КАК ДатаНачала,
    ФактическиеОтпускаСотрудников.ДатаОкончания КАК ДатаОкончания,
    ФактическиеОтпускаСотрудников.КоличествоДней КАК КоличествоДней,
    ФактическиеОтпускаСотрудников.ЭтоКомпенсация КАК ЭтоКомпенсация,
    ФактическиеОтпускаСотрудников.Регистратор КАК Регистратор,
    ФактическиеОтпускаСотрудников.ВРабочихДнях КАК ВРабочихДнях,
    ФактическиеОтпускаСотрудников.РабочийПериодС КАК РабочийПериодС,
    ФактическиеОтпускаСотрудников.РабочийПериодПо КАК РабочийПериодПо,
    ФактическиеОтпускаСотрудников.Основание КАК Основание,
    КадровыеДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
    КадровыеДанныеСотрудников.Организация КАК Организация,
    КадровыеДанныеСотрудников.Подразделение КАК Подразделение,
    КадровыеДанныеСотрудников.Территория КАК Территория,
    КадровыеДанныеСотрудников.Должность КАК Должность,
    КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
    КадровыеДанныеСотрудников.ГрафикРаботы КАК ГрафикРаботы,
    КадровыеДанныеСотрудников.КоличествоСтавок КАК КоличествоСтавок,
    КадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
    КадровыеДанныеСотрудников.ТарифнаяСетка КАК ТарифнаяСетка,
    КадровыеДанныеСотрудников.РазрядКатегория КАК РазрядКатегория,
    КадровыеДанныеСотрудников.ТарифнаяСеткаНадбавки КАК ТарифнаяСеткаНадбавки,
    КадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
    КадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
    КадровыеДанныеСотрудников.Состояние КАК Состояние,
    ФактическиеОтпускаСотрудников.Регистратор.Дата КАК ДатаПриказа,
    ФактическиеОтпускаСотрудников.Регистратор.Номер КАК НомерПриказа
{ВЫБРАТЬ
    Сотрудник.*,
    ВидЕжегодногоОтпуска.*,
    ДатаНачала,
    ДатаОкончания,
    КоличествоДней,
    ЭтоКомпенсация,
    Регистратор.*,
    ВРабочихДнях,
    РабочийПериодС,
    РабочийПериодПо,
    Основание,
    Организация.*,
    Подразделение.*,
    Территория.*,
    Должность.*,
    ДолжностьПоШтатномуРасписанию.*,
    ГрафикРаботы.*,
    КоличествоСтавок,
    ВидЗанятости.*,
    ТарифнаяСетка.*,
    РазрядКатегория.*,
    ТарифнаяСеткаНадбавки.*,
    ДатаПриема,
    ДатаУвольнения,
    Состояние}
ИЗ
    Представления_ФактическиеОтпускаСотрудников КАК ФактическиеОтпускаСотрудников
        ЛЕВОЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
        ПО ФактическиеОтпускаСотрудников.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
            И ФактическиеОтпускаСотрудников.ДатаОкончания = КадровыеДанныеСотрудников.Период
{ГДЕ
    ФактическиеОтпускаСотрудников.Сотрудник.*,
    ФактическиеОтпускаСотрудников.ВидЕжегодногоОтпуска.*,
    ФактическиеОтпускаСотрудников.ДатаНачала,
    ФактическиеОтпускаСотрудников.ДатаОкончания,
    ФактическиеОтпускаСотрудников.КоличествоДней,
    ФактическиеОтпускаСотрудников.ЭтоКомпенсация,
    ФактическиеОтпускаСотрудников.Регистратор.*,
    ФактическиеОтпускаСотрудников.ВРабочихДнях,
    ФактическиеОтпускаСотрудников.РабочийПериодС,
    ФактическиеОтпускаСотрудников.РабочийПериодПо,
    ФактическиеОтпускаСотрудников.Основание,
    КадровыеДанныеСотрудников.ТабельныйНомер,
    КадровыеДанныеСотрудников.Организация.*,
    КадровыеДанныеСотрудников.Подразделение.*,
    КадровыеДанныеСотрудников.Территория.*,
    КадровыеДанныеСотрудников.Должность.*,
    КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию.*,
    КадровыеДанныеСотрудников.ГрафикРаботы.*,
    КадровыеДанныеСотрудников.КоличествоСтавок,
    КадровыеДанныеСотрудников.ВидЗанятости.*,
    КадровыеДанныеСотрудников.ТарифнаяСетка.*,
    КадровыеДанныеСотрудников.РазрядКатегория.*,
    КадровыеДанныеСотрудников.ТарифнаяСеткаНадбавки.*,
    КадровыеДанныеСотрудников.ДатаПриема,
    КадровыеДанныеСотрудников.ДатаУвольнения,
    КадровыеДанныеСотрудников.Состояние,
    ФактическиеОтпускаСотрудников.Регистратор.Дата КАК ДатаПриказа}
   DrShad
 
6 - 30.05.18 - 08:18
и где условия?
   SleepyHead
 
7 - 30.05.18 - 08:35
(4) Если все так серьезно, то придется в "ПриКомпоновкеРезультата" выгружать результат запроса в ТЗ, и убирать из нее лишние строки по твоему условию. А потом уже скармливать ее на вывод.
   SleepyHead
 
8 - 30.05.18 - 08:37
(4) А чем не нравится вычисляемое поле и отбор по нему, пусть даже скрытый?

ВЫБОР КОГДА ...период задан ТОГДА <вычисление условия для отлора> иначе ИСТИНА КОНЕЦ
   Dmitriy_ Kolesnikov
 
9 - 30.05.18 - 09:49
(8)
"период задан" - как это определить на языке СКД?
   Dmitriy_ Kolesnikov
 
10 - 30.05.18 - 09:51
(6) а какие условия в запросе? В запросе в фигурных скобках - те поля, по которым потенциально могут быть заданы условия в СКД.
 
 Рекламное место пустует
   DrShad
 
11 - 30.05.18 - 10:08
накладывать отбор на результат в СКД не всегда удобно
   Dmitriy_ Kolesnikov
 
12 - 30.05.18 - 10:11
А наложить отбор в запросе так, чтобы он не был обязательным, разве можно? как определить, поставил пользователь флаг включения отбора или нет?
   DrShad
 
13 - 30.05.18 - 10:13
(12) можно, но нужно проверять значение параметра
в твоем случае это на пустую дату
   SleepyHead
 
14 - 30.05.18 - 10:37
(9) В коде можно, ну тогда делай, как я предложил в (7)
   SleepyHead
 
15 - 30.05.18 - 10:38
+14

// Возвращает значение параметры СКД

//
// Параметры :

//
//    ИмяПараметра - Строка - имя параметра схемы компоновки данных

//    ЗначениеПоУмолчанию - Произвольный - значение по умолчанию, если в настройках значение не установлено
//

// Возвращаемое значение:
//    Произвольный - значение параметра СКД


Функция ПолучитьЗначениеПараметраСхемы(НастрокиСКД, ИмяПараметра, ЗначениеПоУмолчанию, Используется=Ложь)
Перем Параметр, Рез;

    Параметр= НастройкиСКД.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    Рез = ЗначениеПоУмолчанию;
    Если Параметр <> Неопределено Тогда
        Используется = Параметр.Использование;
        Если  Используется И ЗначениеЗаполнено(Параметр.Значение) Тогда
            Рез = Параметр.Значение
        Конецесли;
    КонецЕсли;
    Возврат Рез;
КонецФункции

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует