|
Самый быстрый способ найти ссылку по реквизиту | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
03.10.14
✎
07:22
|
К нашей базе подключается COM объект и создает документ. Перед созданием происходит проверка наличия документа по входящему номеру т.е если он есть, то документ не создается. Проблема в том, что бывают сбои, когда подключается сразу 2 com-объекта и одновременно запускают создание документа. Каждый выгружает с один документ с одинаковым номером XXX
Т.е еще не записался документ 1-го com-объекта, а 2-й уже создает свой документ. Это приводит к тому, что в базе могут оказаться 2 одинаковых объекта. Вопрос: какой самый быстрый способ записать в базу, что сейчас происходит создание документа с номером XXX, т.е забронировать этот номер и не давать 2-му com-объекту создавать с этим номером. |
|||
1
BuHu
03.10.14
✎
07:25
|
они постоянно подключены или после своих операций отваливаются?
|
|||
2
ChiginAV
03.10.14
✎
07:30
|
(0) Проверяй наличие номера не перед созданием, а перед записью
|
|||
3
ИС-2
naïve
03.10.14
✎
07:39
|
(1) отваливаются
(2) так и сделано |
|||
4
Escander
03.10.14
✎
07:39
|
(0) создай РС где измерения Год и номер объекта и сначало писать в РС а потом, если не отработало исключение - сам документ
|
|||
5
Escander
03.10.14
✎
07:41
|
а хотя нафига? Включить проверку уникальности номеров у документов и всё
|
|||
6
ObjectRelation Model
03.10.14
✎
07:45
|
(5) Входящий номер это походу реквизит
|
|||
7
Escander
03.10.14
✎
07:45
|
(6) тогда см (4)
|
|||
8
Escander
03.10.14
✎
07:46
|
+ (4) год создавать если у этого реквизита периодичность = Год
|
|||
9
Галахад
гуру
03.10.14
✎
07:50
|
А запретить работу пользователю в двух сеансах?
|
|||
10
ИС-2
naïve
03.10.14
✎
07:56
|
(5) (9) это реквизит. Стороняя программа скидывает к нам в базу заказы покупателя
|
|||
11
Escander
03.10.14
✎
07:57
|
(10) ну так см (4)
|
|||
12
hhhh
03.10.14
✎
08:01
|
(10) еще можно у ревизита "ВходящийНомер" поставить галочку "Индексировать", чтобы побыстрее искало.
|
|||
13
ИС-2
naïve
03.10.14
✎
08:09
|
(12) уже сделано
|
|||
14
vasbur
03.10.14
✎
08:12
|
пусть ком перед созданием блокирует како1-нибудь фиксированный объект - тогда второй процесс отвалится на этапе блокировки
|
|||
15
BuHu
03.10.14
✎
08:12
|
(3) может как нибудь проверять ,что уже есть одно соединение и в этом случае отваливаться ничего не делая ?
|
|||
16
Ymryn
03.10.14
✎
09:05
|
(0) как вариант могу предложить записывать в РежимеОбмена.Загрузка = Истина. А потом если уже надо будет нормально отработать, еще раз записывать (проводить).
|
|||
17
ИС-2
naïve
03.10.14
✎
09:28
|
(15) это идет скидывание заказов с мобильной торговли - не известно у одного агента поднялось 2 соединения или скидывать 2 разных агента
(16) задача в том, чтобы такое вообще не появлялось |
|||
18
MiniMuk
03.10.14
✎
09:42
|
Так понимаю что по аналогии с рибом префик агента не прделагать?
|
|||
19
MiniMuk
03.10.14
✎
09:43
|
Если агент будет писать
документ.создать() документ.Записать() Документ.Заполнить(моиданные) документ.толипровеститолизапсать() |
|||
20
PLUT
03.10.14
✎
09:43
|
(0) открой для себя регистр сведений "Соответствия объектов для обмена"
|
|||
21
PLUT
03.10.14
✎
09:44
|
+(20) там всё просто - сц ылка из базы источника (ЗначениеВСтрокуВнутр()) и сц ылка в базе приемнике
|
|||
22
DrZombi
гуру
03.10.14
✎
09:46
|
(0) Используй РС для резервирования номера. Так же на основе этого РС нужно предусмотреть Запись, не до запись, это когда номер зарезервировали, но не дописали :)
Так же предусмотреть очищение мертвых резервов, через регламентное задание :) |
|||
23
DrZombi
гуру
03.10.14
✎
09:48
|
+(0) Тогда ,если запись в РС есть, то проверяешь, на каком она статусе, если свободна, то захватываешь, если не получилось захватить, то понимаешь ,что облом и другое СОМ соединение должно либо уничтожиться, либо продолжить работу с другими объектами :)
|
|||
24
ИС-2
naïve
03.10.14
✎
12:16
|
можно сделать что-то через блокирование реквизита? Например так:
ВЫБРАТЬ ЗаказПокупателя.Ссылка ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ГДЕ ЗаказПокупателя.UID = &UID ДЛЯ ИЗМЕНЕНИЯ ? |
|||
25
ИС-2
naïve
03.10.14
✎
13:22
|
ап
|
|||
26
ИС-2
naïve
06.10.14
✎
08:20
|
ап
|
|||
27
Fragster
гуру
06.10.14
✎
08:22
|
создай константу, перед началом создания ставь на нее исключительную блокировку и все, тогда все "лишние" процессы будут ждать
|
|||
28
ИС-2
naïve
06.10.14
✎
08:29
|
(27) тогда работа компании встанет
|
|||
29
wormselfish
06.10.14
✎
08:32
|
(0) как так они одновременно записывают документ и не видят чужой? Может используется длинная транзакция?
А иначе можно в регистр сведений записывать сперва реквизит нового документа, потом записывать документ, потом удалять из регистра значение реквизита. И еще, при каждой новой записи проверять регистр, есть-ли там запись с таким реквизитом, если есть, то значит в данный момент происходит запись другим процессом. |
|||
30
wormselfish
06.10.14
✎
08:34
|
(28) Не встанет. Не всем же нужна эта константа.
|
|||
31
wormselfish
06.10.14
✎
08:38
|
И все таки, почему нельзя сделать разный префикс реквизитов для разных клиентов?
Чтобы первый клиент записывал документ с реквизитом например "А10008", а второй с реквизитом "А20008". |
|||
32
Fragster
гуру
06.10.14
✎
10:06
|
(28) встанет только "лишнее" ком соединение
|
|||
33
ИС-2
naïve
06.10.14
✎
10:08
|
(32) константа же заблокируют всю загрузку - будет обрабатывать по одному com соединению
|
|||
34
Fragster
гуру
06.10.14
✎
10:19
|
(33) а тебе что надо?
|
|||
35
wormselfish
06.10.14
✎
11:15
|
(33) Ты же можешь перепрограммировать COM клиентов? Или это сторонние программы?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |