|
Как обойтись без запроса в цикле? | ☑ | ||
---|---|---|---|---|
0
Mary01
07.08.13
✎
10:59
|
Нужно сделать простой отчет в БП 8, заранее извинюсь за банальные вопросы, но пока работала на нетиповой конфе, некоторые основы забылись.
Итак, нужен отчет: по контрагентам вывести сальдо на нач. и кон. периода и обороты между сч. 62 и 51, 62 и 50. Это верхняя группировка. А при ее раскрытии нужно показать счета, которые выставлены за этот период. 1. По таблице Хозрасчетный.ОстаткиИОбороты мы не можем понять, с какими счетами были обороты. поэтому придется присоединять Хозрасчетный.ОборотыДтКт. Вопрос - какое соединение правильное: левое или "объединить все"? Другой вопрос: если в Хозрасчетный.ОборотыДтКт задать условие СчетДт=50,51, СчетКт=62, то как получить обратное - Дт50,51Кт62? Присоединить еще один Хозрасчетный.ОборотыДтКт? 2. Не понимаю как собрать все данные в одном запросе. Допустим, один подзапрос будет содержать данные из регистра БУ, а второй подзапрос - из документов "Счет". Как их соединять? Левое, "объединить все"? В любом случае в каждой строке будут лишние данные, которые при группировке еще и суммируются. А делать запрос к бухитогам, а потом в цикле выборки делать запрос к документам каждого контрагента как-то неправильно. |
|||
1
1Cv8_accepted
07.08.13
✎
11:00
|
Ну да, СОЕДИНЕНИЕ.
|
|||
2
Mary01
07.08.13
✎
11:01
|
(1) какое именно?
|
|||
3
mzelensky
07.08.13
✎
11:04
|
(0) Фото хорошее.
Соединение - это горизонтальная стыковка таблиц. Объединение - это вертикальная стыковка таблиц. Если в уме тяжело сконструировать, берись за листок и ручку. Рисуешь по отдельности таблички с колонками, из которых будешь брать данные, а потом находишь "связи" (общие поля, по которым их можно стыкануть) и по этим связям производишь стыковку. Когда на листке получится некая схема, которая будет тебя устраивать - берись за консоль отчета :) |
|||
4
dk
07.08.13
✎
11:08
|
(3) +1
Или разбери на простом примере Есть: Иванов ... ... ... петров ... ... ... еще есть счет 1 ... ... ... счет 2 ... ... ... Хочу получить таблицу вида ... ... ... |
|||
5
samozvanec
07.08.13
✎
11:11
|
чет я не понял. вот провел я счет... его могут не оплатить, да и я сам могу его и не выставлять. как он связан с движениями регистра?
|
|||
6
Mary01
07.08.13
✎
11:14
|
Контр1 | НачОст 500 | Об50 100 | Об51 200 | КонОст 200
Сч1 | СуммаВсего | СуммаОплаченная Сч2 | СуммаВсего | СуммаОплаченная Сч3 | СуммаВсего | СуммаОплаченная Контр2 | НачОст 400 | Об50 200 | Об51 100 | КонОст 100 Сч4 | СуммаВсего | СуммаОплаченная Сч5 | СуммаВсего | СуммаОплаченная Сч6 | СуммаВсего | СуммаОплаченная ... примерно это надо получить. Счет имеет 2 суммы - общая, которую выставили контрагенту, и та, которую он оплатил (это нетиповой реквизит) |
|||
7
Mary01
07.08.13
✎
11:15
|
(5)
в том-то и дело, что не связан. нужно просто показать, что он есть |
|||
8
mzelensky
07.08.13
✎
11:23
|
(7) Имеется счет1 на сумму 100 и Счет2 на сумму95 (итого 195), контр оплатил 200. Как будет выглядеть оплата? Вы оплату разносите по конкретным счетам или у вас сквозной учет?
|
|||
9
Mary01
07.08.13
✎
11:28
|
(8) учет сквозной.
оплата будет выглядеть так: сч1 100, сч2 95, сальдо 5 (точнее, -5, т.к. переплата |
|||
10
Kuzmich123
07.08.13
✎
11:29
|
(0) в оборотах по 62 могут участвовать и другие счета => сальдо на конец по Вашему отчету не будет соответствовать оборотам
|
|||
11
samozvanec
07.08.13
✎
11:31
|
(9) а если будет еще 5 невыставленных счетов, про которые вообще забыли и выставлять не собираются? в чем фишка такого сальдо?
да и остатки и обороты нафиг не нужна, лучше 2 раза взять таблицу остатков |
|||
12
Peltzer
07.08.13
✎
11:38
|
Я бы прикрутил свой РН для учёта неоплаченных счетов.
И механизм закрытия неоплаченных счетов, которые не будут оплачивать. Навроде штатных УППшных Заявок на расходование денежных средств. |
|||
13
samozvanec
07.08.13
✎
11:39
|
(12) + и заявки на закрытие неоплаченных счетов, и РН для учета необработанных заявок на закрытие неоплаченных счетов. отличный отчет получится)
|
|||
14
Mary01
07.08.13
✎
11:43
|
(11) да, вот именно, мы увидим, что сальдо есть, а счет даже не выставлен, а значит надо срочно выставлять.
почему обороты не нужны? а как мы поймем, по банку или кассе оплачен счет? В разрезе регистратора? |
|||
15
Mary01
07.08.13
✎
11:47
|
12,13 - красиво, но нужно обойтись без изменений в конфигурации. кроме того, даже если такой РН сделать, все равно в отчет требуется выводить сальдо по регистру бухгалтерии
|
|||
16
Peltzer
07.08.13
✎
11:53
|
Как у вас заполняется поле Оплачено в счете?
Документ ПлПорВходящее изменяет Счета на оплату? |
|||
17
Mary01
07.08.13
✎
11:59
|
(16) Вручную. Нет.
|
|||
18
samozvanec
07.08.13
✎
12:01
|
(14) а как это понять по оборотам таблицы ОстаткиИОбороты? я говорил не про ОборотыДтКт
|
|||
19
mzelensky
07.08.13
✎
12:07
|
(17) Клевая система автоматизации бизнес-процесса :)
|
|||
20
Mary01
07.08.13
✎
12:08
|
(19) не требуют - не делаем!
|
|||
21
Peltzer
07.08.13
✎
12:10
|
"раскрытии нужно показать счета, которые выставлены за этот период"
Т.е. если выставлен счет прошлым месяцем - то он не должен попадать? |
|||
22
samozvanec
07.08.13
✎
12:10
|
(19) давно не видел типовые. что, сейчас уже документы изменяют документы?
|
|||
23
Mary01
07.08.13
✎
12:10
|
(18) не, по ОстаткиИОбороты - никак, отсюда только остатки вытянуть
|
|||
24
samozvanec
07.08.13
✎
12:10
|
(23) вот поэтому лучше возьми 2 таблицы Остатки и таблицу ОстаткиДтКт
|
|||
25
mzelensky
07.08.13
✎
12:10
|
(20) продолжайте наблюдения....
|
|||
26
mzelensky
07.08.13
✎
12:11
|
(22) бывает и такое, но обычно документы делают движения, которые в последствии могу влиять на работу других документов.
|
|||
27
Mary01
07.08.13
✎
12:12
|
(21) нет. но сальдо на начало периода мы должны увидеть, их брать из Остатков по регистру БУ
|
|||
28
Mary01
07.08.13
✎
12:13
|
(24) запуталась. можно подробнее - что откуда брать
|
|||
29
samozvanec
07.08.13
✎
12:15
|
(28) очепятка). ты хотела брать ОстаткиИОбороты и ОборотыДтКт. я предложил взять 2 таблицы Остатки и, как и в твоем варианте, ОборотыДтКт.
|
|||
30
Mary01
07.08.13
✎
12:16
|
(29) а зачем вторая табл. Остатки?
|
|||
31
samozvanec
07.08.13
✎
12:17
|
(30) тебе же и на начало и на конец надо?
|
|||
32
Mary01
07.08.13
✎
12:22
|
(31) а ну точно! а почему тогда нельзя взять 1 раз ОстаткиИОбороты, там остатки на начало и конец есть
|
|||
33
samozvanec
07.08.13
✎
12:26
|
(32) это тяжелая таблица. даже если ты возьмешь по отдельности 2 таблицы остатков и 1 таблицу оборотов и их соединишь, будет работать быстрее, чем если взять просто ОстаткиИОбороты
|
|||
34
Mary01
07.08.13
✎
12:28
|
(33) спасибо! очень полезно это знать.
|
|||
35
Mary01
07.08.13
✎
12:29
|
(29) то есть, верно я понимаю, берем эти 3 таблицы и соединяем через "объединить все"?
|
|||
36
samozvanec
07.08.13
✎
12:30
|
(35) неверно. возьми консоль и поэкспериментируй, так проще понять. возьми любые пару таблиц, и соедини сначала так, а потом по-другому
|
|||
37
Peltzer
07.08.13
✎
12:37
|
ВЫБРАТЬ
|
|||
38
Peltzer
07.08.13
✎
12:37
|
Осталось присобачить остатки на начало и конец.
|
|||
39
Mary01
07.08.13
✎
12:52
|
(38) ого, вы даже код написали. спасибо, сейчас попробую
|
|||
40
Mary01
07.08.13
✎
14:33
|
(36) попробовала. лучше всего "объединить все".
если взять 2 таблицы Остатки, чтобы получить из одной ост. на начало. а из др. - на конец, то при правом или левом соединении мы можем не получить часть данных из присоединяемой таблицы. а при полном соединении придется брать контрагентов из обеих таблиц (будет 2 колонки с контрагентами), что меня смущает. при "объединить все" получим все как надо: одна колонка контрагент, колонка нач. ост. и колонка кон. ост. я права? |
|||
41
Mary01
07.08.13
✎
14:41
|
samozvanec, вы где?
|
|||
42
Beduin
07.08.13
✎
14:43
|
(0) Пойдешь ко мне работать?
|
|||
43
Mary01
07.08.13
✎
14:45
|
(42) если буду искать вакансию, обязательно вспомню про вас!
|
|||
44
Sorm
07.08.13
✎
14:46
|
(40) Неверно. При полном соединении возьмутся данные из двух таблиц, но столбец контрагентов останется один. Просто в начальном(или конечном) остатке и некоторых записей будет Null
|
|||
45
Shurjk2
07.08.13
✎
14:48
|
Судя по темам и фото, это бородатый админ который подъедается 1с-ком:)
|
|||
46
Beduin
07.08.13
✎
14:50
|
(45) Разнообразия тоже важны)
|
|||
47
Mary01
07.08.13
✎
14:54
|
(44) да, разумеется это так, но мне же надо вывести наименование к-агента, а как я его выведу, если оно Null?
|
|||
48
Mary01
07.08.13
✎
14:54
|
(45) как понять "подъедается"?
|
|||
49
Shurjk2
07.08.13
✎
14:57
|
(48) Подрабатывает.
|
|||
50
samozvanec
07.08.13
✎
14:58
|
(40) что в каких колонках не зависит от того, соединяешь ты, или объединяешь. важно то, что при объединении ты получишь начальное и конечное сальдо в разных строках, и я даже не представляю, как ты их будешь выводить потом. поэтому именно здесь - соединение.
хороший пример объединения в (37), это как раз твоя таблица оборотов. в одних строках - с кассой, в других - с банком. вот берешь ее и 2 таблицы остатков, и все это соединяешь. я думаю, полное соединение тебе подойдет. |
|||
51
Shurjk2
07.08.13
✎
14:59
|
(46) Экий вы затейник.
|
|||
52
samozvanec
07.08.13
✎
15:01
|
+(50) и везде суешь isnull().
например, поле контрагент вполне себе выбирается в одну колонку isnull(ОстаткиНаНачало.КакойТамНомерУСубконтоКонтрагент, ОстаткиНаКонец.КакойТамНомерУСубконтоКонтрагент) КАК Контрагент |
|||
53
samozvanec
07.08.13
✎
15:02
|
+(52) Т.е. если по контрагенту будет только остаток на конец, то из остатков на начало придет NULL. ну и наоборот. и этот NULL меняется на имеющееся значение
|
|||
54
Sorm
07.08.13
✎
15:04
|
(47) Оно-то как раз будет:) Остатки на начало или конец возможно будут Null.
Рекомендую http://www.sql-ex.ru для понимания запросов. |
|||
55
samozvanec
07.08.13
✎
15:06
|
тоже порекомендую)
говорят, ролики Павла Чистова о запросах очень хороши. сам не смотрел, но наслышан. |
|||
56
Mary01
07.08.13
✎
15:11
|
(53) поняла. а чем этот способ лучше чем Объединить все, если результат один? лучше в плане быстродействия или еще чего-то?
|
|||
57
samozvanec
07.08.13
✎
15:13
|
(56) результат разный будет. см (50)
|
|||
58
Shurjk2
07.08.13
✎
15:15
|
(50) Количество строк в результате очень зависит от того объединять или соединять таблицы.
|
|||
59
samozvanec
07.08.13
✎
15:16
|
короче на пальцах. две таблицы
1) КакЗовут СколькоЖретНаОбедДошираков Вова 1 Петя 2 Галя 4 Вася 2 2) КакЗовут СколькоВесит Вася 70 Галя 90 Максим 60 |
|||
60
samozvanec
07.08.13
✎
15:18
|
После полного соединения:
КакЗовут СколькоЖретНаОбедДошираков СколькоВесит Вова 1 Петя 2 Галя 4 90 Вася 2 70 Максим 60 |
|||
61
Mary01
07.08.13
✎
15:19
|
(57) точно, прсто у меня результат был не упорядочен, а когда упорядочила, то увидела, что каждый к-агент по 2 раза!
|
|||
62
Shurjk2
07.08.13
✎
15:19
|
(60) После полного должно быть в результирующей таблице 12 строк:)
|
|||
63
Mary01
07.08.13
✎
15:19
|
(60) это с isnull, да?
|
|||
64
samozvanec
07.08.13
✎
15:20
|
после объединения:
КакЗовут СколькоЖретНаОбедДошираков СколькоВесит Вова 1 Петя 2 Галя 4 Вася 2 Вася 70 Галя 90 Максим 60 |
|||
65
samozvanec
07.08.13
✎
15:21
|
(62) с чего бы?
(63) это если применить isnull к полю КакЗовут, так же, как в (52). в остальных колонках пустые значения - как раз null |
|||
66
Shurjk2
07.08.13
✎
15:22
|
(65) Что такое полное объединение? Это скалярное произведение двух таблиц.
|
|||
67
Shurjk2
07.08.13
✎
15:23
|
(64) А если это сгруппировать то получаем нормальную таблицу и без всяких налов и задвоений.
|
|||
68
samozvanec
07.08.13
✎
15:23
|
(62) не, скалярное произведение будет, если ты вообще не укажешь условие соединения, или соединишь по ИСТИНА
|
|||
69
Shurjk2
07.08.13
✎
15:24
|
(68) А где там условие? и какое оно было?
|
|||
70
samozvanec
07.08.13
✎
15:25
|
(69) каюсь) условие было ПО Таб1.КакЗовут = Таб2.КакЗовут
|
|||
71
Shurjk2
07.08.13
✎
15:25
|
Это хорошо когда всего одно измерение в регистре а когда их несколько то легко получаем всяческие задвоения.
|
|||
72
Mary01
07.08.13
✎
15:26
|
(71) я по 2 измерениям делаю: Организация и Субконто1 (к-агенты)
|
|||
73
samozvanec
07.08.13
✎
15:27
|
(71) задвоение получишь, если строка одной таблицы по условию подойдет к двум строкам другой. гадкая ситуевина
|
|||
74
Mary01
07.08.13
✎
15:27
|
(45) не спешите с выводами, я 1с-ник но иногда приходится и админить )
|
|||
75
Sorm
07.08.13
✎
15:27
|
(66) :) Полное объединение - это что?:) Если "полное соединение" - то нет, если объединение - то опять же нет:)
|
|||
76
Shurjk2
07.08.13
✎
15:28
|
(74) А насчет бороды как?
|
|||
77
Mary01
07.08.13
✎
15:28
|
(73) это как? у нас один начальный остаток по каждому контрагенту и один конечный.
|
|||
78
Mary01
07.08.13
✎
15:29
|
(76) не выросла
|
|||
79
samozvanec
07.08.13
✎
15:29
|
(75) СОЕДИНИТЬ ВСЕ)
|
|||
80
Shurjk2
07.08.13
✎
15:29
|
(79) Сильно:)
|
|||
81
samozvanec
07.08.13
✎
15:31
|
(77) никак, не даст тебе виртуальная таблица две строки с одинаковыми измерениями. норм все.
|
|||
82
Shurjk2
07.08.13
✎
15:33
|
(81) В бухгалтерском то регистре? ну ну.
|
|||
83
Mary01
07.08.13
✎
15:34
|
(54) зарегистрировалась там.
|
|||
84
Shurjk2
07.08.13
✎
15:34
|
(78) А слабо фотку поменять, чтоб развеять мои сомнения.
|
|||
85
samozvanec
07.08.13
✎
15:34
|
+(81) хотя таблица ОстаткиИОбороты очень даже даст. есть там параметр у таблицы, МетодДополнения, по умолчанию - ДвиженияИГраницыПериода.
(82) таблица Остатки не даст |
|||
86
Shurjk2
07.08.13
✎
15:36
|
(85) Там еще пара измерений есть, все немного посложней чем с едоками доширака. Поэтому советую использовать объединение - с группировкой - так надежней будет.
|
|||
87
Sorm
07.08.13
✎
15:38
|
(83) Порешай задачи начального этапа, и вопросов по запросам у тебя больше не будет:)
|
|||
88
samozvanec
07.08.13
✎
15:50
|
(86) не усложняй. не кошерно это. и опять же, если в другой таблице подойдут две записи, то точно такое же задвоение получишь
|
|||
89
Mary01
07.08.13
✎
15:56
|
(84) да пожалуйста
|
|||
90
Shurjk2
07.08.13
✎
15:56
|
(88) Неа задвоения не будет. А чем именно некошерно?
|
|||
91
Shurjk2
07.08.13
✎
15:57
|
(89) Непоменялась:(
|
|||
92
Mary01
07.08.13
✎
15:59
|
(91) да (
что я делаю не так? |
|||
93
Shurjk2
07.08.13
✎
15:59
|
(92) Сейчас вообще исчезла:)
|
|||
94
Mary01
07.08.13
✎
16:00
|
Модераторы, почему не меняется фото?
|
|||
95
samozvanec
07.08.13
✎
16:05
|
(90) че это не будет? строки сгруппируются по измерениям, ресурсы сложатся - разницы никакой. некошерно - в таком примере только субъективно читабельность. если взять таблицы посложнее, то ты просто не сгруппируешь после объединения то, что можно соединить.
|
|||
96
Shurjk2
07.08.13
✎
16:09
|
(95) Откуда там двойное количество будет?
|
|||
97
Shurjk2
07.08.13
✎
16:10
|
+(96) И че это я вдруг не сгруппирую?
|
|||
98
samozvanec
07.08.13
✎
16:17
|
(96) во второй таблице 2 строки
Вася 2 Вася 2 после объединения и группировки с первой будет Вася 70 4 (97) потому что у тебя в одной таблице, например, выбирается куча измерений, а из второй только КакЗовут. остальные поля будут null. Как его будешь группировать? |
|||
99
samozvanec
07.08.13
✎
16:19
|
+(98) а теперь представь, что тебе надо не просто присоединить сколько жрет вася, а только в случае, если вася весит больше 80 кг. как тогда группировать?
|
|||
100
Shurjk2
07.08.13
✎
16:25
|
(98) Не будет такого, либо реально остаток по васе 4 а не 2.
|
|||
101
Shurjk2
07.08.13
✎
16:26
|
(98) Не будет у меня NULL- ов если я не буду всякие соединения использовать, просто по определению не будет.
|
|||
102
Shurjk2
07.08.13
✎
16:27
|
(99) Сначала выберу, сгрупирую потом уже отберу.
|
|||
103
samozvanec
07.08.13
✎
16:41
|
(101) у тебя в другой таблице тупо полей этих нет, что там будет, если не null?
(102) соединение оптимальнее че за глупый спор вообще? надо соединять - соединяй, надо объединять - объединяй) |
|||
104
Shurjk2
07.08.13
✎
16:50
|
(103) Что задам то и будет:) Чем оптимальней так и не понял.
|
|||
105
Shurjk2
07.08.13
✎
16:51
|
Я спор поддерживал только с целью новую фотку посмотреть:) но судя по всему ее так и не будет:(
|
|||
106
samozvanec
07.08.13
✎
16:54
|
(104) соединение по условию быстрее отработает чем группировка(которая, кстати, не отработает :) ) и отбор. что задашь? пустую ссылку? вариантов не особо
(105) есть такое) чето она не торопится |
|||
107
Mary01
07.08.13
✎
17:12
|
она не грузится. когда я ее добавляю, откуда-то возникает старая фотка. где модераторы? как задать вопрос?
|
|||
108
baza1978
07.08.13
✎
17:22
|
(0) а зачем "обходится без запроса в цикле"? Деньги заказчики платят за результат, как это происходит никого не волнует. Если скорость нормальная, делай как тебе удобнее.. За алгоритмические изыски ни один заказчик бабла платить не будет.
|
|||
109
Mary01
07.08.13
✎
17:27
|
(108) я люблю чтобы было правильно и красиво
|
|||
110
Shurjk2
07.08.13
✎
17:32
|
(107) Печаль:(
|
|||
111
Shurjk2
07.08.13
✎
17:39
|
Может на почту тогда.
|
|||
112
Mary01
07.08.13
✎
17:41
|
111 неа
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |