|
Запрос: условие на реквизит одного из регистраторов | ☑ | ||
---|---|---|---|---|
0
dft2014
06.09.16
✎
17:26
|
Регистр накопления "ФактическиеОтпуска" содержит разные документы-регистраторы. Как мне в запросе добавить такое условие: отбирать по всем регистраторам, но если регистратором будет документ "Отпуск", то отбирать только те отпуска, у которых реквизит ПересчетОтп = ЛОЖЬ.
Вот мой код, но он почему-то не видит остальные регистраторы, кроме Отпуска: Запрос.Текст = "ВЫБРАТЬ | ФактическиеОтпуска.Сотрудник КАК Сотрудник, | ФактическиеОтпуска.Количество КАК ДнейОтпуска, | ФактическиеОтпуска.ДатаНачала КАК ДатаС, | ФактическиеОтпуска.ДатаОкончания КАК ДатаПо |ИЗ | РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска |ГДЕ | (ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск И ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ) | И ФактическиеОтпуска.Сотрудник В(&Сотрудники) | |ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | РеестрОтпусков.Сотрудник, | РеестрОтпусков.КоличествоДнейОтпуска КАК ДнейБиР, | РеестрОтпусков.ДатаНачалаПериодаОтсутствия КАК ДатаНачалаБиР, | РеестрОтпусков.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончанияБиР |ИЗ | РегистрСведений.РеестрОтпусков КАК РеестрОтпусков |ГДЕ | РеестрОтпусков.Регистратор ССЫЛКА Документ.БольничныйЛист | И РеестрОтпусков.Сотрудник В(&Сотрудники) |УПОРЯДОЧИТЬ ПО | ДатаС"; |
|||
1
Amra
06.09.16
✎
17:32
|
А что ты хотел при "ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск" в "ГДЕ"?
|
|||
2
f_vadim
06.09.16
✎
17:34
|
ВЫБОР
КОГДА ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск ТОГДА ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ |
|||
3
Дык ё
06.09.16
✎
17:36
|
выразить?
|
|||
4
dft2014
07.09.16
✎
09:59
|
(2) Не совсем то решение.
В док-те "Отпуск" есть новый реквизит "ПересчетОтп"(тип булево). В некоторых отпусках он ИСТИНА, в некоторых ЛОЖЬ. В запросе, мне надо добавить условие: Если регистратором является документ "Отпуск", то отобрать только те отпуска, у которых реквизит ПересчетОтп = ЛОЖЬ. Если регистратором является любой другой документ, то это условие не нужно. |
|||
5
Ёпрст
07.09.16
✎
10:01
|
(4) это именно то, что ты просишь
|
|||
6
dft2014
07.09.16
✎
10:08
|
(5) в условии (4) во всех отпусках будет видеть ПересчетОтп = ЛОЖЬ. А мне не так надо!
|
|||
7
dft2014
07.09.16
✎
10:09
|
Я так думаю, надо что-то вроде такого условия:
Если (ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск И ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ) Тогда |
|||
8
Ёпрст
07.09.16
✎
10:11
|
(6) нет
|
|||
9
Ёпрст
07.09.16
✎
10:11
|
Смотри вниматочнее, это условие
|
|||
10
Мыш
07.09.16
✎
10:21
|
Переформулируем )
ВЫБОР КОГДА ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск ТОГДА НЕ ФактическиеОтпуска.Регистратор.ПересчетОтп ИНАЧЕ ИСТИНА КОНЕЦ |
|||
11
ViSo76
07.09.16
✎
10:33
|
(10) Если много регистраторов, то скорее всего так:
ГДЕ ... ВЫБОР КОГДА ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск ТОГДА НЕ ВЫРАЗИТЬ(ФактическиеОтпуска.Регистратор КАК Документ.Отпуск).ПересчетОтп ИНАЧЕ ИСТИНА КОНЕЦ |
|||
12
Ёпрст
07.09.16
✎
10:39
|
(11) че за бредятина ?
|
|||
13
dft2014
07.09.16
✎
10:39
|
(2) Изменила свой запрос из (0) на ваше условие из (2): при таком условии не отбирает документы с другими регистраторами, тянет только Регистраторы = Отпуск.
Запрос.Текст = "ВЫБРАТЬ | ФактическиеОтпуска.Сотрудник КАК Сотрудник, | ФактическиеОтпуска.Количество КАК ДнейОтпуска, | ФактическиеОтпуска.ДатаНачала КАК ДатаС, | ФактическиеОтпуска.ДатаОкончания КАК ДатаПо |ИЗ | РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска |ГДЕ //| (ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск И ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ) //| И ФактическиеОтпуска.Сотрудник В(&Сотрудники) | //+( при таком условии не отбирает документы с другими регистраторами | ВЫБОР |КОГДА ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск |ТОГДА ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ |ИНАЧЕ ИСТИНА |КОНЕЦ //+) | |ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | РеестрОтпусков.Сотрудник, | РеестрОтпусков.КоличествоДнейОтпуска КАК ДнейБиР, | РеестрОтпусков.ДатаНачалаПериодаОтсутствия КАК ДатаНачалаБиР, | РеестрОтпусков.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончанияБиР |ИЗ | РегистрСведений.РеестрОтпусков КАК РеестрОтпусков |ГДЕ | РеестрОтпусков.Регистратор ССЫЛКА Документ.БольничныйЛист | И РеестрОтпусков.Сотрудник В(&Сотрудники) |УПОРЯДОЧИТЬ ПО | ДатаС"; |
|||
14
Ёпрст
07.09.16
✎
10:39
|
там выразить нафик не упало, ибо выше уже идёт сравнение на нужный тип документа
|
|||
15
Ёпрст
07.09.16
✎
10:41
|
(13) при таком коде - ошибка синтаксиса. Показывайте тот запрос, который выполняете, а не копипасту неизвестно откуда.
|
|||
16
LordCMEPTb
07.09.16
✎
10:49
|
(12) Судя по https://kb.1c.ru/articleView.jsp?id=44 именно такая бредятина и нужна, чтобы цеплялся только 1 таблица документа.
|
|||
17
Ёпрст
07.09.16
✎
10:52
|
(16) ну-ну, после case там и так всегда будет 1 таблица документа
|
|||
18
dft2014
07.09.16
✎
10:55
|
(15) Это и есть исходный запрос! Почему прочие регистраторы не видит?
|
|||
19
Ёпрст
07.09.16
✎
10:56
|
(18) Ну вот только врать то не надо ?
В этом запросе не верно написано условие. |
|||
20
Ёпрст
07.09.16
✎
10:57
|
Покажите тот запрос, что выполняете.
|
|||
21
dft2014
07.09.16
✎
11:06
|
(20) я просто убрала из запроса лишние строчки, для читаемости запроса на форуме. А весь запрос выглядит так:
Запрос.Текст = "ВЫБРАТЬ | ФактическиеОтпуска.Сотрудник КАК Сотрудник, | ВЫБОР | КОГДА ВЫРАЗИТЬ(ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """" | ТОГДА ВЫРАЗИТЬ(ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК Справочник.ВидыОтпусков).Наименование | ИНАЧЕ ВЫРАЗИТЬ(ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное | КОНЕЦ КАК ВидОтпуска, | ФактическиеОтпуска.РабочийПериодС КАК РабочийГодС, | ФактическиеОтпуска.РабочийПериодПо КАК РабочийГодПо, | ФактическиеОтпуска.Количество КАК ДнейОтпуска, | ФактическиеОтпуска.ДатаНачала КАК ДатаС, | ФактическиеОтпуска.ДатаОкончания КАК ДатаПо, | ФактическиеОтпуска.Регистратор.Номер КАК НомерПриказа, | ФактическиеОтпуска.Регистратор.Дата КАК ДатаПриказа, | ФактическиеОтпуска.Регистратор.ПродлениеОтпуска КАК ПродлениеОтпуска, | ФактическиеОтпуска.Регистратор.ПереносОтпуска КАК ПереносОтпуска, | ВЫРАЗИТЬ(ФактическиеОтпуска.Основание КАК СТРОКА(1024)) КАК Основание |ИЗ | РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска |ГДЕ //| (ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск И ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ) //| И ФактическиеОтпуска.Сотрудник В(&Сотрудники) | //(+ | ВЫБОР |КОГДА ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск |ТОГДА ФактическиеОтпуска.Регистратор.ПересчетОтп = ЛОЖЬ |ИНАЧЕ ИСТИНА |КОНЕЦ //)+ | |ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | РеестрОтпусков.Сотрудник, | 1, | РеестрОтпусков.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабГодСБиР, | РеестрОтпусков.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабГодПоБиР, | РеестрОтпусков.КоличествоДнейОтпуска КАК ДнейБиР, | РеестрОтпусков.ДатаНачалаПериодаОтсутствия КАК ДатаНачалаБиР, | РеестрОтпусков.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончанияБиР, | РеестрОтпусков.Регистратор.Номер КАК НомерПриказаБиР, | РеестрОтпусков.Регистратор.Дата КАК ДатаПриказаБиР, | 0, | 0, | РеестрОтпусков.Основание КАК ОснованиеБиР |ИЗ | РегистрСведений.РеестрОтпусков КАК РеестрОтпусков |ГДЕ | РеестрОтпусков.Регистратор ССЫЛКА Документ.БольничныйЛист | И РеестрОтпусков.Сотрудник В(&Сотрудники) |УПОРЯДОЧИТЬ ПО | ДатаС"; |
|||
22
Ёпрст
07.09.16
✎
11:12
|
(21)Ты не поверишь - но тут тоже ошибка синтаксиса из-за неправильного условия. Еще варианты будут ?
|
|||
23
FIXXXL
07.09.16
✎
11:13
|
решение в лоб:
ЕСТЬNULL(ФактическиеОтпуска.Регистратор.ПересчетОтп, ЛОЖЬ) потом отбор по ЛОЖЬ если я правильно понял условия |
|||
24
Ёпрст
07.09.16
✎
11:13
|
И во втором запросе псевдонимы полей не нужны.
И, наконец. пользуйся ужо конструктором запросов - он сразу тебе ошибку синтаксиса выдаст. И "причешет" твой текст запроса |
|||
25
dft2014
07.09.16
✎
11:52
|
(23) Да, все верно! Так и надо мне! Только не знаю как сделать:
1) добавить, что выполнять условие ЕСТЬNULL(ФактическиеОтпуска.Регистратор.ПересчетОтп, ЛОЖЬ), только если ФактическиеОтпуска.Регистратор ССЫЛКА Документ.Отпуск. 2) и как потом делать второй отбор по ЛОЖЬ? |
|||
26
dft2014
07.09.16
✎
11:53
|
Конструктор запросов мне ошибку не выдает ))
|
|||
27
Ёпрст
07.09.16
✎
11:54
|
(25) ты не поверишь, ответ в (4).
Просто ты так и не показала текст запроса, который реально выполняешь |
|||
28
xafavute
07.09.16
✎
11:54
|
сравнение на тип НЕ ОТМЕНЯЕТ необходимость выразить
Ибо SQL - это не построчное выполнение |
|||
29
Ёпрст
07.09.16
✎
11:55
|
(26) врешь ведь. То что написано в (21) - с ошибкой в условии.
|
|||
30
dft2014
07.09.16
✎
13:35
|
(27) ответ в (4) - это мой вопрос :)
Исходный текст запроса я уже выложила в (21). И ... что-то вы меня совсем запутали с условиями... |
|||
31
Ёпрст
07.09.16
✎
13:42
|
(30)Тот , что в (21) - не рабочий. Выложите текст запроса после конструктора.
|
|||
32
Ёпрст
07.09.16
✎
13:42
|
И да, решение в (2)
|
|||
33
FIXXXL
07.09.16
✎
17:38
|
(25)
1) выражением получаешь поле с Ложь-Истина, Истину вернут только доки, в которых есть реквизит ПересчетОтп и этот реквизит=Истина 2) фильтруешь по этому полю, как я понял, тебе только Ложь нужно |
|||
34
FIXXXL
07.09.16
✎
17:40
|
(33) + или есть еще регистраторы с таким полем? тогда немного усложнится отбор во втором пункте: Ложь + условие по ССЫЛКА НужныйТипДокумента
|
|||
35
PR
07.09.16
✎
17:44
|
Мда, колхоз "Северное пламя".
Чем (2)-то не устраивает? |
|||
36
youalex
07.09.16
✎
18:00
|
имхо, нагляднее будет левосоединить:
"ИЗ РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отпуск КАК ДокОтпуск ... ГДЕ isnull(ДокОтпуск.ПересчетОтп, ЛОЖЬ) = ЛОЖЬ 2) Через Выразить (неявное соединение): ГДЕ isnull(ВЫРАЗИТЬ(Регистратор КАК Документ.Отпуск).ПересчетОтп, ЛОЖЬ) = ЛОЖЬ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |