Доброе утро !
При выполнении запроса идет сообщение "Синтаксическая ошибка-ОБЪЕДИНИТЬ".
В чем проблема не пойму.
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
|
| ДекретОт.ДатаУхода Как Начало,
| ДекретОт.Сотрудник
|ИЗ
| Документ.ПриказНаДекретныйОтпускс5месяцев КАК ДекретОт
|ГДЕ
| ДекретОт.Сотрудник = &Сотрудник
|
|Упорядочить по ДекретОт.ДатаУхода Убыв
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
|
| ДекретОт1.ДатаВыхода ,
| ДекретОт1.Сотрудник
|ИЗ
| Документ.ПриказНаОтпускПоУходуЗаРебенком КАК ДекретОт1
|ГДЕ
| ДекретОт1.Сотрудник = &Сотрудник
|
|Упорядочить по ДекретОт1.ДатаВыхода Убыв";
andrew76 @ Today, 7:33
,
Упорядочивать можно только результат объединения. Делайте пакетными запросами.
Petre @ Сегодня, 12:28
,
Т.е. в этом моем случае нужно делать 2 разных запроса ? На каждый документ по своему запросу ?
andrew76 @ Сегодня, 9:32
,
Нет, вы можете объединить два запроса, но упорядочивать уже результат объединения. Поместите это во вложенный запрос. Кстати, если не ошибаюсь конструкция
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВложенныйЗапрос.Период,
| ВложенныйЗапрос.Сотрудник
|ИЗ
| (ВЫБРАТЬ
| ДекретОт.ДатаУхода Как Период,
| ДекретОт.Сотрудник
| ИЗ
| Документ.ПриказНаДекретныйОтпускс5месяцев КАК ДекретОт
| ГДЕ
| ДекретОт.Сотрудник = &Сотрудник
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДекретОт1.ДатаВыхода ,
| ДекретОт1.Сотрудник
| ИЗ
| Документ.ПриказНаОтпускПоУходуЗаРебенком КАК ДекретОт1
| ГДЕ
| ДекретОт1.Сотрудник = &Сотрудник
| ) КАК ВложенныйЗапрос
|УПОРЯДОЧИТЬ ПО
| ВложенныйЗапрос.Период УБЫВ
|";
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
|
| ДекретОт.ДатаУхода Как Начало,
| ДекретОт.Сотрудник как Сотрудник
// поместить выборку по первому виду документов во временную таблицу
|Поместить вт1
|ИЗ
| Документ.ПриказНаДекретныйОтпускс5месяцев КАК ДекретОт
|ГДЕ
| ДекретОт.Сотрудник = &Сотрудник
|
|Упорядочить по ДекретОт.ДатаУхода Убыв
|;
|
|ВЫБРАТЬ ПЕРВЫЕ 1
|
| ДекретОт1.ДатаВыхода как Начало,
| ДекретОт1.Сотрудник как Сотрудник
// поместить выборку по второму виду документов во вторую временную таблицу
|Поместить вт2
|ИЗ
| Документ.ПриказНаОтпускПоУходуЗаРебенком КАК ДекретОт1
|ГДЕ
| ДекретОт1.Сотрудник = &Сотрудник
|
|Упорядочить по ДекретОт1.ДатаВыхода Убыв
|;
// объединить результаты обеих временных таблиц
|Выбрать
| вт1.Начало как Начало,
| вт1.Сотрудник как Сотрудник
|из
| вт1 как Вт1
|
|объединить
|
|выбрать
| вт2.Начало,
| вт2.Сотрудник
|из
| вт2 как Вт2
";
Vladal @ Сегодня, 11:55
,
Упорядочить во временных таблицах не работает, только на итоговую выборку.
Если нужно получить последний док каждого типа - тогда используйте функцию МАКСИМУМ по дате документа - получите последнюю дату документов, а дальше соединением получите саму ссылку на док
Vladal @ Сегодня, 14:55
,
В принципе сделать 2 запроса отдельно.Выгружать результаты из запросов в 1 ТЗ.ТЗ отсортировать по дате- по убыванию.Прочитать из ТЗ первую запись и все.
ВЫБРАТЬ ПЕРВЫЕ 1
ПоступлениеТоваровУслуг.Ссылка
ПОМЕСТИТЬ Поступ
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
ПоступлениеТоваровУслуг.Проведен
УПОРЯДОЧИТЬ ПО
ПоступлениеТоваровУслуг.Дата УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
РеализацияТоваровУслуг.Ссылка
ПОМЕСТИТЬ Реал
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Проведен
УПОРЯДОЧИТЬ ПО
РеализацияТоваровУслуг.Дата УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Поступ.Ссылка
ИЗ
Поступ КАК Поступ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Реал.Ссылка
ИЗ
Реал КАК Реал
pablo @ Сегодня, 15:14
,
Попробую и Ваш вариант.По поводу большой загрузки БД.Это декретные отпуска - много по сотруднику их не будет.
Даже в случае матери-героини.
В семерке из-за ... ограниченности языка запросов было проще что-то собрать запросом, запрос выгрузить в ТЗ и затем колбасить ее всяко-разно. В восьмерке так тоже можно, но такая методика очень быстро деградирует по времени выполнения на больших выборках...
Тем не менее, ИМХО, стоит стремиться все делать "базаданново". Даже на малых объемах данных можно больше времени потратить на накладных расходах по пересылке данных с сервера на клиент.
Более того, если развернуть ситуацию для задачи перепроведения за месяц, то, ИМХО, 10 одинаковых запросов возвращающих 2 записи отработают быстрее 10 запросов, возвращающих все записи по сотруднику.
pablo @ Сегодня, 15:43
,З.Ы. С учетом всего времени выполнения на клиенте
pablo @ 27.11.19, 18:45
,
Интересно,а если понадобится перебирать 4 вида документов,и из каждой
выборки получать только последний документ,не технологичнее ли
сделать регистр сведений ,в который будет записываться инфа с этих доков,
и читать регистр методом срез последних ? Что будет работать быстрее,запрос,или
чтение регистра ? Эта функция должна выполняться каждый раз при открытии элемента
справочника по сотрудникам.
andrew76 @ Today, 15:59
,
Вы представляете что будет при групповом перепроведении документов? Сравните это с частотой открытия формы элемента вашего справочника. Да хоть сто документов. Количество букв в запросе никак не связано со скоростью выполнения запроса.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua