Имя: Пароль:
1C
1С v8
СКД: как не учитывать свой параметр, если он не задан?
0 ANDRU48
 
12.09.14
09:32
Сделал свой параметр, как сделать, чтобы он не учитывался, если не задан.
1 wms
 
12.09.14
09:36
выбор
2 wms
 
12.09.14
09:37
ВЫБРАТЬ
    ВЫБОР
        КОГДА &параметр = 0
            ТОГДА "не задан"
        ИНАЧЕ &параметр
    КОНЕЦ КАК Поле1
3 mehfk
 
12.09.14
09:38
Почему бы не использовать отбор?
4 NoiseRND
 
12.09.14
09:39
В запросе конструкция в фигурных скобках {Где Параметр =&Параметр}

Но лучше отбор!
5 ANDRU48
 
12.09.14
09:50
Отбор это строка, пользователям неудобно набирать строку и некоторые не знают чего набирать, проще галочки на форме.
Сейчас стоит как отбор и передается через галочки, но есть вариант, что пользователь может удалить отбор или поставить сравнение не то, поэтому решил через параметр попробовать.
6 ANDRU48
 
12.09.14
10:10
или отбор сделать невидимым
7 Defender aka LINN
 
12.09.14
10:32
"Отбор это строка" - лошто?
"некоторые не знают чего набирать, проще галочки на форме" - а у отбора галочек нет, да...
"есть вариант, что пользователь может удалить отбор или поставить сравнение не то" - пользователь может и должен ставить что хочет.
8 LionHeart_spg
 
12.09.14
10:40
(0) В модуле отчета в процедуре ОбработкаПроверкиЗаполнения()
Если Парам1 Тогда
        Для каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
            Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда Продолжить КонецЕсли;
            Если Строка(ЭлементОтбора.ЛевоеЗначение) = "Парам1" Тогда
                ЭлементОтбора.Использование = истина;
                ЭлементОтбора.ПравоеЗначение = Истина;
            КонецЕсли;
        КонецЦикла;
    Иначе
        Для каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
            Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда Продолжить КонецЕсли;
            Если Строка(ЭлементОтбора.ЛевоеЗначение) = "Парам1" Тогда
                ЭлементОтбора.ПравоеЗначение = истина;
                ЭлементОтбора.Использование = ложь;
            КонецЕсли;
        КонецЦикла;    
    КонецЕсли;
9 LionHeart_spg
 
12.09.14
10:41
(8) + таким образом проверяешь все свои параметры и вкл. выкл. их
10 LionHeart_spg
 
12.09.14
10:43
Если вопрос именно по параметру, тогда там же

Если ЗначениеЗаполнено(Архив) Тогда
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Архив",Архив);
КонецЕсли;
11 OnCheck
 
12.09.14
10:46
с отбором медленнее чем параметром ИМХО
12 OnCheck
 
12.09.14
10:48
(0) можно добавить еще один парметр "ПараметрНеУказан" и указывать его в истина перед формирвоанием отчета.

а во всех условиях запроса эти параметры проверять через ИЛИ
13 barrgand
 
12.09.14
10:52
(11) А вот это лучше не слущать...
14 barrgand
 
12.09.14
10:52
(13) слущать = слушать
15 OnCheck
 
12.09.14
10:54
(13) можно не слушать. но я проверял.
16 Defender aka LINN
 
12.09.14
11:08
(11) Бред не неси
(15) И каким же образом?
17 OnCheck
 
12.09.14
11:51
(16) Элементарно, сделал запрос без параметра, но с отбором, и с параметром, время работы в разы отличается. Регистр очень большой поэтому и заморачивался ускорением.
18 Defender aka LINN
 
12.09.14
11:53
(17) А ничего, что отбор транслируется во, ВНЕЗАПНО, параметры при запросе из базы?
Хотя было бы желание - параметр можно в условия виртуальных таблиц вставлять, а отбор в ГДЕ выносить, а потом все рассказывать, какая 1С кривая, да.
19 OnCheck
 
12.09.14
11:58
(18) Ни чего и не ВНЕЗАПНО ;-).

Ну вот видишь же, ответил сам себе на свой же аргумент.

Я и не говорю, что кривая. Это твои домыслы.


ВЫБРАТЬ
    Проекты.Ссылка КАК Проект
ПОМЕСТИТЬ ВТПроекты
ИЗ
    Справочник.Проекты КАК Проекты
ГДЕ
    (Проекты.Ссылка В (&Проект)
            ИЛИ &ПроектНеЗаполнен)
    И НЕ Проекты.ПометкаУдаления
;


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1 КАК Проект,    
    ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборот,
    ХозрасчетныйОбороты.ПериодМесяц КАК ПериодМесяц,
    ХозрасчетныйОбороты.Регистратор
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(НАЧАЛОПЕРИОДА(&Год, ГОД), КОНЕЦПЕРИОДА(&Год, МЕСЯЦ), Авто, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет_20_04), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.рарПроекты), НЕ Субконто1.ПометкаУдаления
    И (&ПроектНеЗаполнен ИЛИ Субконто1 В (ВЫБРАТЬ Проект ИЗ ВТПроекты)), , ) КАК ХозрасчетныйОбороты
20 OnCheck
 
12.09.14
12:02
Знаю, здесь правильнее было бы Автозаполнение, чтобы от второго парметра уйти.
21 OnCheck
 
12.09.14
12:22
(18) "а отбор в ГДЕ выносить" а вот это не совсем понимаю, разве мы можем отбором рулить?
22 Defender aka LINN
 
12.09.14
12:23
(19) "ответил сам себе на свой же аргумент" - нинада вот это вот СВОИ мысли в МОИ слова вкладывать. Отбор и параметр - вещи ОДИНАКОВЫЕ по быстродейстию, т.к. по сути одно и то же. Если у тебя отбор работает медленнее - приложи линейку к рукам, должен зазор некислый остаться.
23 Defender aka LINN
 
12.09.14
12:24
(21) Вот об этом я и говорю.
Одинэснеги нифига не разбираются в системе, с которой работают, но это им не мешает с умным видом бред нести.
24 OnCheck
 
12.09.14
12:28
(23) а не вброс ли это, докажи, будь добр?
25 OnCheck
 
12.09.14
12:33
+(24) Хотя бы на примере моего запроса, там вроде все элементарно.
26 LionHeart_spg
 
12.09.14
12:36
(22) У тебя консоль СКД с отладчиком есть? Выложи сюда запрос, который сформирует СКД с отбором и без.
27 LionHeart_spg
 
12.09.14
12:39
Отличие отбора от параметра простое.
У параметра мы можем поменять только значение.
У отбора мы можем поменять Вид сравнения и значение
28 OnCheck
 
12.09.14
12:41
(27) Если не сложно вышли, поажлуйста, мне на почту (в моем профиле) эту консоль?
29 Defender aka LINN
 
12.09.14
12:43
(24) Что доказать? Что ты в системе не разбираешься?
30 LionHeart_spg
 
12.09.14
12:45
http://infostart.ru/public/15036/ - Сама статья про консоль
Там на скриншоте видно, что делает СКД с запросом
http://infostart.ru/public/download.php?file=51040&pub=15036 - ссылка на скачивание консоли (бесплатно)
31 OnCheck
 
12.09.14
12:47
(29) я не утверждаю, что в системе полностью разбираюсь.
Ты утверждаешь, что мы можем рулить отбором, т.е. то как система сформирует в результате запрос с учетом установленного отбора. А именно допишет через ГДЕ или упакует в параметры ВТ.
32 LionHeart_spg
 
12.09.14
12:51
(31) Кстати, на эту тему есть необязательные параметры и это забота разработчика закодить заранее такие "сомнительные" варианты (Параметр как {Параметр}) (по памяти, мог в синтаксисе ошибиться, но примерно так)
33 OnCheck
 
12.09.14
12:54
(30) спасибо.
34 OnCheck
 
12.09.14
12:56
(32) здесь все верно. Но мы немного отклонились от темы а именно в (31)
35 Defender aka LINN
 
12.09.14
13:07
(31) ППЦ... А ты не пробовал документацию почитать, м?
Раз:

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
{ВЫБРАТЬ
    Номенклатура.*,
    Количество}
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).*, (Склад).*}) КАК ТоварыНаСкладахОстатки

Два

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
{ВЫБРАТЬ
    Номенклатура.*,
    Количество}
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
{ГДЕ
    ТоварыНаСкладахОстатки.Номенклатура.*,
    ТоварыНаСкладахОстатки.Склад.*}


А ты думал эти смешные скобочки для красоты нужны?
36 OnCheck
 
12.09.14
13:12
(35) Ты прав, Константин, спасибо. Действительно все просто. Как там говорят посыпаю голову пеплом.
Независимо от того, куда вы едете — это в гору и против ветра!