Имя: Пароль:
1C
1С v8
Запрос не правильно отрабатывает :(
,
0 ultrannge89
 
08.07.13
14:47
Помогите разобраться в чем может быть причина?

ТекДата = ТекущаяДата();
Статус = "Активная";
Лимиты.Очистить();
Запрос = Новый Запрос;


ДопУсловие = "";
Если ЗначениеЗаполнено(ВидЛимита) Тогда
   ДопУсловие = " И Ю_Лимиты.ВидЛимита = &ОтборЛимита";
   Запрос.УстановитьПараметр("ОтборЛимита", ВидЛимита);
КонецЕсли;



ДопУсловие1 = "";
Если ЗначениеЗаполнено(СрезДаты) Тогда
   ДопУсловие1 = "Ю_Лимиты.Период >= &НачалоПериода И Ю_Лимиты.Период <= &КонецПериода";
   Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(СрезДаты));
   Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(СрезДаты));
Иначе
   ДопУсловие1 = "Ю_Лимиты.Период >= &НачалоПериода И Ю_Лимиты.Период <= &КонецПериода";
   Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекДата));
   Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекДата))
КонецЕсли;

   
Запрос.Текст ="ВЫБРАТЬ
             |    Ю_Лимиты.Сотрудник,
             |    Ю_Лимиты.ВидЛимита,
             |    Ю_Лимиты.Сумма,
             |    Ю_Лимиты.Регистратор.Ссылка КАК Документ,
             | ЕСТЬNULL(Ю_ЭлектронныеКартыСрезПоследних.ЭлектроннаяКарта, ЗНАЧЕНИЕ(Справочник.Ю_ЭлектронныеКарты.ПустаяСсылка)) КАК Карта
             |ИЗ
             |    РегистрСведений.Ю_Лимиты КАК Ю_Лимиты
             |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Ю_ЭлектронныеКарты.СрезПоследних КАК Ю_ЭлектронныеКартыСрезПоследних
             |        ПО Ю_Лимиты.Сотрудник = Ю_ЭлектронныеКартыСрезПоследних.Сотрудник
             |            И Ю_Лимиты.Сотрудник.ЭлектроннаяКарта = Ю_ЭлектронныеКартыСрезПоследних.ЭлектроннаяКарта И Ю_ЭлектронныеКартыСрезПоследних.Статус = &Статус
             |ГДЕ   ЕСТЬNULL(Ю_ЭлектронныеКартыСрезПоследних.ЭлектроннаяКарта, ЗНАЧЕНИЕ(Справочник.Ю_ЭлектронныеКарты.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Ю_ЭлектронныеКарты.ПустаяСсылка) И  "+ДопУсловие1 +ДопУсловие;

                           
Запрос.УстановитьПараметр("Статус", Статус);
           
             
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
   Строка = Лимиты.Добавить();
   Строка.Сотрудник = Выборка.Сотрудник;
   Строка.ВидЛимита = Выборка.ВидЛимита;
   Строка.Сумма = Выборка.Сумма;
   Строка.Документ = Выборка.Документ;
       
   
   
   
КонецЦикла;
1 palpetrovich
 
08.07.13
14:49
надо догадаться где неправильно?
2 chelentano
 
08.07.13
14:50
а где голосовалка?
3 Ненавижу 1С
 
гуру
08.07.13
14:51
ставлю на то, что параметр не должен быть строкой
4 ultrannge89
 
08.07.13
14:51
Запрос формирует таблицу значений. Но в нее попадает не то что нужно. Условие не отрабатывает.
ЗНАЧЕНИЕ(Справочник.Ю_ЭлектронныеКарты.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Ю_ЭлектронныеКарты.ПустаяСсылка)
5 exwill
 
08.07.13
14:52
(0) Вопрос поставлен некорректно.
Запрос, в частности, и компьютеры вообще не могут работать не правильно, по определению.
Может быть расхождение между тем, что ты ожидал получить, и что ты получил.
6 chelentano
 
08.07.13
14:53
(4) как определил, что именно это условие не отрабатывает?
7 ultrannge89
 
08.07.13
14:55
Я получил список сотрудников у которых есть карты и есть лимиты в данном периоде, а хотел получить сотрудников у которых нет карт но есть лимиты
8 exwill
 
08.07.13
14:56
(4) Тебе нужны только NULL? Зачем тогда так сложно писать? Пиши просто ЕСТЬ NULL.
9 ultrannge89
 
08.07.13
14:56
В общем как по другому в запросе задать условие на пустую электронную карту?
10 exwill
 
08.07.13
14:58
+(8)
ГДЕ   Ю_ЭлектронныеКартыСрезПоследних.ЭлектроннаяКарта ЕСТЬ NULL
11 ultrannge89
 
08.07.13
15:01
Ладно спасибо за помощь, если не получится буду в выборке условие проверять, хоть и не правильно но зато без заморочек
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший