![]() |
|
v7: Ввод документов в базу прямой записью | ☑ | ||
---|---|---|---|---|
0
DCKiller
02.12.11
✎
05:42
|
Интересует возможность создания в БД новых документов путем прямой записи в таблицы оной БД. У кого-нибудь имеется подобный опыт? Нужно для ускорения формирования документов, в данном случае именно скорость их создания - очень важный момент.
|
|||
1
Amra
02.12.11
✎
05:46
|
Лицензионное соглашение это вроде как запрещает.
|
|||
2
Нуф-Нуф
02.12.11
✎
05:47
|
имхо создание новых документов как новых записей в БД - я думаю это не то место на котором можно сэкономить.
запись в бд - довольно быстрая вещь. медленное же - это те расчеты которые происходят при записи (например остатков). так что копайте здесь |
|||
3
DCKiller
02.12.11
✎
05:54
|
(2) Ну не знаю... Понятно, что расчет остатков прямым запросом тоже ускорит дело, но про создание объектов последним могу точно сказать, что когда раньше переносил справочники стандартными способами (tranref, export\import, OLE, КД), то перенос занимал до полутора суток. После того, как преешл на прямую запись в таблицы БД, все справочники переносятся в течение 5 минут.
|
|||
4
Песец
02.12.11
✎
06:06
|
(3) Если не секрет - сколько в справочнике элементов, что он переносится 36 часов?
Даже по 10 элементов в секунду это 10х60х60х36=1,296,000 (мильён двести девяносто тысяч) И это у тебя не разовая операция, а повседневная процедура? |
|||
5
DCKiller
02.12.11
✎
06:07
|
(4) Кто сказал, что речь об ОДНОМ справочнике?
|
|||
6
skunk
02.12.11
✎
06:15
|
(3)ну справочник не документ ... в клюшках для справочника всего одна таблица ... с документами дело обстоит все гораздо сложнее ... даже если записывать без проводок их уже там две ...
|
|||
7
DCKiller
02.12.11
✎
06:23
|
(6) Мне и нужно просто ввести документы, не проводя их. Это будет только запись в _1SJourn, DT и DH.
|
|||
8
Морозов Александр
02.12.11
✎
06:24
|
Если не проводить документы, то они записываются быстро
|
|||
9
Rie
02.12.11
✎
06:24
|
(7) Ещё 1SCRDOC
|
|||
10
skunk
02.12.11
✎
06:25
|
(7)ну так если справочники переносил в чем проблема-то?
|
|||
11
Морозов Александр
02.12.11
✎
06:25
|
а тем более как ты напрямую будешь записывать например табличную часть докумена если там будут ссылки на справочники?
|
|||
12
skunk
02.12.11
✎
06:26
|
(11)там иды надо писать ... исключение для состовного типа ... в принципе таже хрень что и при записи справочников
|
|||
13
Chai Nic
02.12.11
✎
06:27
|
(11) А какие препятствия к прямой записи ссылочных реквизитов?
|
|||
14
Морозов Александр
02.12.11
✎
06:28
|
(13) ну фиг знает... :-) для начала их (ссылки) еще получить надо
|
|||
15
DCKiller
02.12.11
✎
06:29
|
(9) В _1Scrdoc хранятся подчиненные документы, у меня таких не предусматривается.
(10) Справочники переносил из олдной базы в другую, а здесь нужно в текущей же базе создавать новые записи. Собственно, вопрос, по сути сводится к тому, как сгенерить значение IDDOC, и еще так, чтоб оно больше в журнале не повторялось. |
|||
16
DCKiller
02.12.11
✎
06:29
|
(14) Эта проблема уже решена, так что прошу с ней здесь не заморачиваться.
|
|||
17
Нуф-Нуф
02.12.11
✎
06:31
|
(15) а как генерились ИД для справочников когда писал напрямую?
|
|||
18
DCKiller
02.12.11
✎
06:33
|
(17) Читай внимательно: "справочники переносились из одной базы в другую"! Они не генерились.
|
|||
19
Нуф-Нуф
02.12.11
✎
06:34
|
(18) а ну да. а документы? почему нельзя также взять ид из другой базы?
как я понял проблема правильного формирования иддок это единственное что препятствует прямой записи |
|||
20
DCKiller
02.12.11
✎
06:36
|
(19) Именно так.
Взять из другой базы ИД - мысля, конечно, оригинальная :) но боюсь, тоже не вариант, т.к. ИД из другой базы могут совпасть с ИД в текущей. |
|||
21
DCKiller
02.12.11
✎
06:37
|
+(20) Правда, можно сделать в запросе соединение по условию "ГДЕ ИДДок_ТекБазы IS NULL"
|
|||
22
DCKiller
02.12.11
✎
06:39
|
+(21) но тогда опять же встает проблема, что в базе-источнике ИД-шек может не хватить :) ибо документов предполагается ввести до фига...
|
|||
23
skunk
02.12.11
✎
06:39
|
ид в клюшках это обычное число ... записаное 36-ричноей системе ... http://club.shelek.ru/viewart.php?id=132
Номер средствами самой 1С можно получить использую функцию _IdToStr() и наоборот получит десятичное число из его тридцати шестеричного представления _StrToId(). |
|||
24
Rie
02.12.11
✎
06:42
|
(20) А если тупо искать максимальный и инкрементировать?
(22) Или заведомо хватит. Или полный П - поскольку размер IDDOC не увеличить. |
|||
25
DCKiller
02.12.11
✎
06:49
|
(23) Это я уже понял, спасибо :) собственно, вопрос в том, как сгенерить уникальный ИД
(24) Как в запросе можно преобразовать 36-ричное число в 10 систему? |
|||
26
Rie
02.12.11
✎
06:53
|
(25) А зачем в запросе? Узнай, сколько номеров надо будет, создай таблицу - и из неё черпай.
|
|||
27
DCKiller
02.12.11
✎
06:54
|
(26) По ходу, к такому варианту всё и идет. Нужно ведь еще сгенерить и обычные номера документов...
|
|||
28
skunk
02.12.11
✎
06:59
|
(27)кстати иды не всегда подряд свободны ... так что опять надо проверять
|
|||
29
Rie
02.12.11
✎
07:00
|
(28) Если найти максимальный - то дальше всё будет свободно.
|
|||
30
skunk
02.12.11
✎
07:01
|
(29)если максимальный будет - "ZZZZZ"
|
|||
31
Rie
02.12.11
✎
07:04
|
(30) IMHO, проще глянуть, какой он там максимальный. Если ZZZZZZ - тогда искать свободные IDDOCи, а если от максимума номеров под новые хватит - шагать от максимума.
|
|||
32
Mikeware
02.12.11
✎
08:14
|
(15) Там не только подчиненные документы хранятся...
|
|||
33
Mikeware
02.12.11
✎
08:22
|
(25) а какие проблемы? примеры функций валяются и на SQL.ru, и на 1спп
|
|||
34
Андрей_Андреич
naïve
02.12.11
✎
08:25
|
Что-то мне не верится, что ядро 1С будет искать свободные IDDOCи - это же верный путь к нарушению ссылочной целостности. Так что не надо искать проблемы там, где их быть не должно.
|
|||
35
DCKiller
02.12.11
✎
09:11
|
(32) Да, ещё там графы отборов необщих реквизитов документов. Но в данном случае это непринципиально.
|
|||
36
Ёпрст
гуру
02.12.11
✎
09:14
|
(0)http://www.1cpp.ru/docum/icpp/html/ODBC.html#getnewid
И.. врят ли скорость будет больше, чем штатная запись в иб |
|||
37
Дядя Васька
02.12.11
✎
09:15
|
1sjourn еще как минимум. Ну и ид новый нужен, хз как одинэска среагирует на тот что сам сгенеришь, может и обидиться. В общем не делает так никто.
|
|||
38
VladZ
02.12.11
✎
09:15
|
(0) При желании и в космос можно полететь... Тебе для чего?
|
|||
39
Дядя Васька
02.12.11
✎
09:17
|
(37)+ и еще там перекрестные ссылки какие-то есть, структуры которой никто не знает. Короче проще штатно, целее будет.
|
|||
40
Ёпрст
гуру
02.12.11
✎
09:17
|
(37) Почему никто ?!
Я делал.. и справочники и доки. |
|||
41
Ёпрст
гуру
02.12.11
✎
09:18
|
(39) перекрестные ссылки ?!
:)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) |
|||
42
Дядя Васька
02.12.11
✎
09:20
|
(41) Единственная таблица которая хз зачем. Нигде нормального описания не нашел, а теперь уже и не помню что вообще о ней читал, но вроде как имеет некоторое отношение.
|
|||
43
Дядя Васька
02.12.11
✎
09:21
|
(40) После этого первым делом ТиИ? ))
|
|||
44
Ёпрст
гуру
02.12.11
✎
09:22
|
(42) какая таблица ?? 1scrdoc ? Или что ?
|
|||
45
DCKiller
02.12.11
✎
09:22
|
(38) Для массового ввода документов. Если бы не было так сильно нужно, то и не спрашивал бы.
(43) Эх, сударь... ограниченный вы человек, не в обиду вам будь сказано. |
|||
46
Mikeware
02.12.11
✎
09:23
|
(39) структура известна, назначение известно....
|
|||
47
DCKiller
02.12.11
✎
09:23
|
+(45) Там все предельно ясно: заполняется таблица журнала+Таблица шапки+таблица ТЧ. В чем может быть проблема?
|
|||
48
Дядя Васька
02.12.11
✎
09:23
|
(44) она
|
|||
49
Mikeware
02.12.11
✎
09:24
|
(45) так у нас тут вообще "узкий круг ограниченных людей" :-)
|
|||
50
Ёпрст
гуру
02.12.11
✎
09:25
|
(48) дык на:
http://www.script-coding.com/v77tables.html#1.2.3. там вообще никчего сложного нет - родитель да предок для документов, для граф отборов тоже ничего сложного. |
|||
51
Дядя Васька
02.12.11
✎
09:25
|
(45) Да просто записью в таблицы я как бэ баловался, только другой немного. Делал УРИБ из разных баз. Ну в смысле сначала тупо объединением делал их одинаковыми, а потом иды подгонял, чтобы они поверили что одна база. Усе получилось, но без ТиИ после такой записи помнится не обходилось. Какие-то служебные я не заполнял, а тупо сносил и при ТиИ они новые создавались.
|
|||
52
DCKiller
02.12.11
✎
09:27
|
(44) Раз уж вы здесь, то не подскажите по такой еще проблеме: вы тут мне подсказали в одной из последних веток, как упростить перенос данных между базами SQL. В-общем, всё получилось, теперь работает на ура. Но есть еще вопрос: в данном случае удобство использования одного запроса к обеим базам было в том, что перенос между базами осуществлялся как SQL --> SQL. А как быть, если обмен будет в виде DBF --> SQL? И еще: где можно почитать про аналогичный перенос данных на файловых базах (через фоксовый провайдер)?
|
|||
53
DCKiller
02.12.11
✎
09:29
|
(51) Мне после прямой записи в базу никакого ТИИ не требовалось.
|
|||
54
Ёпрст
гуру
02.12.11
✎
09:31
|
(52) а какя разница ? синтаксис немного другой при использовании oledb и поля немного отличаются в sql и dbf в части date_time_iddoc и раздельного date time в dbf, ну и еще, по мелочи - типа вида дока и маркера удаленных записей\групп справочников
|
|||
55
DCKiller
02.12.11
✎
09:32
|
(36) Опа! Надо же, "как много нам открытий чудных..." :)
Почему скорость не будет выше? |
|||
56
Mikeware
02.12.11
✎
09:33
|
(55) а почему она должна быть выше? за счет отсутвия блокировки, чтоль? так тогда ты другим напоганишь....
|
|||
57
DCKiller
02.12.11
✎
09:34
|
(54) Про эти мелочи я знаю! Что в синтаксисе тоже отличия небольшие есть, тоже в курсе. Но если одна база файловая, а другая скуль, то как к ним обеим в одном запросе подцепиться?
(56) Других в базе в этот момент, кстати, не будет... |
|||
58
Ёпрст
гуру
02.12.11
✎
09:36
|
(57) через фоксовый провайдер
|
|||
59
Ёпрст
гуру
02.12.11
✎
09:39
|
+58
+ присоединитьмд() ..на 1cpp есть примеры запросов+ использование метапарсера для второй базы, чтоб не ручками имена полей писать + синхронизация по коду.. у меня есть пример запроса к внешней базы дбф-дбф, переделать под скуль-дбф не составит труда. |
|||
60
DCKiller
02.12.11
✎
09:39
|
(58) Т.е. использовать строку соединения вида
Соединение = "Provider = VFPOLEDB.1; Data Source = "+КаталогИБ()+"; Mode = ReadWrite; Collating Sequence = Machine"; ? |
|||
61
DCKiller
02.12.11
✎
09:39
|
(59) Можно глянуть, плиз?
|
|||
62
Ёпрст
гуру
02.12.11
✎
09:52
|
||||
63
DCKiller
02.12.11
✎
09:54
|
(62) Благодарствую
|
|||
64
temsa
02.12.11
✎
10:01
|
(0) Переходи на сап и не мучай 1С.
|
|||
65
DCKiller
02.12.11
✎
10:02
|
(64) Спасибо, подумаем :)
|
|||
66
Злой Бобр
02.12.11
✎
12:01
|
(0) Ну делал подобную хрень. И вопрос был не в скорости записи, а в гребаной 1С-ной блокировке таблицы документов (руки б повыдергивал идиотам которые сделали такую хрень). Т.е. когда сидит штук 8 операторов и фигачат документы, то этот затык просто выводил всех из себя.
Еще раз - это когда у тебя куча народу дергает документы на запись. В подавляющем большинстве случаев отсилы 2-3 человека тусуются с документами, остальные смотрят отчеты или справочники. Поэтому если у тебя нет десятка очумелых операторов - нестоит мучать то что не ненужно. (3) Значит нужно было уволить прога который не мог допилить перенос, а пользовал в том виде. Хотя может он любитель садо-мазо ?.. |
|||
67
МихаилМ
02.12.11
✎
12:11
|
не забудте про вероятность ввода двух документов
с одинаковым id |
|||
68
Mikeware
02.12.11
✎
12:23
|
(66) В таком случае можно сгенерить в журнале в одной блокировке кучу записей. А уже после - добавлять и заполнять Ш+ТЧ+ссылки, там блокировка не нужна.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |