Постоянно возникают проблемы при обмене, часть изменений теряется куда-то. Такое чувство, что эти изменения очищаются в какой-то момент.. Помогает только перезапись объекта, при этом изменения вновь регистрируются и при обмене попадают куда надо.. В чём может быть косяк?
#1
Отправлено 13 февраля 2008 - 07:53
Постоянно возникают проблемы при обмене, часть изменений теряется куда-то. Такое чувство, что эти изменения очищаются в какой-то момент.. Помогает только перезапись объекта, при этом изменения вновь регистрируются и при обмене попадают куда надо.. В чём может быть косяк?
#2
Отправлено 13 февраля 2008 - 11:12
И кстати, опишите подробно: как именно у Вас производится обмен (интерактивно или с помощью написанной процедуры, дайте посмотреть код если он есть).
#3
Отправлено 13 февраля 2008 - 13:35
Обмен настроен так: есть батничек, который запускает периодически 1с и передает ей параметр запуска. Процедура ПриНачалеРаботыСистемы() обрабатывает этот параметр:
Если ПараметрЗапуска<> "" тогда Попытка ВыполнитьКомандыЗапуска(ПараметрЗапуска); Исключение Сообщить(ОписаниеОшибки()); Конецпопытки; ЗавершитьРаботуСистемы(Ложь); КонецЕсли;
Процедура ВыполнитьКомандыЗапуска(параметр) Экспорт ЭтотУзел = ПланыОбмена.Филиалы.ЭтотУзел().ПолучитьОбъект(); Поток = Новый ЧтениеXML; Поток.УстановитьСтроку(Параметр); Поток.Прочитать(); // command шапка КаталогОбмена = ПрочитатьЗначение(Поток); Пока Поток.Прочитать() Цикл Если Поток.ТипУзла=ТипУзлаXML.НачалоЭлемента И Поток.Имя="Node" Тогда Поток.Прочитать(); УзелПриемникКод=Поток.Значение; Поток.Прочитать();// закрыли node УзелПриемник = ПланыОбмена.Филиалы.НайтиПоКоду(СОКРЛП(УзелПриемникКод)); Если НЕ УзелПриемник.Пустая() Тогда ЭтотУзел.ПрочитатьИзменения(КаталогОбмена,УзелПриемник); ЭтотУзел.ЗаписатьИзменения(КаталогОбмена,УзелПриемник); КонецЕсли; ИначеЕсли Поток.ТипУзла=ТипУзлаXML.КонецЭлемента И Поток.Имя="Nodes" Тогда Прервать; КонецЕсли; КонецЦикла; Поток.Прочитать(); // command закрыли КонецПроцедурыНу и процедуры модуля плана обмена, осуществляющие чтение и запись:
Процедура ЗаписатьИзменения(КаталогОбмена,УзелПриемник) Экспорт Попытка ПолноеИмя = ПолучитьИмяФайлаОбмена(ПланыОбмена.Филиалы.ЭтотУзел().Код,УзелПриемник.Код,КаталогОбмена); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ПолноеИмя); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML,УзелПриемник); ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения,1000); ЗаписьСообщения.ЗакончитьЗапись(); ЗаписьXML.Закрыть(); Исключение КонецПопытки; КонецПроцедуры Процедура ПрочитатьИзменения(КаталогОбмена,УзелПриемник) Экспорт Попытка ПолноеИмя = ПолучитьИмяФайлаОбмена(УзелПриемник.Код,ПланыОбмена.Филиалы.ЭтотУзел().Код,КаталогОбмена); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ПолноеИмя); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML); ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения,1000); ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXMl.Закрыть(); Исключение Конецпопытки; КонецПроцедуры
Еще для полной ясности функция, которая получает имя файла обмена:
Функция ПолучитьИмяФайлаОбмена(КодУзелИсточник,КодУзелПриемник,КаталогОбмена) Возврат КаталогОбмена+"Message_"+СокрЛП(КодУзелИсточник)+"_"+СокрЛП(КодУзелПриемник)+".xml"; КонецФункции
Обмен с филиалом происходит через общий сетевой ресурс.
Сообщение отредактировал lanka: 13 февраля 2008 - 13:43
#4
Отправлено 13 февраля 2008 - 16:18
...
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, 1000);
...
...
ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 1000);
...
Что такое 1000. Это сколько элементов обрабатывать за одну транзакцию. Если мы поставим 1000, тогда для первых 1000 элементов - одна транзакция, для вторых 1000 - другая и так далее. Если на каком-то из этих элементов возникает ошибка - неизвестно будет - какая транзакция успела завершится, а какая не успела - вот Вам и источник потери данных. Какие-то данные успели записаться, а какие-то не успели.
Если мы поставим 0 - тогда абсолютно все элементы будут обрабатываться в рамках только одной транзакции. Если произойдёт ошибка - произойдёт откат всей этой транзакции, как будто ничего не происходило. Таким образом, мы сохраним целостность данных.
#5
Отправлено 14 февраля 2008 - 08:45
Просто обмен у нас происходит каждый час, а база и так подвисает из-за интенсивной работы пользователей.
У меня вопрос такой возникает: а если одна из нескольких транзакций завершилась неудачей, сообщение в итоге считается прочитанным?
#6
Отправлено 14 февраля 2008 - 10:31
Я бы слепо не верил рекомендациям, а протестировал бы на деле с параметром 0. Может не всё так будет и страшно, зато сохранится целостность, что важнее. Ведь сейчас у Вас проблемы с целостностью, что гораздо хуже, чем возможные проблемы с параллельностью, которые ещё нужно выявить, чтобы понять насколько это неприемлемо, по сравнению с потерей данных.
Ещё обратите внимание на требования к аппаратным ресурсам.
Давайте проанализируем: как и на чём у Вас установлена основная и подчинённая база? Какой вариант работы обеих (файловый или через СУБД)? Сколько пользователей одновременно работают с каждой?
#7
Отправлено 14 февраля 2008 - 13:48
Сообщение отредактировал lanka: 15 февраля 2008 - 06:32
#8
Отправлено 14 февраля 2008 - 16:31
#9
Отправлено 14 февраля 2008 - 18:37
#10
Отправлено 18 февраля 2008 - 09:42
#11
Отправлено 19 февраля 2008 - 13:44
#12
Отправлено 19 февраля 2008 - 22:41
Это проблема работы пользователей.
Например: имеется некий дщокумент, его изменили в базе А, и в это же время изменили в базе Б - угадайте, что получится после одновременной отправке и чтении изменений... А еще хуже - когда начинают ворочать документы задним числом и обмен делается редко - это вообще труба.
Поэтому ставьте обмен как можно чаще...
#13
Отправлено 05 марта 2008 - 14:40
"Задавай правильные вопросы, получай правильные ответы" (с)
#14
Отправлено 05 марта 2008 - 16:17
BabySG (20.2.2008, 0:41) писал:
Это проблема работы пользователей.
Например: имеется некий дщокумент, его изменили в базе А, и в это же время изменили в базе Б - угадайте, что получится после одновременной отправке и чтении изменений... А еще хуже - когда начинают ворочать документы задним числом и обмен делается редко - это вообще труба.
Поэтому ставьте обмен как можно чаще...
Данная ситуация отрабатывается правильно. Настроено, что при одновременном изменении документа в центральной и филиальской базе принимаются изменения филиала.
#15
Отправлено 05 марта 2008 - 16:23
#16
Отправлено 05 марта 2008 - 22:02
оборванное сообщение читается, как ни странно (хотя стандарт XML предполагает закрытие всех тэгов)
Поэтому, например, может быть ситуация, когда места под сохранения файла не хватило (неполная выгрузка) - но файл появился (например, размером 1 мегабайт, когда должен быть 2 мегабайта) - но сообщение будет читаться за полное!
#17
Отправлено 06 марта 2008 - 09:00
#18
Отправлено 06 марта 2008 - 09:02
В сети можно найти бесплатные парсеры для этого, ну, или написать самой.
#19
Отправлено 06 марта 2008 - 10:54
Сама не знаю, как написать такую проверку :(
#20
Отправлено 06 марта 2008 - 23:18
А обработку сейчас некогда просто написать... Попробуйте погуглить на тему проверки тэгов. А еще лучше, - найти форум по XML и попросить дать анализатор....
#21
Отправлено 22 апреля 2008 - 13:24
#22
Отправлено 24 апреля 2008 - 21:32
#23
Отправлено 25 апреля 2008 - 13:52
Решение подобных проблем освещено на форуме:
www.itland.ru/forum//index.php?showtopic=12881
#24
Отправлено 05 ноября 2008 - 19:33
По моим подсчетам только в 4 узлах неизвестно какие префиксы стоят... Даже если бы в этих четырех узлах стояли бы одинаковые префиксы то все равно небыло бы такой ситуации(доходит до 4х доков с одинаковым номером). а так доки с один номерами встречаются с разными префиксами.
#25
Отправлено 05 ноября 2008 - 20:11
По моим подсчетам только в 4 узлах неизвестно какие префиксы стоят... Даже если бы в этих четырех узлах стояли бы одинаковые префиксы то все равно небыло бы такой ситуации(доходит до 4х доков с одинаковым номером). а так доки с один номерами встречаются с разными префиксами.
#26
Отправлено 08 ноября 2008 - 16:16
"Управление торговлей", редакция 10.3 (10.3.1.17)
Организована распределенная база - 1 периферийная и 1 центральная, все обменивается
Было у кого нить такое что документ изменили, а после обмена в журнале не меняется, заходишь в него там все изменено. Тоже самое проведене, удаление... в журнале не видно....
#27
Отправлено 28 августа 2009 - 16:10
настраиваю РБД с ограничением выгрузки контрагентов в филиалы по основному менеджеру
выгрузка сработала, а при загрузке в базу филлиала выдает ошибку
Вид договора "С покупателем" может устанавливаться только когда у контрагента указано что он является покупателем.
пробовал и нового создавать и копировать существующего...
возникло подозрение что реквизиты не в том порядке загружаются: сначала реквизиты договора, потом реквизит "покупатель".
подскажите, пожалуйста, в чем может быть проблема?
Update:
выяснил в чем проблема, выборку делаю по основному менеджеру, при этом из справочника Договора контрагентов все грузится без ограничений.
Поэтому при загрузке данных в филиал база получает договор без контрагента.
Подскажите как можно организовать выборку договоров с контролем отправки связанного с ним контрагента
Сообщение отредактировал Diversant: 31 августа 2009 - 16:37
#28
Отправлено 14 октября 2009 - 15:42
Например может не выгрузиться вид операции документа, или номенклатура из табличной части. А если попробовать выгрузить этот кривой документ отдельно, то все нормально. Не знаете в чем может быть проблема?
#29
Отправлено 25 марта 2010 - 15:03
Подробнее о проблеме и ее решении написано в теме
http://www.forum.mis...c.php?id=469959
#30
Отправлено 07 декабря 2010 - 09:22
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных









