Добрый день.
Иногда пользователи спрашивают:
1. Почему приложение откатило изменение документа?
2. Почему изменение вообще не перенеслось?
В этой статье я расскажу, как "правильно" работать в МойСклад и Битрикс24 с учетом синхронизации. С какой скоростью работает синхронизация.
Приложение не работает в режиме онлайн синхронизации. Возможны задержки от 1-2 минут.
Давайте начнем с МойСклад. В МоемСкладе один тип событий: онлайн. Это значит, что как только документ сохранен, приложение сразу получает информацию об изменении и ставит это событие в очередь на обработку. Приложение регулярно опрашивает очередь и забирает в обработку по одному документу для каждого аккаунта. Таким образом все пользователи получают равные ресурсы наших серверов. Чем активнее Вы создаете/обновляете документы, тем больше Ваша очередь и тем дольше ждут обработки документы, которые были сохранены позже.
В Битрикс24 есть два варианта событий: онлайн и оффлайн. Первый вариант (онлайн) работает по аналогичной схеме, как у МоегоСклада. Этот вариант "быстрее" в обработке, но менее надежен. Второй вариант (оффлайн) повышает надежность, но немного проигрывает в скорости. В этом случае приложение один раз в минуту "опрашивает" Ваш Битрикс24 о произошедших изменениях. Главное отличие в том, что при изменении документа в течение 1 минуты мы получим одно событие, которое и попадет в обработку.
Вы внесли изменение в документ в 12:00, например, изменили комментарий. Приложение получило событие и начало его обрабатывать. Вы в открытой форме этого документа меняете статус документа, это происходит в 12:01. Приложение уже занято обработкой предыдущего события и получило предыдущее состояние документа, его и выгружает в Битрикс24. Что произойдет дальше? При записи сделки в Битрикс24 сработает событие, которое получит наше приложение. Приложение "увидит", что статус в МойСклад отличается от статуса Битрикс24. Вы же помните, что изменение статуса в МоемСкладе не перешло в Битрикс24 т.к. оно было сделано слишком быстро? В результате приложение "откатывает" статус документа в МоемСкладе на предыдущий. Такое происходит при двухсторонней синхронизации. Если синхронизация только в одну сторону, то последнее изменение просто "теряется" в процессе синхронизации.
Вывод: не рекомендуется в течение короткого промежутка времени вносить изменение в открытый документ.
Приложение работает с состоянием документа, которое оно получило в момент начала обработки события по этому документу. Что это значит? Допустим, Вы изменили несколько документов с помощью какой-то автоматизации. Первый документ попадет в обработку раньше всех. Последний - будет последним. Пока до него не дойдет очередь, документ можно изменять сколько угодно, приложение возьмет данные из последнего сохранения.
Еще мы учитываем, что произошло создание или обновление документа. Создание обрабатывается в первую очередь. Обновление - во вторую очередь. Если нажали кнопку выгрузки документов за период, это третья очередь. Что это значит? Например, Вы создали 5 новых документов, потом обновили 1, создали еще 5 новых. Вам срочно нужно передать изменение одного документа... Но он будет ждать пока не выгрузятся все десять вновь созданных документов.
Одно из главных правил: сохранили документ - закройте его. Это касается и МойСклад, и Битрикс24.
Пользователь открыл документ, в форме документа зафиксированы текущие данные. При открытой форме могли "прилететь" изменения из другой базы. Наше приложение их записало в базу данных и сохранило. Но в открытой форме старые значения! Что произойдет, если в этой форме что-то изменить и сохранить? Правильно! Произойдет "откат" изменений в другой системе, которые прошли по АПИ и записались в базу данных.
Иногда два разных пользователя работают с одной сделкой в одном Битрикс24. Вносят изменения и сохраняют. Мало того, что они затирают данные другу друга, так еще и "вносят" неразбериху в процесс синхронизации.