Имя: Пароль:
1C
 
Как подправить запрос на условие ЗначениеЗаполнено
,
0 pro3ri
 
15.10.15
09:09
Добрый день!

Есть код:
Запрос.Текст = "ВЫБРАТЬ
                   |    ОтгрузкиОплаты.Регистратор
                   |ИЗ
                   |    РегистрНакопления.ОтгрузкиОплаты КАК ОтгрузкиОплаты
                   |ГДЕ
                   |    ОтгрузкиОплаты.Организация = &Организация
                   |    И ОтгрузкиОплаты.ДоговорКонтрагента = &ДоговорКонтрагента
                   |    И ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ОтгрузкиОплаты.Период";
                  
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    Запрос.УстановитьПараметр("КредитныйДокумент", КредитныйДокумент);

Как подправить запрос так, чтобы если поле КредитныйДокумент не заполнено, он выбирал все, а не пустую ссылку?
1 pro3ri
 
15.10.15
09:11
неужели проще нельзя Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ОтгрузкиОплаты.Регистратор
                   |ИЗ
                   |    РегистрНакопления.ОтгрузкиОплаты КАК ОтгрузкиОплаты
                   |ГДЕ
                   |    ОтгрузкиОплаты.Организация = &Организация
                   |    И ОтгрузкиОплаты.ДоговорКонтрагента = &ДоговорКонтрагента
                   |    И ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ОтгрузкиОплаты.Период";
                  
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    Если Не ЗначениеЗаполнено(КредитныйДокумент) Тогда
    
        Запрос.Текст = "ВЫБРАТЬ
                   |    ОтгрузкиОплаты.Регистратор
                   |ИЗ
                   |    РегистрНакопления.ОтгрузкиОплаты КАК ОтгрузкиОплаты
                   |ГДЕ
                   |    ОтгрузкиОплаты.Организация = &Организация
                   |    И ОтгрузкиОплаты.ДоговорКонтрагента = &ДоговорКонтрагента
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ОтгрузкиОплаты.Период";        
    
    КонецЕсли;
    Запрос.УстановитьПараметр("КредитныйДокумент", КредитныйДокумент);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        Попытка
        
            Док = Выборка.Регистратор.ПолучитьОбъект();
            Док.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Документ " + Док + " записан!");
            
        Исключение
            
            Сообщить(ОписаниеОшибки());
            
        КонецПопытки;
    
    КонецЦикла;
    
    Сообщить("__________________ ЗАВЕРШЕНО ____________________");
    
    
КонецПроцедуры
2 Nuobu
 
15.10.15
09:15
3 pro3ri
 
15.10.15
09:18
(2) благодарю
4 pro3ri
 
15.10.15
09:32
пока остановился на таком варианте:
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ОтгрузкиОплаты.Регистратор
                   |ИЗ
                   |    РегистрНакопления.ОтгрузкиОплаты КАК ОтгрузкиОплаты
                   |ГДЕ
                   |    ОтгрузкиОплаты.Организация = &Организация
                   |    И ОтгрузкиОплаты.ДоговорКонтрагента = &ДоговорКонтрагента
                   |    И ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ОтгрузкиОплаты.Период";
                  
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    Если Не ЗначениеЗаполнено(КредитныйДокумент) Тогда
    
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент", "");         
        
    Иначе
        Запрос.УстановитьПараметр("КредитныйДокумент", КредитныйДокумент);

    КонецЕсли;
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        Попытка
        
            Док = Выборка.Регистратор.ПолучитьОбъект();
            Док.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Документ " + Док + " записан!");
            
        Исключение
            
            Сообщить(ОписаниеОшибки());
            
        КонецПопытки;
    
    КонецЦикла;
    
    Сообщить("__________________ ЗАВЕРШЕНО ____________________");
    
    
КонецПроцедуры
5 DexterMorgan
 
15.10.15
09:37
"ВЫБРАТЬ
|    ОтгрузкиОплаты.Регистратор
|ИЗ
|    РегистрНакопления.ОтгрузкиОплаты КАК ОтгрузкиОплаты
|ГДЕ
|    ОтгрузкиОплаты.Организация = &Организация
|    И ОтгрузкиОплаты.ДоговорКонтрагента = &ДоговорКонтрагента
|    И
|     ВЫБОР КОГДА &КредитныйДокументЗаполнен ТОГДА     
|         ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент
|     ИНАЧЕ    ИСТИНА
|     КОНЕЦ    
|
|УПОРЯДОЧИТЬ ПО
|    ОтгрузкиОплаты.Период";

Запрос.УстановитьПараметр("КредитныйДокументЗаполнен", ЗначениеЗаполнено(КредитныйДокумент));
6 DexterMorgan
 
15.10.15
09:47
Кста, можно заменить

ВЫБОР КОГДА &КредитныйДокументЗаполнен ТОГДА    
  ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент
ИНАЧЕ    
  ИСТИНА
КОНЕЦ    

на

(&КредитныйДокументЗаполнен И ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент)

=)
7 Лефмихалыч
 
15.10.15
09:51
(0) построитель используй, Люк
8 pro3ri
 
15.10.15
10:29
(7)так?:

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ОтгрузкиОплаты.Регистратор
                   |ИЗ
                   |    РегистрНакопления.ОтгрузкиОплаты КАК ОтгрузкиОплаты
                   |ГДЕ
                   |    ОтгрузкиОплаты.Организация = &Организация
                   |    И ОтгрузкиОплаты.ДоговорКонтрагента = &ДоговорКонтрагента
                   |{ГДЕ
                   |    (ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент) КАК Поле2}
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ОтгрузкиОплаты.Период";
                  
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    //Если Не ЗначениеЗаполнено(КредитныйДокумент) Тогда
    //
    //    Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ОтгрузкиОплаты.КредитныйДокумент = &КредитныйДокумент", "");         
    //    
    //Иначе
        Запрос.УстановитьПараметр("КредитныйДокумент", КредитныйДокумент);

    //КонецЕсли;
    
    РезультатЗапроса = Запрос.Выполнить();
9 DexterMorgan
 
15.10.15
10:38
(8) бггг
10 DexterMorgan
 
15.10.15
10:39
(8) а чем тебе (5) не нравится?
11 pro3ri
 
16.10.15
09:28
(10) писать меньше, производительность выше
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший