Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 330 раз
Рейтинг: 0
andrew76 @ Сегодня, 9:32
, Нет, вы можете объединить два запроса, но упорядочивать уже результат объединения. Поместите это во вложенный запрос. Кстати, если не ошибаюсь конструкция
Цитата
ВЫБРАТЬ ПЕРВЫЕ 1
тоже не сработает в таком виде. Пример:
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВложенныйЗапрос.Период, | ВложенныйЗапрос.Сотрудник |ИЗ | (ВЫБРАТЬ | ДекретОт.ДатаУхода Как Период, | ДекретОт.Сотрудник | ИЗ | Документ.ПриказНаДекретныйОтпускс5месяцев КАК ДекретОт | ГДЕ | ДекретОт.Сотрудник = &Сотрудник | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ДекретОт1.ДатаВыхода , | ДекретОт1.Сотрудник | ИЗ | Документ.ПриказНаОтпускПоУходуЗаРебенком КАК ДекретОт1 | ГДЕ | ДекретОт1.Сотрудник = &Сотрудник | ) КАК ВложенныйЗапрос |УПОРЯДОЧИТЬ ПО | ВложенныйЗапрос.Период УБЫВ |";
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Местный
Сообщений: 373
Из: Slovensko
Спасибо сказали: 79 раз
Рейтинг: 67.3
Цитата(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С, поэтому допускаю синтаксические ошибки.
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 330 раз
Рейтинг: 0
Vladal @ Сегодня, 11:55
, Упорядочить во временных таблицах не работает, только на итоговую выборку. Если нужно получить последний док каждого типа - тогда используйте функцию МАКСИМУМ по дате документа - получите последнюю дату документов, а дальше соединением получите саму ссылку на док
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
Vladal @ Сегодня, 14:55
,
В принципе сделать 2 запроса отдельно.Выгружать результаты из запросов в 1 ТЗ.ТЗ отсортировать по дате- по убыванию.Прочитать из ТЗ первую запись и все.
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0
Цитата
В принципе сделать 2 запроса отдельно.Выгружать результаты из запросов в 1 ТЗ.ТЗ отсортировать по дате- по убыванию.Прочитать из ТЗ первую запись и все
Какой лютый семерка стайл... Вытащим все из БД на клиента (нагрузим память), потом отсортируем(нагрузим проц), чтобы получить в итоге 2 записи...
Рабочий запрос:
ВЫБРАТЬ ПЕРВЫЕ 1 ПоступлениеТоваровУслуг.Ссылка ПОМЕСТИТЬ Поступ ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ГДЕ ПоступлениеТоваровУслуг.Проведен
УПОРЯДОЧИТЬ ПО ПоступлениеТоваровУслуг.Дата УБЫВ ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПЕРВЫЕ 1 РеализацияТоваровУслуг.Ссылка ПОМЕСТИТЬ Реал ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Проведен
УПОРЯДОЧИТЬ ПО РеализацияТоваровУслуг.Дата УБЫВ ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Поступ.Ссылка ИЗ Поступ КАК Поступ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Реал.Ссылка ИЗ Реал КАК Реал
Правильно поставленный вопрос содержит до 90% ответа.
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
pablo @ Сегодня, 15:14
, Попробую и Ваш вариант.По поводу большой загрузки БД.Это декретные отпуска - много по сотруднику их не будет. Даже в случае матери-героини.
Цитата(andrew76 @ 27.11.19, 15:17)
Какой лютый семерка стайл...
Какой лютый семерка стайл... А вот это я совсем НЕ ПОНЯЛ
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0
В семерке из-за ... ограниченности языка запросов было проще что-то собрать запросом, запрос выгрузить в ТЗ и затем колбасить ее всяко-разно. В восьмерке так тоже можно, но такая методика очень быстро деградирует по времени выполнения на больших выборках...
Правильно поставленный вопрос содержит до 90% ответа.
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
Цитата(pablo @ 27.11.19, 18:01)
на больших выборках
В том то и дело ,что запросы будут выполняться только по 1 сотруднику.И декретных отпусков будет незначительное количество.А может и не быть вообще.Не все же в декрет ходят.
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0
Тем не менее, ИМХО, стоит стремиться все делать "базаданново". Даже на малых объемах данных можно больше времени потратить на накладных расходах по пересылке данных с сервера на клиент. Более того, если развернуть ситуацию для задачи перепроведения за месяц, то, ИМХО, 10 одинаковых запросов возвращающих 2 записи отработают быстрее 10 запросов, возвращающих все записи по сотруднику.
pablo @ Сегодня, 15:43
,З.Ы. С учетом всего времени выполнения на клиенте
Сообщение отредактировал pablo - 27.11.19, 15:45
Правильно поставленный вопрос содержит до 90% ответа.
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
pablo @ 27.11.19, 18:45
,
Интересно,а если понадобится перебирать 4 вида документов,и из каждой выборки получать только последний документ,не технологичнее ли сделать регистр сведений ,в который будет записываться инфа с этих доков, и читать регистр методом срез последних ? Что будет работать быстрее,запрос,или чтение регистра ? Эта функция должна выполняться каждый раз при открытии элемента справочника по сотрудникам.
Группа: Местный
Сообщений: 2909
Из: Київ, Україна
Спасибо сказали: 1162 раз
Рейтинг: 1248.1
andrew76 @ Today, 15:59
, Вы представляете что будет при групповом перепроведении документов? Сравните это с частотой открытия формы элемента вашего справочника. Да хоть сто документов. Количество букв в запросе никак не связано со скоростью выполнения запроса.
Допрацьовую: - "Бухгалтерія для України 2.1"; - "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!