Имя: Пароль:
1C
 
1С Помощь с запросом
0 illiona
 
naïve
28.09.23
12:53
Добрый день.
Есть запрос, который исключает период который не оплачет из общего периода
"ВЫБРАТЬ
|    БольничныйЛист.ДатаНачалаОплаты КАК Начало,
|    БольничныйЛист.ДатаОкончанияОплаты КАК конец,
|    БольничныйЛист.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТТаблица1
|ИЗ
|    Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
|    БольничныйЛист.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    БольничныйЛистИсключаемыеПериоды.Ссылка КАК Ссылка,
|    БольничныйЛистИсключаемыеПериоды.ДатаНачала КАК Начало,
|    БольничныйЛистИсключаемыеПериоды.ДатаОкончания КАК конец
|ПОМЕСТИТЬ ВТТаблица2
|ИЗ
|    Документ.БольничныйЛист.ИсключаемыеПериоды КАК БольничныйЛистИсключаемыеПериоды
|        ЛЕВОЕ СОЕДИНЕНИЕ ВТТаблица1 КАК ВТТаблица1
|        ПО (ВТТаблица1.Ссылка = БольничныйЛистИсключаемыеПериоды.Ссылка)
|ГДЕ
|    ВТТаблица1.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ВТТаблица1.Начало КАК Период,
|    ВТТаблица1.Ссылка КАК Ссылка
|ПОМЕСТИТЬ Таблица_1
|ИЗ
|    ВТТаблица1 КАК ВТТаблица1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ВТТаблица2.Начало,
|    ВТТаблица2.Ссылка
|ИЗ
|    ВТТаблица2 КАК ВТТаблица2
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДОБАВИТЬКДАТЕ(ВТТаблица1.конец, ДЕНЬ, 1),
|    ВТТаблица1.Ссылка
|ИЗ
|    ВТТаблица1 КАК ВТТаблица1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДОБАВИТЬКДАТЕ(ВТТаблица2.конец, ДЕНЬ, 1),
|    ВТТаблица2.Ссылка
|ИЗ
|    ВТТаблица2 КАК ВТТаблица2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Таблица_1.Период КАК ДатаНачала,
|    МИНИМУМ(ДОБАВИТЬКДАТЕ(СледующиеПериоды.Период, ДЕНЬ, -1)) КАК ДатаКонец,
|    Таблица_1.Ссылка КАК Ссылка
|ПОМЕСТИТЬ Таблица_2
|ИЗ
|    Таблица_1 КАК Таблица_1
|        ЛЕВОЕ СОЕДИНЕНИЕ Таблица_1 КАК СледующиеПериоды
|        ПО Таблица_1.Период < СледующиеПериоды.Период
|ГДЕ
|    НЕ СледующиеПериоды.Период ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
|    Таблица_1.Период,
|    Таблица_1.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Таблица_2.ДатаНачала КАК ДатаНачала,
|    Таблица_2.ДатаКонец КАК ДатаКонец,
|    Таблица_2.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ИТОГПериодов
|ИЗ
|    Таблица_2 КАК Таблица_2
|        ЛЕВОЕ СОЕДИНЕНИЕ ВТТаблица2 КАК ВТТаблица2
|        ПО Таблица_2.ДатаНачала = ВТТаблица2.Начало
|            И Таблица_2.ДатаКонец = ВТТаблица2.конец
|ГДЕ
|    ВТТаблица2.Начало ЕСТЬ NULL"

Работает, если выбрать ссылка на конкретный документ, как мне подкорректировать, чтоб работал для всех документов БЛ. Заранее спасибо
1 illiona
 
naïve
28.09.23
12:54
Т.е. мне надо сделать чтоб этого механизм применялся для каждого документа
2 Мимохожий Однако
 
28.09.23
13:00
Делай массив документов  и перебирай своим запросом ))
3 petya_
petrov_63
 
28.09.23
13:15
(2) зло однако.
(1) Ну как что сделать? Добавить группировки по ссылке и получить то же самое но с ссылкой.
4 petya_
petrov_63
 
28.09.23
13:18
Ну и в соединения тоже добавить ссылку
5 illiona
 
naïve
28.09.23
14:21
(3) не совсем поняла
6 inkvizitr
 
28.09.23
14:30
(0) убрать
|ГДЕ
|    БольничныйЛист.Ссылка = &Ссылка

там где пакет "ПОМЕСТИТЬ ВТТаблица2" сделать группировку по ссылке

а дальше по обстоятельства смотреть
7 illiona
 
naïve
28.09.23
14:51
У меня просто не все больничные ещё пойдут,а проведённые,с параметром по организации и даты будут за определенный период браться,поэтому этот механизм надо принимать отдельно для каждого,может через вложенный запрос?
8 inkvizitr
 
28.09.23
16:32
(7) "У меня просто не все больничные ещё пойдут,а проведённые"
|    БольничныйЛист.проведен = истина

с параметром по организации

|    БольничныйЛист.Организация= &Организация

и даты будут за определенный период браться
БольничныйЛист.дата Между &датаначала И &датаОкончания

и  все это в первом пакете пишем в условии ГДЕ и во втором тоже
9 illiona
 
naïve
28.09.23
16:50
Я так делала,он начинает путать пересечения между документами
10 illiona
 
naïve
28.09.23
16:50
Сейчас выложу как делаю
11 vicof
 
28.09.23
16:51
И во второй таблице левое на внутреннее заменить.
12 petya_
petrov_63
 
28.09.23
17:43
(7) вот это в секции ГДЕ и выразить
13 petya_
petrov_63
 
28.09.23
17:44
(11) там по ссылке не хватает соединений
14 illiona
 
naïve
29.09.23
04:40
(13) похоже да, не могу понять где по ссылке не хватает соединения
"ВЫБРАТЬ
|    БольничныйЛист.ДатаНачалаОплаты КАК Начало,
|    БольничныйЛист.ДатаОкончанияОплаты КАК конец,
|    БольничныйЛист.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТТаблица1
|ИЗ
|    Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
|    БольничныйЛист.Проведен = ИСТИНА
|    И (БольничныйЛист.ДатаНачалаОплаты МЕЖДУ &ДатаНачала И &ДатаОкончания
|            ИЛИ БольничныйЛист.ДатаОкончанияОплаты МЕЖДУ &ДатаНачала И &ДатаОкончания
|            ИЛИ &ДатаНачала МЕЖДУ БольничныйЛист.ДатаНачалаОплаты И БольничныйЛист.ДатаОкончанияОплаты)
|    И БольничныйЛист.Организация = &Организация
|    И БольничныйЛист.Сотрудник В(&Сотрудник)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    БольничныйЛистИсключаемыеПериоды.Ссылка КАК Ссылка,
|    БольничныйЛистИсключаемыеПериоды.ДатаНачала КАК Начало,
|    БольничныйЛистИсключаемыеПериоды.ДатаОкончания КАК конец
|ПОМЕСТИТЬ ВТТаблица2
|ИЗ
|    Документ.БольничныйЛист.ИсключаемыеПериоды КАК БольничныйЛистИсключаемыеПериоды
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблица1 КАК ВТТаблица1
|        ПО (ВТТаблица1.Ссылка = БольничныйЛистИсключаемыеПериоды.Ссылка)
|ГДЕ
|    БольничныйЛистИсключаемыеПериоды.Ссылка.Сотрудник В(&Сотрудник)
|    И БольничныйЛистИсключаемыеПериоды.Ссылка.Организация = &Организация
|    И БольничныйЛистИсключаемыеПериоды.Ссылка.Проведен = ИСТИНА
|    И (БольничныйЛистИсключаемыеПериоды.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
|            ИЛИ БольничныйЛистИсключаемыеПериоды.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
|            ИЛИ &ДатаНачала МЕЖДУ БольничныйЛистИсключаемыеПериоды.ДатаНачала И БольничныйЛистИсключаемыеПериоды.ДатаОкончания)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ВТТаблица1.Начало КАК Период,
|    ВТТаблица1.Ссылка КАК Ссылка
|ПОМЕСТИТЬ Таблица_1
|ИЗ
|    ВТТаблица1 КАК ВТТаблица1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ВТТаблица2.Начало,
|    ВТТаблица2.Ссылка
|ИЗ
|    ВТТаблица2 КАК ВТТаблица2
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДОБАВИТЬКДАТЕ(ВТТаблица1.конец, ДЕНЬ, 1),
|    ВТТаблица1.Ссылка
|ИЗ
|    ВТТаблица1 КАК ВТТаблица1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДОБАВИТЬКДАТЕ(ВТТаблица2.конец, ДЕНЬ, 1),
|    ВТТаблица2.Ссылка
|ИЗ
|    ВТТаблица2 КАК ВТТаблица2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Таблица_1.Период КАК ДатаНачала,
|    МИНИМУМ(ДОБАВИТЬКДАТЕ(СледующиеПериоды.Период, ДЕНЬ, -1)) КАК ДатаКонец,
|    Таблица_1.Ссылка КАК Ссылка
|ПОМЕСТИТЬ Таблица_2
|ИЗ
|    Таблица_1 КАК Таблица_1
|        ЛЕВОЕ СОЕДИНЕНИЕ Таблица_1 КАК СледующиеПериоды
|        ПО Таблица_1.Период < СледующиеПериоды.Период
|ГДЕ
|    НЕ СледующиеПериоды.Период ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
|    Таблица_1.Период,
|    Таблица_1.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Таблица_2.ДатаНачала КАК ДатаНачала,
|    Таблица_2.ДатаКонец КАК ДатаКонец,
|    Таблица_2.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ИТОГПериодов
|ИЗ
|    Таблица_2 КАК Таблица_2
|        ЛЕВОЕ СОЕДИНЕНИЕ ВТТаблица2 КАК ВТТаблица2
|        ПО Таблица_2.ДатаНачала = ВТТаблица2.Начало
|            И Таблица_2.ДатаКонец = ВТТаблица2.конец
|            И Таблица_2.Ссылка = ВТТаблица2.Ссылка
|ГДЕ
|    ВТТаблица2.Начало ЕСТЬ NULL"
15 illiona
 
naïve
29.09.23
04:44
https://disk.yandex.ru/i/WerfYWEdNX5QjA
Получается одна запись не правильно ставится
16 Donkey_hot
 
29.09.23
05:09
(14) Вот здесь не хватает условия соединения по ссылке:

Таблица_1 КАК Таблица_1
|        ЛЕВОЕ СОЕДИНЕНИЕ Таблица_1 КАК СледующиеПериоды
|        ПО Таблица_1.Период < СледующиеПериоды.Период
17 illiona
 
naïve
29.09.23
06:36
да поставила, вроде все ОК
18 illiona
 
naïve
29.09.23
07:55
Спасибо всем, за уделенное время
Независимо от того, куда вы едете — это в гору и против ветра!