|
Алгоритм проверки схожести двух больших таблиц | ☑ | ||
---|---|---|---|---|
0
Beduin
05.10.14
✎
07:59
|
Есть две большие таблицы значений. Проверку идентичности делаю по некоторым полям. Посоветуйте оптимальный алгоритм вхождения данных строки из таб1 в таб2
|
|||
1
Banned
05.10.14
✎
08:00
|
в запрос их
И джойном |
|||
2
Эмбеддер
05.10.14
✎
08:01
|
отсортировать по этим полям и в одном цикле проверять совпадение (количество строк одинаковое)
|
|||
3
Beduin
05.10.14
✎
08:02
|
(2) количество строк может быть разным, как в таб1 так и в таб2
|
|||
4
Эмбеддер
05.10.14
✎
08:04
|
(3) как при этом таблицы могут быть идентичными?)))
|
|||
5
Эмбеддер
05.10.14
✎
08:05
|
ааа, вхождение одной таблицы в другую. все равно один цикл
|
|||
6
Beduin
05.10.14
✎
08:07
|
(5) Сортировка да. Осталось выбрать поля для сортировки.
|
|||
7
Фокусник
05.10.14
✎
08:09
|
Кодом или запросом:
|
|||
8
Эмбеддер
05.10.14
✎
08:09
|
сначала спортировка
счетчик1=1, счетчик2=1. цикл, если счетчик1>малаятаблица.Количество(), прерываем цикл (таблицы идентичны) в цикле, если совпадение ключевых полей малой таблицы (индекс счетчик1) и большой (индекс счетчик2), увеличиваем оба счетчика. если же не совпадают, то увеличиваем только счетчик2. если счетчик2 достиг конца большой таблицы, таблицы различны |
|||
9
Мимохожий Однако
05.10.14
✎
08:12
|
(7)+1
(8) то, что таблицы всегда разные, это и так понятно. Вот только в чём цель сравнения ТС не озвучил |
|||
10
Beduin
05.10.14
✎
08:18
|
(9) Регистр бухгалтерии. Движения документа. Необходимо понимать, что проводки документа из базы1 входят в такой же документ из базы2. Сложность в том, что документ с таким же ИД может делать в разных базах отличные движения. Но все это надо слить в одну базу. Примерно так. Немного путанно получилось.
|
|||
11
Фокусник
05.10.14
✎
08:21
|
(10) Разные базы: здесь еще есть сложность в определении "одинаковости" справочников, которые сидят в субконто проводок...
|
|||
12
Beduin
05.10.14
✎
08:23
|
(11) На субконто я забил. Проверяю коды счетов, период и код организации с суммой.
|
|||
13
Мимохожий Однако
05.10.14
✎
08:23
|
Обычно документы переносят без движений, определив параметры синхронизации документов. Это логичнее, т.к. при повторном проведении документ может дать другие проводки. Опять же надо заранее знать по каким параметрам определить приоритет загружаемых документов перед существующими.
|
|||
14
Мимохожий Однако
05.10.14
✎
08:25
|
Проще перенести по максимуму с соответствующим признаком. А дальше оператор смотрит и помечает на удалении лишнее. ИМХО, проще чем пытаться угадать, если ты сам в базе не работаешь постоянно.
|
|||
15
Beduin
05.10.14
✎
08:26
|
(13) Кратко. Мне нужно из 15 баз, сделать одну общую. Конфигурации у всех баз идентичны. Нюанс, что в зависимости от базы документ может делать разные движения, а в итоговой общей, они должны аккумулироваться.
|
|||
16
Мимохожий Однако
05.10.14
✎
08:29
|
Это общая задача. Ну так и переноси с каждой базы со своим префиксом. ИМХО, сабж не соответствует задаче
|
|||
17
Фокусник
05.10.14
✎
08:30
|
(15) В этих сводных проводках нужны только: "коды счетов, период и код организации с суммой."?
Если в базе 1 есть Проводка1, в базе2 есть Проводка1 (т.е. проводки в этих базах идентичны), то в сводной базе должна быть только одна Проводка1. или их должно быть ДВЕ? |
|||
18
Мимохожий Однако
05.10.14
✎
08:30
|
Допустим, что ты удачно сольёшь в одну кучу. А дальше что?
|
|||
19
Beduin
05.10.14
✎
08:31
|
(16) У меня проверка доков по ИД идет. Перенос должен быть онлайн. Постоянно. Задача в том, чтобы понять, что движения документа из базы1 есть в базе2.
|
|||
20
Фокусник
05.10.14
✎
08:31
|
(16) "сабж не соответствует задаче"
+ действительно, не понятно зачем в задаче по сливанию баз нужно СРАВНИВАТЬ? (0) слил все данные без сравнения и всё :) |
|||
21
Мимохожий Однако
05.10.14
✎
08:32
|
Попытаюсь угадать. Нужен сводный отчет. Вместо того, чтобы заглянуть в каждую базу и положить свой кирпичик в отчет, пытаются слить в одну кучу и использовать типовые отчеты.
|
|||
22
Beduin
05.10.14
✎
08:32
|
(17) У каждой базы свои организации. Поэтому в сводной базе должны быть несколько видов проводок на один документ, когда в исходных может быть по одной. Документ должен быть тот же. Их не должно быть несколько.
|
|||
23
Beduin
05.10.14
✎
08:34
|
(21) У нас от таких сводных отчетов уже в глазах рябит. Это немного другая задача. Нужна общая оборотка для бухгалтеров. Со всеми анализами и т.п.
|
|||
24
Фокусник
05.10.14
✎
08:34
|
(19) "Задача в том, чтобы понять, что движения документа из базы1 есть в базе2."
При загрузке движений из базы1 (источник) в базу2 (приемник) нужно: - найти существует ли уже документ, если НЕ существует создаем новый - если существует: УДАЛЯЕМ в нем проводки по организации1 (из базы1). - создаем НОВЫЕ проводки по организации1. |
|||
25
Beduin
05.10.14
✎
08:35
|
(20) Данных много. Прежде, чем сливать необходима проверка, а нужно ли?
|
|||
26
Beduin
05.10.14
✎
08:36
|
(24) Есть еще база2, база3 ... И по некоторым видам документов эти проводки должны в сводной базе добавиться к уже существующим, а не замениться на свои.
|
|||
27
Фокусник
05.10.14
✎
08:37
|
(25) Нужен признак изменения документа. Был изменен документ (после предыдущей загрузки) - грузим его, не было изменений - не грузим.
|
|||
28
Фокусник
05.10.14
✎
08:37
|
(26) "Есть еще база2, база3"
У них ДРУГИЕ организации в проводках? |
|||
29
Beduin
05.10.14
✎
08:38
|
(27) Необходимо в плане обмена дописывать тогда.
|
|||
30
Beduin
05.10.14
✎
08:39
|
(28) Угу. И другие организации и другие движения. А документ физически тот же самый. Они по обмену в них попали.
|
|||
31
Мимохожий Однако
05.10.14
✎
08:40
|
По сути нужны отчеты, а вместо этого сливаются в общую базу документы. Онлайн и перенос документов трудно совместимы.ИМХО, тупиковый путь, хотя и прост для понимания пользователями. Если рябит в глазах от сводных отчетов, то сделай другой интерфейс для выбора отчетом. На ИТС есть пример фабрики отчетов или даже конфигурация для сбора информации с разных углов.
|
|||
32
Фокусник
05.10.14
✎
08:42
|
(29) можно план обмена сделать новый в каждой базе.
Если нет такой возможности, то анализировать в документах реквизит ВерсияДанных: хранить его (в РС например) в сводной базе. Изменился реквизит ВерсияДанных в базе-источнике, значит грузим все движения этого документа в сводную базу. |
|||
33
Фокусник
05.10.14
✎
08:45
|
(31) Наверное, хотят чтобы сводный отчет формировался БЫСТРО, если тянуть данные из 15 разных баз при КАЖДОМ формировании отчета - будут очевидные тормоза :)
ИМХО, если сводные отчеты нужны часто и быстро, то сводная база вполне оправданна. |
|||
34
Фокусник
05.10.14
✎
08:47
|
(0) Например так:
В каждой базе план обмена с фиксацией изменений у всех документов. Сводная база по регламенту подключается к каждой базе-источнику, читает изменения в плане обмена, грузит проводки в сводный документ (перед загрузкой чистка существующих проводок в базе источнике по документ + организация) PS для этих целей есть готовые конфигурации, можно воспользоваться, чтобы не изобретать велосипед :) |
|||
35
Мимохожий Однако
05.10.14
✎
08:48
|
(33)Это гадание на кофейной гуще. ИМХО, быстрее сформировать отчет, чем сначала перенести документы и сформировать отчет. Перенос однозначно дольше. Слово ОНЛАЙН ни о чем не говорит? Или это просто так озвучено?
|
|||
36
Beduin
05.10.14
✎
08:49
|
(34) Фиксация изменений это тоже проверка, что изменились данные важным полям. Эта проверка будет в момент проведения документа, что не очень хорошо.
|
|||
37
Фокусник
05.10.14
✎
08:49
|
(35) Про гадание на кофейной гуще согласен:)
|
|||
38
Фокусник
05.10.14
✎
08:51
|
(36) "Фиксация изменений" в плане обмена - это механизм платформы. Перепровели документ - есть изменения :)
Правильно ли я понимаю, хочется избежать ситуации перезагрузки документов в сводную базу, если было массовое перепроведение документов без изменения проводок? |
|||
39
Beduin
05.10.14
✎
08:52
|
(35) На закрытых периодах никакого гадания нет.
|
|||
40
Beduin
05.10.14
✎
08:52
|
(38) Угу. Все правильно. В плане обмена у меня настроен регистр бухгалтерии. При изменении табличек все фиксируется.
|
|||
41
Фокусник
05.10.14
✎
08:53
|
(39) Озвучь твое понимание "ОНЛАЙН" для этой задачи.
|
|||
42
Beduin
05.10.14
✎
08:54
|
(38) Есть большие документы. Например отражение зп в рег учете. Там 8000 проводок. Понять надо его грузить или нет, вот и вся задача.
|
|||
43
Beduin
05.10.14
✎
08:55
|
(41) Допустимо запаздывание поступающих данных день-два. Никто не требует, чтобы измененный документ тут же отразился в общей базе. Для бухгалтерских данных это уже онлайн)
|
|||
44
Фокусник
05.10.14
✎
08:56
|
(42) >8000 проводок
При условии сворачивания проводок по кодам счетов и организациям их будет на порядки меньше ;) |
|||
45
Фокусник
05.10.14
✎
08:57
|
(43) Т.е. еженочная регламентная загрузка в сводную базу устроит :)
|
|||
46
Мимохожий Однако
05.10.14
✎
08:58
|
(43)Зря ты вносишь путаницу в понятия. Вариант (34) наиболее оптимальный. В правилах переноса сделай группировку проводок в нужных разрезах.
|
|||
47
Beduin
05.10.14
✎
08:58
|
(44) Свернуть это мысль)
(45) да. |
|||
48
Beduin
05.10.14
✎
09:00
|
(46) Документы с одинаковым ИД в этом случае придется разделить. Этого делать нельзя.
|
|||
49
Beduin
05.10.14
✎
09:01
|
(34) И про готовые конфигурации не понял? Для всех баз подходит, и не типовых?
|
|||
50
Фокусник
05.10.14
✎
09:02
|
(48) Немного в сторону: как в разных базах получаются документы с одинаковым ИД?
|
|||
51
Фокусник
05.10.14
✎
09:03
|
(49) Для всех: первым этапом настройки идет чтение структуры внешних баз-источников (в том числе на разных платформах: 77, 8 и т.д.), эта структура хранится в сводной базе (в справочниках).
|
|||
52
Beduin
05.10.14
✎
09:04
|
(50) Изначально попадают в одну главную базу. Потом по обмену распространяются в остальные. Это только часть, документов. Не все. Поэтому главную базу использовать как сводную нельзя.
|
|||
53
Beduin
05.10.14
✎
09:05
|
(51) Там регистров бухгалтерских нет?
|
|||
54
Мимохожий Однако
05.10.14
✎
09:06
|
(52)полуОФФ. Сначала создаются трудности, а теперь успешно преодолеваются.
|
|||
55
Фокусник
05.10.14
✎
09:07
|
(53) Есть, сводные документы делают движения именно в бух.регистрах.
|
|||
56
Beduin
05.10.14
✎
09:08
|
(55) У нас бух регистр не типовой. Там измерения доп есть.
|
|||
57
Фокусник
05.10.14
✎
09:08
|
(55)+ но вот сходу не скажу, решается ли там задача "одинаковых ИД" документов. По идее они будут жить разными сущностями в сводной базе...
|
|||
58
Фокусник
05.10.14
✎
09:09
|
(56) Опять же: при условии чтения проводок только по Счет/Организация/Сумма какая разница есть ли другие измерения или нет? :)
|
|||
59
Beduin
05.10.14
✎
09:11
|
(58) Это я проверяю по этим полям, но измерения другие есть. Я пытаюсь выяснить подойдет ли эта конфигурация для любого случая вот и все.
|
|||
60
Beduin
05.10.14
✎
09:12
|
(54) Вы никогда не сталкивались, чтобы документы с одним ид делали разные движения в разных базах?
|
|||
61
Фокусник
05.10.14
✎
09:19
|
(59) Там есть понятие: "Источник данных", его можно сделать конструктором или ручным запросом. Запрос в источнике данных может обращаться во внешнюю базу. Т.е. фактически источником данных для загрузки в сводную базу может быть любая таблица/набор таблиц из базы-источника. К типовым конфигурациям привязки нет.
Вот только решения по сливанию В ОДИН документ в приемнике разных документов из источника (у документов равны ИД) там точно нет. Т.к. реквизит "Информационная база" - это реквизит шапки документа. А для данной задачи нужно чтобы это был реквизит в регистре бухгалтерии. |
|||
62
Beduin
05.10.14
✎
09:21
|
(61) Спасибо. Буду смотреть эту базу)
|
|||
63
Мимохожий Однако
05.10.14
✎
09:25
|
(60)Это нормально. Поэтому обычно и переносят в документы без движений. Синхронизацию не надо делать по ИД в данном случае.Достаточно по номеру и дате переносить с соответствующим префиксом.
(61)Скажи название конфигурации. Пусть посмотрит на сайте 1С. |
|||
64
Фокусник
05.10.14
✎
09:26
|
(63) 1С:Финансист
|
|||
65
Beduin
05.10.14
✎
09:26
|
(63) Документ рождает движения в зависимости от имени базы. В сводной базе придется реализовывать алгоритм этот.
|
|||
66
Beduin
05.10.14
✎
09:33
|
Сделал этот алгоритм. На документе 8000 проводок проверку сделал где-то за минуту. Таких документов немного поэтому пойдет
ВсеЗаписиИдентифицированы = Истина; Если НаборДвиженийХозрасчетный.Количество() = 0 Тогда ВсеЗаписиИдентифицированы = ЛОЖЬ; КонецЕсли; НаборДвиженийХозрасчетный = НаборДвиженийХозрасчетный.Выгрузить(); Для Каждого СтрокаглБазаНаборДвиженийХозрасчетный ИЗ глБазаНаборДвиженийХозрасчетный Цикл СтрокаЗаписиНайдена = ЛОЖЬ; Для Каждого СтрокаНаборДвиженийХозрасчетный ИЗ НаборДвиженийХозрасчетный Цикл Если СтрокаНаборДвиженийХозрасчетный.СчетДТ.Код = СтрокаглБазаНаборДвиженийХозрасчетный.СчетДТ.Код И СтрокаНаборДвиженийХозрасчетный.СчетКТ.Код = СтрокаглБазаНаборДвиженийХозрасчетный.СчетКТ.Код И СтрокаНаборДвиженийХозрасчетный.Сумма = Окр(СтрокаглБазаНаборДвиженийХозрасчетный.Сумма,2) И СтрокаНаборДвиженийХозрасчетный.Период = СтрокаглБазаНаборДвиженийХозрасчетный.Период И СтрокаНаборДвиженийХозрасчетный.Активность = СтрокаглБазаНаборДвиженийХозрасчетный.Активность И СтрокаНаборДвиженийХозрасчетный.Организация.Код = СтрокаглБазаНаборДвиженийХозрасчетный.Организация.Код Тогда СтрокаЗаписиНайдена = Истина; НаборДвиженийХозрасчетный.Удалить(СтрокаНаборДвиженийХозрасчетный); Прервать; КонецЕсли; КонецЦикла; Если Не СтрокаЗаписиНайдена Тогда ВсеЗаписиИдентифицированы = Ложь; Прервать; КонецЕсли; КонецЦикла; |
|||
67
Фокусник
05.10.14
✎
09:43
|
(66) Не стал сворачивать? :)
|
|||
68
vde69
05.10.14
✎
09:44
|
||||
69
vde69
05.10.14
✎
09:45
|
(68)+ алгоритм БЕЗ вложеного цикла
|
|||
70
vde69
05.10.14
✎
09:50
|
(66) у тебя в алгоритме ошибка - он НЕ рабочий!!!
так НЕЛЬЗЯ!!! Для Каждого СтрокаНаборДвиженийХозрасчетный ИЗ НаборДвиженийХозрасчетный Цикл НаборДвиженийХозрасчетный.Удалить(СтрокаНаборДвиженийХозрасчетный); |
|||
71
Beduin
05.10.14
✎
09:52
|
(70) НаборДвиженийХозрасчетный = НаборДвиженийХозрасчетный.Выгрузить();
я тут колдую |
|||
72
Beduin
05.10.14
✎
09:53
|
(67) Можно, но и так быстро работает) За конфу спасибо. Я все задавался вопросом про универсальную систему для сбора данных, теперь буду ковырять.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |