Вход | Регистрация
 

Как быстро сравнить справочник номенклатур

Как быстро сравнить справочник номенклатур
Я
   Hillsnake
 
11.07.19 - 11:57
2 базы ERP, в одной больше номенклатур  чем в другой.


нужно выяснить на какие номенклатуры отличаются и догрузить их . Загрузка есть, это не сложно.

кончено здорово было бы сделать 2х сторонний обмен КД3. но это разовая акция.

как лучше сделать.
1 выгрузить номенклатуры в xml и сравнить 2 xml. очень долго.

2. развернуть SQl и там сравнить.

3.. еще варианты.
 
 
   shuhard
 
1 - 11.07.19 - 11:59
(0) в xls + ADODB  + обработка сравнения
   Hillsnake
 
2 - 11.07.19 - 12:00
(1) xls ??

да он там умрет
xml  файл то формируется в 60 ГБ.

номенклатур многА!
   _Дайвер_
 
3 - 11.07.19 - 12:03
ручками
   shuhard
 
4 - 11.07.19 - 12:04
(2) а что ещё форум должен угадать ?
   Hillsnake
 
5 - 11.07.19 - 12:06
(4) если было бы мало, я бы не спрашивал.
(3) смишно .
   shuhard
 
6 - 11.07.19 - 12:08
(5) сиквел
   Hillsnake
 
7 - 11.07.19 - 12:11
(6) да вот склоняюсь к этому варианту.

главное чтоб ADODB   быстро отработал в выгрузку.  


строкаПодключения = "driver={SQL Server};server="+ стрПараметры.серверИмя + 
                        ";uid='"+ стрПараметры.серверПользователь + 
                        "';pwd='"+ стрПараметры.серверПароль+ 
                        "';database="+ стрПараметры.серверБаза + 
                        ";trusted_connection=yes";
    АДОДБКоннект = Новый COMОбъект("ADODB.Connection");
    Попытка
        АДОДБКоннект.ConnectionTimeout = 0;
        АДОДБКоннект.Open(строкаПодключения);
        Возврат АДОДБКоннект;
    Исключение 
        Предупреждение("Невозможно установить соединение с SQL-сервером " + стрПараметры.серверИмя + " " + ОписаниеОшибки()); 
        АДОДБКоннект.Close();
        Возврат Ложь;        
    КонецПопытки;

думаю что то вроде этого.
   _Дайвер_
 
8 - 11.07.19 - 12:13
Эта задача делается просто, пишешь обработку с COM соединением, выясняешь общие параметры(например код), пишешь запрос
"ВЫБРАТЬ
|    Номенклатура.Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Код = &Код"
Проверяешь по условию если есть, идешь дальше, если нет то так же через COM создаешь новую номенклатуру "Соединение.Справочники.Номенклатура.СоздатьЭлемент();", попутно проверяя это группа или нет, и заполняешь параметры, у меня таккая обработка есть, писал как-то для похожей ситуации, правда базы разнородные были
   Hillsnake
 
9 - 11.07.19 - 12:15
(8)  COM соединением? я думаю  это будет делаться месяц.
В курсе, что Комы не поддерживаются 64 платформой.
   sitex
 
10 - 11.07.19 - 12:21
(9) О каком количестве идет речь?
   _Дайвер_
 
11 - 11.07.19 - 12:22
(9) В курсе что поддерживается 64 платформой
   sitex
 
12 - 11.07.19 - 12:23
(9) также базы SQL на одном сервере находятся ?
   shuhard
 
13 - 11.07.19 - 12:24
(9)[В курсе, что Комы не поддерживаются 64 платформой.]
тебя обманули
   Hillsnake
 
14 - 11.07.19 - 12:26
(10) 800 тыс.
(13) хмм возможно .  но Если сравнивать Ком с Адодб. явно будет быстрее даже на том же xls.
   Hillsnake
 
15 - 11.07.19 - 12:27
(12) нет.
   PiotrLoginov
 
16 - 11.07.19 - 12:31
(14) >>Если сравнивать Ком с Адодб. явно будет быстрее даже на том же xls.

ерунда
   shuhard
 
17 - 11.07.19 - 12:32
(16) ты бредишь
   Garykom
 
18 - 11.07.19 - 12:34
Быстрее всего будет выгрузить два файла в CSV, загрузить их в Access и там сравнить запросом.
   Seriy_Volk
 
19 - 11.07.19 - 12:36
(0) была подобная задача, справочник номенклатура около миллиона записей. Через запрос MS SQL синхронизация заняла около одной минуты, так что я за п.2
запрос в духе insert ... from select ... where not EXISTS (select...)
   arsik
 
20 - 11.07.19 - 12:37
(0) А сравнивать номенклатуру по каким полям будешь?
   1Сергей
 
21 - 11.07.19 - 12:37
800 тыс в 60 гб????
Кучеряво живёте :)
   Garykom
 
22 - 11.07.19 - 12:39
(18)+ Вместо MS Access можно использовать любой SQL сервер с которым лучше знакомы.
   Hillsnake
 
23 - 11.07.19 - 12:42
(18)  CSV 60 ГБ?? он просто вывалится.
(16) http://catalog.mista.ru/public/64883/ не ерунда,  вот провели эксперимент.
   Garykom
 
24 - 11.07.19 - 12:43
(23) Куда вывалится? HDD/SSD у тебя вывалится из системника да?

Построчно пиши. В файл, текстовый. С расширением CSV. По формату.
   Hillsnake
 
25 - 11.07.19 - 12:44
(21) это по минимуму характеристик. да когда то, загрузили все запчасти с дуру, от жадности.

как начинаешь говорить, что там 80  процентов ненада. сразу вопли нам все ннннада!!
   Hillsnake
 
26 - 11.07.19 - 12:45
(24) с ошибкой по памяти. (20) характеристики  и еще парочка. по минимуму.
   Garykom
 
27 - 11.07.19 - 12:46
(24)+
Файл = Новый ЗаписьТекста(ИмяФайла);
Файл.ЗаписатьСтроку("Привет!");
Файл.ЗаписатьСтроку("Как дела?");
Файл.Закрыть();


Вот это тебе позволит хоть несколько террабайт забить на диске, если файловая система может.
   Garykom
 
28 - 11.07.19 - 12:46
(26) Тупица. Извини сорвался.
   Garykom
 
29 - 11.07.19 - 12:47
Но реально вводит в недоумение когда человек с такой полоской и "типа программист" показывает такие проблемы в базовых знаниях.

ПОСТРОЧНАЯ запись в текстовый файл, сразу на диск. Какая еще к черту память?
   arsik
 
30 - 11.07.19 - 12:49
(29) Долго будет построчно. Наверно лучше порциями по метров 10 хотя бы.
 
 
   Garykom
 
31 - 11.07.19 - 12:50
(30) А вот это уже оптимизация, причем размер порции можно на лету подбирать динамически засекая время.
   Провинциальный 1сник
 
32 - 11.07.19 - 12:51
Я бы через КОМ сделал, но не поэлементно дергать, а запросом с примитивными типами вытащил в таблицу значений и её сериализацией перебросил через КОМ. И далее дело техники, сверка справочника с таблицей.
   Garykom
 
33 - 11.07.19 - 12:52
(32) Как думаешь результат запроса где хранится? Учитывая чего то на 60 гигов?
   Hillsnake
 
34 - 11.07.19 - 12:53
(30) вот именно.
(29) ты сам то такие эксперименты производил Чудише.
записать то запишет, но не факт что потом он откроется.
   Garykom
 
35 - 11.07.19 - 12:53
(34) Рука лицо.

Ну делай файлы по полгига или по 100 метров и потом из по очереди и скорми в SQL.
   Bigbro
 
36 - 11.07.19 - 12:53
(32) звучит как правильный вариант.
   Garykom
 
37 - 11.07.19 - 12:54
(36) Ыыыы
   Провинциальный 1сник
 
38 - 11.07.19 - 12:55
(33) Справочник вряд ли больше сотни мег. Всё в память спокойно влезет.
   Garykom
 
39 - 11.07.19 - 12:55
(37)+ Потому что если на сервере >64Gb RAM то может и взлететь ))
   Hillsnake
 
40 - 11.07.19 - 12:56
(35) слава богу дошло.

не все так просто.

думаю буду переводить в SQL. по кусочкам.
   Garykom
 
41 - 11.07.19 - 12:57
(38) Возьми длины строк кода и наименования (учитывая что каждый символ 2 байта) и умножь на 800 тысяч.
Если кроме кода и наименования еще чего то надо то добавь в формулу расчета сколько надо памяти.
Ну и плюсом служебные в двойном запасе.
   Провинциальный 1сник
 
42 - 11.07.19 - 12:59
(41) Ну тогда ой. 800 тысяч записей это не для сериализации, точно) Тогда фрагментами.
   sitex
 
43 - 11.07.19 - 13:07
(40) В SQL запросом сравнить не предлагать ?
   arsik
 
44 - 11.07.19 - 13:10
(43) А кстати можно на одном SQL сервере сравнить 2 таблицы из разных баз одним запросом?
   sitex
 
45 - 11.07.19 - 13:12
(44) Можно
   Garykom
 
46 - 11.07.19 - 13:13
(44) Зависит от sql сервера но обычно можно
   sitex
 
47 - 11.07.19 - 13:14
Выгрузить первые 100 кодов номенклатуры

SELECT TOP 100 [_Code] FROM [_BASE_1].[dbo].[_Reference32] WHERE [_Code] NOT IN (SELECT [_Code] FROM [_BASE_2].[dbo].[_Reference32]);
   Garykom
 
48 - 11.07.19 - 13:15
(44) Только сначала надо выяснить в какой табличке хранится на сервере номенклатура в этих двух базах и какие нужны поля.
Ну и довольно часто 1Сников напрямую к sql серверу боевому не подпускают, чтобы не ипортили.
   sitex
 
49 - 11.07.19 - 13:15
(47) Если нет во второй таблице
   DGorgoN
 
50 - 11.07.19 - 13:16
Про поля дополнительные не забудьте и про критерии сравнения.
   Hillsnake
 
51 - 11.07.19 - 13:34
(43) сначала нужно выгрузить, потом сравнить.
   hhhh
 
52 - 11.07.19 - 13:35
(41) 800тыс, наименование гдето 100 байт, получается 80 мб умножить на 2 = 160. (38) прав, в принципе.
   Hillsnake
 
53 - 11.07.19 - 13:37
(48) это противоречит Лицензионному соглашению.
(50) в чтоку.
(52) посчитай еще поле описание, и характеристики. и 2 кода.
* на 10 получится.
   sitex
 
54 - 11.07.19 - 13:40
Создать sql скрипт который выгрузит что есть в первой таблице и отсутствуют во второй по кодам и загрузить куда что  в какую базу не хватает если ---> Загрузка есть, это не сложно.
   Hillsnake
 
55 - 11.07.19 - 13:42
(54) да думаю, так и поступлю.
   Garykom
 
56 - 11.07.19 - 13:44
(55) Реквизит добавь в 1С для номенклатуры и sql скриптом сразу установи для дублей как надо
   Garykom
 
57 - 11.07.19 - 13:45
(56)+ Только все эксперименты не на боевой базе 1С а на копии на том же sql сервере
   Hillsnake
 
58 - 11.07.19 - 13:47
(57) это и так понятно.
(56) а вот реквизит низя. увы.
   hhhh
 
59 - 11.07.19 - 13:48
(53) в запросе вы не будете выбирать поле Описание. Максимум Код и Наименование - это где-то 160 мб. Мизер.
   Garykom
 
60 - 11.07.19 - 13:49
(58) Пиши в любой существующий текстовый, числовой или булевый, но надо чтобы в основной таблице для простоты а не доп.реквизиты в связанной.
   Hillsnake
 
61 - 11.07.19 - 13:51
(59) про нормирую и буду Увы. до 800, или сколько то там знаков. + Характеристики + Ед изм.
много там. у некоторых есть спецификация в фото, но слава богу их мало.
   hhhh
 
62 - 11.07.19 - 13:55
(61) как вы фото будете сравнивать? по распознаванию отдельных фигур на рисунке?
   sitex
 
63 - 11.07.19 - 13:56
(62) Это уже надо ИИ внедрять. Отдельная тема.
   Hillsnake
 
64 - 11.07.19 - 13:57
(62) нет по индентичности. хотя нет наверное не буду сравнивать.

нужно что то типа, если 2 одинаковых элемента у одного есть фото у другого нет.  (значит нужно добавить. )
   sitex
 
65 - 11.07.19 - 14:19
(64) Можно конечно считать в SQL контрольную сумму строки таблицы, убрать несопоставимые данные. Лично не пробовал, но как вариант сранения в двух базах
   HeKrendel
 
66 - 11.07.19 - 14:25
Ждем следующую тему, догрузил номенклатуру, как вернуть обратно ;-)
 
 Рекламное место пустует
   Serg_1960
 
67 - 11.07.19 - 14:28
(офф) Читал ветку и думал: "По каким полям (минимальному набору) идентификация идентичности будет?" Имхо, этот вопрос ещё никто толком не копал. А он крайне важен.
   Hillsnake
 
68 - 11.07.19 - 14:30
(67) несомненно .
(66) смешно .
   HeKrendel
 
69 - 11.07.19 - 14:36
(68) Отвечу на твою задачу, как БА- ответ на тип сравнения находится в должностной инструкции к системе по заведению справочника номенклатуры, если она актуальна

Если не актуальна, сбор технологии заведения справочника займет от 3-х дней до 2 недель, и после этого можно будет ставить задачу программеру,

написание что обработки, что КД, 16 часов с тестированием
   HeKrendel
 
70 - 11.07.19 - 14:40
Ну это мое оценочное суждение по масштабам бедствия
   Hillsnake
 
71 - 11.07.19 - 15:17
(69) 2 недели + 16 часов. ??

охренеть,  я уже почти все сделал.
   HeKrendel
 
72 - 11.07.19 - 15:19
(71) Это же отлично
   HeKrendel
 
73 - 11.07.19 - 15:24
отпишись когда из "почти все сделал" будет стоять в продакшене ;-)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.