Запрос 1с 8.2

SeverBap

Well-known member
18.09.2007
451
0
#1
Подскажите как можно реализовать выборку документов ДокументЗаказ по условию что у документа ДокументСобытие (у которого заказ основание) состояние подтвержден, причем возможно что ДокументСобытие является основанием. и результат должен получится таблица типа заказ 1шт событие 1шт - причем недолжны дублировать ни заказы и ни события.
можите дать какой-нибудь пример?
 

SeverBap

Well-known member
18.09.2007
451
0
#2
Сделал через СКД с объединением наборов данных но дубликаты события присутствуют:
запрос НаборДанных1 :
Код:
ВЫБРАТЬ
RZ_РегистрацияСобытия.Ответственный КАК Ответственный,
Заказы.Ссылка КАК Заказ,
МИНИМУМ(РАЗНОСТЬДАТ(&ДатаНачала, RZ_РегистрацияСобытия.Дата, СЕКУНДА)) КАК МинДат
ИЗ
Документ.RZ_РегистрацияСобытия КАК RZ_РегистрацияСобытия
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Заказы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.RZ_Доставка КАК RZ_Доставка
ПО (RZ_Доставка.ЗаказПокупателя = Заказы.Ссылка)
ПО (Заказы.Ссылка = RZ_РегистрацияСобытия.Основание)
ГДЕ
Заказы.Проведен = ИСТИНА
И RZ_Доставка.ДатаДоставки МЕЖДУ &ДатаНачала И &ДатаКонец
И RZ_Доставка.Состояние = &СостояниеДоставки
И RZ_РегистрацияСобытия.Состояние = &СостояниеСобытия
И Заказы.Состояние = &СостояниеЗаказа
И RZ_РегистрацияСобытия.ТипСобытия <> &ТипСобытия

СГРУППИРОВАТЬ ПО
Заказы.Ссылка,
RZ_РегистрацияСобытия.Ответственный

УПОРЯДОЧИТЬ ПО
Ответственный,
Заказ
и второй:
Код:
ВЫБРАТЬ
RZ_РегистрацияСобытия.Ответственный КАК Ответственный,
Заказы.Ссылка КАК Заказ,
МИНИМУМ(РАЗНОСТЬДАТ(&ДатаНачала, RZ_РегистрацияСобытия.Дата, СЕКУНДА)) КАК МинДат
ИЗ
Документ.RZ_РегистрацияСобытия КАК RZ_РегистрацияСобытия
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Заказы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.RZ_Доставка КАК RZ_Доставка
ПО (RZ_Доставка.ЗаказПокупателя = Заказы.Ссылка)
ПО (Заказы.ДокументОснование = RZ_РегистрацияСобытия.Ссылка)
ГДЕ
Заказы.Проведен = ИСТИНА
И RZ_Доставка.ДатаДоставки МЕЖДУ &ДатаНачала И &ДатаКонец
И RZ_Доставка.Состояние = &СостояниеДоставки
И RZ_РегистрацияСобытия.Состояние = &СостояниеСобытия
И Заказы.Состояние = &СостояниеЗаказа
И RZ_РегистрацияСобытия.Дата МЕЖДУ &ДатаНачала И &ДатаКонец

СГРУППИРОВАТЬ ПО
Заказы.Ссылка,
РАЗНОСТЬДАТ(&ДатаНачала, RZ_РегистрацияСобытия.Дата, СЕКУНДА),
RZ_РегистрацияСобытия.Ответственный

УПОРЯДОЧИТЬ ПО
Ответственный,
Заказ
подскажите как их собырть вместе и убрать дубли событий
 

Darlock

Well-known member
04.01.2008
560
1
#4
Может и глупо вопрос прозвучит...но все таки задам: а зачем вы объединяете 2 документа, если вам нужно получить один документ (по набору условий) и взять его документ-основание?

И подозреваю, что двойные записи у вас возникают из-за 2 левых соединений (но по разным реквизитам). Поэтому может поможет совет unknown181538 . А можно попробовать выбрать более "приоритетный документ" и через его реквизит вытаскивать вторую ссылку.
 

SeverBap

Well-known member
18.09.2007
451
0
#5
Нужно получить два документа: документзаказ и докуменсобытие, причем событие может быть основанием для заказа.
Соединить в один запрос и использовать "ВЫБРАТЬ РАЗЛИЧНЫЕ"? - да!
 

SeverBap

Well-known member
18.09.2007
451
0
#6
подскажите пример простой по выборке по основанием двух документов остальное я прикручу
в моем случае главный документ: документЗаказ
 

SeverBap

Well-known member
18.09.2007
451
0
#7
Вот такой результат у меня получился:
Код:
ВЫБРАТЬ РАЗЛИЧНЫЕ
RZ_РегистрацияСобытия.Ответственный КАК Ответственный,
Заказы.Ссылка КАК Заказ,
МИНИМУМ(РАЗНОСТЬДАТ(&ДатаНачала, RZ_РегистрацияСобытия.Дата, СЕКУНДА)) КАК МинДат
ИЗ
Документ.RZ_РегистрацияСобытия КАК RZ_РегистрацияСобытия
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Заказы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.RZ_Доставка КАК RZ_Доставка
ПО (RZ_Доставка.ЗаказПокупателя = Заказы.Ссылка)
ПО (Заказы.Ссылка = RZ_РегистрацияСобытия.Основание)
ГДЕ
Заказы.Проведен = ИСТИНА
И RZ_Доставка.ДатаДоставки МЕЖДУ &ДатаНачала И &ДатаКонец
И RZ_Доставка.Состояние = &СостояниеДоставки
И RZ_РегистрацияСобытия.Состояние = &СостояниеСобытия
И Заказы.Состояние = &СостояниеЗаказа
И RZ_РегистрацияСобытия.ТипСобытия <> &ТипСобытия

СГРУППИРОВАТЬ ПО
Заказы.Ссылка,
RZ_РегистрацияСобытия.Ответственный

ОБЪЕДИНИТЬ

ВЫБРАТЬ
RZ_РегистрацияСобытия.Ответственный,
Заказы.Ссылка,
МИНИМУМ(РАЗНОСТЬДАТ(&ДатаНачала, RZ_РегистрацияСобытия.Дата, СЕКУНДА))
ИЗ
Документ.RZ_РегистрацияСобытия КАК RZ_РегистрацияСобытия
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Заказы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.RZ_Доставка КАК RZ_Доставка
ПО (RZ_Доставка.ЗаказПокупателя = Заказы.Ссылка)
ПО (Заказы.ДокументОснование = RZ_РегистрацияСобытия.Ссылка)
ГДЕ
Заказы.Проведен = ИСТИНА
И RZ_Доставка.ДатаДоставки МЕЖДУ &ДатаНачала И &ДатаКонец
И RZ_Доставка.Состояние = &СостояниеДоставки
И RZ_РегистрацияСобытия.Состояние = &СостояниеСобытия
И Заказы.Состояние = &СостояниеЗаказа
И RZ_РегистрацияСобытия.Дата МЕЖДУ &ДатаНачала И &ДатаКонец

СГРУППИРОВАТЬ ПО
Заказы.Ссылка,
РАЗНОСТЬДАТ(&ДатаНачала, RZ_РегистрацияСобытия.Дата, СЕКУНДА),
RZ_РегистрацияСобытия.Ответственный

УПОРЯДОЧИТЬ ПО
Ответственный,
Заказ
 

Darlock

Well-known member
04.01.2008
560
1
#8
Раз тема обновилась, то видимо от двойных записей вы не избавились... Попробуйте этот запрос поместить или в отдельный пакет запросов (вирт.таблица) или во вложенный запрос, а потом выполнить "ВЫБРАТЬ РАЗЛИЧНЫЕ" уже к итоговой выборке.