Имя: Пароль:
1C
1С v8
запрос, две виртуальных таблицы соединить
,
0 obama
 
02.12.14
21:27
помогите пожалуйста начинающему.
есть 2 запроса, каждый выдает то, что нужно..
дальше хочу правильно объединить их

в одном запросе получаю список клиентов с адресами
во втором запросе обороты по 51 счету за весь период

дальше хочу, чтобы новый запрос выдал полную таблицу второго запроса (без задвоений строк или уменьшений строк) но добавил поля с адресами клиентов.

Условие соединения менял много раз, это лишь один из вариантов.
Суть в том, что запрос 2 фильтруется там где есть клиенты, а мне как раз фильтр не нужен, а нужна полная таблица..

ВЫБРАТЬ
    КонтактнаяИнформация.Объект КАК Объект,
    КонтактнаяИнформация.Представление,
    КонтактнаяИнформация.Вид,
    КонтактнаяИнформация.Объект.ИНН,
    КонтактнаяИнформация.Объект.КПП
ПОМЕСТИТЬ вт1
ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
    КонтактнаяИнформация.Вид.Наименование = "Юридический адрес"
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    вт1.Представление,
    вт1.ОбъектИНН,
    вт1.ОбъектКПП,
    вт2.Период,
    вт2.Регистратор,
    вт2.СчетДт,
    вт2.СчетКт,
    вт2.СубконтоДт1,
    вт2.СубконтоКт1,
    вт2.Организация,
    вт2.СуммаОборот
ИЗ
    вт2 КАК вт2
        ЛЕВОЕ СОЕДИНЕНИЕ вт1 КАК вт1
        ПО (ВЫБОР
                КОГДА вт2.СчетДт.Ссылка = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                        ИЛИ вт2.СчетКт.Ссылка = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                    ТОГДА вт2.СчетДт.Ссылка = вт1.Объект.Ссылка
                            ИЛИ вт2.СчетКт.Ссылка = вт1.Объект.Ссылка
            КОНЕЦ)
1 KUBIK
 
02.12.14
21:33
(0) А что мещает вытащить лево соединить с вложенным запросом к РС контактнаяинформация?
2 obama
 
02.12.14
21:46
(1) мешает отсутствие опыта )

попробовал вот так, строк в 2-3 раза больше..

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетДт,
    ХозрасчетныйОборотыДтКт.СчетКт,
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоКт1,
    ХозрасчетныйОборотыДтКт.Организация,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ХозрасчетныйОборотыДтКт.Период,
    ХозрасчетныйОборотыДтКт.Регистратор,
    ВложенныйЗапрос.Представление
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            КонтактнаяИнформация.Объект КАК Объект,
            КонтактнаяИнформация.Вид КАК Вид,
            КонтактнаяИнформация.Представление КАК Представление
        ИЗ
            РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация) КАК ВложенныйЗапрос
        ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка
                ИЛИ ХозрасчетныйОборотыДтКт.СубконтоКт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка)
3 Зэни Эль Мутабос
 
02.12.14
21:51
Для начала
> вт2.СчетКт.Ссылка = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

СчетКт - замени на субконто.
4 Зэни Эль Мутабос
 
02.12.14
21:52
> ХозрасчетныйОборотыДтКт.СчетДт.Код = "51"
>             ИЛИ ХозрасчетныйОборотыДтКт.СчетКт.Код = "51"

За такое ихбивают, если уж знаешь: ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

То и обращайся к счету как к предопределенному значению справочника.
5 KUBIK
 
02.12.14
21:53
(2) А где условие на вид контактной информации?
6 Зэни Эль Мутабос
 
02.12.14
21:55
> вт2.СчетДт.Ссылка =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

Почему ты вообще сравниваешь с пустойссылкой?

Должно быть так:

вт2.СубконтоДт1.Ссылка ССЫЛКА Справочник.Контрагенты
или
вт2.СубконтоКт1.Ссылка ССЫЛКА Справочник.Контрагенты
7 obama
 
02.12.14
21:56
(4) да это пока все мелочи ))  тут суть не работает...
8 obama
 
02.12.14
21:57
(5) не стал пока добавлять, спешил показать результат..

он мне строки добавляет при соединении.. а я лишь пытаюсь добавить поля.  и не знаю пока как.
9 Зэни Эль Мутабос
 
02.12.14
21:59
> дальше хочу, чтобы новый запрос выдал полную таблицу второго запроса


Тогда должно быть правое соединение, сейчас ты получаешь полную таблицу с адресами.
10 obama
 
02.12.14
22:01
ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетДт,
    ХозрасчетныйОборотыДтКт.СчетКт,
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоКт1,
    ХозрасчетныйОборотыДтКт.Организация,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ХозрасчетныйОборотыДтКт.Период,
    ХозрасчетныйОборотыДтКт.Регистратор,
    ВложенныйЗапрос.Представление
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            КонтактнаяИнформация.Объект КАК Объект,
            КонтактнаяИнформация.Вид КАК Вид,
            КонтактнаяИнформация.Представление КАК Представление
        ИЗ
            РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация) КАК ВложенныйЗапрос
        ПО (ВложенныйЗапрос.Объект.Ссылка = ХозрасчетныйОборотыДтКт.СчетДт.Ссылка
                ИЛИ ВложенныйЗапрос.Объект.Ссылка = ХозрасчетныйОборотыДтКт.СчетКт.Ссылка)
11 Зэни Эль Мутабос
 
02.12.14
22:02
> без задвоений строк или уменьшений строк


В запросе
    КонтактнаяИнформация.Объект КАК Объект,
    КонтактнаяИнформация.Представление,
    КонтактнаяИнформация.Вид,
    КонтактнаяИнформация.Объект.ИНН,
    КонтактнаяИнформация.Объект.КПП

Делаешь группировку по полю ОБъект, остальные реквизиты (по хорошему достаточно, только "Представление", остальные ты и так однозначно определил) ставишь под МАКСИМУМУМ(), чтобы не было дублей объектов.
12 Зэни Эль Мутабос
 
02.12.14
22:04
(9) - Я ошибся, все правильно левое соединение.
13 KUBIK
 
02.12.14
22:05
(8) Я так понимаю суть задачи: вытащить контрагентов с адресами и их обороты по субсчету 51.01 за период, так?

Поюзай консоль запросов, все ж вроде просто ваяется
14 Зэни Эль Мутабос
 
02.12.14
22:06
(10) ВложенныйЗапрос.Объект.Ссылка = ХозрасчетныйОборотыДтКт.СубконтоД1.Ссылка
                ИЛИ ВложенныйЗапрос.Объект.Ссылка = ХозрасчетныйОборотыДтКт.СубконтоК1.Ссылка

И желательно в Регстр Хозрасчета, передать ВидСубконто,
15 obama
 
02.12.14
22:07
(13) да я подозреваю, что просто когда опыта вагон ))  
в (10) запрос дублей не делает, но и представление перестал показывать
16 Зэни Эль Мутабос
 
02.12.14
22:08
(15) > запрос дублей не делает, но и представление перестал показывать

Ты пытаешься план счетов соединить со справочником контрагентов.
17 obama
 
02.12.14
22:19
(16) замечания то я понимаю.. и вроде пытаюсь исправить.
вот только представление пока пустое, дублей строк нету

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетДт,
    ХозрасчетныйОборотыДтКт.СчетКт,
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоКт1,
    ХозрасчетныйОборотыДтКт.Организация,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ХозрасчетныйОборотыДтКт.Период,
    ХозрасчетныйОборотыДтКт.Регистратор,
    ВложенныйЗапрос.Представление,
    ВложенныйЗапрос.Объект.Ссылка
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            КонтактнаяИнформация.Объект КАК Объект,
            КонтактнаяИнформация.Вид КАК Вид,
            КонтактнаяИнформация.Представление КАК Представление
        ИЗ
            РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация) КАК ВложенныйЗапрос
        ПО (ВЫБОР
                КОГДА ХозрасчетныйОборотыДтКт.СчетДт.Ссылка = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                        ИЛИ ХозрасчетныйОборотыДтКт.СчетКт.Ссылка = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                    ТОГДА ХозрасчетныйОборотыДтКт.СубконтоДт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка
                            ИЛИ ХозрасчетныйОборотыДтКт.СубконтоКт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка
            КОНЕЦ)
18 hhhh
 
02.12.14
22:42
(17) ну правильно, СчетДт не равен справочнику Контрагенты. Когда у вас будет счет равняться справочнику, тогда представление появится.
19 obama
 
03.12.14
15:23
(18) уже все перепробовал.   любое положительное сравнение субконто в оборотах приводит к увеличению строк в выходной таблице ((


обороты 1 операция
62  51 100р клиент1

контакт 1
клиент1 адрес1

а на выходе имею  в 2-3 раза больше строк

62  51 100р клиент1 адрес1
62  51 100р клиент1  пусто
62  51 100р клиент1 адрес1
20 floody
 
03.12.14
16:02
Если 2, 3 адреса введено в РС "КИ", как хочешь чтобы они вывелись в одну строку?
21 hhhh
 
03.12.14
16:20
(19) какой запрос на данный момент?
22 obama
 
03.12.14
16:29
(21) попробовал уже наоборот.. КИ основным, а обороты вложенным. вышло строк меньше , ну это и понятно, не всех операциях в корреспонденции с 51 были клиенты..

пока рабочий вариант со вложенным запросом к КИ.
имеем реально 1 строку с адресом
так же 1 строку с операцией
но при соединение вылазит 2-3 строки.

(20) я в КИ делаю условие только по юр адресу, тут не во всех примерах есть. я уже сам запутался какой же правильный путь должен быть. вроде все просто и ничего не получается.
23 obama
 
03.12.14
16:50
пусть и примитивно, но пока рабочий вариант..  

одна проблема в нем  - когда юридический адрес у клиента не заполнен, он не отображает инн и кпп, но их можно даже из операций вытащить, не страшно.

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.Период,
    ХозрасчетныйОборотыДтКт.Регистратор,
    ХозрасчетныйОборотыДтКт.СчетДт,
    ХозрасчетныйОборотыДтКт.СчетКт,
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоКт1,
    ХозрасчетныйОборотыДтКт.Организация,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ВложенныйЗапрос.Объект.ИНН,
    ВложенныйЗапрос.Объект.КПП,
    ВложенныйЗапрос.Представление
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            КонтактнаяИнформация.Объект КАК Объект,
            КонтактнаяИнформация.Представление КАК Представление
        ИЗ
            РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        ГДЕ
            КонтактнаяИнформация.Вид.Наименование = "Юридический адрес") КАК ВложенныйЗапрос
        ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка
                ИЛИ ХозрасчетныйОборотыДтКт.СубконтоДт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка)
ГДЕ
    (ХозрасчетныйОборотыДтКт.СчетДт.Код = "51"
            ИЛИ ХозрасчетныйОборотыДтКт.СчетКт.Код = "51")
24 obama
 
03.12.14
16:54
(23) поправил
ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка
                ИЛИ ХозрасчетныйОборотыДтКт.СубконтоКт1.Ссылка = ВложенныйЗапрос.Объект.Ссылка)
25 hhhh
 
03.12.14
17:06
(24) вот так правильней

ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1 = ВложенныйЗапрос.Объект
                ИЛИ ХозрасчетныйОборотыДтКт.СубконтоКт1 = ВложенныйЗапрос.Объект)


не надо везде Ссылка фигачить - это очень сильно тормозит запрос. В 10 раз, а может и в 20 раз. Сейчас вы не замечаете, а если большая база, очень заметно.
26 HEKPOH
 
03.12.14
17:20
(23) соединение виртуальной таблицы с вложенным запросом... Расстрелять!
27 obama
 
03.12.14
17:24
(26)  нормально для начинающего )))
напиши на будущее как правильно?
28 HEKPOH
 
03.12.14
17:29
(27) для начинающего - нормально. согласен)
но этот запрос - мина замедленного действия.
с виртуальной таблицей бороться, думаю, не стоит, но от вложенного запроса здесь избавиться нужно однозначно
29 obama
 
03.12.14
17:36
(28) вложенный запрос пошел с подачи (1)  но предполагаю я его неправильно интерпретировал?  хотя задача решилась вроде.
в любом случае запрос к операциям нужен за весь период и сократить таблицу не удастся
30 obama
 
03.12.14
17:36
(25) спасибо поправил. не знал, что можно без ссылок.
31 HEKPOH
 
03.12.14
17:41
(30) не можно, а нужно без ссылок)
32 KUBIK
 
03.12.14
17:56
(28) Может оно и так, но все просто и быстро работает:


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

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстаткиИОбороты.Регистратор.Контрагент,
    КИ.Адрес

УПОРЯДОЧИТЬ ПО
    ХозрасчетныйОстаткиИОбороты.Регистратор.Контрагент.Наименование


Параметры: Счет, Тип и Вид - выбрать соответствуюшие предопределенные (БП 2.0)
33 obama
 
03.12.14
18:40
(32) оо.. спасибо за подсказанные приемчики!
правда отчет улетел совсем не туда,  группировка не требуется, но я допилил (23)
34 KUBIK
 
03.12.14
23:45
(33) приёмчики??? :))))))))

Ааа, здесь в пятницах был хороший анекдот:

".....Ну вот, а то говорил: Я Катя!" :)))))) ©


А что значит (не въехал) "правда отчет улетел совсем не туда" ????