Имя: Пароль:
1C
1С v8
РИБ - блокировка при обмене
, ,
0 Enya
 
19.09.11
13:15
Добрый день! Существует такая проблема: стоит розница РИБ - обмен настроен каждый час(выгрузка и загрузка с обоих сторон). Обмен настроен по расписанию. Суть проблемы в том, что бывают такие моменты когда идет пробитие чека и стартует обмен(загрузка данных) - тут таки происходит ошибка пробития чека(т.е обмен все блокирует), самое страшное и серьезное в этой ситуации, то что стали пропадать чеки время от времени(бесследно),т.е обмен включился во время записи чека в базу, произошла блокировка и чек не куда не сохранился.
Может кто то уже сталкивался с такой проблемой. Или есть какие мысли по этому поводу, как лучше сделать, чтобы избежать такой ситуации?!
1 Renium
 
19.09.11
13:22
Я не сталкивался, но мне кажется, что если положить под SQL то проблему можно решить раз и навсегда, обойдясь без 1С-ного обмена, делая обмен средствами SQL.
2 Ork
 
19.09.11
13:25
(0) Средствами 1С - выставлять флаги "идет обмен" и "идет проведение чека". После выполнения заданий - сбрасывать. Перед началом обработки проверять. И не выполнять до сбрасывания флага.

В качестве флага можно пользовать константу.
3 Enya
 
19.09.11
13:39
(1)немного не поняла, поясни пожалуйста.
(2) есть похожая идея, т.е после пробития чека смотреть нужен обмен или нет, использяю константу. Но не очень бы хотелось прибегать к такому способу. Просто надеюсь на тот, что есть какие то стандартные возможности платформы о которых я не в курсе. Платформа кстати 8.2.
4 Renium
 
19.09.11
13:48
База кладется под СУБД и представляет собой не один файл *.1CD, а множество сравнительно небольших файлов, организованных в таблицы. Записью, чтением и блокировками управляет СУБД. Приложение 1с "общается" с СУБД через программный продукт "1С сервер"... Имея под СУБД две базы и задачу синхронизации данных между ними, можно средствами СУБД организовать миграцию данных. При этом данные из одной базы в другую будут попадать в течении нескольких секунд.
5 Renium
 
19.09.11
13:49
Описал сильно упращенно, но по сути верно.
6 Enya
 
19.09.11
13:56
(5)не стоило так прям расжовывать=) Но спасибо за старание. Просто вопрос в том,что они обе должны быть SQL?!
Одна из этих баз SQL - главный узел. Но обмен настроен с помощью файлов, которые заливаются на FTP.
7 Renium
 
19.09.11
14:14
Потому что подчиненная файловая. Поэтому обмен через файлы и FTP. Да, обе должны быть SQL.
8 georgebgk
 
19.09.11
14:23
Может быть, при открытом чеке нужно тормознуть обработчик ожидания, который следит за вашим расписанием? А при закрытии чека снова включать.
В КА он называется "ПоддержкаРегламентныхЗаданийДляФайловойВерсии", в рознице не знаю.
Недостаток в том, что в этом случае остановятся все регламентные задания, пока не закрыт чек.
9 Enya
 
19.09.11
14:57
(8)вот это больше мне нравится. Попробую что нить типо этого сделать!!! Идейка не плохая!!!
10 Ткачев
 
19.09.11
15:01
Убрать вообще чеки из обмена, и база расти не будет и тормозить меньше будет.
11 Axel2009
 
19.09.11
15:01
(1) не поможет
12 Ткачев
 
19.09.11
15:03
+(10)Если очень надо чеки, сделать выгрузку их после закрытия смены.
13 Enya
 
19.09.11
15:04
(10)нужны. сейчас в рознице много отчетов которые костароены именно на чеках!
14 Ткачев
 
19.09.11
15:05
(13)Делайте тогда выгрузку только со статусом "Архивный"
15 Axel2009
 
19.09.11
15:09
(14) т.е. в 1с идет перегрузка не сохраненных новых документов?? и изза этого блочится вся перегрузка? =)
16 Enya
 
19.09.11
15:09
(10)(12)Не особо поняла, смысл выгрузки/не выгрузки чеков в центральный узел?!
17 Ткачев
 
19.09.11
15:12
(15)(16)У меня все тупило из-за этих чеков на продуктовом магазине, я убрали их вообще из обмена и все стало более-менее лучше работать, т.е. чеки у меня только на кассе.
18 Ткачев
 
19.09.11
15:14
Если очень надо их то (2) больше всего подходит.
Тупить тогда оба будете и кассир и обмен.
19 Алистар
 
19.09.11
16:28
Нужно сделать чтобы приоритет был у чеков. Пусть при блокировках вылетат обмен а не чек.
20 Живой Ископаемый
 
19.09.11
16:35
2(19) рассказывай как.
21 Алистар
 
19.09.11
16:54
(20)

Можно уменьшить параметры в

ПланыОбмена.ЗаписатьИзменения(,)
ПланыОбмена.ПрочитатьИзменения(,)

Посмотреть нет ли где НачатьТранзакцию ЗакончитьТранзакцию

Нет ли во время обмена тяжелых запросов.
22 Vovan1975
 
19.09.11
17:03
(0) а что собственно блокируется при обмене то?
23 Axel2009
 
19.09.11
17:22
(21)(22) во время обмена блочится таблица плана обмена на время всей выгрузки. и любой объект, попавший под прицел нельзя будет перезаписать.
24 Enya
 
20.09.11
06:39
(19)Мысль конечно гениальная, первое что приходит в голову. А второе, что приходит - это как это сделать?!
(22)не происходит запись или пробитие чека на фискальном регистраторе!
(23)да да да!!!
25 Ткачев
 
20.09.11
07:16
(0)А вы чем торгуете (продукты, одежда и т.д.) ?
26 Aleksey
 
20.09.11
07:17
(19) 1С это не даст сделать. Более того на таблицу изменений нельзя даже наложить блокировку. Т.е. выгружается и блокируется вся таблица
27 Enya
 
20.09.11
07:51
(25)белье!
28 Enya
 
20.09.11
07:52
на данный момент, выходом кажется (8), но нужно проверить сработает или нет.
29 Aleksey
 
20.09.11
07:53
(27) А для чего такой частый обмен?
Может сделать 2 обмена? Каждый час загрузка прихода и справочника, и вечером выгрузка документов
30 Aleksey
 
20.09.11
07:53
(28) И как он поможет, если обмен уже начался?
31 Enya
 
20.09.11
07:54
(29) приход бывает несколько раз в день, а еще нужны некоторые данные. Поэтому такой частый обмен и не как по другому.
32 Ткачев
 
20.09.11
07:55
А можно вооще не делать, обмен должен быть после каждого пробития чека.
33 Aleksey
 
20.09.11
07:55
(31) Ну так приход не будет блокировать расход (разные таблицы)
34 Aleksey
 
20.09.11
07:56
Между началом обмена и блокировкой есть достаточно времени чтобы пробить чек (пока скачает с FTP, потом загрузка, только потом, при выгрузки, блокировка). Так что проще при записи проверять "идет обмен, подождите"
35 Enya
 
20.09.11
07:58
(30)...мдя....что то я аш в осадок выпадаю, что то не учла....
(32)ха!! а если на некоторых магазинов, чеков уйма, предлагаешь все время обмен проводить?!
36 Enya
 
20.09.11
07:59
(34)...как вариант. Просто, это можно сделать, но думаю не везде получится. Есть где обмен идет на одном компе, а чеки пробивают на другом.(связаны локально).
37 Ткачев
 
20.09.11
08:00
(35)Так это уже встроено в 1с, привязать к кнопке в РМК и вручную делать обмен
38 Aleksey
 
20.09.11
08:01
(36)  Константа?
39 Enya
 
20.09.11
08:02
(37)просто и так много времени уходит на обмен, скапливается очередь. Поэтому, нужно как можно незаметнее это сделать самим. И так чтобы исключить ошибки пробития чеков.
40 Ткачев
 
20.09.11
08:03
(39)Так после пробития каждого чека у вас идет обмен ?
41 Enya
 
20.09.11
08:10
(39)нет конечно. Раз в час, по расписанию!
42 Ткачев
 
20.09.11
08:13
Создать второго пользователя "Автообмен" не предлагать ?
43 Ткачев
 
20.09.11
08:15
т.е. открыто две адинэски, под кассиром и под автообменом, кассир продает, автообмен раз в час ведет обмен с ЦУ.
44 _
vovanidze_3412341
 
20.09.11
09:03
(43) А поможет? помоему нет...все равно блокировки будут..делайте обмен вручную..когда чеки не бьете.
45 Ткачев
 
20.09.11
09:04
(44)С (2) нормально будет, главное мешать не будет.
46 _
vovanidze_3412341
 
20.09.11
09:16
с (2) согласен второй вариант подойдет..у меня тож был трабл с блокировками...Утром гружу приход-расход - оплаты из другой не 1с прожки торговой в бухию...ничего лучше не придумал как стартовать обмен с 11 а до этого времени все узлы грузятся. На досуге попробую.
47 Vovan1975
 
20.09.11
09:19
ну тогда можно создать второй план обмена и посвятить его только чекам, исключив чеки из первого. Соответственно обмен чеков делать только по второму, "чековому" плану обмена.

Еще вариант - отключить авторегистрацию и факт проведения-перепроведения чека фиксировать в каком- нибудь регистре сведений а вечером запускать регламентное задание которое будет регистрировать изменения чеков в плане обмена и соответственно выгружать их уже после рабочего дня.

Еще вариант - уменьшить интервал обмена, тогда обмен будет идти чаще но занимать меньше времени, соответственно блокировка будет меньше длиться....
48 Vovan1975
 
20.09.11
09:20
+(47)"Еще вариант - отключить авторегистрацию" - имеется в виду авторегистрацию в плане обмена для чека, остальное не трогать...
49 Vovan1975
 
20.09.11
09:21
(47) в общем то второй вариант можно реализовать и не только с помощью регистра сведений но и плана обмена, используя его как регистратор изменения...
50 Ткачев
 
20.09.11
09:21
(48)Авторегистрация и так отключена
51 Ткачев
 
20.09.11
09:24
+(50)Чек сам по себе мало что меняет, он ведь за собой еще тащит регистры накопления, отключать многовато надо будет.
52 Vovan1975
 
20.09.11
09:24
(50) ну если авторегистрация отключена то решистрация изменений делается программно, значит отключить программную регистрацию
53 Vovan1975
 
20.09.11
09:26
(51) регистры накопления и прочие регистры они как бы отдельно грузятся. Я понял что у (0) лочится таблица документа а не регистры...
54 Ткачев
 
20.09.11
09:28
Ща код дам
55 Vovan1975
 
20.09.11
09:29
а вообще как то странно что при обменен лочится вся таблица доков...
56 Axel2009
 
20.09.11
09:30
(53) лочится таблица изменений плана обмена.
(0) попробовать через КД делать обмен?
57 Ткачев
 
20.09.11
09:36
После закрытия смены делаем обмен и выгружаются все чеки за закрытую смену.
Общие-Общие модули-ПроцедурыОбменаДаннымиПоКассе
Процедура ПередЗаписьюСсылочногоТипаДляОбменаПоМагазину(Источник, Отказ, ИмяБазовогоТипа)
   
   Если Отказ
       ИЛИ НЕ ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе Тогда
       Возврат;
   КонецЕсли;
   
   //Ткачев
   ТипЭлемента = ТипЗнч(Источник);
   Если ТипЭлемента = Тип("ДокументСсылка.ЧекККМ")
       ИЛИ ТипЭлемента = Тип("ДокументОбъект.ЧекККМ")
       Тогда
       Если Источник.СтатусЧекаККМ <> Перечисления.СтатусыЧековККМ.Архивный
           Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;
   //***
...
Процедура ПередЗаписьюНабораЗаписейДляОбменаПоКассе(Источник, Отказ, Замещение, ИмяБазовогоТипа) Экспорт
   
   Если Отказ
       ИЛИ НЕ ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе Тогда
       
       Возврат;
       
   КонецЕсли;
   //Ткачев
   Если Источник.Отбор.Найти("Регистратор") <> Неопределено Тогда
       Если ТипЗнч(Источник.Отбор.Регистратор.Значение) = Тип("ДокументСсылка.ЧекККМ") Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;
   //***
58 rs_trade
 
20.09.11
09:38
(0) 1C  с кассы убери и будет тебе счастье.
59 Vovan1975
 
20.09.11
09:39
(56)"лочится таблица изменений плана обмена." нет такой таблицы. Изменения хранятся в таблице документа, не?
60 Ткачев
 
20.09.11
09:40
(58)Самое правильное и верное решение !!!
61 Enya
 
20.09.11
09:47
(47) чеки нужны обзательно в течении дня. Конфига не типовая, поэтому в чеках есть очень нужные данные. А чаще сделать трудно, потому что 20 узлов.
62 Vovan1975
 
20.09.11
09:49
(61) и что у тебя все 20 узлов в одну базу льются? че иерархию не делала?
63 Vovan1975
 
20.09.11
09:51
(59) а соврал - изменения хранятся в отдельной таблице для каждого дока эта таблица своя...
64 Enya
 
20.09.11
09:51
(62)есть ЦУ в который сливается все с 20 узлов, а по узлам идут только их данные!
65 Vovan1975
 
20.09.11
09:53
(64) ну для иерархии это не отмаз, однако насчет участить интервал до, например, раз в 5 минут я бы подумал, хотя тут надо смотреть скорость загрузки изменений в ЦУ из сообщения обмна...
66 Axel2009
 
20.09.11
09:54
(59) не в таблице документа. в отдельной таблице. только я не помню для каждого объекта метаданных отдельная таблица на все планы обмена, или по каждому плану обмена по таблице на все метаданные.
67 Vovan1975
 
20.09.11
09:55
и кстати насчет пропадания чеков - ты иэти пропавшие цеки в центральной базе искала? А то мож добрая душа в ЦУ поменяла, например, организацию, и тю-тю - в одной периферийке чек пропал, в другой - "воскрес"
68 Vovan1975
 
20.09.11
09:57
(66) конструктор запросов запусти, воткни в левом верхнем углу флажок "отображать таблицы изменений" и будет тебе счастье...
69 Axel2009
 
20.09.11
09:57
еще можно поиграться с дублированием документа. один в плане обмена, другой нет. тот что вводят - он не обменивается. и если есть обмен в момент проведения, тогда не дублировать его. а в перегрузке проверять на такие вещи и досоздавать до перегрузки.
70 Axel2009
 
20.09.11
09:58
(67) ага, согласен. но это отдельные физические таблицы под это дело.
71 Enya
 
20.09.11
09:59
(67) искала, все перерывали. Просто пропадают и всё.
72 Axel2009
 
20.09.11
10:03
т.е. появляются "Объект не найден"?
73 Axel2009
 
20.09.11
10:03
(71) ктото стащил по уиду и сделал как новый документ, может быть такое?
74 Ork
 
20.09.11
10:05
(57) Вцелом мысль верная. Но хранить флажок в параметрах сеанса - есть некрасиво. Поскольку о том, что идет обмен или проведение чека будет знать только текущий сеанс. И не будут знать остальные. Я бы все-таки использовал константу.
75 Enya
 
20.09.11
10:06
(72)т.е вообще не следа, не битыйх сслылок ничего!
76 Axel2009
 
20.09.11
10:06
(75) значит объект резко становится другим. и ссылки все меняются
77 Enya
 
20.09.11
10:08
(76) это как?! резко становится другим. Такое бывает редко. у меня предположение, что просто идет накладка записи документа и обмена.
78 Axel2009
 
20.09.11
10:12
(77) ну так если он пропал в источнике и приемнике какая накладка?
79 Ork
 
20.09.11
10:12
(77) Предположений не нужно.
До момента азаписи объекта в базе не существует. Транзакция записи из-за наложенных обменом блокировок отменяется. Ваша программа такую ситуацию не обрабатывает. И повторных попыток записи не делает. Соответственно чека в базе нет.
80 Enya
 
20.09.11
10:18
(79)думаю так и получается.
81 Vovan1975
 
20.09.11
10:22
(74) котрую тоже можно выставлять в регламентном задании и таким образом автоматизировать процесс целиком
82 Ork
 
20.09.11
10:23
(80) Ну так положите вызов проведения чека внутрь попытка -исключение - КонецПопытки. И если ошибка из-за блокировки повторите запись(проведение).
83 ProgAL
 
20.09.11
10:26
При закрытии чека, когда он уже записан проведн и установлен признак "Пробит" записывай, как советовали выше, в регистр сведений или вручную в дополнитеьлный план обмена только для чеков вручную вноси статус изменен. При выгрузке выбирай изменные чеки из этого регистра/плана обмена и нарастающим итогом с начала дня выгружай без всяких блокировок. При закрытии смены, формируй итоговую финальную выгрузку за день и очищай регистр сведений/план обмена.
84 Vovan1975
 
20.09.11
10:39
(80) ну или как вариант у тебя есть пользюки могущие интерактивно удалить этот документ
85 Алистар
 
20.09.11
10:44
А вроде же таблица регистрации лочится не на все время обмена а на время обработки текущего объекта. Один объект записывается доли секунды, чек должен успеть вклиниться и заблокировать уже таблицу регистрации.

ПрочитатьИзменения(<Чтение сообщения обмена>, <Элементов в транзакции>)

" Но при чтении сообщения в многопользовательском режиме могут быть конфликты блокировок между транзакцией, читающей данные из сообщения и помещающей их в базу данных, и транзакциями, выполняемыми другими пользователями. Кроме того транзакции, в которых модифицируется слишком большой объем данных могут работать медленно или вовсе завершаться аварийно. Особенно в файловом варианте базы данных. Для того, чтобы избежать таких неприятностей можно задать значение этого параметра, отличное от значения по умолчанию. Чем меньше значение параметра, тем меньше вероятность конфликта блокировок, но выше вероятность помещения в базу данных несогласованных данных.
Значение по умолчанию: 0 "
86 Алистар
 
20.09.11
10:45
ну то есть можно настроить чтобы лочилось не на весь обмен а на объект
87 Алистар
 
20.09.11
10:46
То есть можно настроить так
88 Axel2009
 
20.09.11
10:51
(87) штатный механизм обмена работает сам по себе и там все элементы в транзакции
89 Aleksey
 
20.09.11
11:22
(86) По любому вся таблица будет лочится
Независимо от того, куда вы едете — это в гору и против ветра!