![]() |
![]() |
![]() |
|
v7: Блокировка таблиц при проведении документа | ☑ | ||
---|---|---|---|---|
0
1Сергей
21.02.14
✎
22:38
|
Пишу прямой запрос без использования ВК, на ADODB. При проведении хочу получить остатки по всем материалам.
В EM скуля запрос отрабатывает меньше секунды, в 1С зависает и отваливается по таймауту через некоторое время. Давно читал, что вроде, 1С блокирует таблицы регистров и прочие в момент проведения документа. Так ли это? В этом моя проблема? Можно ли это обойти не сильно изменяя конфигурацию и не используя ВК?
|
|||
1
КонецЦикла
21.02.14
✎
22:42
|
Используй 1С++, все это в три строки с помощью ВТ делается, в конструкторе
|
|||
2
Torquader
21.02.14
✎
22:42
|
Я бы через ADO в таблицы 1С вообще бы не лазил, так как может получиться совсем не то, что хотят.
|
|||
3
1Сергей
21.02.14
✎
22:44
|
(2) В чем принципиальное отличие прямого запроса 1С++ от чистого АДО? Наличие метапарсера и виртуальных таблиц?
|
|||
4
1Сергей
21.02.14
✎
22:46
|
Мне одмин не дает права на регистрацию длл
|
|||
5
Torquader
21.02.14
✎
22:47
|
(3) В правильном доступе к структуре таблиц.
|
|||
6
1Сергей
21.02.14
✎
22:49
|
(5) сам понял что сказал? структура таблиц - это то, что описано в dds-файле
|
|||
7
Torquader
21.02.14
✎
22:51
|
(6) Индексы в 1С отличаются от того, что ожидает ADO, а без индексов - зачем вам вообще лезть в таблицы ?
|
|||
8
Torquader
21.02.14
✎
22:51
|
Потом, стандартный драйвер ADO вообще с dbf не всегда правильно работает.
|
|||
9
1Сергей
21.02.14
✎
22:53
|
мне дбф не надо.
Ну, ты прав, конечно - много эффективнее использовать 1с++. Но, нет такой возможности |
|||
10
Torquader
21.02.14
✎
22:55
|
(9) Просто, Codebase который внутри 1С, не совсем правильно индексы строит, и если работать без него, то можно получить совсем не то.
Проще договорится про dll, особенно, если её только в папку с программой положить. |
|||
11
Torquader
21.02.14
✎
22:56
|
Или вы в sql решили заглянуть ?
|
|||
12
1Сергей
21.02.14
✎
22:56
|
всё в SQL
никаких DBF |
|||
13
Torquader
21.02.14
✎
22:57
|
В sql блокировки живут в отдельных файлах, но, если открывается транзакция, то можно с ней "столкнуться".
|
|||
14
Мигало
21.02.14
✎
23:19
|
(6) Дятил. В DD/DDS описываетсся структрура, для отладки.
Реквизиты, например, справочника: МойНеимоверноБольшойНДС, Число, 19, 2 МойНеимоверноБольшойСумма, Число, 19, 2 Отобразяться как: (P)МойНеимоверноБоль ;) Структура БД в клюшках это набор произвольных полей вида SPхххх и предопределенных ID, PARENTID, CODE, DESCR, ISFOLDER etc. Как для DBF так и для "всё в SQL никаких DBF" Тебе в (2,5) сказали - "в правильном доступе к структуре таблиц" 1С++ работает в контексте клюшек. ADO - сбоку от контекста клюшек. Вот, мля, что за люди - на лобке первый волос пробился - а все в гуру метят. |
|||
15
1Сергей
21.02.14
✎
23:28
|
(14) Ну, ответь, гуру, дятлу. Моя проблема в блокировках или нет?
|
|||
16
КонецЦикла
21.02.14
✎
23:30
|
(15) Убей админа и получи доступ к плюшкам.
|
|||
17
КонецЦикла
21.02.14
✎
23:31
|
Кстати последние релизы уже давно не требуют админских прав вроде бы и регистрации насильной. Но могу ошибаться... когда-то для этой цели юзал vk loader.
|
|||
18
1Сергей
21.02.14
✎
23:32
|
(16) Знаешь, на мисте первая часть постов в стиле "какой автор mooduck" и только потом идёт вторая часть - с правильным ответом.
Может перейдём ко второй части? :) |
|||
19
1Сергей
21.02.14
✎
23:36
|
мне надо будет сделать так, чтобы я проводил документы прямым запросом, а все другие - как прежде. но, чтобы результат проведения был одинаков. реально?
|
|||
20
Мигало
21.02.14
✎
23:39
|
(15) Походу дела проблема в нежелании вникать в "первую часть" с правильным ответом.
Ты эксперимент ставил ? Или, гладя на форум с глазами срущей собаки, готов постоянно вопрошать "Моя проблема в блокировках или нет?" (19) Реально |
|||
21
Torquader
21.02.14
✎
23:39
|
(19) Ну, если в этот момент никто в базу не лезет (что можно сделать через блокировки или транзакции), то можно попробовать.
Реально даже в момент проведения основные итоги по периоду пересчитать - только вопрос - нужно ли. |
|||
22
Torquader
21.02.14
✎
23:41
|
Самый главный вопрос - зачем ?
|
|||
23
Мигало
21.02.14
✎
23:42
|
(22) Хочет партии раскидать прямым запросом, например
|
|||
24
Torquader
21.02.14
✎
23:42
|
(23) И думает, что от этого будет лучше ?
|
|||
25
Z1
21.02.14
✎
23:42
|
(0) Это можно сделать одной командой даже на стандартном языке запросов. но лучше так не делать.
а то получиться как в анекдоте -"Вы можете печатать 1000 знаков в мигуту" -"Могу, но такая фигня получается" |
|||
26
1Сергей
21.02.14
✎
23:42
|
(21) т.е. прямой запрос от 1С++ не делает блокировок? Чет, не пойму к чему эта оговорка "если в этот момент никто в базу не лезет "
|
|||
27
Мигало
21.02.14
✎
23:43
|
(24) Быстрее - точно.
|
|||
28
Torquader
21.02.14
✎
23:43
|
(26) 1С++ работает через тоже соединение.
Если открыть ещё одно, то можно через два соединения сделать блокировку самого себя. |
|||
29
Torquader
21.02.14
✎
23:44
|
(26) Например, 1С установила блокировку элемента справочника, а мы в него пишем - блокировка, то в файле ставится.
|
|||
30
1Сергей
21.02.14
✎
23:44
|
(25) черный запрос отрабатывает долго. Точнее док проводится секунду, но большой период проводится довольно долго
|
|||
31
1Сергей
21.02.14
✎
23:45
|
(29) в каком файле? вроде, всё же в скуле блокируется?
|
|||
32
Z1
21.02.14
✎
23:46
|
(3)
>>> чем принципиальное отличие прямого запроса 1С++ от чистого АДО? Ни в чем. sql серверу все равно откуда пришел запрос. просто с 1с++ гораздо удобней работать + за счет некоторых фишек 1с++ выполняется быстрее чем ado имеется ввиду обработка результата запроса на самом клиенте |
|||
33
Мигало
21.02.14
✎
23:47
|
Может если "док проводиться секунду" и "большой период проводиться долго" будем выставлять на проведение месяц, дожидаться пока проведется. Закрывать 1С, открывать по новой и проводить следующий период (ну работает она криво с памятью) ?
Таки не дешевле кнопки потоплать чем огород городить ? |
|||
34
Z1
21.02.14
✎
23:48
|
(4) ну это наверное не лечиться. (как прог и админ должны делать общее дело)
пожешь показать ему пост 32 из этой ветки. |
|||
35
Torquader
21.02.14
✎
23:49
|
(31) Открытые на редактирование элементы блокируются в файле.
|
|||
36
1Сергей
21.02.14
✎
23:50
|
(32) я так и думал, что на скорость это не влияет
|
|||
37
1Сергей
21.02.14
✎
23:51
|
И потом, на скорость ведь не влияет - монопольно я сижу или нет?
|
|||
38
Torquader
21.02.14
✎
23:52
|
(37) А что SQL про монопольность вообще знает ?
|
|||
39
Torquader
21.02.14
✎
23:54
|
Ладно - мне пора спать - удачи вам в ваших начинаниях.
Если всё делать аккуратно, то всё получится. SQL - вещь очень хорошая. |
|||
40
Z1
21.02.14
✎
23:55
|
(15) скорее всего твоя проблема в коде из (0)
что ты этим кодом хочешь получить как бы первая мысль а может не нужны остатки по всем матерьялам а только тем что есть в документе и.т.д. |
|||
41
Мигало
21.02.14
✎
23:55
|
(38) Singe user
|
|||
42
1Сергей
21.02.14
✎
23:56
|
(40) я туда и передаю только список материалов
|
|||
43
1Сергей
22.02.14
✎
00:00
|
(39) спасибо, тебе
|
|||
44
Z1
22.02.14
✎
00:01
|
(30) ответь на
select @@version и вообще поподробней о размере базы железе сервера и его дисковой системе |
|||
45
1Сергей
22.02.14
✎
00:05
|
(44) на моей машинке SQL2000
А на боевой вообще 7.0 Там одмин очень консервативный - "работает - не трожь!" Вот оно и работает уже лет 10, не меньше. Базёнка около 12 гиг. 8 филиалов. пользаков около сотни |
|||
46
1Сергей
22.02.14
✎
00:05
|
нетленка
|
|||
47
Z1
22.02.14
✎
00:06
|
>>> (32) я так и думал, что на скорость это не влияет
на какую скорость если речь идет о скорости выполнения запроса ms sql сервером - то не влияет. Если речь о том как отрабатывается результат запроса в самом модкле проведения то код на 1с++ выполняется быстрее хотя бы за счет типизации и получение ее сразу а не по каждой записи отдельно. |
|||
48
1Сергей
22.02.14
✎
00:06
|
вот, надо за 6 лет все доки провести
|
|||
49
1Сергей
22.02.14
✎
00:07
|
(47) это понятно
|
|||
50
Ёпрст
гуру
22.02.14
✎
00:10
|
(0)
1cpp не требует регистрации в реестре и наличие админских прав.. + наличие типизации на выходе, тебе же, при запросе в адо нужно еще и результат потом типизировать самому.. |
|||
51
Ёпрст
гуру
22.02.14
✎
00:12
|
а при массовом перепроведении.. нужно глядеть в сторону реконект найтив или переход на 2005-2008 скуль
|
|||
52
1Сергей
22.02.14
✎
00:12
|
(50) Это я уже реализовал
Там в доках 10-15 строк, не критично |
|||
53
Z1
22.02.14
✎
00:13
|
(42) Извени я не внимательно прочитал твой запрос в 0
Вот тебе и ответ процентов на 99 этот список матерьялов ты получаешь в модуле проведения получаешь этот список (ИДыМатериалов+ ) на языке 1с и очень нерационально тратя время которое особо ценно именно в модуле проведения. |
|||
54
Ёпрст
гуру
22.02.14
✎
00:15
|
а так.. хинты воткни в текст запроса.. не будет задержки
|
|||
55
1Сергей
22.02.14
✎
00:17
|
(54) это как?
|
|||
56
Z1
22.02.14
✎
00:18
|
(45) а в 0 о каком сервере мы говорим
в sql200извесная ошибка замедления массового проведения есть ли ошибка в sql 7 даже не помню. кстати в 1с++ для этой ситуации реализован reconect интересно а твой админ ездит на каком нибудь газ-21 даже если и ездит газ-21 то все равно его никак нельзя сравнить с современными машинами |
|||
57
Ёпрст
гуру
22.02.14
✎
00:18
|
(54) (nolock) воткни во from после алияса к каждой таблички
|
|||
58
1Сергей
22.02.14
✎
00:20
|
беда в том, что оно вообще не проводится. Всегда вылетает по таймауту.
|
|||
59
Z1
22.02.14
✎
00:20
|
(54) не поможет. точнее для запроса то поможет но в целом нет.
|
|||
60
Z1
22.02.14
✎
00:23
|
(58) поставь как говорит 57 вылетать не будет
но надо будет очень аккуратно писать запросы. интересно а ты можешь ответить почему вылетает по таймауту |
|||
61
Ёпрст
гуру
22.02.14
✎
00:30
|
(0)
и еще: 1.воткни в регистр галку быстрая обработка движения и выкини соединение с журналом 2. выкини все нелепые case из текста запроса.. они там не нужны, всё делается с помощью умножения.. |
|||
62
1Сергей
22.02.14
✎
00:32
|
(61) от джёрнала уже избавился, сейчас кейсы грохну, спасибо
|
|||
63
1Сергей
22.02.14
✎
00:33
|
АДОДБ числовые поля возвращает строками. Так и должно быть?
|
|||
64
Ёпрст
гуру
22.02.14
✎
00:33
|
3. запрос тоже какой-то бредовый.
нужно делать union all запроса к табличке итогов и таблички движений( если останки еще не на ТА ), но ни как это не левое соединение.. ты половину просто прое..л |
|||
65
Ёпрст
гуру
22.02.14
✎
00:36
|
посмотри готовые запросы тут
http://script-coding.com/v77tables.html#3.4.2.2. и тут http://script-coding.com/Direct_queries.html#7. |
|||
66
Ёпрст
гуру
22.02.14
✎
00:38
|
но учти, если делать через 1cpp, то там в виртуальной табличке итогов реализован более правильный вариант - расчет итогов в зависимости от даты - либо расчет от ТА, либо расчет от предыдущего итога, в зависимости от даты
|
|||
67
Ёпрст
гуру
22.02.14
✎
00:38
|
т.е, он тупо быстрее будет
:) |
|||
68
1Сергей
22.02.14
✎
00:39
|
(65) спасибо
(66),(67) Это понятно |
|||
69
Ёпрст
гуру
22.02.14
✎
00:48
|
+66 т.е остаток не на ТА получается либо "прибавлением" движений к предыдущему итогу, либо "отнятием" движений от итога на ТА, если дата ближе к концу периода.
|
|||
70
1Сергей
22.02.14
✎
00:55
|
переделал
ругается ТаблицаОстатковМатериалов.ОстатокМатериала = DBRecordSet.Fields("OstatokMateriala").Value; ____________________док___: Тип переменой не поддерживается |
|||
71
Ёпрст
гуру
22.02.14
✎
01:05
|
в первом запросе, п..ц же написан :)
|
|||
72
Ёпрст
гуру
22.02.14
✎
01:05
|
зачем тебе все движения регистра меньше позиции документа ???
:) |
|||
73
Ёпрст
гуру
22.02.14
✎
01:07
|
ну и.. подзапрос там ни разу не нужен, там нужно просто передать позицию дока в запрос и ограничить период 2-мя датами.. пред дата итога и позиция дока.. усё..
|
|||
74
1Сергей
22.02.14
✎
01:07
|
(72)
| WHERE | RegistrDvizh.DATE_TIME_IDDOC > '"+ДатаНачалаПериода+"' |
|||
75
1Сергей
22.02.14
✎
01:09
|
(73) а как переделать позицию дока в что-то подобное "200801149J9W9CFI92NUZ00"?
|
|||
76
1Сергей
22.02.14
✎
01:25
|
Всё заработало, спасибо Ёпрст !!!!
|
|||
77
1Сергей
22.02.14
✎
01:26
|
ну, и всем принявшим участие, тоже спасибо
|
|||
78
Z1
22.02.14
✎
09:32
|
(77)
Переделай ado на 1c++ убери (nolock) хотя это и не очень принципиально именно здесь сделай типизацию входных параметров sql запроса и типизацию результирующего множества получишь еще суммарный выигрыш этой сессии процентов 15-20% ( а может и больше ) и меньшую нагрузку на сам ms sql сервер ( за счет меньшего времени блокировки и за счет то что нет лишнего conecta). ну и для 100 пользователей купите хороший сервер (само железо) и ms sql 2008 или sql 2012 ( ну и правильно все это настроить - судя по ветке как бы очень сомнительно что твой админ сможет все грамотно настроить) как бы эти вложения очень быстро окупаются и обоснование покупки железа с sql2008 для руководсва очень понятны чем обоснование того что переписал какой-то один мифический запрос на какой-то другой мифический запрос. |
|||
79
DrZombi
гуру
22.02.14
✎
10:04
|
(0) Пиши всегда в запросах "NOLOCK"
Жесть. я бы тебя за такой запрос высек бы :) Ты же своим запросом вообще захватываешь таблицу монопольно. :) |
|||
80
DrZombi
гуру
22.02.14
✎
10:05
|
(78) Толку? Ты посмотри. Он обращается к журналу документа в монопольном режиме, без NOLOCK-а :)
|
|||
81
Z1
22.02.14
✎
10:31
|
(80) Правильных советов для (0) в ветке дано достаточно много.
Как (0) ими воспользуется или нет это его проблемы, ну также кто-то другой может тоже для себя что либо полезное почерпнет из ветки. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |