|
Вопрос по запросу | ☑ | ||
---|---|---|---|---|
0
Lolipop
21.03.17
✎
23:08
|
В запросе имеются такие проводки
26 62 62 26 51 60 60 51 Как сделать запросом, чтобы оставить по одному от каждой пары? То есть, конечный вариант 26 62 51 60 |
|||
1
DrShad
21.03.17
✎
23:10
|
не выбирать лишнее в запрос
|
|||
2
Diman000
21.03.17
✎
23:13
|
По другой виртуальной таблице запрос строить.
Хотя, если у тебя именно ПРОВОДКИ, то не спасти... Проводка по-любому есть и выйдет в результат. А вот свернуть обороты на более высоком уровне можно. |
|||
3
Lolipop
21.03.17
✎
23:18
|
(1) Окей.
Тогда такая задача. Есть проводки и сумма по проводкам. 62.1 90.1 31 000.00 76.9 51 17 000.00 26 51 150.00 60.2 51 22 000.00 26 60.1 1 200.00 76.5 90.1 41 000.00 62.1 76.5 41 000.00 51 62.1 72 000.00 60.1 60.2 22 000.00 20 60.1 22 000.00 20 26 1 350.00 90.2 20 23 350.00 Нужно вот эту вещь привести к такому варианту, чтобы проводки разбились на минимальное количество групп НЕ КОРРЕСПОНДИРУЮЩИХ ДРУГ С ДРУГОМ. Ответ по проводкам: 1 51, 20 2 60, 76 3 26, 62 4 90 |
|||
4
Naf2017
21.03.17
✎
23:19
|
выбрать
выбор когда СчетДт.Код>СчетКт.Код тогда СчетДт иначе СчетКт конец как счета из Движения |
|||
5
Lolipop
21.03.17
✎
23:20
|
Как я решил делать.
1. Отобрал все счета имеющиеся в запросе. 2. Отделил каждый счет корреспондирующий с другим счетом. 3. Далее из 2 отделил счета не корреспондирующие друг с другом и получилась такая вещь как в (1) Теперь не знаю, как привести ее к нужному виду |
|||
6
Lolipop
21.03.17
✎
23:21
|
(4) Это к какой таблице запрос?
|
|||
7
Naf2017
21.03.17
✎
23:24
|
(6) ты таблиц не показывал
|
|||
8
Lolipop
21.03.17
✎
23:25
|
(7) Глаза разуй. (1) и (3)
|
|||
9
Lolipop
21.03.17
✎
23:27
|
Вот запрос.
ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫБОР КОГДА РегистрБухгалтерииДвиженияССубконто.СчетДт.Родитель = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.ПустаяСсылка) ТОГДА РегистрБухгалтерииДвиженияССубконто.СчетДт ИНАЧЕ РегистрБухгалтерииДвиженияССубконто.СчетДт.Родитель КОНЕЦ КАК ВсеСчетаПРисутствующиеВРегистре ПОМЕСТИТЬ ВсеСчетаПристуствующиеВРегистре ИЗ РегистрБухгалтерии.РегистрБухгалтерии.ДвиженияССубконто КАК РегистрБухгалтерииДвиженияССубконто ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫБОР КОГДА РегистрБухгалтерииДвиженияССубконто.СчетКт.Родитель = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.ПустаяСсылка) ТОГДА РегистрБухгалтерииДвиженияССубконто.СчетКт ИНАЧЕ РегистрБухгалтерииДвиженияССубконто.СчетКт.Родитель КОНЕЦ ИЗ РегистрБухгалтерии.РегистрБухгалтерии.ДвиженияССубконто КАК РегистрБухгалтерииДвиженияССубконто ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫБОР КОГДА РегистрБухгалтерииДвиженияССубконто.СчетДт.Родитель = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.ПустаяСсылка) ТОГДА РегистрБухгалтерииДвиженияССубконто.СчетДт ИНАЧЕ РегистрБухгалтерииДвиженияССубконто.СчетДт.Родитель КОНЕЦ КАК СинтетическийСчетДт, ВЫБОР КОГДА РегистрБухгалтерииДвиженияССубконто.СчетКт.Родитель = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.ПустаяСсылка) ТОГДА РегистрБухгалтерииДвиженияССубконто.СчетКт ИНАЧЕ РегистрБухгалтерииДвиженияССубконто.СчетКт.Родитель КОНЕЦ КАК СинтетическийСчетКт ПОМЕСТИТЬ РегистрБухгалтерииССинтетическимиСчетами ИЗ РегистрБухгалтерии.РегистрБухгалтерии.ДвиженияССубконто КАК РегистрБухгалтерииДвиженияССубконто ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеСчетаПристуствующиеВРегистре.ВсеСчетаПРисутствующиеВРегистре КАК ВсеСчетаПРисутствующиеВРегистреДтКТ, РегистрДляСвязиПроводокПоДт.СинтетическийСчетКт КАК СинтетическийСчетДтКт ПОМЕСТИТЬ ПредварительнаяТаблицаСДтиКтВОднойТаблице ИЗ ВсеСчетаПристуствующиеВРегистре КАК ВсеСчетаПристуствующиеВРегистре ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерииССинтетическимиСчетами КАК РегистрДляСвязиПроводокПоДт ПО ВсеСчетаПристуствующиеВРегистре.ВсеСчетаПРисутствующиеВРегистре = РегистрДляСвязиПроводокПоДт.СинтетическийСчетДт ОБЪЕДИНИТЬ ВЫБРАТЬ ВсеСчетаПристуствующиеВРегистре.ВсеСчетаПРисутствующиеВРегистре, РегистрДляСвязиПроводокПоКт.СинтетическийСчетДт ИЗ ВсеСчетаПристуствующиеВРегистре КАК ВсеСчетаПристуствующиеВРегистре ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерииССинтетическимиСчетами КАК РегистрДляСвязиПроводокПоКт ПО ВсеСчетаПристуствующиеВРегистре.ВсеСчетаПРисутствующиеВРегистре = РегистрДляСвязиПроводокПоКт.СинтетическийСчетКт ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеСчетаПристуствующиеВРегистре.ВсеСчетаПРисутствующиеВРегистре, ВсеСчетаПристуствующиеВРегистре1.ВсеСчетаПРисутствующиеВРегистре КАК ВсеСчетаПРисутствующиеВРегистре1 ПОМЕСТИТЬ ВсеСчетаСвязанныеДругСДругом ИЗ ВсеСчетаПристуствующиеВРегистре КАК ВсеСчетаПристуствующиеВРегистре ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеСчетаПристуствующиеВРегистре КАК ВсеСчетаПристуствующиеВРегистре1 ПО ВсеСчетаПристуствующиеВРегистре.ВсеСчетаПРисутствующиеВРегистре <> ВсеСчетаПристуствующиеВРегистре1.ВсеСчетаПРисутствующиеВРегистре ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеСчетаСвязанныеДругСДругом.ВсеСчетаПРисутствующиеВРегистре КАК ПроводкаКоторойНетДт, ВсеСчетаСвязанныеДругСДругом.ВсеСчетаПРисутствующиеВРегистре1 КАК ПроводкаКоторойНетКт ПОМЕСТИТЬ ПроводкиКОторыхНет ИЗ ВсеСчетаСвязанныеДругСДругом КАК ВсеСчетаСвязанныеДругСДругом ЛЕВОЕ СОЕДИНЕНИЕ ПредварительнаяТаблицаСДтиКтВОднойТаблице КАК ПредварительнаяТаблицаСДтиКтВОднойТаблице ПО ВсеСчетаСвязанныеДругСДругом.ВсеСчетаПРисутствующиеВРегистре = ПредварительнаяТаблицаСДтиКтВОднойТаблице.ВсеСчетаПРисутствующиеВРегистреДтКТ И ВсеСчетаСвязанныеДругСДругом.ВсеСчетаПРисутствующиеВРегистре1 = ПредварительнаяТаблицаСДтиКтВОднойТаблице.СинтетическийСчетДтКт ГДЕ ПредварительнаяТаблицаСДтиКтВОднойТаблице.СинтетическийСчетДтКт ЕСТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПроводкиКОторыхНет.ПроводкаКоторойНетДт, ПроводкиКОторыхНет.ПроводкаКоторойНетКт ИЗ ПроводкиКОторыхНет КАК ПроводкиКОторыхНет ГДЕ (ПроводкиКОторыхНет.ПроводкаКоторойНетДт, ПроводкиКОторыхНет.ПроводкаКоторойНетКт) В (ВЫБРАТЬ ПЕРВЫЕ 1 ПроводкиКОторыхНет.ПроводкаКоторойНетДт, ПроводкиКОторыхНет.ПроводкаКоторойНетКт ИЗ ПроводкиКоторыхНет КАК ВСЁ ГДЕ ВСЁ.ПроводкаКоторойНетДт = ПроводкиКОторыхНет.ПроводкаКоторойНетДт И ВСЁ.ПроводкаКоторойНетКт <> ПроводкиКОторыхНет.ПроводкаКоторойНетКт) |
|||
10
RomanYS
21.03.17
✎
23:33
|
(3) почему не
1 51 , 90, 26 2 60 , 76 3 20 , 62 ? |
|||
11
Lolipop
21.03.17
✎
23:34
|
(10) Можно и так.
Ты абсолютно прав. Сам не увидел. |
|||
12
DrShad
21.03.17
✎
23:36
|
зачем все это?
|
|||
13
Lolipop
21.03.17
✎
23:40
|
(12) Нужно. Просто сдавайся, если не знаешь.
|
|||
14
Lolipop
21.03.17
✎
23:41
|
(12) Тут нет вариантов типа послать бухгалтера, не делать и так далее.
|
|||
15
Diman000
21.03.17
✎
23:42
|
Да не кипятись ты, зелен еще раз такие вопросы задаешь. Сказал бы спасибо, что с тобой тут цацкаются...
Тебе вообще не движения нужны. Говорю же, используй другую вирт. таблицу. Нафейхоа в такой задаче ДвиженияССубконто? Смотри в сторону ОборотыДтКт или типа того, за точность не ручаюсь, с бухрегами давно дел не имел. Но задача выглядит плевой, взял обороты с одной стороны корреспонденций, взял с минусом их же с другой и свернул. |
|||
16
DrShad
21.03.17
✎
23:48
|
сам бух по образованию - ума не приложу какая цель?
|
|||
17
Diman000
21.03.17
✎
23:50
|
И вообще не понятно чем стандартные бух. отчеты не устраивают. Анализ счета, что там еще есть, обороты между счетами какие-нибудь... Все же покажут что тебе надо..
|
|||
18
Lolipop
21.03.17
✎
23:51
|
(15) Я и не кипячусь.
Спасибо за помощь |
|||
19
DrShad
21.03.17
✎
23:52
|
пока все что я понял - ищут проводку которой нет )))
|
|||
20
Diman000
21.03.17
✎
23:57
|
Да, чето вгляделся я в (3), выглядит как ахинея какая-то)))
Реально ищете проводки которых нет... |
|||
21
France
21.03.17
✎
23:57
|
(14) бухгалтера послать - всегда есть варианты.. а вот на вопрос в (12) действительно нет вариантов - зачем все это?..
если есть ответ - тогда и помочь легче |
|||
22
Lolipop
21.03.17
✎
23:59
|
(20) Это олимпиадное задание. Не практическое и не типовое
|
|||
23
DrShad
22.03.17
✎
00:00
|
озвучить его можно?
|
|||
24
Diman000
22.03.17
✎
00:01
|
Эвона как.
Голая теория значит. Тогда полный текст задания надо выкладывать, мало ли какие подвохи там. Но лично я разбираться в нем не готов)) |
|||
25
Lolipop
22.03.17
✎
00:02
|
(23) Разработать внешний отчет, в котором предлагается вариант разбиения всех счетов, представленных в проводках, на минимальное количество групп, каждая из которых содержит синтетические счета, которые не корреспондируют друг с другом ни в одной из проводок, имеющихся в информационной базе. При этом проводки, в которых корреспондируют одинаковые синтетические счета, а также проводки с нулевыми суммами учитывать не надо. Результат представить в виде отчета, форма которого приведена в примере.
|
|||
26
France
22.03.17
✎
00:04
|
блин. придется математику вспоминать......
|
|||
27
Diman000
22.03.17
✎
00:06
|
Ставлю тельца против яйца, что SQL-запросом такая задача не решается.
Выбрал запросом для начала все что надо, а дальше математику вспоминать вместе с Франсем)) |
|||
28
DrShad
22.03.17
✎
00:06
|
тебе не нужны движения с субконто )))
|
|||
29
France
22.03.17
✎
00:11
|
(27) запросом решается.. вот, мне бы математику подтянуть - и без яйца кто то остался бы))
|
|||
30
DrShad
22.03.17
✎
00:14
|
у меня с математикой беда
|
|||
31
Lolipop
22.03.17
✎
00:16
|
(29) Да, запросом решается.
Я уже понял, что движения с субконто не нужны. Спасибо всем. Пытаю обороты, вот только все равно получается лабуда из (1). Эти дубли по ДТ и КТ меня убивают. Простым кодом сделать легко, а вот запросом... |
|||
32
France
22.03.17
✎
00:27
|
да блин, ужо сложно студенчество вспомнить, тем более не знакомую математику. но, нужно матрицы друючить..
|
|||
33
Lolipop
22.03.17
✎
10:14
|
(32) Тут математики 0. Одна логика
|
|||
34
RomanYS
22.03.17
✎
11:58
|
(31) Запросом можно легко получить пары не корреспондирующих счетов. А вот собрать их в группы проблематично. А с условием "на минимальное количество групп" сильно сомневаюсь, что "кодом сделать легко".
|
|||
35
Ildarovich
22.03.17
✎
12:33
|
(34) По задаче бухучет за уши притянут. Корреспондирующие счета тут просто структуру графа задают, вершины которого нужно разбить на минимальное число групп(классов) так, что вершины одного класса не связаны друг с другом. Классов может получиться от 1 (для несвязного графа) до N (для полносвязного графа).
Допустимое решение легко получить. Для этого нужно наращивать классы один за другим, присоединяю к текущему классу вершину, удовлетворяющую условию несвязности ни с одной вершиной, уже включенную в эту группу. Присоединить можно на одном шаге разные вершины. Появляются варианты. Это можно решить рекурсией. Проблема в том, что вариантов может получиться слишком много для перебора. Поэтому минимальное количество групп как глобально-оптимальное решение получить вряд ли получится из-за размера задачи. А вот локально-оптимальное - легко. После прояснения алгоритма уже будет ясно, как его решать - кодом или запросом. Была бы задача практической - было бы интересно, но это, к сожалению, не так. |
|||
36
PCcomCat
22.03.17
✎
12:56
|
Выбрать проводки в таблицу. А затем сделать левое соединение таблицы с собой по Т1.СчетДт = Т2.СчетКт или Т1.СчетДт.Родитель = Т2.СчетКт.Родитель. Как-то так...
|
|||
37
RomanYS
22.03.17
✎
13:03
|
(35) Практическая задача: рассадить гостей за минимальное число столов чтобы за каждым столом не оказалось знакомых между собой)
А так с оценкой полностью согласен. |
|||
38
Мимохожий Однако
22.03.17
✎
13:07
|
(0) зачем все это? Озвучь задачу, а не твои попытки
|
|||
39
Мимохожий Однако
22.03.17
✎
13:09
|
(25) План счетов для того и придуман, чтобы счета между собой взаимодействовали. В чем цель отчета кроме способа решения?
|
|||
40
RomanYS
22.03.17
✎
17:40
|
(38) (39) цель в (22), задача в (25).
План счетов здесь не более чем декорация. |
|||
41
France
22.03.17
✎
23:41
|
(33) угу... почитай 35..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |