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


1С:Предприятие ::

Метки: 

Помогите с запросом!

Я
   Мисти
 
15.08.18 - 16:20
Суть такая. из регистра берутся данные по площади - по договору и по доп. соглашению. При этом доп. соглашения может не быть вовсе! У меня при этом получается, что по доп. соглашению площадь 0. А мне нужно как-то отделить случаи, когда доп. соглашение есть и по нему 0 от случая, когда его нет вовсе. Это же по смыслу противоположно!!!
 
 
   Buster007
 
1 - 15.08.18 - 16:21
свой вариант?
   Buster007
 
2 - 15.08.18 - 16:21
ЕСТЬ NULL тебе может помочь, думаю
   XLife
 
3 - 15.08.18 - 16:22
есть борщ и нет борща...
   Мисти
 
4 - 15.08.18 - 16:22
ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Площадь КАК ПлощадьПоЗаключению,
    0 КАК ПлощадьПоДопСоглашению,
    АР_СтавкиСрезПоследних.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ДокументЗаключения
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ЗаключениеДоговораАренды) КАК АР_СтавкиСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Договор,
    АР_СтавкиСрезПоследних.Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды,
    0,
    АР_СтавкиСрезПоследних.Площадь,
    АР_СтавкиСрезПоследних.Регистратор
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ДополнительноеСоглашение) КАК АР_СтавкиСрезПоследних
;
Начало там такое
   olegves
 
5 - 15.08.18 - 16:23
(0) Соглашения нет, когда ПолеСоглашения IS NULL при левом соединении договора с допсоглашением
   Fedor-1971
 
6 - 15.08.18 - 16:24
0 КАК ПлощадьПоДопСоглашению = поставь не 0, а -1
   Мисти
 
7 - 15.08.18 - 16:24
(5) "нэ умэю" как говорила моя двухлетняя племянница
   XLife
 
8 - 15.08.18 - 16:26
(7) >"нэ умэю"
грузинка?
   Мисти
 
9 - 15.08.18 - 16:27
нет, просто маленькая была и говорила только те слова, которые получались четко. А что не получалось - не говорила вовсе.
   Fedor-1971
 
10 - 15.08.18 - 16:33
(9) Не соскакивай, чем -1 для отличия не нравится?
Дальше при перебое результата ПлощадьПоДопам = 1;, а в цикле ПлощадьПоДопам += Выборка.ПлощадьПоДопСоглашению
 
 Рекламное место пустует
   Мисти
 
11 - 15.08.18 - 16:34
Там нет никаких циклов, там скд!
Мне как в (5) надо дорисовать!
Кто-нибудь может мой запрос дорисовать?
   Fedor-1971
 
12 - 15.08.18 - 16:46
(11) Например так:
ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Площадь КАК ПлощадьПоЗаключению,
    isNull(АР_СтавкиДоп.Площадь, "Так нету допа") КАК ПлощадьПоДопСоглашению,
    АР_СтавкиСрезПоследних.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ДокументЗаключения
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ЗаключениеДоговораАренды) КАК АР_СтавкиСрезПоследних
  Левое соединение РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ДополнительноеСоглашение) КАК АР_СтавкиДоп
ПО
    АР_СтавкиСрезПоследних.Договор = АР_СтавкиДоп.Договор,
    АР_СтавкиСрезПоследних.Услуга = АР_СтавкиДоп.Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды = АР_СтавкиДоп.ОбъектАренды

С тебя 200 рупий на благотворительность, отдашь кому посчитаешь нужным
   Сергиус
 
13 - 15.08.18 - 17:21
(0)Добавь новое поле, по которому будешь определять признак. Если соединение с доп.соглашением NULL, оно ИСТИНА, иначе всегда ЛОЖЬ
   Мисти
 
14 - 15.08.18 - 17:52
(12) Так не работает.
В (13) описано (12), и я теоретически это понимаю, но никак не могу изобразить.
   Fedor-1971
 
15 - 15.08.18 - 17:59
(14) что не работает? проверь консолью запросов
И смотри на условия связи
    АР_СтавкиСрезПоследних.Договор = АР_СтавкиДоп.Договор,
   И АР_СтавкиСрезПоследних.Услуга = АР_СтавкиДоп.Услуга,
   И АР_СтавкиСрезПоследних.ОбъектАренды = АР_СтавкиДоп.ОбъектАренды

Возможно нужно добавить
     И НЕ АР_СтавкиСрезПоследних.Регистратор= АР_СтавкиДоп.Регистратор

т.е. к себе договор не является допом
   Мисти
 
16 - 15.08.18 - 18:01
Запрос кривой получается, я не понимаю, как поправить.
   Fedor-1971
 
17 - 15.08.18 - 18:05
(16) что именно кривое? показывай как поправила
   Мисти
 
18 - 15.08.18 - 18:07
Предположим, первая таблица у меня Д1 У1 100
                                   д2 у2 50
А вторая д2 У2 10
Их объединение дает
Д1 У1 100 0
д2 У2  50 10

Мне бы еще признак1 нулл
           признак2 Истина
Как это сделать?
   Мисти
 
19 - 15.08.18 - 18:08
Как-как - вставила кусочек выше в свой запрос.
   Мисти
 
20 - 15.08.18 - 18:09
Не, ну явно не так как написано, потому что "поместить" относится к 1 запросу, а доп.соглашение - ко второму
   Fedor-1971
 
21 - 15.08.18 - 18:21
Гонишь.

Если вставить просто так вот это:
ПО
    АР_СтавкиСрезПоследних.Договор = АР_СтавкиДоп.Договор,
    АР_СтавкиСрезПоследних.Услуга = АР_СтавкиДоп.Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды = АР_СтавкиДоп.ОбъектАренды

Будет ошибка, т.к. нет "И"

Вот это:
    isNull(АР_СтавкиДоп.Площадь, "Так нету допа") КАК ПлощадьПоДопСоглашению,

К твоему 100, Так нету допа

Давай Зяма, показывай запрос
   Мисти
 
22 - 15.08.18 - 18:22
Я тыщу переведу на благотворительность, только напиши мне этот кусочек полностью!
   Fedor-1971
 
23 - 15.08.18 - 18:23
(18)
Выбор
 Когда АР_СтавкиДоп.Площадь есть Null тогда Истина Иначе Ложь Конец Как ПризнакНаличияДопов

Небось isNull(АР_СтавкиДоп.Площадь, 0) так сделала?

Результат покажи, блин. Домой пора идти.
   Fedor-1971
 
24 - 15.08.18 - 18:24
Ломается как булка
   Fedor-1971
 
25 - 15.08.18 - 18:33
Если что, завтра подмогну. Про тышчу - сама напросилась.
   Мисти
 
26 - 16.08.18 - 14:42
ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Площадь КАК Площадь
ПОМЕСТИТЬ ОбъектыСДопСоглашениями
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних(, Регистратор ССЫЛКА Документ.АР_ДополнительноеСоглашение) КАК АР_СтавкиСрезПоследних
;

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

ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Площадь КАК ПлощадьПоЗаключению,
    0 КАК ПлощадьПоДопСоглашению,
    АР_СтавкиСрезПоследних.Регистратор КАК Регистратор,
    NULL КАК ПризнакДопа
ПОМЕСТИТЬ ВТ_ДокументЗаключения
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ЗаключениеДоговораАренды) КАК АР_СтавкиСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Договор,
    АР_СтавкиСрезПоследних.Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды,
    0,
    АР_СтавкиСрезПоследних.Площадь,
    АР_СтавкиСрезПоследних.Регистратор,
    ВЫБОР
        КОГДА АР_СтавкиСрезПоследних.Площадь ЕСТЬ NULL
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ДополнительноеСоглашение) КАК АР_СтавкиСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ ОбъектыСДопСоглашениями КАК ОбъектыСДопСоглашениями
        ПО АР_СтавкиСрезПоследних.Услуга = ОбъектыСДопСоглашениями.Услуга
            И АР_СтавкиСрезПоследних.ОбъектАренды = ОбъектыСДопСоглашениями.ОбъектАренды
            И АР_СтавкиСрезПоследних.Договор = ОбъектыСДопСоглашениями.Договор
;
   Мисти
 
27 - 16.08.18 - 14:44
Пока получилось ровно не то, что нужно.
В запросе не произошло объединение по площадям - отдельно идут по заключению, отдельно по доп. соглашению, ну и НЕТ стоит как раз у доп. соглашений
   Мисти
 
28 - 16.08.18 - 15:04
Ну, т.е. у меня во втором запросе, где "объединить" на 1 поле больше - "есть ли доп", поэтому с первым и не объединяется.
   Fedor-1971
 
29 - 16.08.18 - 15:06
(27) мощно, я думаю, не твоё это писать запросы. От слова совсем.
Окажи себе благотворительную помощь на выделенные 1000 руб. купи себе книжку, ЛЮБУЮ художественную книжку, и читай её до дыр. Запросы оставь в покое.

Ты хоть мозг включала или, так на автопилоте "Авось что-то исправлю и может быть заработает"? Тебе написали целый запрос, повторю в твоём варианте:
ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Площадь КАК Площадь
ПОМЕСТИТЬ ОбъектыСДопСоглашениями
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних(, Регистратор ССЫЛКА Документ.АР_ДополнительноеСоглашение) КАК АР_СтавкиСрезПоследних
;

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


ВЫБРАТЬ
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Площадь КАК ПлощадьПоЗаключению,
    isNull(ОбъектыСДопСоглашениями.Площадь, "НЕТ допа") КАК ПлощадьПоДопСоглашению,
    АР_СтавкиСрезПоследних.Регистратор КАК Регистратор,
    ВЫБОР
        КОГДА ОбъектыСДопСоглашениями.Площадь ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ
 КАК ПризнакДопа
ПОМЕСТИТЬ ВТ_ДокументЗаключения
ИЗ
    РегистрСведений.АР_Ставки.СрезПоследних({(&КонецПериода)}, Регистратор ССЫЛКА Документ.АР_ЗаключениеДоговораАренды) КАК АР_СтавкиСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ ОбъектыСДопСоглашениями КАК ОбъектыСДопСоглашениями
        ПО АР_СтавкиСрезПоследних.Услуга = ОбъектыСДопСоглашениями.Услуга
            И АР_СтавкиСрезПоследних.ОбъектАренды = ОбъектыСДопСоглашениями.ОбъектАренды
            И АР_СтавкиСрезПоследних.Договор = ОбъектыСДопСоглашениями.Договор

   Fedor-1971
 
30 - 16.08.18 - 15:15
29+ не надо ничего "объединить все", левое соединение к твоему основному договору прилепит ВСЕ доп соглашения и поля
    АР_СтавкиСрезПоследних.Договор КАК Договор,
    АР_СтавкиСрезПоследних.Услуга КАК Услуга,
    АР_СтавкиСрезПоследних.ОбъектАренды КАК ОбъектАренды,
    АР_СтавкиСрезПоследних.Площадь КАК ПлощадьПоЗаключению,
    АР_СтавкиСрезПоследних.Регистратор КАК Регистратор,

в выборке будут одинаковыми (!!!), т.к. взяты из основного договора, 
а ПлощадьПоДопСоглашению разные, согласно каждого доп.соглашения. Если допа 2, то и строки в результирующей выборке будет 2 (это для информации, вдруг что-то пойдёт не так)
   Мисти
 
31 - 16.08.18 - 15:19
У меня на запросы мозг не включается. У меня географический кретинизм, а это из той же области.
   МимохожийОднако
 
32 - 16.08.18 - 15:25
Дождись пятницы. Помогут.
   Fedor-1971
 
33 - 16.08.18 - 15:26
(31) Не путай "Не хочу что-то понимать" и "Лень вникнуть и  сделать, на форуме напишут" с проблемами в ориентировании на местности.

Запрос замечательно тестится в консоли запросов и сразу видно какие данные выбрались и как соединились, нет тут географии, а полный набор данных прямо перед глазами, даже головой вертеть не надо.
 
 
   Fedor-1971
 
34 - 16.08.18 - 15:27
(32) к стати, как вариант, но только для понедельника - вторника.
   Мисти
 
35 - 16.08.18 - 15:33
Вот я и вижу, что не то получается.
   Мисти
 
36 - 16.08.18 - 15:34
И это еще не так просто посмотреть! 48 тыщ строк.
   Fedor-1971
 
37 - 16.08.18 - 15:49
(36) при минимальном желании находим договор с допами и в консоли запросов
Где АР_СтавкиСрезПоследних.Договор КАК Договор = &НужныйДоговор


Ай как сложно, просто жуть.
Скажи лень? Не с красным ли дипломом из универа вышла? (знавал я таких кадров, без понимания, но красно-дипломированных)
   Мисти
 
38 - 16.08.18 - 15:54
Ага, с красным. Я много чего умею и обычно хорошо соображаю, но не в запросах.
   Мисти
 
39 - 16.08.18 - 16:12
Палучилось!!!
Там вообще-то было 3 запроса, и я точно поняла, в чем причина, и писала не я.
Куда переводить? Я обычно - "на политику" - Шлосбергу, "детям" - в фондпр, ну и иногда просто - кто очень просит.
https://vk.com/schaaa - вот этому - давно собиралась, но всё никак.
   Fedor-1971
 
40 - 16.08.18 - 16:26
(39) Раз выбрала кому, просто помоги.



Список тем форума
Рекламное место пустует Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует