Вход | Регистрация
 

подскажите по запросу

подскажите по запросу
Я
   Мисти
 
27.03.21 - 20:01
Вроде, всё просто. Реквизит регистра имееет составное значение, я хочу по нему объединить 2 временные таблицы, но получаю ругань еще на этапе конструктора "противоречивая связь" - это ведь из-за составного типа?
У меня по факту всё одного типа, и я в запросе написала
ВЫБОР
    КОГДА ДействиеСкидокНаценокСрезПоследних.Источник ССЫЛКА Справочник.СоглашенияСКлиентами
        ТОГДА ДействиеСкидокНаценокСрезПоследних.Источник
    ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СоглашенияСКлиентами.ПустаяСсылка)
КОНЕЦ
но это не помогло. А как же быть?
   Мисти
 
1 - 27.03.21 - 20:11
пишут, что можно руками дописать.
   RomanYS
 
2 - 27.03.21 - 20:15
При "объединить" нет никаких связей, только количество полей в запросах должно совпадать
   Мисти
 
3 - 27.03.21 - 20:26
Роман! Помогите! Ну, не идут у меня запросы. Регистр скидок, там период, соглашение, скидка и действует - не действует, нужно табличку со сроком действия "с" "по". Проще некуда! Одна временная таблица, где период "датаНач" - со статусом "действует", вторая - со статусом "не действует", там период - "дата кон". Вижу запросником обе таблицы, но они не соединяются в одну! Так и выдается первая таблица, где датаКон везде пустая.
Объединить?
   Мисти
 
4 - 27.03.21 - 20:27
Если просто объединить, то я получу ту же кучу как в регистре - в 1 строке начало действия. а в другой конец.
   Мисти
 
5 - 27.03.21 - 20:55
только по соглашению связь - соединяет, только по скидкам - тоже почему не соединяет и по скидкам и по соглашению?
   Мисти
 
6 - 27.03.21 - 20:56
ВТ_Действует.ДатаНач КАК ДатаНач,
    ВТ_Действует.Соглашение КАК Соглашение,
    ВТ_Действует.СегментПартнеров КАК СегментПартнеров
ИЗ
    ВТ_Действует КАК ВТ_Действует
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НеДействует КАК ВТ_НеДействует
        ПО ВТ_Действует.СкидкаНаценка = ВТ_НеДействует.СкидкаНаценка
            И ВТ_Действует.Соглашение = ВТ_НеДействует.Соглашение
   Мисти
 
7 - 27.03.21 - 21:47
дайте совет-то?
   hhhh
 
8 - 27.03.21 - 22:06
(7) вроде всё правильно. Давайте весь запрос, что ли.
   Мисти
 
9 - 27.03.21 - 22:15
ВЫБРАТЬ
    ДействиеСкидокНаценокСрезПоследних.Статус КАК Статус,
    ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка КАК СкидкаНаценка,
    ДействиеСкидокНаценокСрезПоследних.СегментПартнеров КАК СегментПартнеров,
    ДействиеСкидокНаценокСрезПоследних.Период КАК ДатаНач,
    ДействиеСкидокНаценокСрезПоследних.Источник КАК Источник,
    ВЫБОР
        КОГДА ДействиеСкидокНаценокСрезПоследних.Источник ССЫЛКА Справочник.СоглашенияСКлиентами
            ТОГДА ДействиеСкидокНаценокСрезПоследних.Источник
        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СоглашенияСКлиентами.ПустаяСсылка)
    КОНЕЦ КАК Соглашение
ПОМЕСТИТЬ ВТ_Действует
ИЗ
    РегистрСведений.ДействиеСкидокНаценок.СрезПоследних КАК ДействиеСкидокНаценокСрезПоследних
ГДЕ
    ДействиеСкидокНаценокСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДействияСкидок.Действует)
;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ_Действует.СкидкаНаценка КАК СкидкаНаценка,
    ВТ_НеДействует.ДатаКон КАК ДатаКон,
    ВТ_Действует.ДатаНач КАК ДатаНач,
    ВТ_Действует.Соглашение КАК Соглашение,
    ВТ_Действует.СегментПартнеров КАК СегментПартнеров
ИЗ
    ВТ_Действует КАК ВТ_Действует
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НеДействует КАК ВТ_НеДействует
        ПО ВТ_Действует.СкидкаНаценка = ВТ_НеДействует.СкидкаНаценка
            И ВТ_Действует.Соглашение = ВТ_НеДействует.Соглашение

УПОРЯДОЧИТЬ ПО
    Соглашение,
    СкидкаНаценка,
    СегментПартнеров,
    ДатаНач
   Мисти
 
10 - 27.03.21 - 22:17
как это ужасно - быть тупым программистом.
   Turku
 
11 - 27.03.21 - 22:23
(9) Ваш запрос в УТ11.4 работает нормально. Никакой ругани :-)
   Ненавижу 1С
 
12 - 27.03.21 - 22:27
(9) если на одно соглашение будут несколько раз включать/отключать одну скидку будет неправильно выводить
   Ненавижу 1С
 
13 - 27.03.21 - 22:30
(9) хотя... вы два раза берете срезы с противоположными условиями и пытаетесь их соединить, разве не пустой результат всегда будет?
   Ненавижу 1С
 
14 - 27.03.21 - 22:31
   Мисти
 
15 - 27.03.21 - 22:32
да, ругани нет, ругань в самом запросе, но руками написала - и проехало.
Но отчет не формаируется! В смысле - не добавляет конец к началу.
   Мисти
 
16 - 27.03.21 - 22:33
у меня формируется 2 таблицы, я их вижу, таблтца с началом действия и таблица с концом действия, с одникакоывми скидками и соглашениями. Почему я не могу в одну вевести?
   Мисти
 
17 - 27.03.21 - 22:34
(14) похоже, но у меня есть еще статус, поэтому должно быть проще.
   Мисти
 
18 - 27.03.21 - 22:37
01.01.2020 соглашение1 скидка2% действует
01.01.2020 соглашение2 скидка2% действует

31.01.2020 Срнлашение1 Скидка2% НеДействует
31.01.2020 Срнлашение2 Скидка2% НеДействует

Я хочу получить 
01.01.2020  31.01.2020 соглашение1 скидка2% 
01.01.2020  31.01.2020 соглашение2 скидка2%
   Ненавижу 1С
 
19 - 27.03.21 - 22:40
(18) почему-то я не верю, что вы получаете по одним и тем же наборам (источник, скидка) данные в обеих таблицах
посмотрите внимательнее
   Ненавижу 1С
 
20 - 27.03.21 - 22:40
(19) или у вас измерений больше чем два
   Мисти
 
21 - 27.03.21 - 22:41
я же выложила полеый текст. Гляньте, а? Типовая база!
   Мисти
 
22 - 27.03.21 - 22:42
Источник, скидка, в первой таблице - со статусом "действует", во второй - "не действует"
   Ненавижу 1С
 
23 - 27.03.21 - 22:46
(18) "соглашение1" и "Срнлашение1" это опечатка или реально разные данные?
   Мисти
 
24 - 27.03.21 - 22:47
Выводятся скидки, у которых нет конца!
А у которых конец есть - не выводятся вовсе.
Выкинула поле "Источник", вроде, оно и не мешалось, ну и ничего не изменилось.
   Мисти
 
25 - 27.03.21 - 22:47
(23) опечатка, конечно, это я набиваю отдельно сейчас пример
   Мисти
 
26 - 27.03.21 - 22:51
Я поняла, глобальная проблема. Они - реально, разные! Надо что-то сделать со срезом? Или как?
Я добралась до сути. У тех, у кого есть конец - выводится только конец, а у кого конца нет - выводится начало!
   Ненавижу 1С
 
27 - 27.03.21 - 22:56
(26) срез вам вообще не поможет, никак
   Мисти
 
28 - 27.03.21 - 22:57
если не срез, а просто регистр, то всё сейчас получилось, у меня пока по 1 периоду на каждую скидку, но я так понимаю, их может быть много! Что тогда? Выбрать дату начала максимальную и дату конца максимальную?
   Ненавижу 1С
 
29 - 27.03.21 - 22:57
попробуйте вот это:

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

СГРУППИРОВАТЬ ПО
    ДействиеСкидокНаценокДействует.Источник,
    ДействиеСкидокНаценокДействует.СкидкаНаценка,
    ДействиеСкидокНаценокДействует.Период
   novichok79
 
30 - 27.03.21 - 22:58
Жесть, конечно. Если запрос верен, проблема в данных, это должно быть очевидно. А там только боженька знает, что у вас в БД записано.
 
 Рекламное место пустует
   Ненавижу 1С
 
31 - 27.03.21 - 22:58
(28) берите за главную таблицу - действующие, они всегда идут раньше не действующих, а у недействующих МИНИМУМ периода из превышающих
   Мисти
 
32 - 27.03.21 - 23:02
да, я ж так и беоу - "действующие" - все.
Попробую Ваш запрос, спасибо!
   ДедМорроз
 
33 - 28.03.21 - 11:06
Если скидок и соглашений много, то должно быть непротиворечивое начало и конец.
Тогда ищем к каждому началу ближайший конец,тогда получится.
Если интервалы перекрываются,то выбираем покрывающий максимальный интервал.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.