РИБ - блокировка при обмене #570245


#0 by Enya
Добрый день! Существует такая проблема: стоит розница РИБ - обмен настроен каждый час(выгрузка и загрузка с обоих сторон). Обмен настроен по расписанию. Суть проблемы в том, что бывают такие моменты когда идет пробитие чека и стартует обмен(загрузка данных) - тут таки происходит ошибка пробития чека(т.е обмен все блокирует), самое страшное и серьезное в этой ситуации, то что стали пропадать чеки время от времени(бесследно),т.е обмен включился во время записи чека в базу, произошла блокировка и чек не куда не сохранился. Может кто то уже сталкивался с такой проблемой. Или есть какие мысли по этому поводу, как лучше сделать, чтобы избежать такой ситуации?!
#1 by Renium
Я не сталкивался, но мне кажется, что если положить под SQL то проблему можно решить раз и навсегда, обойдясь без 1С-ного обмена, делая обмен средствами SQL.
#2 by Ork
Средствами 1С - выставлять флаги "идет обмен" и "идет проведение чека". После выполнения заданий - сбрасывать. Перед началом обработки проверять. И не выполнять до сбрасывания флага. В качестве флага можно пользовать константу.
#3 by Enya
немного не поняла, поясни пожалуйста. есть похожая идея, т.е после пробития чека смотреть нужен обмен или нет, использяю константу. Но не очень бы хотелось прибегать к такому способу. Просто надеюсь на тот, что есть какие то стандартные возможности платформы о которых я не в курсе. Платформа кстати 8.2.
#4 by Renium
База кладется под СУБД и представляет собой не один файл *.1CD, а множество сравнительно небольших файлов, организованных в таблицы. Записью, чтением и блокировками управляет СУБД. Приложение 1с "общается" с СУБД через программный продукт "1С сервер"... Имея под СУБД две базы и задачу синхронизации данных между ними, можно средствами СУБД организовать миграцию данных. При этом данные из одной базы в другую будут попадать в течении нескольких секунд.
#5 by Renium
Описал сильно упращенно, но по сути верно.
#6 by Enya
не стоило так прям расжовывать=) Но спасибо за старание. Просто вопрос в том,что они обе должны быть SQL?! Одна из этих баз SQL - главный узел. Но обмен настроен с помощью файлов, которые заливаются на FTP.
#7 by Renium
Потому что подчиненная файловая. Поэтому обмен через файлы и FTP. Да, обе должны быть SQL.
#8 by georgebgk
Может быть, при открытом чеке нужно тормознуть обработчик ожидания, который следит за вашим расписанием? А при закрытии чека снова включать. В КА он называется "ПоддержкаРегламентныхЗаданийДляФайловойВерсии", в рознице не знаю. Недостаток в том, что в этом случае остановятся все регламентные задания, пока не закрыт чек.
#9 by Enya
вот это больше мне нравится. Попробую что нить типо этого сделать!!! Идейка не плохая!!!
#10 by Ткачев
Убрать вообще чеки из обмена, и база расти не будет и тормозить меньше будет.
#11 by Axel2009
не поможет
#12 by Ткачев
+Если очень надо чеки, сделать выгрузку их после закрытия смены.
#13 by Enya
нужны. сейчас в рознице много отчетов которые костароены именно на чеках!
#14 by Ткачев
Делайте тогда выгрузку только со статусом "Архивный"
#15 by Axel2009
т.е. в 1с идет перегрузка не сохраненных новых документов?? и изза этого блочится вся перегрузка? =)
#16 by Enya
Не особо поняла, смысл выгрузки/не выгрузки чеков в центральный узел?!
#17 by Ткачев
У меня все тупило из-за этих чеков на продуктовом магазине, я убрали их вообще из обмена и все стало более-менее лучше работать, т.е. чеки у меня только на кассе.
#18 by Ткачев
Если очень надо их то больше всего подходит. Тупить тогда оба будете и кассир и обмен.
#19 by Алистар
Нужно сделать чтобы приоритет был у чеков. Пусть при блокировках вылетат обмен а не чек.
#20 by Живой Ископаемый
2 рассказывай как.
#21 by Алистар
Можно уменьшить параметры в ПланыОбмена.ЗаписатьИзменения(,) ПланыОбмена.ПрочитатьИзменения(,) Посмотреть нет ли где НачатьТранзакцию ЗакончитьТранзакцию Нет ли во время обмена тяжелых запросов.
#22 by Vovan1975
а что собственно блокируется при обмене то?
#23 by Axel2009
во время обмена блочится таблица плана обмена на время всей выгрузки. и любой объект, попавший под прицел нельзя будет перезаписать.
#24 by Enya
Мысль конечно гениальная, первое что приходит в голову. А второе, что приходит - это как это сделать?! не происходит запись или пробитие чека на фискальном регистраторе! да да да!!!
#25 by Ткачев
А вы чем торгуете (продукты, одежда и т.д.) ?
#26 by Aleksey
1С это не даст сделать. Более того на таблицу изменений нельзя даже наложить блокировку. Т.е. выгружается и блокируется вся таблица
#27 by Enya
белье!
#28 by Enya
на данный момент, выходом кажется , но нужно проверить сработает или нет.
#29 by Aleksey
А для чего такой частый обмен? Может сделать 2 обмена? Каждый час загрузка прихода и справочника, и вечером выгрузка документов
#30 by Aleksey
И как он поможет, если обмен уже начался?
#31 by Enya
приход бывает несколько раз в день, а еще нужны некоторые данные. Поэтому такой частый обмен и не как по другому.
#32 by Ткачев
А можно вооще не делать, обмен должен быть после каждого пробития чека.
#33 by Aleksey
Ну так приход не будет блокировать расход (разные таблицы)
#34 by Aleksey
Между началом обмена и блокировкой есть достаточно времени чтобы пробить чек (пока скачает с FTP, потом загрузка, только потом, при выгрузки, блокировка). Так что проще при записи проверять "идет обмен, подождите"
#35 by Enya
...мдя....что то я аш в осадок выпадаю, что то не учла.... ха!! а если на некоторых магазинов, чеков уйма, предлагаешь все время обмен проводить?!
#36 by Enya
...как вариант. Просто, это можно сделать, но думаю не везде получится. Есть где обмен идет на одном компе, а чеки пробивают на другом.(связаны локально).
#37 by Ткачев
Так это уже встроено в 1с, привязать к кнопке в РМК и вручную делать обмен
#38 by Aleksey
Константа?
#39 by Enya
просто и так много времени уходит на обмен, скапливается очередь. Поэтому, нужно как можно незаметнее это сделать самим. И так чтобы исключить ошибки пробития чеков.
#40 by Ткачев
Так после пробития каждого чека у вас идет обмен ?
#41 by Enya
нет конечно. Раз в час, по расписанию!
#42 by Ткачев
Создать второго пользователя "Автообмен" не предлагать ?
#43 by Ткачев
т.е. открыто две адинэски, под кассиром и под автообменом, кассир продает, автообмен раз в час ведет обмен с ЦУ.
#44 by _vovanidze_3412341
А поможет? помоему нет...все равно блокировки будут..делайте обмен вручную..когда чеки не бьете.
#45 by Ткачев
С нормально будет, главное мешать не будет.
#46 by _vovanidze_3412341
с согласен второй вариант подойдет..у меня тож был трабл с блокировками...Утром гружу приход-расход - оплаты из другой не 1с прожки торговой в бухию...ничего лучше не придумал как стартовать обмен с 11 а до этого времени все узлы грузятся. На досуге попробую.
#47 by Vovan1975
ну тогда можно создать второй план обмена и посвятить его только чекам, исключив чеки из первого. Соответственно обмен чеков делать только по второму, "чековому" плану обмена. Еще вариант - отключить авторегистрацию и факт проведения-перепроведения чека фиксировать в каком- нибудь регистре сведений а вечером запускать регламентное задание которое будет регистрировать изменения чеков в плане обмена и соответственно выгружать их уже после рабочего дня. Еще вариант - уменьшить интервал обмена, тогда обмен будет идти чаще но занимать меньше времени, соответственно блокировка будет меньше длиться....
#48 by Vovan1975
+"Еще вариант - отключить авторегистрацию" - имеется в виду авторегистрацию в плане обмена для чека, остальное не трогать...
#49 by Vovan1975
в общем то второй вариант можно реализовать и не только с помощью регистра сведений но и плана обмена, используя его как регистратор изменения...
#50 by Ткачев
Авторегистрация и так отключена
#51 by Ткачев
+Чек сам по себе мало что меняет, он ведь за собой еще тащит регистры накопления, отключать многовато надо будет.
#52 by Vovan1975
ну если авторегистрация отключена то решистрация изменений делается программно, значит отключить программную регистрацию
#53 by Vovan1975
регистры накопления и прочие регистры они как бы отдельно грузятся. Я понял что у лочится таблица документа а не регистры...
#54 by Ткачев
Ща код дам
#55 by Vovan1975
а вообще как то странно что при обменен лочится вся таблица доков...
#56 by Axel2009
лочится таблица изменений плана обмена. попробовать через КД делать обмен?
#57 by Ткачев
После закрытия смены делаем обмен и выгружаются все чеки за закрытую смену.        ИЛИ НЕ ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе Тогда
#58 by rs_trade
1C  с кассы убери и будет тебе счастье.
#59 by Vovan1975
"лочится таблица изменений плана обмена." нет такой таблицы. Изменения хранятся в таблице документа, не?
#60 by Ткачев
Самое правильное и верное решение !!!
#61 by Enya
чеки нужны обзательно в течении дня. Конфига не типовая, поэтому в чеках есть очень нужные данные. А чаще сделать трудно, потому что 20 узлов.
#62 by Vovan1975
и что у тебя все 20 узлов в одну базу льются? че иерархию не делала?
#63 by Vovan1975
а соврал - изменения хранятся в отдельной таблице для каждого дока эта таблица своя...
#64 by Enya
есть ЦУ в который сливается все с 20 узлов, а по узлам идут только их данные!
#65 by Vovan1975
ну для иерархии это не отмаз, однако насчет участить интервал до, например, раз в 5 минут я бы подумал, хотя тут надо смотреть скорость загрузки изменений в ЦУ из сообщения обмна...
#66 by Axel2009
не в таблице документа. в отдельной таблице. только я не помню для каждого объекта метаданных отдельная таблица на все планы обмена, или по каждому плану обмена по таблице на все метаданные.
#67 by Vovan1975
и кстати насчет пропадания чеков - ты иэти пропавшие цеки в центральной базе искала? А то мож добрая душа в ЦУ поменяла, например, организацию, и тю-тю - в одной периферийке чек пропал, в другой - "воскрес"
#68 by Vovan1975
конструктор запросов запусти, воткни в левом верхнем углу флажок "отображать таблицы изменений" и будет тебе счастье...
#69 by Axel2009
еще можно поиграться с дублированием документа. один в плане обмена, другой нет. тот что вводят - он не обменивается. и если есть обмен в момент проведения, тогда не дублировать его. а в перегрузке проверять на такие вещи и досоздавать до перегрузки.
#70 by Axel2009
ага, согласен. но это отдельные физические таблицы под это дело.
#71 by Enya
искала, все перерывали. Просто пропадают и всё.
#72 by Axel2009
т.е. появляются "Объект не найден"?
#73 by Axel2009
ктото стащил по уиду и сделал как новый документ, может быть такое?
#74 by Ork
Вцелом мысль верная. Но хранить флажок в параметрах сеанса - есть некрасиво. Поскольку о том, что идет обмен или проведение чека будет знать только текущий сеанс. И не будут знать остальные. Я бы все-таки использовал константу.
#75 by Enya
т.е вообще не следа, не битыйх сслылок ничего!
#76 by Axel2009
значит объект резко становится другим. и ссылки все меняются
#77 by Enya
это как?! резко становится другим. Такое бывает редко. у меня предположение, что просто идет накладка записи документа и обмена.
#78 by Axel2009
ну так если он пропал в источнике и приемнике какая накладка?
#79 by Ork
Предположений не нужно. До момента азаписи объекта в базе не существует. Транзакция записи из-за наложенных обменом блокировок отменяется. Ваша программа такую ситуацию не обрабатывает. И повторных попыток записи не делает. Соответственно чека в базе нет.
#80 by Enya
думаю так и получается.
#81 by Vovan1975
котрую тоже можно выставлять в регламентном задании и таким образом автоматизировать процесс целиком
#82 by Ork
Ну так положите вызов проведения чека внутрь попытка -исключение - КонецПопытки. И если ошибка из-за блокировки повторите запись(проведение).
#83 by ProgAL
При закрытии чека, когда он уже записан проведн и установлен признак "Пробит" записывай, как советовали выше, в регистр сведений или вручную в дополнитеьлный план обмена только для чеков вручную вноси статус изменен. При выгрузке выбирай изменные чеки из этого регистра/плана обмена и нарастающим итогом с начала дня выгружай без всяких блокировок. При закрытии смены, формируй итоговую финальную выгрузку за день и очищай регистр сведений/план обмена.
#84 by Vovan1975
ну или как вариант у тебя есть пользюки могущие интерактивно удалить этот документ
#85 by Алистар
А вроде же таблица регистрации лочится не на все время обмена а на время обработки текущего объекта. Один объект записывается доли секунды, чек должен успеть вклиниться и заблокировать уже таблицу регистрации. ПрочитатьИзменения(<Чтение сообщения обмена>, <Элементов в транзакции>) " Но при чтении сообщения в многопользовательском режиме могут быть конфликты блокировок между транзакцией, читающей данные из сообщения и помещающей их в базу данных, и транзакциями, выполняемыми другими пользователями. Кроме того транзакции, в которых модифицируется слишком большой объем данных могут работать медленно или вовсе завершаться аварийно. Особенно в файловом варианте базы данных. Для того, чтобы избежать таких неприятностей можно задать значение этого параметра, отличное от значения по умолчанию. Чем меньше значение параметра, тем меньше вероятность конфликта блокировок, но выше вероятность помещения в базу данных несогласованных данных. Значение по умолчанию: 0 "
#86 by Алистар
ну то есть можно настроить чтобы лочилось не на весь обмен а на объект
#87 by Алистар
То есть можно настроить так
#88 by Axel2009
штатный механизм обмена работает сам по себе и там все элементы в транзакции
#89 by Aleksey
По любому вся таблица будет лочится
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С