|
Правильный алгоритм запроса | ☑ | ||
---|---|---|---|---|
0
LivingStar
12.09.13
✎
12:52
|
Как правильнее построить данную выборку.
1. Нужно получить СуммуОплаты по трем документам РасходныйКассовыйОрдер, ПлатежноеПоручениеИсходящее, ВозвратыПоставщику. То есть это сумма реквизита СуммаДокумента этих документов. 2. Выборка по документу ПоступлениеТоваровУслуг с суммойДокумента отсортированная по убыванию. 3. Затем нужно уменьшать (погашать) СуммуОплаты, суммами документов ПоступлениеТоваровУслуг. 4. Как нехватило СуммыОплаты для гашения сумм ПоступленияТоваровУслуг, идут сверка даты документа и даты договора, допустимого числа дней задолженности. Этот пункт не самый важный так как уже есть накопленная Суммаоплаты выборка и идет просто её перебор. Думаю как лучше это сделать в запросе??? Пакетные запросы врят ли подойдут? |
|||
1
LivingStar
12.09.13
✎
12:57
|
Думаю использовать вложенный запрос.
|
|||
2
Godofsin
12.09.13
✎
12:58
|
думаю объединение с "-" на суммы
|
|||
3
Maxus43
12.09.13
✎
12:59
|
ОТкуда ты узнаешь что Платёжкой хаплатили за конкретный документ ПТУ?
|
|||
4
cw014
12.09.13
✎
12:59
|
Правильный вариант - обращение к регистру накопления "Взаиморасчеты с контрагентами"
|
|||
5
Maxus43
12.09.13
✎
13:01
|
Без ведения договоров по документам расчета задача не решается
|
|||
6
LivingStar
12.09.13
✎
13:12
|
(3) Тз так поставили. Свалить сумму трех документов в кучу, это будет сумма оплаты. И ею гасить суммы ПоступленияТоваровУслуг, пока её хватит. Вот пока думаю как это сделать, делаю Вложенным запросом.
(4) Нужно будет его рассмотреть, то есть из него выбирать суммы этих трех документов? (5) Возможно правильно вести договора по документам расчетов, но мне не понятно как это. Если в данной базе это не делается может это по каким то причинам. Или потому что не продуманно. Пока это смутно представляю. |
|||
7
Тролль главный
12.09.13
✎
13:13
|
у запросов нет алгоритмов, запросы пишутся на декларативном, а не алгоритмическом языке
|
|||
8
LivingStar
12.09.13
✎
13:17
|
Вверху будет сумма, но она общая, так как выборка будет строиться на какую то дату, не пойму это что всегда нужно будет таскать с собой эту сумму????
ВЫБРАТЬ ВложенныйЗапрос.Ссылка КАК Ссылка, СУММА(ВложенныйЗапрос.СуммаДокумента) КАК СуммаДокумента ИЗ (ВЫБРАТЬ ЕСТЬNULL(РасходныйКассовыйОрдер.СуммаДокумента, 0) КАК СуммаДокумента, РасходныйКассовыйОрдер.Ссылка КАК Ссылка ИЗ Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЕСТЬNULL(ПлатежноеПоручениеИсходящее.СуммаДокумента, 0), ПлатежноеПоручениеИсходящее.Ссылка ИЗ Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЕСТЬNULL(ВозвратТоваровПоставщику.СуммаДокумента, 0), ВозвратТоваровПоставщику.Ссылка ИЗ Документ.ВозвратТоваровПоставщику КАК ВозвратТоваровПоставщику) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.СуммаДокумента <> 0 СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Ссылка УПОРЯДОЧИТЬ ПО Ссылка ИТОГИ ПО ОБЩИЕ |
|||
9
LivingStar
12.09.13
✎
13:32
|
Беру итоговую сумму (8), сейчас выбираю Поступление товаров услуг и начинаю гасить !!! Не пойму до конца только выборка по документам будет всегда вестись с самого начала???
|
|||
10
catena
12.09.13
✎
13:44
|
(9)Минимальная дата документа и будет датой возникновения задолженности:
ВЫБРАТЬ
|
|||
11
LivingStar
12.09.13
✎
13:59
|
(10) Спасибо большое, завтра поразбираю )
|
|||
12
LivingStar
13.09.13
✎
05:51
|
(10) Оригинальная у вас выборка Катена, но долги все с минусом идут. И на сколько она корректна? Пока не могу сообразить...
|
|||
13
catena
13.09.13
✎
05:57
|
(12)Долги все с минусом, потому что условие такое:
где тзОплаты.СуммаПлатежа - тзРаспределениеДолга.СуммаДокументаДО - тзРаспределениеДолга.СуммаДокумента <0 Убрать это условие и посмотреть, как распределяется задолженность по документам. |
|||
14
LivingStar
13.09.13
✎
05:58
|
(10) Вы этим реально пользуетесь? Или по этому топику накидали запрос?
Я хотел взять итог выборки (8) и ею погашать суммы выбранных документов ПоступлениеТоваровУслуг. |
|||
15
catena
13.09.13
✎
06:03
|
(14)Нет, не пользуюсь. Я ж разве заставляю, каждый волен самостоятельно выбирать способ наступать на грабли.
|
|||
16
LivingStar
13.09.13
✎
06:05
|
(15) Да просто я пока не разобрался с запросом и пытался узнать, применимо ли это у вас.
|
|||
17
LivingStar
13.09.13
✎
06:07
|
(15) А документы РасходныйКассовыйОрдер и ВозвратПоставщику вы не ичитываете?
|
|||
18
LivingStar
13.09.13
✎
06:12
|
(15) Катена а можно узнать что такое СуммаДокументаДО ?
|
|||
19
catena
13.09.13
✎
06:29
|
(17)Я специально выделила отдельно таблицы оплат и покупок, можете их формировать по своему усмотрению, сохраняя общую структуру.
(18) Это накопленный итог сумм до даты документа. |
|||
20
LivingStar
13.09.13
✎
06:32
|
(19) так в таблице оплат у вас не учитываются документы РасходныйКассовыйОрдер и ВозвратПоставщику, это принципиально?
|
|||
21
catena
13.09.13
✎
06:36
|
(20)Еще раз: я сделала пример. Добавьте в таблицу оплат всё, что вам надо и запрос будет так же работать. Я показала принцип, а уж адаптировать его под себя придется самостоятельно, извините.
|
|||
22
LivingStar
13.09.13
✎
06:39
|
(21) Ясно спасибо вам, понял!!!
|
|||
23
LivingStar
13.09.13
✎
07:18
|
(21) Можно ещё вопрос? В тзОплаты вы берёте Сумму из табличной части документа, а СуммаДокумента для этого не подойдет?
|
|||
24
catena
13.09.13
✎
07:32
|
(23)Подойдет.
|
|||
25
LivingStar
13.09.13
✎
08:14
|
(24) Ок!
|
|||
26
LivingStar
13.09.13
✎
12:48
|
(24) Катена, можно ещё вопрос, если он вам не осложнит ситуацию?!
В тзРаспределениеДолга, 2 вложенных запроса, тч тзПокупки и тзПокупки1 в первом не используется группировка вообще, а во втором используется и суммирование Сумма(СуммаДокумента) - это значит что в первом вложенном запросе всегда будет просто сумма документа, а во втором эта сумма будет накапливаться? |
|||
27
LivingStar
13.09.13
✎
12:52
|
(26) или, не, ошибочное мнение, группировка и суммирование только в тзРаспределениеДолга, где связанны 2 таблицы, а в тзПокупки и тзПокупки1 нет группировки вообще ....
|
|||
28
catena
13.09.13
✎
13:02
|
(26)Там нет вложенных запросов. Там тзПокупки соединяется сама с собой по дате, т.е. для каждой строки тзПокупки мы собираем все строки из той же тзПокупки с меньшей датой. И суммируем.
т.е. тзПокупки.СуммаДокумента - сумма текущего документа СУММА(тзПокупки1.СуммаДокумента) - это сумма всех предыдущих документов. |
|||
29
LivingStar
17.09.13
✎
08:32
|
(28) большое спасибо за ответ, продолжаю разбираться с алгоритмом!!!
|
|||
30
LivingStar
17.09.13
✎
08:52
|
Сейчас разбираюсь с итоговым запросом. Выясняю какие секреты он скрывает, как настраеваем, какую информацию выводит...
|
|||
31
LivingStar
17.09.13
✎
08:55
|
не вижу суммы оплат, только итоговая (...
|
|||
32
LivingStar
17.09.13
✎
11:34
|
Вопрос в том, может ли запрос в (10).
Показывать как гасится сумма оплаты суммами покупки может нужно какие группировки убрать, пока в выборке не могу отследить какую либо связь, уловил это только в одной строке, потом все размыто становится... |
|||
33
LivingStar
17.09.13
✎
11:44
|
а вот, вот это важно в итоговом запросе:
УПОРЯДОЧИТЬ ПО Контрагент, ДоговорКонтрагента, Дата Интересно можно ли без этого как то связать оптаты с покупками. Без сортировки я так понимаю все расплывается. |
|||
34
LivingStar
17.09.13
✎
11:50
|
приболел, ерунду говорю какую то, смотрю дальше эту интересную выборку
|
|||
35
LivingStar
10.10.13
✎
11:33
|
(10) Скажите пожалуйста что такое СуммаДокумента в итоговом запросе? Сумма эта не сходится ни с какими данными, не приумножается ли она из за того что есть связь с таблицей товары???
|
|||
36
LivingStar
10.10.13
✎
12:59
|
(35+) Не могу понять СуммаДокумента, что это за значение, у всех строк одинаковое по каждому контрагенту....
|
|||
37
LivingStar
10.10.13
✎
13:00
|
СуммаПлатежа то есть.....опять опечатался
|
|||
38
kabanoff
10.10.13
✎
13:28
|
Тяжелый случай.
|
|||
39
LivingStar
10.10.13
✎
13:51
|
все Ок, разобрался...... спасибо!
буду дорабатывать выборку! |
|||
40
Aprobator
10.10.13
✎
14:00
|
песец. И это чудо еще интересуется на чем можно калымить кроме 1С. Да тебя к 1С вообще подпускать нельзя.
|
|||
41
LivingStar
11.10.13
✎
11:06
|
В запросе (10) хочу добавить несколько документов к тзОплаты и отнять один документ от ПоступленияТоваровУслуг. А именно:
тзОплаты - ПлатежноеПоручениеИсходящее - РасходныйКассовыйОрдер - АвансовыйОтчет - ПоступленниеТоваровУслуг (минус ВозвратТоваровПоставщику) Кому не сложно подскажите как это лучше сделать в теории? Добавить пакетные запросы, связать из в итоговом и рассчитать? Или нужно делать вложенные запросы, менять структуру этой выборки? |
|||
42
LivingStar
11.10.13
✎
11:44
|
up!
|
|||
43
LivingStar
11.10.13
✎
13:08
|
Почему пропали суммы из колонок СуммаПлатежа и Долг ?
Что я не так выбрал? ВЫБРАТЬ ПлатежноеПоручениеИсходящее.ДоговорКонтрагента, ПлатежноеПоручениеИсходящее.Контрагент, СУММА(ЕСТЬNULL(ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.СуммаПлатежа, 0)) КАК СуммаПлатежа ПОМЕСТИТЬ тзОплаты_ПлатежноеПоручениеИсходящее ИЗ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее ПО ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка = ПлатежноеПоручениеИсходящее.Ссылка ГДЕ ПлатежноеПоручениеИсходящее.Проведен И ПлатежноеПоручениеИсходящее.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийППИсходящее.ОплатаПоставщику) СГРУППИРОВАТЬ ПО ПлатежноеПоручениеИсходящее.ДоговорКонтрагента, ПлатежноеПоручениеИсходящее.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РасходныйКассовыйОрдер.ДоговорКонтрагента, РасходныйКассовыйОрдер.Контрагент, СУММА(ЕСТЬNULL(РасходныйКассовыйОрдерРасшифровкаПлатежа.СуммаПлатежа, 0)) КАК СуммаПлатежа ПОМЕСТИТЬ тзОплаты_РасходныйКассовыйОрдер ИЗ Документ.РасходныйКассовыйОрдер.РасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер ПО РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = РасходныйКассовыйОрдер.Ссылка ГДЕ РасходныйКассовыйОрдер.Проведен И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ОплатаПоставщику) СГРУППИРОВАТЬ ПО РасходныйКассовыйОрдер.ДоговорКонтрагента, РасходныйКассовыйОрдер.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АвансовыйОтчетОплатаПоставщикам.Контрагент, АвансовыйОтчетОплатаПоставщикам.ДоговорКонтрагента, СУММА(ЕСТЬNULL(АвансовыйОтчетОплатаПоставщикам.Сумма, 0)) КАК СуммаПлатежа ПОМЕСТИТЬ тзОплаты_АвансовыйОтчет ИЗ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК АвансовыйОтчетОплатаПоставщикам ГДЕ АвансовыйОтчетОплатаПоставщикам.Ссылка.Проведен СГРУППИРОВАТЬ ПО АвансовыйОтчетОплатаПоставщикам.Контрагент, АвансовыйОтчетОплатаПоставщикам.ДоговорКонтрагента ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоступлениеТоваровУслуг.Ссылка, ПоступлениеТоваровУслуг.Номер КАК НомерДокумента, ПоступлениеТоваровУслуг.НомерВходящегоДокумента КАК НомерВходящегоДокумента, ПоступлениеТоваровУслуг.Дата КАК ДатаДокумента, ПоступлениеТоваровУслуг.ДоговорКонтрагента КАК Договор, ПоступлениеТоваровУслуг.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КАК ДопустимоеЧислоДнейЗадолженности, ПоступлениеТоваровУслуг.Контрагент КАК Контрагент, ЕСТЬNULL(ПоступлениеТоваровУслуг.СуммаДокумента, 0) КАК СуммаКОплате, НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ПоступлениеТоваровУслуг.Дата, ДЕНЬ, ПоступлениеТоваровУслуг.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ) КАК ПоследняяДатаОплаты ПОМЕСТИТЬ тзПокупки ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ГДЕ ПоступлениеТоваровУслуг.Проведен И ПоступлениеТоваровУслуг.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности <> 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ тзПокупки.Ссылка, тзПокупки.ДатаДокумента, тзПокупки.НомерДокумента, тзПокупки.НомерВходящегоДокумента, тзПокупки.Контрагент, тзПокупки.Договор, тзПокупки.ДопустимоеЧислоДнейЗадолженности, тзПокупки.СуммаКОплате, тзПокупки.ПоследняяДатаОплаты, СУММА(тзПокупки1.СуммаКОплате) КАК СуммаКОплатеДО ПОМЕСТИТЬ тзРаспределениеДолга ИЗ тзПокупки КАК тзПокупки ЛЕВОЕ СОЕДИНЕНИЕ тзПокупки КАК тзПокупки1 ПО тзПокупки.Контрагент = тзПокупки1.Контрагент И тзПокупки.Договор = тзПокупки1.Договор И тзПокупки.ДатаДокумента > тзПокупки1.ДатаДокумента СГРУППИРОВАТЬ ПО тзПокупки.Ссылка, тзПокупки.ДатаДокумента, тзПокупки.НомерДокумента, тзПокупки.НомерВходящегоДокумента, тзПокупки.Контрагент, тзПокупки.Договор, тзПокупки.ДопустимоеЧислоДнейЗадолженности, тзПокупки.СуммаКОплате, тзПокупки.ПоследняяДатаОплаты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ тзРаспределениеДолга.Ссылка КАК Ссылка, тзРаспределениеДолга.Договор КАК Договор, тзРаспределениеДолга.НомерДокумента КАК НомерДокумента, тзРаспределениеДолга.НомерВходящегоДокумента КАК НомерВходящегоДокумента, тзРаспределениеДолга.ДатаДокумента КАК ДатаДокумента, тзРаспределениеДолга.Контрагент КАК Контрагент, тзОплаты_ПлатежноеПоручениеИсходящее.СуммаПлатежа + тзОплаты_РасходныйКассовыйОрдер.СуммаПлатежа + тзОплаты_АвансовыйОтчет.СуммаПлатежа КАК СуммаПлатежа, тзРаспределениеДолга.СуммаКОплате КАК СуммаКОплате, тзРаспределениеДолга.СуммаКОплатеДО КАК СуммаКОплатеДО, тзРаспределениеДолга.СуммаКОплате + тзРаспределениеДолга.СуммаКОплатеДО КАК СуммаКОплатеВсего, тзРаспределениеДолга.ДопустимоеЧислоДнейЗадолженности КАК ДопустимоеЧислоДнейЗадолженности, тзОплаты_ПлатежноеПоручениеИсходящее.СуммаПлатежа + тзОплаты_РасходныйКассовыйОрдер.СуммаПлатежа + тзОплаты_АвансовыйОтчет.СуммаПлатежа - тзРаспределениеДолга.СуммаКОплате - тзРаспределениеДолга.СуммаКОплатеДО КАК Долг, тзРаспределениеДолга.ПоследняяДатаОплаты КАК ПоследняяДатаоплаты ИЗ тзРаспределениеДолга КАК тзРаспределениеДолга ЛЕВОЕ СОЕДИНЕНИЕ тзОплаты_ПлатежноеПоручениеИсходящее КАК тзОплаты_ПлатежноеПоручениеИсходящее ПО тзРаспределениеДолга.Контрагент = тзОплаты_ПлатежноеПоручениеИсходящее.Контрагент И тзРаспределениеДолга.Договор = тзОплаты_ПлатежноеПоручениеИсходящее.ДоговорКонтрагента ЛЕВОЕ СОЕДИНЕНИЕ тзОплаты_РасходныйКассовыйОрдер КАК тзОплаты_РасходныйКассовыйОрдер ПО тзРаспределениеДолга.Контрагент = тзОплаты_РасходныйКассовыйОрдер.Контрагент И тзРаспределениеДолга.Договор = тзОплаты_РасходныйКассовыйОрдер.ДоговорКонтрагента ЛЕВОЕ СОЕДИНЕНИЕ тзОплаты_АвансовыйОтчет КАК тзОплаты_АвансовыйОтчет ПО тзРаспределениеДолга.Договор = тзОплаты_АвансовыйОтчет.ДоговорКонтрагента И тзРаспределениеДолга.Договор = тзОплаты_АвансовыйОтчет.ДоговорКонтрагента УПОРЯДОЧИТЬ ПО Контрагент, Договор, ДатаДокумента |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |