Имя: Пароль:
1C
1С v8
подскажите с запросом, пожалуйста
,
0 mephistos
 
21.02.14
11:21
Доброго утра, ребята ! Всем лучей добра и счастья !

Сабж: делаю отчет, там 100500 вложенных, и куча таблиц соединяется. И вот в итоге идет полное соединение двух таблиц. И ситуация такая: в одной таблице остатки, грубо говоря, в другой - продажи.
В таблице остатков , скажем, 14 позиций, а в продажах - 15. Соединяются по полю номенклатуры.
И эта одна позиция не попадает в объединение в итоге. Полагаю, так как ее нет в остатках :(

но разве при полном соединении не все соединяется ? я просто думал, что Номенклатура1 будет NULL, а вторая - из второй таблицы, и данные присоединятся. ан нет ..

Надеюсь, я доступно объяснил свою тупость :)
1 el7cartel
 
21.02.14
11:23
(0) левое соединение по таблице где 15 позиций! при полном соединении получается произведение!
2 ДенисЧ
 
21.02.14
11:24
Наверное, что-то не так делаешь...
3 Fram
 
21.02.14
11:24
(0) вполне доступно
в разделе ГДЕ стоит условие которое срезает то что есть в продажах и нет в остатках
4 Alex375
 
21.02.14
11:24
Сложно судить без запроса. Ну или хотя бы той части где ты соединяешь 2 таблицы. Какое соединение делаешь? Или может быть ты их вообще через "ГДЕ" соединяешь? Или еще как-то? :)
5 mephistos
 
21.02.14
11:25
Секунду, приведу запрос. Только не пинайте, пожалуйста, сразу. Я только учусь ..:)
6 Жан Пердежон
 
21.02.14
11:25
или в выбор указывается подразделение из одной таблицы, а в твоем случае надо ЕСТЬNULL(...)
7 mephistos
 
21.02.14
11:27
Я просто сейчас чувствую, что меня обплюют, обоссут, отпинают, и скажут идти читать ЖКК, матчасть итд ..:)
8 mephistos
 
21.02.14
11:29
"ВЫБРАТЬ
                      |    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
                      |    ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток,
                      |    СУММА(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток) КАК Резерв,
                      |    ВложенныйЗапрос.ИнтернетСклад,
                      |    ВложенныйЗапрос.ДинамоСклад,
                      |    ВложенныйЗапрос.ПервомайскаяСклад,
                      |    ВложенныйЗапрос.МневникиСклад,
                      |    ВложенныйЗапрос.КоломенскаяСклад,
                      |    ВложенныйЗапрос.ВозвратыСклад,
                      |    ВложенныйЗапрос.АртикулПоставщика,
                      |    ВложенныйЗапрос.ПринцСклад,
                      |    ВложенныйЗапрос.ОптИтого,
                      |    ВложенныйЗапрос.КоличествоОборот,
                      |    ВложенныйЗапрос.ОсновнойСклад,
                      |    ВложенныйЗапрос.Интернет,
                      |    ВложенныйЗапрос.Розница,
                      |    ВложенныйЗапрос.Номенклатура1
                      |ИЗ
                      |    (ВЫБРАТЬ
                      |        СУММА(ВложенныйЗапрос.ИнтернетСклад) КАК ИнтернетСклад,
                      |        СУММА(ВложенныйЗапрос.ДинамоСклад) КАК ДинамоСклад,
                      |        СУММА(ВложенныйЗапрос.ПервомайскаяСклад) КАК ПервомайскаяСклад,
                      |        СУММА(ВложенныйЗапрос.МневникиСклад) КАК МневникиСклад,
                      |        СУММА(ВложенныйЗапрос.КоломенскаяСклад) КАК КоломенскаяСклад,
                      |        СУММА(ВложенныйЗапрос.ВозвратыСклад) КАК ВозвратыСклад,
                      |        СУММА(ВложенныйЗапрос.ПринцСклад) КАК ПринцСклад,
                      |        СУММА(ВложенныйЗапрос1.ОптИтого) КАК ОптИтого,
                      |        СУММА(ВложенныйЗапрос.ОсновнойСклад) КАК ОсновнойСклад,
                      |        СУММА(ВложенныйЗапрос2.Количество) КАК Интернет,
                      |        СУММА(ВложенныйЗапрос3.Розница) КАК Розница,
                      |        ВложенныйЗапрос.Номенклатура КАК Номенклатура,
                      |        ВложенныйЗапрос4.КоличествоОборот КАК КоличествоОборот,
                      |        ВложенныйЗапрос4.АртикулПоставщика КАК АртикулПоставщика,
                      |        ВложенныйЗапрос4.Номенклатура КАК Номенклатура1,
                      |        СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток
                      |    ИЗ
                      |        (ВЫБРАТЬ
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад2
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК ИнтернетСклад,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад3
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК ДинамоСклад,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад4
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК ПервомайскаяСклад,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад6
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК МневникиСклад,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад7
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК КоломенскаяСклад,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад8
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК ВозвратыСклад,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад5
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК ПринцСклад,
                      |            ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                      |            СУММА(ВЫБОР
                      |                    КОГДА ТоварыНаСкладахОстатки.Склад = &Склад1
                      |                        ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
                      |                    ИНАЧЕ 0
                      |                КОНЕЦ) КАК ОсновнойСклад,
                      |            СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
                      |        ИЗ
                      |            РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, ) КАК ТоварыНаСкладахОстатки
                      |        ГДЕ
                      |            ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура)
                      |        
                      |        СГРУППИРОВАТЬ ПО
                      |            ТоварыНаСкладахОстатки.Номенклатура) КАК ВложенныйЗапрос
                      |            ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |                Продажи.Номенклатура КАК Номенклатура,
                      |                СУММА(ВЫБОР
                      |                        КОГДА Продажи.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
                      |                            ТОГДА Продажи.Количество
                      |                        ИНАЧЕ 0
                      |                    КОНЕЦ) КАК ОптИтого
                      |            ИЗ
                      |                РегистрНакопления.Продажи КАК Продажи
                      |            ГДЕ
                      |                Продажи.Период МЕЖДУ &НачПериода И &КонПериода
                      |                И Продажи.ДокументПродажи.Контрагент В ИЕРАРХИИ(&ОПТ)
                      |            
                      |            СГРУППИРОВАТЬ ПО
                      |                Продажи.Номенклатура) КАК ВложенныйЗапрос1
                      |            ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура
                      |            ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |                Продажи.Номенклатура КАК Номенклатура,
                      |                СУММА(Продажи.Количество) КАК Количество
                      |            ИЗ
                      |                РегистрНакопления.Продажи КАК Продажи
                      |            ГДЕ
                      |                Продажи.Организация = &Дорофеев
                      |                И Продажи.Контрагент <> &Контр
                      |                И Продажи.Период МЕЖДУ &НачПериода И &КонПериода
                      |                И Продажи.Номенклатура В ИЕРАРХИИ(&Номенклатура)
                      |            
                      |            СГРУППИРОВАТЬ ПО
                      |                Продажи.Номенклатура) КАК ВложенныйЗапрос2
                      |            ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос2.Номенклатура
                      |            ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |                Продажи.Номенклатура КАК Номенклатура,
                      |                СУММА(Продажи.Количество) КАК Розница
                      |            ИЗ
                      |                РегистрНакопления.Продажи КАК Продажи
                      |            ГДЕ
                      |                Продажи.ДокументПродажи ССЫЛКА Документ.ОтчетОРозничныхПродажах
                      |                И Продажи.ДокументПродажи.КассаККМ В ИЕРАРХИИ(&СЗКассы)
                      |                И Продажи.Период МЕЖДУ &НачПериода И &КонПериода
                      |                И Продажи.Номенклатура В ИЕРАРХИИ(&Номенклатура)
                      |            
                      |            СГРУППИРОВАТЬ ПО
                      |                Продажи.Номенклатура) КАК ВложенныйЗапрос3
                      |            ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос3.Номенклатура
                      |            ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |                Продажи.Номенклатура КАК Номенклатура,
                      |                СУММА(Продажи.Количество) КАК КоличествоОборот,
                      |                НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента КАК АртикулПоставщика,
                      |                СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
                      |            ИЗ
                      |                РегистрНакопления.Продажи КАК Продажи
                      |                    ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                      |                    ПО Продажи.Номенклатура = НоменклатураКонтрагентов.Номенклатура
                      |                    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, ) КАК ТоварыНаСкладахОстатки
                      |                    ПО Продажи.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                      |            ГДЕ
                      |                Продажи.Период МЕЖДУ &НачПериода И &КонПериода
                      |                И Продажи.Номенклатура.ЭтоГруппа = ЛОЖЬ
                      |                И Продажи.Номенклатура В ИЕРАРХИИ(&Номенклатура)
                      |            
                      |            СГРУППИРОВАТЬ ПО
                      |                Продажи.Номенклатура,
                      |                НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента) КАК ВложенныйЗапрос4
                      |            ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос4.Номенклатура
                      |    
                      |    СГРУППИРОВАТЬ ПО
                      |        ВложенныйЗапрос.Номенклатура,
                      |        ВложенныйЗапрос4.КоличествоОборот,
                      |        ВложенныйЗапрос4.АртикулПоставщика,
                      |        ВложенныйЗапрос4.Номенклатура) КАК ВложенныйЗапрос
                      |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&КонПериода, ) КАК ТоварыВРезервеНаСкладахОстатки
                      |        ПО ВложенныйЗапрос.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                      |
                      |СГРУППИРОВАТЬ ПО                                                                                                                        
                      |    ВложенныйЗапрос.Номенклатура,
                      |    ВложенныйЗапрос.КоличествоОстаток,
                      |    ВложенныйЗапрос.ИнтернетСклад,
                      |    ВложенныйЗапрос.ДинамоСклад,
                      |    ВложенныйЗапрос.ПервомайскаяСклад,
                      |    ВложенныйЗапрос.МневникиСклад,
                      |    ВложенныйЗапрос.КоломенскаяСклад,
                      |    ВложенныйЗапрос.ВозвратыСклад,
                      |    ВложенныйЗапрос.АртикулПоставщика,
                      |    ВложенныйЗапрос.ПринцСклад,
                      |    ВложенныйЗапрос.ОптИтого,
                      |    ВложенныйЗапрос.КоличествоОборот,
                      |    ВложенныйЗапрос.ОсновнойСклад,
                      |    ВложенныйЗапрос.Интернет,
                      |    ВложенныйЗапрос.Розница,
                      |    ВложенныйЗапрос.Номенклатура1
                      |
                      |УПОРЯДОЧИТЬ ПО
                      |    Номенклатура
                      |{УПОРЯДОЧИТЬ ПО
                      |    Номенклатура.*}";


При связи ВложенногоЗапроса и ВложенногоЗапроса2 из второй таблицы не попадает позиция.
9 el7cartel
 
21.02.14
11:29
(7) никто ничего не скажет! все когда так начинали! спецами не рождаются, а становятся! а в том, что у тебя возникают проблемы, нет ничего опасного и стыдного!
10 огурец
 
21.02.14
11:29
ЕСТЬNULL(ВТ0.Номенклатура1,ВТ1.Номенклатура )

И точно самое для других полей:

ЕСТЬNULL(ВТ0.Сумма,0 )
11 mephistos
 
21.02.14
11:31
По отдельности запросы выбирают все, как надо. А как соединяю - бяда ..
12 огурец
 
21.02.14
11:34
(11) делаешь так:

    |        ЕСТЬNULL(ОборотыДтКт.Номенклатура, Остатки.Номнклатура) КАК Номенклатура,
    |        ЕСТЬNULL(ОборотыДтКт.Документ, Остатки.Документ) КАК Документ,
    |        СУММА(ЕСТЬNULL(Остатки.КоличествоНачальныйОстаток, 0)) КАК КоличествоНачальныйОстаток,
    |        СУММА(ЕСТЬNULL(Остатки.СуммаНачальныйОстаток, 0)) КАК СуммаНачальныйОстаток,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ПоступлениеКоличество, 0)) КАК ПоступлениеКоличество,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ПоступлениеСумма, 0)) КАК ПоступлениеСумма,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.СписаниеКоличество, 0)) КАК СписаниеКоличество,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.СписаниеСумма, 0)) КАК СписаниеСумма,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ПродажаКоличество, 0)) КАК ПродажаКоличество,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ПродажаСумма, 0)) КАК ПродажаСумма,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ЗатратыКоличество, 0)) КАК ЗатратыКоличество,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ЗатратыСумма, 0)) КАК ЗатратыСумма,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ПрочееКоличество, 0)) КАК ПрочееКоличество,
    |        СУММА(ЕСТЬNULL(ОборотыДтКт.ПрочееСумма, 0)) КАК ПрочееСумма,
    |        СУММА(ЕСТЬNULL(Остатки.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток,
    |        СУММА(ЕСТЬNULL(Остатки.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток
13 mephistos
 
21.02.14
11:39
(12) Идею понял, но не понял, как реализовать на практике. Я делаю по аналогии с тепм, что видел.
14 mephistos
 
21.02.14
11:40
(12) Синтаксически, я сейчас пишу выборку, потом полное соединение ПО и ниже в запросе следующую выборку, с которой соединяться таблицы будут.

Как сюда применить ? Суть я понял, если поля нет, то как раз NULL будет. А как синтаксически написать ?
15 огурец
 
21.02.14
11:42
(14) Если в одной таблице Номенклатура= Нулл, тогда берешь её из другой таблицы.

ЕСТЬNULL(ОборотыДтКт.Номенклатура, Остатки.Номнклатура)

Что не понятно?
16 mephistos
 
21.02.14
11:45
(15) Типа: |        
ЕСТЬNULL(ВложенныйЗапрос.Номенклатура,0) КАК Номенклатура, ?
17 огурец
 
21.02.14
11:58
(16) У тебя же сравнение

ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура

ЕСТЬNULL(ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос1.Номенклатура)
18 el7cartel
 
21.02.14
12:03
(16) нет! смотри на примере, функция ЕСТЬNULL(Сумма, 0) осуществляет проверку типа если пустое значение, то сумма равна 0! и вот вместо нуля ты может подставить абсолютно любое значение! и в твоем случае получается, что ты проверяешь значение из первого запроса и если она пустое, то его ты заменяешь значением из второго запроса!
19 kinno
 
21.02.14
13:01
использую ОБЪЕДИНИТЬ ВСЕ