У клиента несколько магазинов. Работает обмен в распределённой информационной базе, имеется главный узел на сервере и подчинённые узлы в магазинах. Обмен самописный. Конфигурация УТ 10.3 сильно изменённая. К каждому узлу в табличной части плана обмена привязан склад магазина. Остатки номенклатуры в главном узле и подчинённых узлах значительно отличаются. Возможно не правильно был создан первоначальный образ узла и остатки не перенеслись. Возможно были утеряны пакеты обмена.
Была поставлена задача синхронизировать остатки в главном узле и подчинённых по регистрам накопления "Товары в рознице" и "Товары на складах", путём регистрации изменений для обмена нужных документов и их движений.
В регистре "Товары в рознице" около 40 тыс. различных регистраторов, перепроведение всех документов затянется на неопределённый срок не даст работать пользователям, вызовет не нужные изменения в закрытых периодах. Если попытаться снова зарегистрировать изменения через обработку "Регистрация изменений для обмена", то для регистров можно добавить регистрацию только "Всех объектов с типом: Регистры накопления"; то есть в узел попадут документы по другим складам. Кроме того, чтобы отобрать запросом нужные документы, необходимы знания программиста.
Было решено создать внешнюю обработку, которой можно синхронизировать остатки номенклатуры в главном и подчинённых узлах без привлечения программиста, путём выборочной регистрации для обмена документов и движений этих документов по регистрам накопления.
Обработка открывается только в главном узле базы, так как в подчинённых узлах должны быть установлены остатки из главного узла и ни в коем случае не наоборот.
При открытии обработки, таблица значений на форме заполняется всеми планами обмена, узлами планов, которые есть в конфигурации. Кроме того, указываются номера принятого и отправленного сообщений обмена, что позволяет понять какой обмен у нас активен (числа соответствуют количеству обменов между узлами, чем болье число, тем интенсивнее или дольше по времени идёт обмен). Если номер отправленного сообщения равен 0, тогда строка с этим подчинённым узлом выделяется красным цветом.
В верхней части формы обработки расположен реквизит "План обмена", там необходимо выбрать тот план обмена, по которому осуществляется обмен между узлами (рабочий план обмена). Если выберете не тот, то ничего страшного, документы останутся зарегистрированными для обмена, но раз обмен не проходит, на остатки в главном узле или в подчинённом они не повлияют. При синхронизации остатков, в подчинённый узел будут переданы только проведённые документы и их движения, при случайном выполнении обработки по действующему плану обмена, к негативным последствиям это тоже не приведёт, просто будет перенесена информация из главного узла в подчинённый.
Итак, после выбора плана обмена таблица на форме заполнится узлами только по этому плану обмена, сам реквизит "План обмена" будет заполнен данными любого узла с номером отправленного сообщения равным 0. Можете выбрать какой угодно узел из нужного плана обмена, на результат запуска обработки это не повлияет. Если вы не правильно выбрали план обмена, необходимо нажать на крестик в поле ввода реквизита и выбрать нужный план.
Если вам необходимо приравнять остатки не во всех узлах, тогда надо удалить не нужные строки из таблицы; перенос остатков произойдёт только в выбранных узлах. Запустить обработку возможно только по одному плану обмена, если выбрано несколько, будет выведено соответствующее сообщение.
После запуска обработки по кнопке "Выполнить" обработка зарегистрирует для обмена все документы, имеющие движения по регистрам, по выбранному узлу. Сопоставление узла и документа происходит по реквизиту "Склад" в табличной части Плана обмена "Склады", или по реквизиту "СкладМагазина" табличной части "СоответствияМагазиновИСкладов". Если в плане обмена нет таких табличных частей, или для конкретного узла они не заполнены, переноса данных об остатках не произойдёт. Также, если номер последнего отправленного сообщения узла плана обмена равен 0 (строка таблицы выделена красным), даже если эта строка оставлена в табличной части для установки остатков, по данному узлу обработка не будет регистрировать данные для обмена. Если в план обмена не включены регистры накопления "Товары на складах" и "Товары в рознице" регистрация движений для обмена по ним произведена не будет.
Для принудительного завершения действия обработки необходимо нажать Control+Break.
После завершения действия обработки, со следующим обменом документы и движения попадут в нужные узлы базы. И остатки станут идентичны. Для 8000 документов размер файла обмена составил 13 Мб.
Обработка не переносит движения по битым ссылка (записи в регистрах, регистратор которых база найти не может). Для поиска таких ссылок предназначена кнопка на форме "Поиск битых ссылок". Для её использования надо выбрать план обмена и узлы (с соответствующими складами). После поиска будет выведен табличный документ, где будут записи с битыми ссылкам "Товары в рознице" и "Товары на складах".
С данными записями регистров, вероятно, надо произвести какие-либо действия. Либо удалить их, либо восстановить регистратор, либо оставить как есть, если так настроен план обмена и в этом есть смысл. Например, в базе клиента битые ссылки появлялись при удалении чеков ККМ в узле базы, в ходе закрытия смены. Был изменён план обмена, и удалены записи с битыми ссылкам, остатки в подчинённом узле стали равными остаткам в главном узле.
Обработка тестировалась на конфигурациях:"Управление торговлей", редакция 10.3 (10.3.8.9); "Управление торговлей", редакция 10.3 (10.3.75.2).
Обработка тестировалась на платформах 8.3.18.1779, 8.3.16.1063.