Имя: Пароль:
1C
1С v8
Соединение 2х таблиц в запросе
,
0 4esz
 
17.10.13
22:54
Народ подскажите как правильно соединить 2 таблицы? В ВТОстатки пристствует Товар1 и в РеализацияТоваровУслугТовары присутствует Товар 1, но в результирующей таблице КоличествоОстаток всегда пустое.
подозреваю что это из за того что субконто1 имеет составной тип даных. Как ограничить его только справочником номенклатура?

ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Товар,
    СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ВТОстатки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНач, Счет = &Счет, , Субконто2 = &ВыбСклад) КАК ХозрасчетныйОстатки

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    РеализацияТоваровУслугТовары.СтавкаНДС КАК СтавкаНДС,
    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
    СУММА(ВТОстатки.КоличествоОстаток) КАК КоличествоОстаток,
    СУММА(ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.Цена * (1 + &Процент / 100) КАК ЧИСЛО(15, 2))) КАК Сумма,
    СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС,
    ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Цена * (1 + &Процент / 100) КАК ЧИСЛО(15, 2)) КАК Цена
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ЛЕВОЕ СОЕДИНЕНИЕ ВТОстатки КАК ВТОстатки
        ПО РеализацияТоваровУслугТовары.Номенклатура = ВТОстатки.Товар
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И РеализацияТоваровУслугТовары.Ссылка.Организация = &Организация
    И НЕ РеализацияТоваровУслугТовары.Ссылка.Проведен

СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
    РеализацияТоваровУслугТовары.Цена,
    РеализацияТоваровУслугТовары.СтавкаНДС

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Цена
1 Apokalipsec
 
17.10.13
23:12
Если ограничить то ТИПЗНАЧЕНИЯ ТИП.
2 4esz
 
17.10.13
23:15
(1) как это сделать?
пробовал вот так

ВЫБОР
        КОГДА ХозрасчетныйОстатки.Субконто1 ССЫЛКА Справочник.Номенклатура
            ТОГДА ХозрасчетныйОстатки.Субконто1
    КОНЕЦ КАК Товар,

результат прежний
3 4esz
 
17.10.13
23:18
так тоже не катит

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

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто1
4 4esz
 
17.10.13
23:49
и так тоже не работает

ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Товар,
    СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ВТОстатки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНач, Счет = &Счет, , Субконто2 = &ВыбСклад) КАК ХозрасчетныйОстатки
ГДЕ
    ТИПЗНАЧЕНИЯ(ХозрасчетныйОстатки.Субконто1) = ТИП(Справочник.Номенклатура)

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто1
;
5 4esz
 
18.10.13
00:01
вопрос снят
первый вариант - рабочий
6 hhhh
 
18.10.13
00:21
можно

ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Товар,
    ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоОстаток
ПОМЕСТИТЬ ВТОстатки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНач, Счет = &Счет, , Субконто2 = &ВыбСклад) КАК ХозрасчетныйОстатки

потому что РегистрБухгалтерии.Хозрасчетный.Остатки уже само сгруппировывает. По второму разу не надо одно и то же группировать.
7 azernot
 
18.10.13
00:48
Естьnull используй для полей из левой таблицы
8 4esz
 
18.10.13
01:10
(6) спасибо учту
(7) не понял левая таблица заполнена по полям расходной накладной, расходная без указания товара не сохранится, зачем использовать Естьnull ?
9 ИсчадиеADO
 
18.10.13
01:14
(8),
(7) имел ввиду СУММА(ЕСТЬNULL(ВТОстатки.КоличествоОстаток,0)) КАК КоличествоОстаток
10 ИсчадиеADO
 
18.10.13
01:14
привет, кстати
11 4esz
 
18.10.13
01:16
(10) Здорово
понял, испралюсь :-)
спасибо
12 ИсчадиеADO
 
18.10.13
01:17
зы: результат соединения не будет зависеть от того, составной тип данных в таблице или нет. А вообще на вирт. таблицу остатков хорошо бы еще условия по субконто наложить
13 ИсчадиеADO
 
18.10.13
01:19
хотя не, тут условие по субконто влияние не будет оказывать, это если бы через точку обращался Субконто1.НДС
14 ИсчадиеADO
 
18.10.13
01:23
и реализации лучше сначала в отдельную временную тч выбрать, т.к. у тебя сначала 2 левых соединения идет на все реализации, а только потом отбор
15 4esz
 
18.10.13
01:23
(12) так оно же там есть, вот это Субконто2 = &ВыбСклад
а насчет естьNULL щас глянул в первом подзапросе который заполняет ВТОстатки нет нулей вообще и сколько не пробовал там не появляются записи с пустым полем КоличествоОстаток
16 ИсчадиеADO
 
18.10.13
01:29
да я имел ввиду 3ий параметр, вид субконто. Но это только когда идет обращение к субконто через точку потом. Т.ч. забей

А какие там типы данных разные? Справочник Номенклатура и..?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший