Имя: Пароль:
1C
1С v8
Соединение в запросе
0 Csar
 
13.11.13
17:59
Всем привет. Подскажите как соединить две таблицы регистра бухгалтерии в запросе по Субконто3, при условии, что Субконто3 не у всех счетов имеется?
Примерный пример :)
ВЫБРАТЬ
ВЫБОР
ЕСЛИ ... ТОГДА ХозрасчетныйОстатки.Сумма
ИНАЧЕ ХозрасчетныйОстатки.Сумма - СуммаНДСпо6002счету.СуммаНДС
КОНЕЦ
ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В (&МассивСчетов), &ВидыСубконто, Организация = &Организация) КАК ХозрасчетныйОстатки
ЛЕВОЕ СОЕДИНЕНИЕ СуммаНДСпо6002счету КАК СуммаНДСпо6002счету
ПО ХозрасчетныйОстатки.Субконто3 = СуммаНДСпо6002счету.Ссылка


При запуске обработки прогоняются различные счета, но у некоторых недоступно Субконто3 и запрос отваливается на соединении.
1 Конфигуратор1с
 
13.11.13
18:01
(0) эм, а зачем соединять те счета по которым нет третьего субконто?
2 Csar
 
13.11.13
18:03
(1) необходим прогнать многие счета. А как же соединить при этом по выборочным счетам? Мне всего для одного субсчета нужжно соединение
3 Конфигуратор1с
 
13.11.13
18:03
(2) ну так отобрать только те счета по которым есть субконто3 ?
4 Csar
 
13.11.13
18:04
(1) в (0) представлен мягко говоря сильно упрощенный код запроса, а так он с вирт. таблицами и не очень читабельный
5 Конфигуратор1с
 
13.11.13
18:04
Просто если у него нет субконто то оно в  результирующую таблицу не попадет. смысл по нему данные отбирать?
6 Csar
 
13.11.13
18:04
(3) Но для всего запроса необходимо прогнать и по тем счетам, где нет Субконто3.
7 Csar
 
13.11.13
18:06
(5) да, там есть еще и ЕСТЬNULL(,0). Если нет Субконто, то надо подставлять ноль
8 Конфигуратор1с
 
13.11.13
18:06
(6) ну так во временную таблицу и заполнить если Субконто3 нет тогда поставить туда пустое значение и соединять не виртуальную таблицу а временную
9 Конфигуратор1с
 
13.11.13
18:06
(7) соединяй не с виртуальной таблицей а  с временной
10 Csar
 
13.11.13
18:08
(5) т.е. запрос разбить на два? В первом прогонять только те счета, где есть Субконто3, а во втором - все остальное и потом объединять результаты? Вроде это как то не очень)
11 Csar
 
13.11.13
18:10
Забыл сказать, что СуммаНДСпо6002счету - это Вирт. Таблица
12 viktor_vv
 
13.11.13
18:12
А в параметре ВидыСубконто у тебя что ?
13 Csar
 
13.11.13
18:12
(9) Спасибо за мысль. Я правильно ее понял в (10)?
14 Конфигуратор1с
 
13.11.13
18:37
(13) типа того)
15 Csar
 
13.11.13
18:40
ВЫБРАТЬ
    ОстатокПо63Счету.Субконто1,
    ОстатокПо63Счету.Субконто2,
    ОстатокПо63Счету.СуммаОстатокКт
ПОМЕСТИТЬ ОстатокПо63счету
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет63, , ) КАК ОстатокПо63Счету
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СУММА(СписаниеСРасчетногоСчетаРасшифровкаПлатежа.СуммаНДС) КАК СуммаНДС,
    СписаниеСРасчетногоСчетаРасшифровкаПлатежа.Ссылка.Ссылка
ПОМЕСТИТЬ СуммаНДСпо6002счету
ИЗ
    Документ.СписаниеСРасчетногоСчета.РасшифровкаПлатежа КАК СписаниеСРасчетногоСчетаРасшифровкаПлатежа
ГДЕ
    СписаниеСРасчетногоСчетаРасшифровкаПлатежа.Ссылка В
            (ВЫБРАТЬ
                ХозрасчетныйОстатки.Субконто3 КАК Субконто3
            ИЗ
                РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет6002, , Организация = &Организация) КАК ХозрасчетныйОстатки)

СГРУППИРОВАТЬ ПО
    СписаниеСРасчетногоСчетаРасшифровкаПлатежа.Ссылка.Ссылка
;

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

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто1,
    ХозрасчетныйОстатки.Счет,
    ВЫБОР
        КОГДА ХозрасчетныйОстатки.Счет.Вид = &Активный
                ИЛИ ХозрасчетныйОстатки.СуммаОстатокДт > 0
            ТОГДА &Дебиторская
        ИНАЧЕ &Кредиторская
    КОНЕЦ,
    СуммаНДСпо6002счету.СуммаНДС

УПОРЯДОЧИТЬ ПО
    ХозрасчетныйОстатки.Счет.Порядок,
    ХозрасчетныйОстатки.Субконто1.Наименование
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ОстатокПо63счету
16 rphosts
 
13.11.13
18:56
(15) зачем уничтожать, если по выполнении запроса все временные и так будут уничтожены?
17 viktor_vv
 
13.11.13
19:02
Чето мне имхается тебе надо было просто в ВидСубконто, если это массив видов, третий вид субконто поднять на вторую позицию и соединять в первоначальном

ПО ХозрасчетныйОстатки.Субконто2 = СуммаНДСпо6002счету.Ссылка
18 Csar
 
13.11.13
19:25
(17) так не получится, т.к. все счета - счета расчетов с контрагентами. А там второе субконто - договор. Интересует счет 60.02 - только для него нужно вычитать НДС. У этого счета третье субконто как раз документ расчетов.
19 viktor_vv
 
13.11.13
19:33
(18) Просто в итоговом запросе нигде не увидел использование Договора в Выбрать или в условиях, поэтому вполне возможно в ВидСубконто передать только два вида (Контаргент и ДокументРасчетов) и соединение и ЕстьNull .
Параметр Вид субконто в ВТ используется еще и для упорядочивания видов субконто.
20 Csar
 
13.11.13
23:54
(19) не совсем тебя понял. ВидСубконто используется в параметрах вирт. таблицы РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В (&МассивСчетов), &ВидыСубконто, Организация = &Организация) КАК ХозрасчетныйОстатки.
21 viktor_vv
 
14.11.13
00:32
(20) Не, это я неправ был.
22 Csar
 
14.11.13
09:04
Видимо единственный вариант это разбить один пробег по счетам на два пробега - один только по 6002, к которому надо привязать еще одно поле из другой таблицы по Субконто3, и второй пробег по остальным счетам.
23 Csar
 
14.11.13
10:54
Я упростил запрос до следующего:
ВЫБРАТЬ
    СУММА(СписаниеСРасчетногоСчетаРасшифровкаПлатежа.СуммаНДС) КАК СуммаНДС,
    СписаниеСРасчетногоСчетаРасшифровкаПлатежа.Ссылка.Ссылка
ПОМЕСТИТЬ СуммаНДСпо6002счету
ИЗ
    Документ.СписаниеСРасчетногоСчета.РасшифровкаПлатежа КАК СписаниеСРасчетногоСчетаРасшифровкаПлатежа
ГДЕ
    СписаниеСРасчетногоСчетаРасшифровкаПлатежа.Ссылка В
            (ВЫБРАТЬ
                ХозрасчетныйОстатки.Субконто3 КАК Субконто3
            ИЗ
                РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет6002, , Организация = &Организация
                    И Субконто3 ССЫЛКА Документ.СписаниеСРасчетногоСчета) КАК ХозрасчетныйОстатки)

СГРУППИРОВАТЬ ПО
    СписаниеСРасчетногоСчетаРасшифровкаПлатежа.Ссылка.Ссылка
;

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

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

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ОстатокПо63счету


Делаю запрос только по счету 60.02. И все равно вылазит ошибка, что не найдено Субконто3. Я проверил - в предопредененных значениях счета 60.02 Субконто3 нету, а по факту там сидит документ расчетов.
24 hhhh
 
14.11.13
11:00
(23) &ВидыСубконто проверьте
25 Csar
 
14.11.13
11:02
(24) В яблочко! Я уже весь мозг сломал! Спасибо большое!
26 Csar
 
14.11.13
11:02
+ (25) и я только что понял предыдущие посты касательно ВидовСубконто! Спасибо огромное!