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