• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Запрос 1с 8.2

  • Автор темы SeverBap
  • Дата начала
S

SeverBap

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

SeverBap

Сделал через СКД с объединением наборов данных но дубликаты события присутствуют:
запрос НаборДанных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_РегистрацияСобытия.Ответственный

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

unknown181538

Соединить в один запрос и использовать "ВЫБРАТЬ РАЗЛИЧНЫЕ"?
 
D

Darlock

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

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

SeverBap

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

SeverBap

подскажите пример простой по выборке по основанием двух документов остальное я прикручу
в моем случае главный документ: документЗаказ
 
S

SeverBap

Вот такой результат у меня получился:
Код:
ВЫБРАТЬ РАЗЛИЧНЫЕ
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_РегистрацияСобытия.Ответственный

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

Darlock

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

SeverBap

Избавился, два слова только поменялось!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!