Как лучше поставить условие в запросе???
Здравствуйте, помогите пожалуйста, как лучше поставить условие в запросе
Надо поставить условие по "ФизЛицу" и по "Подразделению"
Надо поставить условие по "ФизЛицу" и по "Подразделению"
ВЫБРАТЬ
ХозрасчетныйОстаткиМЦ.Субконто1 КАК Номенклатура,
ХозрасчетныйОстаткиМЦ.Субконто2 КАК ПартияМатериаловВЭксплуатации,
ХозрасчетныйОстаткиМЦ.Субконто3 КАК Физлицо,
ХозрасчетныйОстаткиМЦ.КоличествоОстатокДт КАК Количество
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&Период,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежностиВЭксплуатации),
,
Организация = &Организация
И (Подразделение = &Подразделение
ИЛИ Подразделение ЕСТЬ NULL)
И Субконто2 ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию) КАК ХозрасчетныйОстаткиМЦ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ХозрасчетныйОстаткиМЦ.Субконто1,
ХозрасчетныйОстаткиМЦ.Субконто2,
ХозрасчетныйОстаткиМЦ.Субконто3,
ХозрасчетныйОстаткиМЦ.КоличествоОстатокДт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&Период,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежностиВЭксплуатации),
,
Организация = &Организация
И (Подразделение = &Подразделение
ИЛИ Подразделение ЕСТЬ NULL)
И Субконто2 ССЫЛКА Документ.ПартияМатериаловВЭксплуатации) КАК ХозрасчетныйОстаткиМЦ
УПОРЯДОЧИТЬ ПО
Номенклатура
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8)
Проблеммы с ИЛИ бывают если при отборе можно было использовать точный индекс и при этом отбор уменьшает существенно возвращаемые данные.
Тут же стоит отбор по счету сначала.
И вместо того чтобы
Отобрать по счету -> Потом отобрать 40% по типу документа 1
Отобрать по счету -> Потом отобрать 55% по типу документа 2
будет
Отобрать по счету -> Потом отобрать 95% по типу документа 1 и типу документа 2
(7)С точки зрения оптимизатора запроса - это плохо.
Проблеммы с ИЛИ бывают если при отборе можно было использовать точный индекс и при этом отбор уменьшает существенно возвращаемые данные.
Тут же стоит отбор по счету сначала.
И вместо того чтобы
Отобрать по счету -> Потом отобрать 40% по типу документа 1
Отобрать по счету -> Потом отобрать 55% по типу документа 2
будет
Отобрать по счету -> Потом отобрать 95% по типу документа 1 и типу документа 2
(9)Дело в том, что таблица хранения значений субконто одна на ВООБЩЕ все значения субконто.
И откуда информация о том, что сперва происходит отбор по Счету, а уже потом по значениям субконто?
Значения субконто отбираются по регистратору, внутренним соединением, по всей видимости.
И откуда информация о том, что сперва происходит отбор по Счету, а уже потом по значениям субконто?
Значения субконто отбираются по регистратору, внутренним соединением, по всей видимости.
(10)
Просто поробуйте посмотреть на план запроса когда есть отбор по счету для остатков.
Там регистратор где? В обоих случаях отбор по типу субконто и регистратор тут не причем.
И откуда информация о том, что сперва происходит отбор по Счету, а уже потом по значениям субконто?
Просто поробуйте посмотреть на план запроса когда есть отбор по счету для остатков.
Значения субконто отбираются по регистратору, внутренним соединением, по всей видимости.
Там регистратор где? В обоих случаях отбор по типу субконто и регистратор тут не причем.
У меня задача такая: Я добавил новую кнопку "Заполнить" в документе "Списание материалов из эксплуатации"
И добавил в шапке документа реквизит "ФизЛицо"
Теперь мне нужно сделать так чтоб если они выбрали ФизЛицо "Иванов" то табл часть заполнялась только Ивановым
И добавил в шапке документа реквизит "ФизЛицо"
Теперь мне нужно сделать так чтоб если они выбрали ФизЛицо "Иванов" то табл часть заполнялась только Ивановым
Если это делается в форме, то запрос можно как угодно изменить. Например, сделать так:
А потом в коде через СтрЗаменить() менять в тексте запроса {ПроизвольноеУсловие} на что угодно в зависимости от того, заполнены данные или нет.
ВЫБРАТЬ
ХозрасчетныйОстаткиМЦ.Субконто1 КАК Номенклатура,
ХозрасчетныйОстаткиМЦ.Субконто2 КАК ПартияМатериаловВЭксплуатации,
ХозрасчетныйОстаткиМЦ.Субконто3 КАК Физлицо,
ХозрасчетныйОстаткиМЦ.КоличествоОстатокДт КАК Количество
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&Период,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежностиВЭксплуатации),
,
Организация = &Организация
И Субконто2 ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию
И {ПроизвольноеУсловие}
) КАК ХозрасчетныйОстаткиМЦ
ПоказатьА потом в коде через СтрЗаменить() менять в тексте запроса {ПроизвольноеУсловие} на что угодно в зависимости от того, заполнены данные или нет.
(16) Что то не до конца я понимаю(
Например: Организация = &Организация
И Субконто2 ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию
И {ПроизвольноеУсловие}
) КАК ХозрасчетныйОстаткиМЦ
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПроизвольноеУсловие", "Субконто3= &ФизЛицо");
Запрос.УстановитьПараметр("ФизЛицо", Объект.ФизЛицо);
Примерно так должно быть?
Например: Организация = &Организация
И Субконто2 ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию
И {ПроизвольноеУсловие}
) КАК ХозрасчетныйОстаткиМЦ
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПроизвольноеУсловие", "Субконто3= &ФизЛицо");
Запрос.УстановитьПараметр("ФизЛицо", Объект.ФизЛицо);
Примерно так должно быть?
(19)Примерно так, но если сделать именно так, то такой запрос не откроется с помощью конструктора запроса.
Произвольное условие нужно писать без всяких И, т.е.
{ПроизвольноеУсловие}
) КАК ХозрасчетныйОстаткиМЦ
Произвольное условие нужно писать без всяких И, т.е.
Организация = &Организация
И Субконто2 ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию
{ПроизвольноеУсловие}
) КАК ХозрасчетныйОстаткиМЦ
(19)Так:
Фигурные скобки нужны.
ну и как сказали в (20), лучше "И" убрать. Тогда так:
или так:
ну и тд. в общем, что угодно.
Ну и условие можно предварительно в отдельной переменной формировать в зависимости от заполненных полей.
Если оставлять "И {ПроизвольноеУсловие}", то в случае отствия условий пишем
Запрос.Текст = СтрЗаменить(Запрос.Текст, "{ПроизвольноеУсловие}", "Субконто3= &ФизЛицо");
Фигурные скобки нужны.
ну и как сказали в (20), лучше "И" убрать. Тогда так:
Запрос.Текст = СтрЗаменить(Запрос.Текст, "{ПроизвольноеУсловие}", " И Субконто3= &ФизЛицо");
или так:
Запрос.Текст = СтрЗаменить(Запрос.Текст, "{ПроизвольноеУсловие}", " И Субконто3= &ФизЛицо И Подразделение=&Подразделение");
ну и тд. в общем, что угодно.
Ну и условие можно предварительно в отдельной переменной формировать в зависимости от заполненных полей.
Если оставлять "И {ПроизвольноеУсловие}", то в случае отствия условий пишем
Запрос.Текст = СтрЗаменить(Запрос.Текст, "{ПроизвольноеУсловие}", "ИСТИНА");
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот