Случай из практики: об одной нетривиальной ситуации при обмене УНФ-БП

Работал себе обмен между УНФ и БП, а потом как-то засбоил — то проходит, то не проходит. О том, что это было…

Случай из практики

А вот я на фронте был  
Ох-ты, боже мой…   

Возможно, многие в отличие от меня знают про такую пакость, но я надеюсь, что найдется хотя бы пара-тройка человек, которым я сэкономлю время, деньги и нервы…

Анамнез:

У одного из наших клиентов учет построен на связке УНФ+БП 2.0. Обе базы – в клиент-серверном варианте. Обмен – по расписанию, по типовому (немного измененному) плану обмена через общий каталог.

Несколько месяцев назад возникла странная проблема: часть объектов (самых разных, и документов, и элементов справочников), созданных в УНФ, с непонятной периодичностью перестали переезжать в БП. После принудительной регистрации и ручного запуска обмена объекты спокойно передавались. На некоторое время, иногда короткое, иногда не очень, ситуация приходила в норму, а потом все повторялось без каких бы то ни было видимых причин (Зараза!!!). Поскольку крики погибающих бухов: «Обмен опять не работает!» — происходили в самые горячие отчетные дни, долго разбираться времени не было, обмен проталкивали вручную. И вот…

Лечение:

В общем, с ног сбились, грешили на правила регистрации, на правила обмена, на потерю файлов на сервере, на алгоритм в УНФ, который определяет помечать ли объект как измененный или нет в зависимости от того, какие реквизиты изменились. И еще бог знает на что! Оказалось…

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

Теперь – самое интересное. Сеансы обмена запускались в обеих базах УНФ параллельно в одно и то же время, причем, кто из них оказывался первым, определялось каким-то квази-случайным способом. При этом, в тестовой базе, естественно, никаких измененных объектов не возникало, потому что в ней никто уже не работал! Если фоновое задание в тестовой базе опережало аналогичное задание в рабочей базе, то все шло нормально – файл, созданный в рабочей базе, затирал файл из тестовой базы, и никто ничего не замечал. Если же задания запускались в обратном порядке, то ПУСТОЙ файл из тестовой базы затирал файл с выгруженными объектами из рабочей базы и никакого обмена не происходило.

Дальше – больше. Поначалу сообщения в рабочей и тестовой базах создавались с одними и теми же исходящими номерами сообщений. Потом, по мере ручных запусков процедур обмена в рабочей базе, номера исходящих сообщений в тестовой базе стали отставать. В результате, если фоновое задание в тестовой базе запускалось после фонового задания в рабочей базе, в каталоге обмена оставался файл с номером сообщения, которое уже принималось в БП. БП, естественно, его отфутболивала, и никакого обмена опять-таки не происходило…

Обнаружилось это таким образом. В обработку, выполняющую обмен, я добавил копирование создаваемого файла обмена в файл с уникальным именем, чтобы выследить-таки мерзавца. После очередного «сбоя» обмена, анализируя каталог с этими копиями, я обнаружил, что за один и тот же сеанс обмена имеются два файла с разными номерами сообщений, один из которых оказался пустым! Анализ журнала регистрации показал, что в момент времени, указанный в «пустом» файле, НИКАКИХ ФОНОВЫХ ЗАДАНИЙ в рабочей базе НЕ ВЫПОЛНЯЛОСЬ!  Опаньки, приплыли…

К счастью, я достаточно быстро догадался, что это не нечистая сила, и не происки врагов «из-за бугра», а просто есть еще какая-то база, которая пишет файлы обмена в тот же самый каталог. Вот! Базу тут же нашли и со злорадным удовлетворением грохнули.

Мораль:

1.Нечистой силы не бывает

2.Посуду надо мыть за собой сразу, не дожидаясь пока тараканы заведутся.

С уважением ко всем дочитавшим до конца, Дядюшка О.

 

9 Comments

  1. SpartakM

    При создании копии серерной базы, сразу ставь флаг «блокировка регламентных заданий»

    тогда подобных проблем можно будет избежать)))

    а так да, такую проблему очень сложно было бы найти))))

    повезло, что вообще это получилось))

    Reply
  2. nsirotkin@mail.ru

    Несколько раз сталкивался, теперь стараюсь вставлять в обработчики регламентных заданий проверку.

    (строку соединений можно подсмотреть/скопировать в диалоге запуска)

    Функция ЭтоРабочаяИБ() Экспорт //чтобы регламентные задания не выполнялись в копии ИБ
    
    ЭтоРабочаяИБ = Истина;
    
    Попытка
    
    Стр = Константы.СтрокаСоединенияИнформационнойБазы.Получить();
    
    Если ВРЕГ(Стр) <> ВРЕГ(СтрокаСоединенияИнформационнойБазы()) Тогда
    
    ЭтоРабочаяИБ = Ложь;
    
    КонецЕсли;
    
    Исключение
    
    КонецПопытки;
    
    Возврат ЭтоРабочаяИБ;
    
    КонецФункции // ЭтоРабочаяИБ()
    

    Показать

    Reply
  3. LexSeIch

    Мир этому дому!

    Интересный и поучительный рассказ. Грабельки конечно, ниже пояса… Для себя пометил — осторожно с копиями…

    Reply
  4. Alexion

    Да спасет вас блокировка регламентных заданий при создании баз (с)

    плюс за мучения))

    Reply
  5. makas

    Прочитал с интересом, спасибо!

    Reply
  6. Mortiferus

    История о том, как забыли выключить утюг! Бог миловал от этого, поскольку если настраиваю обмен между базами, то между тестовыми.

    Reply
  7. headMade

    Подскажите где и в какой момент можно включить блокировку регламентных заданий?

    Reply
  8. Virikus

    Это довольно частая ошибка и ловится достаточно быстро.

    Чего вы с ней так долго мучились не совсем понятно.

    Нужно просто принять за правило совет из (1) и все.

    А еще лучше всегда отключать регламентные задания при создании базы и включать уже по мере необходимости.

    Reply
  9. fomix

    (7) headMade, На сервере 1С в свойствах конкретной базы данных

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *