При настройке обмена данными между конфигурациями 1С часто возникает задача поддержания актуальности реквизитов. В частности, если в базе-источнике изменяется дата документа, она должна автоматически обновиться и у соответствующего документа в базе-приемнике. Разберем по шагам, где и какие настройки необходимо проверить в конфигурации «Конвертация данных» и механизмах обмена, а также рассмотрим альтернативные способы решения.
В типовом сценарии обмена синхронизация реквизитов происходит через правила конвертации свойств (ПКС). Проанализируем базовую настройку:
Дата соответствует приемнику Дата.Одной из главных причин, почему дата не обновляется или вместо обновления создается дубль документа, является некорректная настройка идентификации объекта в базе-приемнике. Рассмотрим варианты сопоставления:
Дата (установлен флаг поиска в ПКС), то при изменении даты в источнике приемник не сможет найти старый документ и создаст новую копию. В таком случае флаг поиска для даты необходимо снять либо переопределить логику в обработчике Поля поиска.Изменение даты у проведенного документа в базе-приемнике влечет за собой смещение движений по регистрам. Проанализируем сопутствующие настройки:
После загрузки или в настройках параметров обмена необходимо управлять режимом записи объекта.При необходимости принудительной установки даты или перепроведения объекта можно использовать обработчик ПКО После загрузки:
Если Не Объект.ЭтоНовый() Тогда
// При необходимости обновляем дату и режим проведения
Объект.Дата = ПараметрыОбъекта["ДатаИсточника"];
РежимЗаписи = РежимЗаписиДокумента.Проведение;
КонецЕсли;
Для того чтобы документ вообще попал в выгрузку после изменения даты в базе-источнике, он должен быть зарегистрирован на соответствующем узле плана обмена. Выясним причину, если документ не выгружается:
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, ДокументСсылка);
Если обмен выполняется не через регулярные файлы или планы обмена, а в режиме реального времени, можно выравнивать дату документа непосредственно в момент его проведения или записи в базе-источнике через внешнее подключение.
Посмотрим на пример установки соединения и обновления документа:
V83COM = Новый COMОбъект("V83.COMConnector");
Соединение = V83COM.Connect("Srvr=""ServerName"";Ref=""TargetBase"";Usr=""ExchangeUser"";Pwd=""Password"";");
// Поиск документа в приемнике по ГУИД
УИД = Строка(ЭтотОбъект.Ссылка.УникальныйИдентификатор());
ДокПриемник = Соединение.Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор", УИД));
ДокОбъект = ДокПриемник.ПолучитьОбъект();
Если ДокОбъект <> Неопределено Тогда
ДокОбъект.Дата = ЭтотОбъект.Дата;
ДокОбъект.Записать(Соединение.РежимЗаписиДокумента.Запись);
КонецЕсли;