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

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

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

УПОРЯДОЧИТЬ ПО
    Соглашение,
    СкидкаНаценка,
    СегментПартнеров,
    ДатаНач
10 Мисти
 
27.03.21
22:17
как это ужасно - быть тупым программистом.
11 Turku
 
27.03.21
22:23
(9) Ваш запрос в УТ11.4 работает нормально. Никакой ругани :-)
12 Ненавижу 1С
 
гуру
27.03.21
22:27
(9) если на одно соглашение будут несколько раз включать/отключать одну скидку будет неправильно выводить
13 Ненавижу 1С
 
гуру
27.03.21
22:30
(9) хотя... вы два раза берете срезы с противоположными условиями и пытаетесь их соединить, разве не пустой результат всегда будет?
14 Ненавижу 1С
 
гуру
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%
19 Ненавижу 1С
 
гуру
27.03.21
22:40
(18) почему-то я не верю, что вы получаете по одним и тем же наборам (источник, скидка) данные в обеих таблицах
посмотрите внимательнее
20 Ненавижу 1С
 
гуру
27.03.21
22:40
(19) или у вас измерений больше чем два
21 Мисти
 
27.03.21
22:41
я же выложила полеый текст. Гляньте, а? Типовая база!
22 Мисти
 
27.03.21
22:42
Источник, скидка, в первой таблице - со статусом "действует", во второй - "не действует"
23 Ненавижу 1С
 
гуру
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
Я поняла, глобальная проблема. Они - реально, разные! Надо что-то сделать со срезом? Или как?
Я добралась до сути. У тех, у кого есть конец - выводится только конец, а у кого конца нет - выводится начало!
27 Ненавижу 1С
 
гуру
27.03.21
22:56
(26) срез вам вообще не поможет, никак
28 Мисти
 
27.03.21
22:57
если не срез, а просто регистр, то всё сейчас получилось, у меня пока по 1 периоду на каждую скидку, но я так понимаю, их может быть много! Что тогда? Выбрать дату начала максимальную и дату конца максимальную?
29 Ненавижу 1С
 
гуру
27.03.21
22:57
попробуйте вот это:

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

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