Имя: Пароль:
1C
1С v8
изменение условия запроса
0 Vasus55
 
18.01.12
20:46
как программно можно отключать одно из условий запроса?
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ОбслуживаемыеКлиентыКонтакты.ДатаИВремя,
   ОбслуживаемыеКлиентыКонтакты.ТипКонтакта,
   ОбслуживаемыеКлиентыКонтакты.Комментарии,
   ВЫБОР
       КОГДА Контакт.Порядок = 4
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК КоличествоВстреч,
   ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер,
   ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент,
   ВЫБОР
       КОГДА Контакт.Порядок = 0
               ИЛИ Контакт.Порядок = 1
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК КоличествоЗвонков
ИЗ
   Документ.ОбслуживаемыеКлиенты.Контакты КАК ОбслуживаемыеКлиентыКонтакты
       ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ТипКонтакта КАК Контакт
       ПО ОбслуживаемыеКлиентыКонтакты.ТипКонтакта = Контакт.Ссылка
ГДЕ
   ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания

   И ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер = &Менеджер
   И ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент


Необходимо чтобы если в поле контрагент ничего не заполнено, то последние условие не учитывалось при выводе результатов.
1 vicof
 
18.01.12
20:49
Если ЗначениеЗаполнено(Контрагент) Тогда
2 vicof
 
18.01.12
20:50
СтрЗаменить(ТекстЗапроса, "И ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент", "")
3 vicof
 
18.01.12
20:50
(1) *Не ЗначениеЗаполнено
4 Vasus55
 
18.01.12
21:05
(3)сделал так
выдает ошибку при вызове метода контекста (НайтиПараметры), синтаксическая ошибка "Когда" И ...

ВЫБОР
   КОГДА НЕ ЗначениеЗаполнено(&Контрагент)
    ТОГДА    
     СтрЗаменить(ТекстЗапроса, "И ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент", "")
      ИНАЧЕ
    ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент
       КОНЕЦ
5 Vasus55
 
18.01.12
21:05
* (3)сделал так
выдает ошибку при вызове метода контекста (НайтиПараметры), синтаксическая ошибка "Когда" И ...

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ОбслуживаемыеКлиентыКонтакты.ДатаИВремя,
   ОбслуживаемыеКлиентыКонтакты.ТипКонтакта,
   ОбслуживаемыеКлиентыКонтакты.Комментарии,
   ВЫБОР
       КОГДА Контакт.Порядок = 4
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК КоличествоВстреч,
   ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер,
   ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент,
   ВЫБОР
       КОГДА Контакт.Порядок = 0
               ИЛИ Контакт.Порядок = 1
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК КоличествоЗвонков
ИЗ
   Документ.ОбслуживаемыеКлиенты.Контакты КАК ОбслуживаемыеКлиентыКонтакты
       ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ТипКонтакта КАК Контакт
       ПО ОбслуживаемыеКлиентыКонтакты.ТипКонтакта = Контакт.Ссылка
ГДЕ
   ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания

   И ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер = &Менеджер
   И    Когда НЕ ЗначениеЗаполнено(Контрагент) Тогда
     СтрЗаменить(ТекстЗапроса, "И ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент", "")
      ИНАЧЕ
    ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент
       КОНЕЦ
6 vicof
 
18.01.12
21:09
Не в тексте же запроса его менять.
Почитай СП для начала.
7 Лефмихалыч
 
18.01.12
21:10
будь мужиком, юзай построитель... блеать

Построитель = Новый ПостроительЗапроса;
Построитель.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ОбслуживаемыеКлиентыКонтакты.ДатаИВремя,
|    ОбслуживаемыеКлиентыКонтакты.ТипКонтакта,
|    ОбслуживаемыеКлиентыКонтакты.Комментарии,
|    ВЫБОР
|        КОГДА Контакт.Порядок = 4
|            ТОГДА 1
|        ИНАЧЕ 0
|    КОНЕЦ КАК КоличествоВстреч,
|    ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер,
|    ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент,
|    ВЫБОР
|        КОГДА Контакт.Порядок = 0
|                ИЛИ Контакт.Порядок = 1
|            ТОГДА 1
|        ИНАЧЕ 0
|    КОНЕЦ КАК КоличествоЗвонков
|ИЗ
|    Документ.ОбслуживаемыеКлиенты.Контакты КАК ОбслуживаемыеКлиентыКонтакты
|        ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ТипКонтакта КАК Контакт
|        ПО ОбслуживаемыеКлиентыКонтакты.ТипКонтакта = Контакт.Ссылка
|ГДЕ
|    ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания
|{ГДЕ ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер.* КАК Менеджер,
|    ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент.* КАК Контрагент}";

Если ЗначениеЗаполнено(Менеджер) Тогда
  ЭлементОтбора = Построитель.Отбор.Добавить("Менеджер");
  ЭлементОтбора.ВидСравнения = ?(Менеджер.ЭтоГруппа, ВидСравнения.ВГруппе, ВидСравнения.Равно);
  ЭлементОтбора.Значение = Менеджер;
  ЭлементОтбора.Использование = Истина;
КонецЕсли;

Если ЗначениеЗаполнено(Контрагент) Тогда
  ЭлементОтбора = Построитель.Отбор.Добавить("Контрагент");
  ЭлементОтбора.ВидСравнения = ?(Контрагент.ЭтоГруппа, ВидСравнения.ВГруппе, ВидСравнения.Равно);
  ЭлементОтбора.Значение = Контрагент;
  ЭлементОтбора.Использование = Истина;
КонецЕсли;
8 Vasus55
 
18.01.12
21:24
(7) ошибки))))

{Отчет.ЭтапыРаботыСКлиентом1.Форма.ЭтапыРаботыСКлиентом1.Форма(90,24)}: Ожидается выражение
Если ЗначениеЗаполнено(<<?>>&Менеджер) Тогда (Проверка: Толстый клиент (обычное приложение))
{Отчет.ЭтапыРаботыСКлиентом1.Форма.ЭтапыРаботыСКлиентом1.Форма(90,6)}: Недостаточно фактических параметров (ЗначениеЗаполнено)
Если <<?>>ЗначениеЗаполнено(&Менеджер) Тогда (Проверка: Толстый клиент (обычное приложение))
{Отчет.ЭтапыРаботыСКлиентом1.Форма.ЭтапыРаботыСКлиентом1.Форма(97,24)}: Ожидается выражение
Если ЗначениеЗаполнено(<<?>>&Контрагент) Тогда (Проверка: Толстый клиент (обычное приложение))
{Отчет.ЭтапыРаботыСКлиентом1.Форма.ЭтапыРаботыСКлиентом1.Форма(97,6)}: Недостаточно фактических параметров (ЗначениеЗаполнено)
Если <<?>>ЗначениеЗаполнено(&Контрагент) Тогда (Проверка: Толстый клиент (обычное приложение))
9 Vasus55
 
18.01.12
21:45
помогите исправить ошибку....((
10 Vasus55
 
18.01.12
22:03
работает, но только на заполненные параметры, а если не заполненно поле то ничего не выдает
11 Vasus55
 
18.01.12
22:16
Если ЗначениеЗаполнено(Менеджер) Тогда
  ЭлементОтбора = ПостроительОтчетаЭтапыРаботыСКлиентом1.Отбор.Добавить("Менеджер");
  ЭлементОтбора.ВидСравнения = ?(Менеджер.ЭтоГруппа, ВидСравнения.ВГруппе, ВидСравнения.Равно);
  ЭлементОтбора.Значение = Менеджер;
  ЭлементОтбора.Использование = Истина;
Иначе
       ЭлементОтбора.Установить(Ложь);
так не работает
12 Vasus55
 
18.01.12
22:29
ЭлементОтбора.Использование =Ложь;
и так тоже(((
13 Vasus55
 
18.01.12
22:30
кто нить вообще знает как решить проблему???
14 GROOVY
 
18.01.12
22:31
И ОбслуживаемыеКлиентыКонтакты.Ссылка.Менеджер = &Менеджер
   И (ОбслуживаемыеКлиентыКонтакты.Ссылка.Контрагент = &Контрагент ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
15 Vasus55
 
19.01.12
12:30
(14) а как для даты тоже самое написать?
16 1с-кин
 
19.01.12
12:35
(15) пустая Дата - это 01.01.01, задай параметр ПустаяДата, и сравнивай с ним.
17 Vasus55
 
19.01.12
12:45
(ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания
   |            ИЛИ &ДатаИВремя =&ПустаяДата)
сделал так, ошибку ввдает
18 Wobland
 
19.01.12
12:47
(17) =ДАТАВРЕМЯ(1, 1, 1)
19 Vasus55
 
19.01.12
12:58
(ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания
   |            ИЛИ &ДатаИВремя =Дата('01.01.0001'))
тоже не работает,

(ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания
   |            ИЛИ &ДатаИВремя =ДатаИВремя(01.01.01))
тоже не работает
20 1с-кин
 
19.01.12
12:58
(17) Пустая дата - это УстановитьПараметр ("ПустаяДата", Дата(1,1,1));
21 Wobland
 
19.01.12
12:58
(19) =ДАТАВРЕМЯ(1, 1, 1)
22 1с-кин
 
19.01.12
13:00
(19) что за Дата('01.01.0001'), да еще и дата в запросе????
что за ДатаИВремя(01.01.01)????
23 Vasus55
 
19.01.12
14:32
(21)пишет значение не задано значение параметра ДатаИВремя
24 Wobland
 
19.01.12
14:35
(23) как? ты не задал значение параметра ДатаИВремя?
25 Vasus55
 
19.01.12
14:37
а какое значение ему нужно задать если мне нужно чтобы отчет формировалалсь как при выборе даты так и нет
26 Wobland
 
19.01.12
14:42
(25) перечитал. какая из дат имеется в виду?
27 Wobland
 
19.01.12
14:44
28 Vasus55
 
19.01.12
14:46
ДатаНачала И ДатаОкончания их я вожу в качестве параметра
29 Vasus55
 
19.01.12
14:54
(ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала И &ДатаОкончания
   |            ИЛИ ОбслуживаемыеКлиентыКонтакты.ДатаИВремя МЕЖДУ &ДатаНачала=ДатаВремя(1,1,1) И &ДатаОкончания=ДатаВремя(31,12,90))
   и так тоже не работает((
30 Wobland
 
19.01.12
14:55
(29) 90е декабря 1931 года? это ту загнул
31 Wobland
 
19.01.12
14:56
что ты хочешь от ДатыОкончания, когда юзер её не говорит?
32 Vasus55
 
19.01.12
15:08
все сделал, вопрос закрыт!
(31)спасибо за намек