Имя: Пароль:
1C
 
Как оптимизировать запрос?
0 Ильф
 
21.05.25
12:07
ВЫБРАТЬ
    ФедеральныеВебСервисыЭМД.Ссылка КАК Ссылка,
    ФедеральныеВебСервисыЭМД.Пациент КАК Пациент,
    ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы КАК ДокументИнформационнойБазы,
    ФедеральныеВебСервисыЭМД.ТипРЭМД КАК ТипРЭМД,
    ФедеральныеВебСервисыЭМД.Отправить КАК Отправить
ИЗ
    втОсновная КАК ФедеральныеВебСервисыЭМД
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД
        ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМДБудущее
        ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента)
            И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)
ГДЕ
    ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторСообщения ЕСТЬ NULL


пока сам не понял смысл
вроде как убирают записи у которых есть две и более записей в РС ФедеральныеВебСервисыСообщенияРЭМД
1 Ильф
 
21.05.25
12:07
запрос 10 минут выполняется
2 Волшебник
 
21.05.25
12:08
Не пользуйтесь временными таблицами
3 Ильф
 
21.05.25
12:11
не - ВТ - это уже "оптимизация" изначально запрос в один заход выполняется 15 минут
4 Fish
 
гуру
21.05.25
12:22
(1) А почему ты решил, что нужно оптимизировать именно этот кусок запроса?

Именно он выполняется 10 минут, а остальные ВТ - за секунду?
5 laeg
 
21.05.25
12:23
Индексированные поля в таблице втОсновная ? Строк там сколько миллионов ?
6 Ильф
 
21.05.25
12:24
(4) да
7 Ильф
 
21.05.25
12:24
(5) один
8 Ильф
 
21.05.25
12:26
насколько понимаю - ловят записи которые не имеют "вторых" И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)
9 Fish
 
гуру
21.05.25
12:26
(6) ДатаСообщения - это индексированное поле РС?
10 Ильф
 
21.05.25
12:28
при этом не "фильтруются обработанные" - т.е. исторические данные накапливаются и все время в запросе участвуют

через год получим 30 минут на запрос, а то и в геометрической

надо переделывать структуру хранения
11 Ильф
 
21.05.25
12:29
идентификатор и дата - да

  ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента)
            И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)

вот эти поля в РС индексированы

проиндексировал их в ВТ - похоже толку ноль
12 RomanYS
 
21.05.25
12:35
(0) Это же просто срез.
Получи в отдельную таблицу максимальные даты, а потом внутреннее соединение с ней по документу и дате
13 RomanYS
 
21.05.25
12:37
(10) "надо переделывать структуру хранения"
ага, периодический регистр сведений и ДатаСообщения в Период. Тогда этот запрос можно просто на срезпоследних заменить
14 Ильф
 
21.05.25
12:37
15 Ильф
 
21.05.25
12:38
(12) не понял
16 Мультук
 
гуру
21.05.25
12:39
(0)

1) Вы хотя бы структуру РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД
показали. Скриншот или еще что.

2) Сделайте отбор по одному пациенту и посмотрите "а что и как"
Не обязательно ворочать СРАЗУ миллионами
17 Ильф
 
21.05.25
12:41
(16) по одному мгновенно
18 Fish
 
гуру
21.05.25
12:41
(10) Вроде не накапливаются. Ты же отсекаешь все записи, у которых есть запись с датой больше.

Другими словами по каждому ИдентификаторСообщения выберется последняя запись, которая не имеет записи с датойсообщения больше.

А-ля срез последних
19 Ильф
 
21.05.25
12:41
просто ГДЕ Пациент = &Пациент добавляю на основную таблицу
20 Fish
 
гуру
21.05.25
12:44
(19) Попробуй переделать на одно соединение с подзапросои по дате:
первое условие по ид, а второе - И ДатаСообщения в
(выбрать максимум(датасообщения) из .....)
21 Ильф
 
21.05.25
12:45
(18) тоже не понял

есть РС непериодический

ИдентификаторСообщения (строка) измерение

ИдентификаторДокумента (строка индекс) реквизит
ДатаСообщения (дата время индекс) реквизит

выбираются документы у которых нет "второго" сообщения (насколько я понял)
22 Fish
 
гуру
21.05.25
12:47
(21) Т.е. аналог среза последних. Т.к. только последний по дате идентификатор не будет иметь дату сообщения больше.
23 Ильф
 
21.05.25
12:50
(22) нет

если в РС две записи - они нам не нужны

нужны только когда одна запись
24 Ильф
 
21.05.25
12:51
Мама мыла раму 01/05
Мама мыла раму 10/05
Папа мыл раму 01/01


Нужен только папа

ща дам "типовой запрос" ...
25 H A D G E H O G s
 
21.05.25
12:52
Скинь dtшник на liveups@yandex.ru с описанием, как воспроизвести, посмотрю.

Все остальное - гадание на кофейной гуще.
26 laeg
 
21.05.25
12:54
Можно попробовать еще одно ВТ сделать,  с максимальными датами по идентификатору, потом испозьуя эту ВТ получить полные данные

Вопрос: А зачем срез последних, если в запросе нет выборки из этого РС ?
27 Ильф
 
21.05.25
12:55
ВЫБРАТЬ
    ФедеральныеВебСервисыЭМД.Ссылка КАК Ссылка,
    ФедеральныеВебСервисыЭМД.Пациент КАК Пациент,
    ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы КАК ДокументИнформационнойБазы,
    ФедеральныеВебСервисыЭМД.ТипРЭМД КАК ТипРЭМД,
    ФедеральныеВебСервисыЭМД.Отправить КАК Отправить
ИЗ
    Справочник.ФедеральныеВебСервисыЭМД КАК ФедеральныеВебСервисыЭМД
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Картотека КАК СправочникКартотека
        ПО (ФедеральныеВебСервисыЭМД.Пациент = СправочникКартотека.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТипыМДРегистрируемыхВРЭМД КАК ТипыРЭМД
        ПО (ФедеральныеВебСервисыЭМД.ТипРЭМД = ТипыРЭМД.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД
        ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМДБудущее
        ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента)
            И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтложенноеПодписаниеЭП КАК ОтложенноеПодписаниеЭП
        ПО (ФедеральныеВебСервисыЭМД.Ссылка = ОтложенноеПодписаниеЭП.ПодписываемыйОбъект)
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.МедицинскийДокумент.CDAДокументы КАК CDAДокументы
        ПО (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Документ.МедицинскийДокумент)
            И (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы = CDAДокументы.Ссылка)
            И (CDAДокументы.НомерСтроки = 1)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыМедицинскихДокументов КАК СтатусыМедицинскихДокументов
        ПО (CDAДокументы.Ссылка = СтатусыМедицинскихДокументов.МедицинскийДокумент)
            И (CDAДокументы.ТелоМедДокумента = СтатусыМедицинскихДокументов.ТелоМедДокумента)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыМедицинскихДокументов КАК СтатусыМедицинскихДокументовФайлы
        ПО (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Справочник.Файлы)
            И (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы = СтатусыМедицинскихДокументовФайлы.ТелоМедДокумента)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФедеральныеВебСервисыЭМД.ЭлектронныеПодписиЭМД КАК ПодписьМО
        ПО (ФедеральныеВебСервисыЭМД.Ссылка = ПодписьМО.Ссылка)
            И (ПодписьМО.ЭтоПодписьМО = ИСТИНА)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФедеральныеВебСервисыЭМД.ЭлектронныеПодписиЭМД КАК ПодписьМОЕщеОдна
        ПО (ПодписьМО.Ссылка = ПодписьМОЕщеОдна.Ссылка)
            И (ПодписьМОЕщеОдна.ЭтоПодписьМО = ИСТИНА)
            И (ПодписьМОЕщеОдна.НомерСтроки > ПодписьМО.НомерСтроки)
ГДЕ
    ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы <> НЕОПРЕДЕЛЕНО
    И СправочникКартотека.ПометкаУдаления = ЛОЖЬ
    И ФедеральныеВебСервисыЭМД.ПометкаУдаления = ЛОЖЬ
    И ФедеральныеВебСервисыЭМД.ВнешнийДокумент = ЛОЖЬ
    И ФедеральныеВебСервисыЭМД.ВАрхиве = ЛОЖЬ
    И ВЫБОР
            КОГДА &ИспользуетсяРегион
                ТОГДА ИСТИНА
            КОГДА ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                ТОГДА ИСТИНА
            КОГДА ТипыРЭМД.Ссылка ЕСТЬ NULL
                ТОГДА ИСТИНА
            КОГДА (ТипыРЭМД.ДатаНачалаРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                    ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента >= ТипыРЭМД.ДатаНачалаРегистрации)
                    И (ТипыРЭМД.ДатаОкончанияРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                        ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента <= ТипыРЭМД.ДатаОкончанияРегистрации)
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
    И ВЫБОР
            КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Документ.МедицинскийДокумент
                ТОГДА СтатусыМедицинскихДокументов.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов)
            КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Справочник.Файлы
                ТОГДА СтатусыМедицинскихДокументовФайлы.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов)
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторСообщения ЕСТЬ NULL
    И ПодписьМОЕщеОдна.НомерСтроки ЕСТЬ NULL
    И ОтложенноеПодписаниеЭП.ПодписываемыйОбъект ЕСТЬ NULL
    И (ФедеральныеВебСервисыЭМД.Отправить = ИСТИНА
            ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = ""
                ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА)
                И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ
                И ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента ЕСТЬ NULL
                И ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки = ""
                И (ЕСТЬNULL(ТипыРЭМД.НеобходимаПодписьМО, ЛОЖЬ) = ЛОЖЬ
                    ИЛИ НЕ ПодписьМО.НомерСтроки ЕСТЬ NULL)
            ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = ""
                ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА)
                И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ
                И НЕ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Unmarshalling Error%"
                И (ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RMIS_FAULT%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 500%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 502%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 503%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 403%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 404%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 408%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Ошибка подключения.%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Ошибка работы с Интернет%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%превышен лимит запросов к сервису%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RATE_LIMIT%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RMIS_LIMIT_FAULT%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RMIS_REGISTERDOCUMENT_PARSING_FAULT%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%INTERNAL_ERROR%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%GW-005%"
                    ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%GW-007%")
            ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = ""
                ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА)
                И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ
                И (ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%RUNTIME_ERROR%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%CA_INACCESSIBILITY%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%ASYNC_RESPONSE_TIMEOUT%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%SCHEMA_PROCESSING_ERROR%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Внутренняя ошибка валидации СЭМД%"
                        И НЕ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Код = 'VALIDATION_ERROR'%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%GET_DOCUMENT_FILE_ERROR%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Ошибка работы с Интернет%"
                    ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Ошибка получения файла ЭМД из файлового хранилища%")
                И ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки = ""
            ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = ""
                ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА)
                И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ
                И НЕ ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения ЕСТЬ NULL
                И ФедеральныеВебСервисыСообщенияРЭМД.ДатаОтвета = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                И ФедеральныеВебСервисыСообщенияРЭМД.СообщениеУспешноОтправлено = ИСТИНА
                И ДОБАВИТЬКДАТЕ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения, ДЕНЬ, 2) < &ТекущийДень
                И ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки = ""
                И ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО ""
            ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА
                И ФедеральныеВебСервисыСообщенияРЭМД.ДатаОтвета <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                И ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО ""
                И (ЕСТЬNULL(ТипыРЭМД.НеобходимаПодписьМО, ЛОЖЬ) = ЛОЖЬ
                    ИЛИ НЕ ПодписьМО.НомерСтроки ЕСТЬ NULL))
28 Ильф
 
21.05.25
12:56
(25) ты знаешь какие сейчас штрафы по 152 ФЗ? насмешил
29 laeg
 
21.05.25
12:57
(24) а зачем в обще такой геморой ? Когда нужна только одна запись ?
30 Ильф
 
21.05.25
12:57
(25) но буду иметь в виду,
31 Ильф
 
21.05.25
12:57
(29) - их нужно 200
32 laeg
 
21.05.25
13:00
в (24) ты явно написал, что нужны только те записи, которых по идентификатору не больше ОДНОГО ? (то есть маму не берем, берем папу)
так и сделать условие ГДЕ Количество(Идентификатор) = 1
33 Ильф
 
21.05.25
13:02
(32) ... это я предположил из того что увидел в запросе

но как вариант (а вдруг даты совпадут ? тогда не прокатит)
34 Fragster
 
гуру
21.05.25
13:05
а почему не количество различные и одно соединение?
35 Fragster
 
гуру
21.05.25
13:05
или даже 0 соединений?
36 Ильф
 
21.05.25
13:07
https://disk.yandex.ru/d/JUZjKPXfXBDFqw

наверное так... надо привести к изначальному, посмотреть что выдает
37 Ильф
 
21.05.25
13:08
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ФедеральныеВебСервисыЭМД.Ссылка КАК Ссылка,
    ФедеральныеВебСервисыЭМД.ИдентификаторДокумента КАК ИдентификаторДокумента,
    ФедеральныеВебСервисыЭМД.Пациент КАК Пациент,
    ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы КАК ДокументИнформационнойБазы,
    ФедеральныеВебСервисыЭМД.ТипРЭМД КАК ТипРЭМД,
    ФедеральныеВебСервисыЭМД.Отправить КАК Отправить,
    МИНИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) КАК ДатаСообщения,
    МАКСИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) КАК ДатаСообщения1
ПОМЕСТИТЬ втПервая
ИЗ
    втОсновная КАК ФедеральныеВебСервисыЭМД
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД
        ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента)

СГРУППИРОВАТЬ ПО
    ФедеральныеВебСервисыЭМД.Ссылка,
    ФедеральныеВебСервисыЭМД.ИдентификаторДокумента,
    ФедеральныеВебСервисыЭМД.Пациент,
    ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы,
    ФедеральныеВебСервисыЭМД.ТипРЭМД,
    ФедеральныеВебСервисыЭМД.Отправить
ИМЕЮЩИЕ
МИНИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) = МАКСИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)
38 Ильф
 
21.05.25
13:22
но даже если ... исторические данные, надо как-то исключать

что бы вот сразу - "отправлено" - идите вна
39 Ильф
 
21.05.25
13:37
https://disk.yandex.ru/d/U8MCZJltr9IKwQ

не - что-то не то
40 Ильф
 
21.05.25
13:40
ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМДБудущее
        ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента)
            И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)

убрал соединение

добавил группировку и условие

ИМЕЮЩИЕ
МИНИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) = МАКСИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)

а разница в количестве записей существенная
41 Fish
 
гуру
21.05.25
13:46
(23) А ты проверь. Найди пациента, у которого 2 записи, и выполни запрос по нему.
42 Garykom
 
гуру
21.05.25
13:51
Юмористически правила:
1. Не пользуйтесь временными таблицами
2. Никогда не используете краткие имена/алиасы таблиц после КАК
3. Никогда не используйте РАЗЛИЧНЫЕ
4. Никогда не обрабатывайте разные случаи (например есть дублирование или нет) отдельно через ОБЪЕДИНИТЬ
5. ..
43 DrZombi
 
гуру
22.05.25
06:45
(0) Как-то так....

1. В таблицу "втОсновная" добавить поле "ДатаСообщения" коль оно вам там нужно
2. После можно убрать соединение
     "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД"
44 DrZombi
 
гуру
22.05.25
06:49
(40) Порой для оптимизации чего-то важного, пишут еще один регистр, который хранит это важное в готовом варианте :)

Пример ЗУП 3.1 и расчет среднего, расчет некоторых показателей выполняется заранее, еще до вызова расчета среднего :)
45 DrZombi
 
гуру
22.05.25
06:55
(27) Вот эту конструкцию убирай из условия ГДЕ!!!
Либо переписывай на условия ИЛИ, либо пиши через еще одну временную таблицу, куда ты поместишь эту конструкцию в Поле.

После уже в следующем вызове своей таблицы, уже используешь поле в ГДЕ... Вот такая порой бывает оптимизация ;)

///Вот это бяка в запроса, на момент перехода На ПосгриСКЛ (и не только)
И ВЫБОР
            КОГДА &ИспользуетсяРегион
                ТОГДА ИСТИНА
            КОГДА ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                ТОГДА ИСТИНА
            КОГДА ТипыРЭМД.Ссылка ЕСТЬ NULL
                ТОГДА ИСТИНА
            КОГДА (ТипыРЭМД.ДатаНачалаРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                    ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента >= ТипыРЭМД.ДатаНачалаРегистрации)
                    И (ТипыРЭМД.ДатаОкончанияРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                        ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента <= ТипыРЭМД.ДатаОкончанияРегистрации)
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
46 DrZombi
 
гуру
22.05.25
06:59
+ (27)  И эту гадость из ГДЕ, переписывай :)

И ВЫБОР
            КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Документ.МедицинскийДокумент
                ТОГДА СтатусыМедицинскихДокументов.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов)
            КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Справочник.Файлы
                ТОГДА СтатусыМедицинскихДокументовФайлы.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов)
            ИНАЧЕ ИСТИНА
        КОНЕЦ
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс