|
запрос, две виртуальных таблицы соединить | ☑ | ||
---|---|---|---|---|
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) приёмчики??? :))))))))
Ааа, здесь в пятницах был хороший анекдот: ".....Ну вот, а то говорил: Я Катя!" :)))))) © А что значит (не въехал) "правда отчет улетел совсем не туда" ???? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |